@zohodesk/library-platform 1.1.12-exp.2 → 1.1.12-exp.3

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 (187) hide show
  1. package/es/bc/app-context/Properties.js +19 -0
  2. package/es/bc/float-pagination/ActionHandlers.js +1 -0
  3. package/es/bc/float-pagination/Constants.js +4 -0
  4. package/es/bc/float-pagination/Properties.js +18 -0
  5. package/es/bc/float-pagination/index.js +2 -0
  6. package/es/bc/search/Constants.js +3 -0
  7. package/es/bc/search/EventHandlers.js +1 -0
  8. package/es/bc/search/Properties.js +11 -0
  9. package/es/bc/search/index.js +2 -0
  10. package/es/cc/action-icon/Properties.js +20 -1
  11. package/es/cc/checkbox/Properties.js +2 -1
  12. package/es/cc/email/Properties.js +8 -0
  13. package/es/cc/fields/field/Types.js +31 -23
  14. package/es/cc/fields/lookup/Properties.js +26 -10
  15. package/es/cc/floating-pagination/Constants.js +6 -0
  16. package/es/cc/floating-pagination/Events.js +8 -0
  17. package/es/cc/floating-pagination/Properties.js +56 -0
  18. package/es/cc/floating-pagination/index.js +3 -0
  19. package/es/cc/highlighted-value/Properties.js +18 -0
  20. package/es/cc/link/Properties.js +13 -3
  21. package/es/cc/ribbon/Properties.js +59 -0
  22. package/es/cc/ribbon/index.js +1 -0
  23. package/es/cc/switch/Properties.js +2 -2
  24. package/es/cc/table-connected/Properties.js +16 -0
  25. package/es/cc/table-list/Constants.js +1 -0
  26. package/es/cc/table-list/Properties.js +35 -35
  27. package/es/cc/tags/Data.js +0 -6
  28. package/es/cc/tags/model/index.js +1 -1
  29. package/es/library/behaviours/float-pagination/adapters/controllers/DestructController.js +18 -0
  30. package/es/library/behaviours/float-pagination/adapters/controllers/FloatPaginationController.js +25 -0
  31. package/es/library/behaviours/float-pagination/adapters/controllers/InitializeController.js +18 -0
  32. package/es/library/behaviours/float-pagination/adapters/controllers/ScrollBottomController.js +23 -0
  33. package/es/library/behaviours/float-pagination/adapters/controllers/ScrollTopController.js +23 -0
  34. package/es/library/behaviours/float-pagination/adapters/controllers/UpdateIndexController.js +30 -0
  35. package/es/library/behaviours/float-pagination/adapters/gateway/Repository.js +27 -0
  36. package/es/library/behaviours/float-pagination/adapters/gateway/Service.js +20 -0
  37. package/es/library/behaviours/float-pagination/adapters/presenter/Presenter.js +16 -0
  38. package/es/library/behaviours/float-pagination/applications/interfaces/input/ScrollTopInputModel.js +1 -0
  39. package/es/library/behaviours/float-pagination/applications/interfaces/input/ScrollbottomInputModel.js +1 -0
  40. package/es/library/behaviours/float-pagination/applications/interfaces/input/UpdateIndexInputModel.js +1 -0
  41. package/es/library/behaviours/float-pagination/applications/interfaces/output/FloatPaginationOutputModel.js +1 -0
  42. package/es/library/behaviours/float-pagination/applications/interfaces/output/IPresenter.js +1 -0
  43. package/es/library/behaviours/float-pagination/applications/usecases/DestructUsecase.js +15 -0
  44. package/es/library/behaviours/float-pagination/applications/usecases/FloatPaginationUseCase.js +31 -0
  45. package/es/library/behaviours/float-pagination/applications/usecases/InitializeUsecase.js +16 -0
  46. package/es/library/behaviours/float-pagination/applications/usecases/ScrollBottomUseCase.js +23 -0
  47. package/es/library/behaviours/float-pagination/applications/usecases/ScrollTopUseCase.js +23 -0
  48. package/es/library/behaviours/float-pagination/applications/usecases/UpdateIndexUseCase.js +28 -0
  49. package/es/library/behaviours/float-pagination/domain/entities/FloatPagination.js +28 -0
  50. package/es/library/behaviours/float-pagination/domain/entities/interfaces/IFloatPagination.js +1 -0
  51. package/es/library/behaviours/float-pagination/frameworks/ui/ActionsHandlerFactory.js +37 -0
  52. package/es/library/behaviours/float-pagination/frameworks/ui/FloatPaginationBehaviourFactory.js +21 -0
  53. package/es/library/behaviours/float-pagination/frameworks/utils.js +70 -0
  54. package/es/library/behaviours/keyboard-controls/adapters/gateways/Repository.js +2 -1
  55. package/es/library/behaviours/keyboard-controls/applications/usecases/SpacePress.js +1 -1
  56. package/es/library/behaviours/keyboard-controls/domain/entities/KeyboardControls.js +6 -1
  57. package/es/library/behaviours/list-selection/domain/entities/ListItemSelection.js +21 -18
  58. package/es/library/behaviours/search/adapters/controllers/AbstractController.js +9 -0
  59. package/es/library/behaviours/search/adapters/controllers/SearchController.js +26 -0
  60. package/es/library/behaviours/search/adapters/controllers/UpdatePropertiesController.js +27 -0
  61. package/es/library/behaviours/search/adapters/gateway/Repository.js +20 -0
  62. package/es/library/behaviours/search/adapters/gateway/Service.js +12 -0
  63. package/es/library/behaviours/{sort-by → search}/adapters/presenter/Presenter.js +2 -2
  64. package/es/library/behaviours/search/adapters/presenter/SearchTranslator.js +6 -0
  65. package/es/library/behaviours/search/applications/interfaces/UseCaseDependencies.js +1 -0
  66. package/es/library/behaviours/search/applications/interfaces/gateways/IRepository.js +1 -0
  67. package/es/library/behaviours/search/applications/interfaces/gateways/IService.js +1 -0
  68. package/es/library/behaviours/search/applications/interfaces/input/SearchInputModel.js +1 -0
  69. package/es/library/behaviours/search/applications/interfaces/input/UpdatePropertiesInputModel.js +1 -0
  70. package/es/library/behaviours/search/applications/interfaces/output/IPresenter.js +1 -0
  71. package/es/library/behaviours/search/applications/interfaces/output/SearchOutputModel.js +1 -0
  72. package/es/library/behaviours/search/applications/usecases/AbstractUseCase.js +17 -0
  73. package/es/library/behaviours/search/applications/usecases/SearchUseCase.js +28 -0
  74. package/es/library/behaviours/search/applications/usecases/UpdatePropertiesUsecase.js +25 -0
  75. package/es/library/behaviours/search/domain/entities/Search.js +23 -0
  76. package/es/library/behaviours/search/domain/entities/interfaces/ISearch.js +1 -0
  77. package/es/library/behaviours/search/frameworks/ui/EventHandlerFactory.js +25 -0
  78. package/es/library/behaviours/search/frameworks/ui/SearchStringStoreBehaviourFactory.js +26 -0
  79. package/es/library/custom-component/adapters/gateways/event-manager/EventManager.js +5 -0
  80. package/es/library/custom-component/domain/entities/ComponentProperties.js +1 -1
  81. package/es/library/custom-component/domain/entities/Logger.js +3 -3
  82. package/es/library/dot/components/action-location/frameworks/ui/ActionComponentMapping.js +3 -1
  83. package/es/library/dot/components/table-list/adapters/controllers/ScrollController.js +2 -2
  84. package/es/library/dot/components/table-list/frameworks/ui/TableListView.js +24 -1
  85. package/es/library/dot/components/table-list/frameworks/ui/css/TableList.module.css +19 -2
  86. package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/Row.js +4 -6
  87. package/es/library/dot/legacy-to-new-arch/action-icon/frameworks/ui/ActionIconView.js +5 -1
  88. package/es/library/dot/legacy-to-new-arch/email/frameworks/ui/EmailView.js +4 -2
  89. package/es/library/dot/legacy-to-new-arch/floating-pagination/frameworks/ui/FloatingPagination.js +10 -0
  90. package/es/library/dot/legacy-to-new-arch/floating-pagination/frameworks/ui/FloatingPaginationView.js +47 -0
  91. package/es/library/dot/legacy-to-new-arch/highlighted-value/frameworks/ui/HighlightedValueView.js +6 -1
  92. package/es/library/dot/legacy-to-new-arch/index.js +1 -0
  93. package/es/library/dot/legacy-to-new-arch/link/frameworks/ui/LinkView.js +4 -2
  94. package/es/library/dot/legacy-to-new-arch/radio-dropdown/frameworks/ui/RadioDropdownView.js +1 -0
  95. package/es/library/dot/legacy-to-new-arch/ribbon/frameworks/ui/Ribbon.js +10 -0
  96. package/es/library/dot/legacy-to-new-arch/ribbon/frameworks/ui/RibbonView.js +37 -0
  97. package/es/library/dot/legacy-to-new-arch/table-field-components/checkbox-field/frameworks/ui/CheckboxField.js +12 -2
  98. package/es/library/dot/legacy-to-new-arch/table-field-components/checkbox-field/frameworks/ui/CheckboxFieldView.js +8 -5
  99. package/es/library/dot/legacy-to-new-arch/table-field-components/checkbox-field/frameworks/ui/EventHandlersFactory.js +3 -3
  100. package/es/library/dot/legacy-to-new-arch/table-field-components/email-field/frameworks/ui/EmailField.js +3 -3
  101. package/es/library/dot/legacy-to-new-arch/table-field-components/email-field/frameworks/ui/EmailFieldView.js +8 -6
  102. package/es/library/dot/legacy-to-new-arch/table-field-components/index.js +22 -5
  103. package/es/library/dot/legacy-to-new-arch/table-field-components/lookup-field/frameworks/ui/LookupFieldView.js +1 -1
  104. package/es/library/dot/legacy-to-new-arch/table-field-components/phone-field/frameworks/ui/PhoneFieldView.js +1 -1
  105. package/es/library/dot/legacy-to-new-arch/table-field-components/radio-dropdown-field/frameworks/ui/EventHandlersFactory.js +14 -0
  106. package/es/library/dot/legacy-to-new-arch/table-field-components/radio-dropdown-field/frameworks/ui/RadioDropdownField.js +17 -0
  107. package/es/library/dot/legacy-to-new-arch/table-field-components/radio-dropdown-field/frameworks/ui/RadioDropdownFieldView.js +1 -1
  108. package/es/library/dot/legacy-to-new-arch/table-field-components/switch-field/frameworks/ui/EventHandlersFactory.js +3 -3
  109. package/es/library/dot/legacy-to-new-arch/table-field-components/switch-field/frameworks/ui/SwitchField.js +14 -4
  110. package/es/library/dot/legacy-to-new-arch/table-field-components/switch-field/frameworks/ui/SwitchFieldView.js +8 -4
  111. package/es/library/dot/legacy-to-new-arch/table-field-components/tags-list-dropdown-field/frameworks/ui/TagsListDropdownField.js +33 -1
  112. package/es/library/dot/legacy-to-new-arch/table-field-components/tags-list-dropdown-field/frameworks/ui/TagsListDropdownFieldView.js +1 -1
  113. package/es/library/dot/legacy-to-new-arch/table-field-components/url-field/frameworks/ui/UrlFieldView.js +1 -1
  114. package/es/platform/components/table-connected/adapters/controllers/ScrollController.js +29 -8
  115. package/es/platform/components/table-connected/adapters/controllers/ScrollEndReachedController.js +23 -0
  116. package/es/platform/components/table-connected/frameworks/EventHandlersFactory.js +26 -4
  117. package/es/platform/components/table-connected/frameworks/TableConnectedFactory.js +2 -1
  118. package/es/platform/components/table-connected/frameworks/TableConnectedView.js +2 -0
  119. package/es/platform/data-source/http-template/fetchLookupFields.js +6 -0
  120. package/es/platform/data-source/http-template/getComponentMapping.js +1 -1
  121. package/es/platform/data-source/http-template/getSingleRecord.js +51 -0
  122. package/es/platform/data-source/index.js +3 -1
  123. package/es/platform/zfield/applications/usecases/FetchSuccessUseCase.js +33 -0
  124. package/es/platform/zfield/domain/entities/fields-manager/FieldsManager.js +5 -0
  125. package/es/platform/zform/adapters/controllers/GetInitialRecordSuccessController.js +31 -0
  126. package/es/platform/zform/adapters/gateway/FormRepository.js +1 -3
  127. package/es/platform/zform/adapters/presenter/translators/fields/LookUpFieldTranslator.js +11 -12
  128. package/es/platform/zform/applications/interfaces/input/GetInitialRecordSuccessUseCaseInputModel.js +1 -0
  129. package/es/platform/zform/applications/usecases/GetInitialRecordSuccessUseCase.js +132 -0
  130. package/es/platform/zform/applications/usecases/MyFormSuccessUseCase.js +10 -9
  131. package/es/platform/zform/domain/ZForm.js +0 -2
  132. package/es/platform/zlist/adapters/presenters/TableTranslator.js +44 -6
  133. package/es/platform/zlist/adapters/presenters/translators/ColumnTranslator.js +57 -49
  134. package/es/platform/zlist/adapters/presenters/translators/Row.js +16 -2
  135. package/es/platform/zlist/adapters/presenters/translators/RowsTranslator.js +3 -1
  136. package/es/platform/zlist/adapters/presenters/translators/fields/BooleanFieldTranslator.js +87 -12
  137. package/es/platform/zlist/adapters/presenters/translators/fields/CurrencyFieldTranslator.js +66 -11
  138. package/es/platform/zlist/adapters/presenters/translators/fields/DateFieldTranslator.js +33 -8
  139. package/es/platform/zlist/adapters/presenters/translators/fields/DateTimeFieldTranslator.js +33 -8
  140. package/es/platform/zlist/adapters/presenters/translators/fields/DecimalFieldTranslator.js +16 -9
  141. package/es/platform/zlist/adapters/presenters/translators/fields/EmailFieldTranslator.js +29 -9
  142. package/es/platform/zlist/adapters/presenters/translators/fields/FormulaFieldTranslator.js +23 -27
  143. package/es/platform/zlist/adapters/presenters/translators/fields/LookUpFieldTranslator.js +106 -17
  144. package/es/platform/zlist/adapters/presenters/translators/fields/MultiLineFieldTranslator.js +16 -9
  145. package/es/platform/zlist/adapters/presenters/translators/fields/MultiSelectFieldTranslator.js +100 -26
  146. package/es/platform/zlist/adapters/presenters/translators/fields/NumberFieldTranslator.js +16 -9
  147. package/es/platform/zlist/adapters/presenters/translators/fields/PercentageFieldTranslator.js +16 -9
  148. package/es/platform/zlist/adapters/presenters/translators/fields/PhoneFieldTranslator.js +32 -9
  149. package/es/platform/zlist/adapters/presenters/translators/fields/PickListFieldTranslator.js +167 -26
  150. package/es/platform/zlist/adapters/presenters/translators/fields/SingleLineFieldTranslator.js +16 -9
  151. package/es/platform/zlist/adapters/presenters/translators/fields/URLFieldTranslator.js +32 -9
  152. package/es/platform/zlist/adapters/presenters/utils/DateAndTimeFormat.js +25 -0
  153. package/es/platform/zrecord/adapters/controllers/UpdateRecordController.js +30 -0
  154. package/es/platform/zrecord/applications/interfaces/input/UpdateRecordInputModel.js +0 -0
  155. package/es/platform/zrecord/applications/usecases/UpdateRecordUseCase.js +30 -0
  156. package/package.json +20 -20
  157. package/es/bc/sort-by/ActionHandlers.js +0 -1
  158. package/es/bc/sort-by/Constants.js +0 -2
  159. package/es/bc/sort-by/Properties.js +0 -26
  160. package/es/bc/sort-by/SortOrderEnum.js +0 -8
  161. package/es/bc/sort-by/index.js +0 -2
  162. package/es/cc/tags/model/TagModel.js +0 -26
  163. package/es/library/behaviours/sort-by/adapters/controllers/SortBy.js +0 -28
  164. package/es/library/behaviours/sort-by/adapters/gateway/Repository.js +0 -19
  165. package/es/library/behaviours/sort-by/adapters/gateway/Service.js +0 -10
  166. package/es/library/behaviours/sort-by/applications/usecases/SortBy.js +0 -28
  167. package/es/library/behaviours/sort-by/domain/entities/SortBy.js +0 -42
  168. package/es/library/behaviours/sort-by/frameworks/ui/ActionsHandlerFactory.js +0 -23
  169. package/es/library/behaviours/sort-by/frameworks/ui/DemoBehaviour.js +0 -20
  170. package/es/library/behaviours/sort-by/frameworks/ui/SortByBehaviourFactory.js +0 -24
  171. package/es/library/custom-component/frameworks/ui/CustomComponentFactory.js +0 -56
  172. package/es/library/dot/components/table-list/adapters/controllers/SortByController.js +0 -25
  173. package/es/library/dot/components/table-list/adapters/controllers/SortedController.js +0 -18
  174. package/es/library/dot/components/table-list/frameworks/ui/handlers/HandleSortClick.js +0 -12
  175. package/es/platform/zlist/adapters/gateways/SortBy.js +0 -38
  176. package/es/platform/zlist/domain/entities/SortBy.js +0 -58
  177. /package/es/{library/behaviours/sort-by/applications/interfaces/UseCaseDependencies.js → bc/float-pagination/types/FloatPaginationBehaviourState.js} +0 -0
  178. /package/es/{library/behaviours/sort-by/applications/interfaces/gateways/IRepository.js → bc/list-selection/Types.js} +0 -0
  179. /package/es/{library/behaviours/sort-by/applications/interfaces/gateways/IService.js → cc/table-list/data-types/FloatPaginationConfig.js} +0 -0
  180. /package/es/library/behaviours/{sort-by → float-pagination}/adapters/controllers/AbstractController.js +0 -0
  181. /package/es/library/behaviours/{sort-by/applications/interfaces/input/SortByInputModel.js → float-pagination/applications/interfaces/UseCaseDependencies.js} +0 -0
  182. /package/es/library/behaviours/{sort-by/applications/interfaces/output/IPresenter.js → float-pagination/applications/interfaces/gateways/IRepository.js} +0 -0
  183. /package/es/library/behaviours/{sort-by/applications/interfaces/output/SortByOutputModel.js → float-pagination/applications/interfaces/gateways/IService.js} +0 -0
  184. /package/es/library/behaviours/{sort-by/domain/entities/interfaces/ISortBy.js → float-pagination/applications/interfaces/input/DestructInputModel.js} +0 -0
  185. /package/es/{platform/zlist/applications/interfaces/gateways/ISortBy.js → library/behaviours/float-pagination/applications/interfaces/input/FloatPaginationInputModel.js} +0 -0
  186. /package/es/{platform/zlist/domain/entities/interfaces/ISortBy.js → library/behaviours/float-pagination/applications/interfaces/input/InitializeInputModel.js} +0 -0
  187. /package/es/library/behaviours/{sort-by → float-pagination}/applications/usecases/AbstractUseCase.js +0 -0
@@ -0,0 +1,18 @@
1
+ import AbstractController from "./AbstractController";
2
+
3
+ class InitializeController extends AbstractController {
4
+ handle(event) {
5
+ const {
6
+ state,
7
+ updateState
8
+ } = event;
9
+ const {
10
+ InitializeUsecase
11
+ } = this.service;
12
+ InitializeUsecase.updateDependencies(state, updateState);
13
+ InitializeUsecase.execute();
14
+ }
15
+
16
+ }
17
+
18
+ export default InitializeController;
@@ -0,0 +1,23 @@
1
+ import AbstractController from "./AbstractController";
2
+
3
+ class ScrollBottomController extends AbstractController {
4
+ handle(event) {
5
+ const {
6
+ scrollBottomUseCase
7
+ } = this.service;
8
+ let {
9
+ state,
10
+ updateState,
11
+ dispatch,
12
+ host
13
+ } = event;
14
+ scrollBottomUseCase.updateDependencies(state, updateState);
15
+ scrollBottomUseCase.execute({
16
+ dispatch,
17
+ host
18
+ });
19
+ }
20
+
21
+ }
22
+
23
+ export default ScrollBottomController;
@@ -0,0 +1,23 @@
1
+ import AbstractController from "./AbstractController";
2
+
3
+ class ScrollTopController extends AbstractController {
4
+ handle(event) {
5
+ const {
6
+ scrollTopUseCase
7
+ } = this.service;
8
+ let {
9
+ state,
10
+ updateState,
11
+ dispatch,
12
+ host
13
+ } = event;
14
+ scrollTopUseCase.updateDependencies(state, updateState);
15
+ scrollTopUseCase.execute({
16
+ dispatch,
17
+ host
18
+ });
19
+ }
20
+
21
+ }
22
+
23
+ export default ScrollTopController;
@@ -0,0 +1,30 @@
1
+ import AbstractController from "./AbstractController";
2
+
3
+ class UpdateIndexController extends AbstractController {
4
+ handle(event) {
5
+ const {
6
+ updateIndexUseCase
7
+ } = this.service;
8
+ let {
9
+ state,
10
+ updateState,
11
+ action,
12
+ dispatch,
13
+ host
14
+ } = event;
15
+ const {
16
+ currentIndex
17
+ } = action.payload;
18
+ let selector = 'tr';
19
+ updateIndexUseCase.updateDependencies(state, updateState);
20
+ updateIndexUseCase.execute({
21
+ dispatch,
22
+ host,
23
+ selector,
24
+ currentIndex
25
+ });
26
+ }
27
+
28
+ }
29
+
30
+ export default UpdateIndexController;
@@ -0,0 +1,27 @@
1
+ import FloatPagination from "../../domain/entities/FloatPagination";
2
+ export default class Repository {
3
+ init(state) {
4
+ this.state = state;
5
+ }
6
+
7
+ getFloatPaginationEntity() {
8
+ const {
9
+ behaviours,
10
+ properties
11
+ } = this.state;
12
+ const {
13
+ floatPaginationConfig
14
+ } = properties;
15
+ const isFloatPaginationConfig = floatPaginationConfig?.isEnabled;
16
+
17
+ if (!isFloatPaginationConfig) {
18
+ return null;
19
+ }
20
+
21
+ const {
22
+ floatPagination
23
+ } = behaviours;
24
+ return new FloatPagination(floatPagination.currentRecord, floatPagination.isVisible);
25
+ }
26
+
27
+ }
@@ -0,0 +1,20 @@
1
+ import FloatPagination from "../../applications/usecases/FloatPaginationUseCase";
2
+ import InitializeUsecase from "../../applications/usecases/InitializeUsecase";
3
+ import DestructUsecase from "../../applications/usecases/DestructUsecase";
4
+ import ScrollTopUseCase from "../../applications/usecases/ScrollTopUseCase";
5
+ import ScrollBottomUseCase from "../../applications/usecases/ScrollBottomUseCase";
6
+ import UpdateIndexUseCase from "../../applications/usecases/UpdateIndexUseCase";
7
+
8
+ class Service {
9
+ constructor(dependencies) {
10
+ this.InitializeUsecase = new InitializeUsecase(dependencies);
11
+ this.DestructUsecase = new DestructUsecase(dependencies);
12
+ this.floatPaginationUseCase = new FloatPagination(dependencies);
13
+ this.scrollTopUseCase = new ScrollTopUseCase(dependencies);
14
+ this.scrollBottomUseCase = new ScrollBottomUseCase(dependencies);
15
+ this.updateIndexUseCase = new UpdateIndexUseCase(dependencies);
16
+ }
17
+
18
+ }
19
+
20
+ export default Service;
@@ -0,0 +1,16 @@
1
+ export default class Presenter {
2
+ updateDependencies(state, updateState) {
3
+ this.state = state;
4
+ this.updateState = updateState;
5
+ }
6
+
7
+ updateFloatPagination(floatPagination) {
8
+ this.state = { ...this.state,
9
+ behaviours: { ...this.state.behaviours,
10
+ floatPagination: floatPagination
11
+ }
12
+ };
13
+ this.updateState(this.state);
14
+ }
15
+
16
+ }
@@ -0,0 +1,15 @@
1
+ import AbstractUseCase from "./AbstractUseCase";
2
+
3
+ class DestructUsecase extends AbstractUseCase {
4
+ execute() {
5
+ const {
6
+ repository,
7
+ presenter
8
+ } = this.dependencies;
9
+ const floatPagination = repository.getFloatPaginationEntity();
10
+ floatPagination && presenter.updateFloatPagination(floatPagination.toObject());
11
+ }
12
+
13
+ }
14
+
15
+ export default DestructUsecase;
@@ -0,0 +1,31 @@
1
+ import AbstractUseCase from "./AbstractUseCase";
2
+ import { FLOAT_PAGINATION_BEHAVIOUR_INDEX_UPDATED } from "../../../../../bc/float-pagination/Constants";
3
+
4
+ class FloatPaginationUseCase extends AbstractUseCase {
5
+ execute(input) {
6
+ const {
7
+ visiblityCheck,
8
+ repository
9
+ } = this.dependencies;
10
+ const {
11
+ host,
12
+ selector,
13
+ dispatch
14
+ } = input;
15
+ const floatPagination = repository.getFloatPaginationEntity();
16
+
17
+ if (floatPagination) {
18
+ visiblityCheck.init(host, selector, currentIndex => {
19
+ dispatch({
20
+ type: FLOAT_PAGINATION_BEHAVIOUR_INDEX_UPDATED,
21
+ payload: {
22
+ currentIndex
23
+ }
24
+ });
25
+ });
26
+ }
27
+ }
28
+
29
+ }
30
+
31
+ export default FloatPaginationUseCase;
@@ -0,0 +1,16 @@
1
+ import AbstractUseCase from "./AbstractUseCase";
2
+
3
+ class InitializeUsecase extends AbstractUseCase {
4
+ execute() {
5
+ const {
6
+ repository,
7
+ presenter,
8
+ visiblityCheck
9
+ } = this.dependencies;
10
+ const floatPagination = repository.getFloatPaginationEntity();
11
+ presenter.updateFloatPagination(floatPagination.toObject());
12
+ }
13
+
14
+ }
15
+
16
+ export default InitializeUsecase;
@@ -0,0 +1,23 @@
1
+ import AbstractUseCase from "./AbstractUseCase";
2
+
3
+ class ScrollBottomUseCase extends AbstractUseCase {
4
+ execute(input) {
5
+ const {
6
+ host
7
+ } = input;
8
+
9
+ if (host) {
10
+ const el = host.children[1];
11
+
12
+ if (typeof el.scrollTo === "function") {
13
+ el.scrollTo({
14
+ top: el.scrollHeight,
15
+ behavior: "smooth"
16
+ });
17
+ }
18
+ }
19
+ }
20
+
21
+ }
22
+
23
+ export default ScrollBottomUseCase;
@@ -0,0 +1,23 @@
1
+ import AbstractUseCase from "./AbstractUseCase";
2
+
3
+ class ScrollTopUseCase extends AbstractUseCase {
4
+ execute(input) {
5
+ const {
6
+ host
7
+ } = input;
8
+
9
+ if (host) {
10
+ const el = host.children[1];
11
+
12
+ if (typeof el.scrollTo === "function") {
13
+ el.scrollTo({
14
+ top: 0,
15
+ behavior: "smooth"
16
+ });
17
+ }
18
+ }
19
+ }
20
+
21
+ }
22
+
23
+ export default ScrollTopUseCase;
@@ -0,0 +1,28 @@
1
+ import AbstractUseCase from "./AbstractUseCase";
2
+
3
+ class UpdateIndexUseCase extends AbstractUseCase {
4
+ execute(input) {
5
+ const {
6
+ repository,
7
+ presenter,
8
+ visiblityCheck
9
+ } = this.dependencies;
10
+ const {
11
+ host,
12
+ currentIndex
13
+ } = input; // Update the entity with the current record
14
+
15
+ const floatPagination = repository.getFloatPaginationEntity();
16
+
17
+ if (floatPagination && currentIndex !== floatPagination.getCurrentRecordIndex()) {
18
+ const recordIndex = visiblityCheck.getRowStartingIndex(host);
19
+ const isVisible = recordIndex > 0 ? true : false;
20
+ floatPagination.setCurrentRecordIndex(currentIndex);
21
+ floatPagination.setIsVisible(isVisible);
22
+ presenter.updateFloatPagination(floatPagination.toObject());
23
+ }
24
+ }
25
+
26
+ }
27
+
28
+ export default UpdateIndexUseCase;
@@ -0,0 +1,28 @@
1
+ class FloatPagination {
2
+ constructor(currentRecordIndex, isVisible) {
3
+ this.currentRecordIndex = currentRecordIndex;
4
+ this.isVisible = isVisible;
5
+ }
6
+
7
+ getCurrentRecordIndex() {
8
+ return this.currentRecordIndex;
9
+ }
10
+
11
+ setCurrentRecordIndex(currentRecordIndex) {
12
+ this.currentRecordIndex = currentRecordIndex;
13
+ }
14
+
15
+ setIsVisible(isVisible) {
16
+ this.isVisible = isVisible;
17
+ }
18
+
19
+ toObject() {
20
+ return {
21
+ currentRecord: this.currentRecordIndex,
22
+ isVisible: this.isVisible
23
+ };
24
+ }
25
+
26
+ }
27
+
28
+ export default FloatPagination;
@@ -0,0 +1,37 @@
1
+ import FloatPaginationController from "../../adapters/controllers/FloatPaginationController";
2
+ import Repository from "../../adapters/gateway/Repository";
3
+ import Service from "../../adapters/gateway/Service";
4
+ import Presenter from "../../adapters/presenter/Presenter";
5
+ import LifeCycleAction from "../../../../../cc/architecture/LifeCycleActionEnum";
6
+ import InitializeController from "../../adapters/controllers/InitializeController";
7
+ import DestructController from "../../adapters/controllers/DestructController";
8
+ import { FLOAT_PAGINATION_BEHAVIOUR_BOTTOM_UPDATED, FLOAT_PAGINATION_BEHAVIOUR_INDEX_UPDATED, FLOAT_PAGINATION_BEHAVIOUR_TOP_UPDATED, FLOAT_PAGINATION_BEHAVIOUR_UPDATE_REQUESTED } from "../../../../../bc/float-pagination/Constants";
9
+ import ElementVisibilityChecker from "../utils";
10
+ import ScrollTopController from "../../adapters/controllers/ScrollTopController";
11
+ import ScrollBottomController from "../../adapters/controllers/ScrollBottomController";
12
+ import UpdateIndexController from "../../adapters/controllers/UpdateIndexController"; // TODO: Rename as EventHandlersFactory
13
+
14
+ class ActionsHandlersFactory {
15
+ static create() {
16
+ const presenter = new Presenter();
17
+ const repository = new Repository();
18
+ const visiblityCheck = new ElementVisibilityChecker();
19
+ const service = new Service({
20
+ presenter,
21
+ repository,
22
+ visiblityCheck
23
+ });
24
+ const controller = new FloatPaginationController(service);
25
+ return {
26
+ [LifeCycleAction.MOUNT]: new InitializeController(service).handle,
27
+ [LifeCycleAction.UN_MOUNT]: new DestructController(service).handle,
28
+ [FLOAT_PAGINATION_BEHAVIOUR_UPDATE_REQUESTED]: controller.handle,
29
+ [FLOAT_PAGINATION_BEHAVIOUR_TOP_UPDATED]: new ScrollTopController(service).handle,
30
+ [FLOAT_PAGINATION_BEHAVIOUR_BOTTOM_UPDATED]: new ScrollBottomController(service).handle,
31
+ [FLOAT_PAGINATION_BEHAVIOUR_INDEX_UPDATED]: new UpdateIndexController(service).handle
32
+ };
33
+ }
34
+
35
+ }
36
+
37
+ export default ActionsHandlersFactory;
@@ -0,0 +1,21 @@
1
+ import properties from "../../../../../bc/float-pagination/Properties";
2
+ import ActionsHandlerFactory from "./ActionsHandlerFactory";
3
+
4
+ class FloatPaginationBehaviourFactory {
5
+ static create() {
6
+ return {
7
+ name: 'floatPagination',
8
+ setInitialState: () => {
9
+ return {
10
+ currentRecord: 0,
11
+ isVisible: false
12
+ };
13
+ },
14
+ properties,
15
+ eventHandlers: ActionsHandlerFactory.create()
16
+ };
17
+ }
18
+
19
+ }
20
+
21
+ export default FloatPaginationBehaviourFactory;
@@ -0,0 +1,70 @@
1
+ export default class ElementVisibilityChecker {
2
+ elements = [];
3
+ observer = null;
4
+
5
+ constructor() {}
6
+
7
+ init(containerEle, selector, callback) {
8
+ this.container = containerEle;
9
+ this.elements = Array.from(containerEle.querySelectorAll(selector));
10
+ this.onVisibleChange = callback;
11
+ this.initObserver();
12
+ }
13
+
14
+ getRowStartingIndex(host) {
15
+ const tbody = host.querySelector('table tbody');
16
+ const firstRow = tbody?.querySelector('tr:first-child');
17
+
18
+ if (firstRow) {
19
+ const rowHeight = firstRow.getBoundingClientRect().height;
20
+ const scrollTop = tbody.parentElement.scrollTop;
21
+ const startIndex = Math.floor(scrollTop / rowHeight);
22
+ return startIndex;
23
+ }
24
+
25
+ return 0;
26
+ }
27
+ /** Simple geometry-based visibility check */
28
+
29
+
30
+ isVisible(element, container) {
31
+ const rect = element.getBoundingClientRect();
32
+ const containerRect = container.getBoundingClientRect();
33
+ return rect.bottom < containerRect.bottom;
34
+ }
35
+ /** Start observing visibility */
36
+
37
+
38
+ initObserver() {
39
+ if (!this.elements.length) return;
40
+ this.observer = new IntersectionObserver(() => {
41
+ const newIndex = this.getCurrentVisibleIndex(); // Fire callback whenever visibility changes
42
+
43
+ if (this.onVisibleChange) {
44
+ this.onVisibleChange(newIndex);
45
+ }
46
+ }, {
47
+ threshold: [0.5]
48
+ });
49
+ this.elements.forEach(el => this.observer.observe(el));
50
+ }
51
+ /** Get the last visible element index */
52
+
53
+
54
+ getCurrentVisibleIndex() {
55
+ let lastVisibleIndex = -1;
56
+
57
+ for (let i = this.elements.length - 1; i >= 0; i--) {
58
+ if (this.isVisible(this.elements[i], this.container)) {
59
+ return i;
60
+ }
61
+ }
62
+
63
+ return lastVisibleIndex;
64
+ }
65
+
66
+ disconnect() {
67
+ this.observer?.disconnect();
68
+ }
69
+
70
+ }
@@ -13,6 +13,7 @@ class Repository {
13
13
  const {
14
14
  keyboardControlsConfig
15
15
  } = properties;
16
+ const selectionConfig = properties.selectionConfig;
16
17
  let isKeyboardControlEnabled = keyboardControlsConfig?.isEnabled;
17
18
 
18
19
  if (!isKeyboardControlEnabled) {
@@ -31,7 +32,7 @@ class Repository {
31
32
  /* eslint-disable-next-line @zohodesk/architecturerules/no-defaultProps-rule */
32
33
 
33
34
  const totalRows = zrecord?.records?.length || 0;
34
- return new KeyboardControls(focussedIndex, totalRows);
35
+ return new KeyboardControls(focussedIndex, totalRows, selectionConfig.isEnabled);
35
36
  }
36
37
 
37
38
  }
@@ -11,7 +11,7 @@ class SpacePress extends AbstractUseCase {
11
11
  event
12
12
  } = inputModel;
13
13
  const data = keyboardControls.getSelectionEvent(event);
14
- dispatch(data);
14
+ data && dispatch(data);
15
15
  }
16
16
 
17
17
  }
@@ -1,9 +1,10 @@
1
1
  import { SMART_TABLE_ACTION_TRIGGERED, SMART_TABLE_SELECTION_TOGGLED } from "../../../../../cc/table-connected/constants/Events";
2
2
 
3
3
  class KeyboardControls {
4
- constructor(focussedIndex, totalLists) {
4
+ constructor(focussedIndex, totalLists, isSelectionEnabled) {
5
5
  this.focussedIndex = focussedIndex;
6
6
  this.totalLists = totalLists;
7
+ this.isSelectionEnabled = isSelectionEnabled;
7
8
  }
8
9
 
9
10
  setFocussedIndex(index) {
@@ -59,6 +60,10 @@ class KeyboardControls {
59
60
 
60
61
 
61
62
  getSelectionEvent(event) {
63
+ if (!this.isSelectionEnabled) {
64
+ return null;
65
+ }
66
+
62
67
  return {
63
68
  type: SMART_TABLE_SELECTION_TOGGLED,
64
69
  payload: {
@@ -2,6 +2,8 @@ import Event from "../../../../custom-component/domain/entities/Event";
2
2
  import { LIST_SELECTION_RECORDS_DESELECTED, LIST_SELECTION_RECORDS_SELECTED, LIST_SELECTION_SELECTION_LIMIT_EXCEEDED } from "../../../../../bc/list-selection/Constants";
3
3
 
4
4
  class ListItemSelection {
5
+ previousSelected = [];
6
+
5
7
  constructor(selected, itemIds, maxSelectionCount) {
6
8
  let selectionStatus = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'na';
7
9
  this.selected = selected;
@@ -30,12 +32,19 @@ class ListItemSelection {
30
32
  }
31
33
 
32
34
  selectAllItems() {
33
- this.itemIds.forEach(id => !this.hasAllSelected() && this.selectItem(id));
35
+ for (const id of this.itemIds) {
36
+ if (this.hasAllSelected()) {
37
+ break;
38
+ }
39
+
40
+ this.selectItem(id);
41
+ }
34
42
  }
35
43
 
36
44
  deselectAllItems() {
45
+ this.previousSelected = [...this.selected];
37
46
  this.selected = [];
38
- this.selectionStatus = 'na';
47
+ this.selectionStatus = 'deselected';
39
48
  }
40
49
 
41
50
  toggleItems(ids) {
@@ -56,15 +65,7 @@ class ListItemSelection {
56
65
 
57
66
  toggleAll() {
58
67
  if (!this.hasAllSelected()) {
59
- for (let id of this.itemIds) {
60
- if (this.hasAllSelected()) {
61
- break;
62
- }
63
-
64
- if (!this.isSelected(id)) {
65
- this.selectItem(id);
66
- }
67
- }
68
+ this.selectAllItems();
68
69
  } else {
69
70
  this.deselectAllItems();
70
71
  }
@@ -95,23 +96,29 @@ class ListItemSelection {
95
96
 
96
97
  if (this.selectionStatus === 'deselected') {
97
98
  events.push(new Event(LIST_SELECTION_RECORDS_DESELECTED, {
98
- recordIds: ids
99
+ recordIds: ids ? ids : this.previousSelected
99
100
  }));
100
101
  }
101
102
 
102
103
  if (this.selectionStatus === 'na' && this.hasAllSelected()) {
103
- events.push(new Event(LIST_SELECTION_SELECTION_LIMIT_EXCEEDED));
104
+ events.push(new Event(LIST_SELECTION_SELECTION_LIMIT_EXCEEDED, {
105
+ maxSelectionAllowed: this.maxSelectionCount
106
+ }));
104
107
  }
105
108
 
106
109
  return events.map(event => event.toObject());
107
110
  }
108
111
 
109
112
  selectItem(id) {
110
- this.selected.push(id);
113
+ if (!this.isSelected(id)) {
114
+ this.selected.push(id);
115
+ }
116
+
111
117
  this.selectionStatus = 'selected';
112
118
  }
113
119
 
114
120
  deselectItem(id) {
121
+ this.previousSelected.push(id);
115
122
  this.selected = this.selected.filter(selectedId => selectedId !== id);
116
123
  this.selectionStatus = 'deselected';
117
124
  }
@@ -126,10 +133,6 @@ class ListItemSelection {
126
133
  return hasMaxSelected || allItemsSelected;
127
134
  }
128
135
 
129
- getStrategy(id) {
130
- return (this.isSelected(id) ? this.deselectItem : this.selectItem).bind(this);
131
- }
132
-
133
136
  toggleRange(startIndex, endIndex) {
134
137
  const isForward = startIndex < endIndex;
135
138
  const [start, end] = isForward ? [startIndex, endIndex] : [endIndex, startIndex];
@@ -0,0 +1,9 @@
1
+ class AbstractController {
2
+ constructor(service) {
3
+ this.service = service;
4
+ this.handle = this.handle.bind(this);
5
+ }
6
+
7
+ }
8
+
9
+ export default AbstractController;
@@ -0,0 +1,26 @@
1
+ import AbstractController from "./AbstractController";
2
+
3
+ class SearchController extends AbstractController {
4
+ handle(event) {
5
+ const {
6
+ searchUseCase
7
+ } = this.service;
8
+ const {
9
+ state,
10
+ updateState,
11
+ action,
12
+ dispatch
13
+ } = event;
14
+ const {
15
+ searchString
16
+ } = action.payload;
17
+ searchUseCase.updateDependencies(state, updateState);
18
+ searchUseCase.execute({
19
+ searchString,
20
+ dispatch
21
+ });
22
+ }
23
+
24
+ }
25
+
26
+ export default SearchController;