@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.
- package/es/bc/app-context/Properties.js +19 -0
- package/es/bc/float-pagination/ActionHandlers.js +1 -0
- package/es/bc/float-pagination/Constants.js +4 -0
- package/es/bc/float-pagination/Properties.js +18 -0
- package/es/bc/float-pagination/index.js +2 -0
- package/es/bc/search/Constants.js +3 -0
- package/es/bc/search/EventHandlers.js +1 -0
- package/es/bc/search/Properties.js +11 -0
- package/es/bc/search/index.js +2 -0
- package/es/cc/action-icon/Properties.js +20 -1
- package/es/cc/checkbox/Properties.js +2 -1
- package/es/cc/email/Properties.js +8 -0
- package/es/cc/fields/field/Types.js +31 -23
- package/es/cc/fields/lookup/Properties.js +26 -10
- package/es/cc/floating-pagination/Constants.js +6 -0
- package/es/cc/floating-pagination/Events.js +8 -0
- package/es/cc/floating-pagination/Properties.js +56 -0
- package/es/cc/floating-pagination/index.js +3 -0
- package/es/cc/highlighted-value/Properties.js +18 -0
- package/es/cc/link/Properties.js +13 -3
- package/es/cc/ribbon/Properties.js +59 -0
- package/es/cc/ribbon/index.js +1 -0
- package/es/cc/switch/Properties.js +2 -2
- package/es/cc/table-connected/Properties.js +16 -0
- package/es/cc/table-list/Constants.js +1 -0
- package/es/cc/table-list/Properties.js +35 -35
- package/es/cc/tags/Data.js +0 -6
- package/es/cc/tags/model/index.js +1 -1
- package/es/library/behaviours/float-pagination/adapters/controllers/DestructController.js +18 -0
- package/es/library/behaviours/float-pagination/adapters/controllers/FloatPaginationController.js +25 -0
- package/es/library/behaviours/float-pagination/adapters/controllers/InitializeController.js +18 -0
- package/es/library/behaviours/float-pagination/adapters/controllers/ScrollBottomController.js +23 -0
- package/es/library/behaviours/float-pagination/adapters/controllers/ScrollTopController.js +23 -0
- package/es/library/behaviours/float-pagination/adapters/controllers/UpdateIndexController.js +30 -0
- package/es/library/behaviours/float-pagination/adapters/gateway/Repository.js +27 -0
- package/es/library/behaviours/float-pagination/adapters/gateway/Service.js +20 -0
- package/es/library/behaviours/float-pagination/adapters/presenter/Presenter.js +16 -0
- package/es/library/behaviours/float-pagination/applications/interfaces/input/ScrollTopInputModel.js +1 -0
- package/es/library/behaviours/float-pagination/applications/interfaces/input/ScrollbottomInputModel.js +1 -0
- package/es/library/behaviours/float-pagination/applications/interfaces/input/UpdateIndexInputModel.js +1 -0
- package/es/library/behaviours/float-pagination/applications/interfaces/output/FloatPaginationOutputModel.js +1 -0
- package/es/library/behaviours/float-pagination/applications/interfaces/output/IPresenter.js +1 -0
- package/es/library/behaviours/float-pagination/applications/usecases/DestructUsecase.js +15 -0
- package/es/library/behaviours/float-pagination/applications/usecases/FloatPaginationUseCase.js +31 -0
- package/es/library/behaviours/float-pagination/applications/usecases/InitializeUsecase.js +16 -0
- package/es/library/behaviours/float-pagination/applications/usecases/ScrollBottomUseCase.js +23 -0
- package/es/library/behaviours/float-pagination/applications/usecases/ScrollTopUseCase.js +23 -0
- package/es/library/behaviours/float-pagination/applications/usecases/UpdateIndexUseCase.js +28 -0
- package/es/library/behaviours/float-pagination/domain/entities/FloatPagination.js +28 -0
- package/es/library/behaviours/float-pagination/domain/entities/interfaces/IFloatPagination.js +1 -0
- package/es/library/behaviours/float-pagination/frameworks/ui/ActionsHandlerFactory.js +37 -0
- package/es/library/behaviours/float-pagination/frameworks/ui/FloatPaginationBehaviourFactory.js +21 -0
- package/es/library/behaviours/float-pagination/frameworks/utils.js +70 -0
- package/es/library/behaviours/keyboard-controls/adapters/gateways/Repository.js +2 -1
- package/es/library/behaviours/keyboard-controls/applications/usecases/SpacePress.js +1 -1
- package/es/library/behaviours/keyboard-controls/domain/entities/KeyboardControls.js +6 -1
- package/es/library/behaviours/list-selection/domain/entities/ListItemSelection.js +21 -18
- package/es/library/behaviours/search/adapters/controllers/AbstractController.js +9 -0
- package/es/library/behaviours/search/adapters/controllers/SearchController.js +26 -0
- package/es/library/behaviours/search/adapters/controllers/UpdatePropertiesController.js +27 -0
- package/es/library/behaviours/search/adapters/gateway/Repository.js +20 -0
- package/es/library/behaviours/search/adapters/gateway/Service.js +12 -0
- package/es/library/behaviours/{sort-by → search}/adapters/presenter/Presenter.js +2 -2
- package/es/library/behaviours/search/adapters/presenter/SearchTranslator.js +6 -0
- package/es/library/behaviours/search/applications/interfaces/UseCaseDependencies.js +1 -0
- package/es/library/behaviours/search/applications/interfaces/gateways/IRepository.js +1 -0
- package/es/library/behaviours/search/applications/interfaces/gateways/IService.js +1 -0
- package/es/library/behaviours/search/applications/interfaces/input/SearchInputModel.js +1 -0
- package/es/library/behaviours/search/applications/interfaces/input/UpdatePropertiesInputModel.js +1 -0
- package/es/library/behaviours/search/applications/interfaces/output/IPresenter.js +1 -0
- package/es/library/behaviours/search/applications/interfaces/output/SearchOutputModel.js +1 -0
- package/es/library/behaviours/search/applications/usecases/AbstractUseCase.js +17 -0
- package/es/library/behaviours/search/applications/usecases/SearchUseCase.js +28 -0
- package/es/library/behaviours/search/applications/usecases/UpdatePropertiesUsecase.js +25 -0
- package/es/library/behaviours/search/domain/entities/Search.js +23 -0
- package/es/library/behaviours/search/domain/entities/interfaces/ISearch.js +1 -0
- package/es/library/behaviours/search/frameworks/ui/EventHandlerFactory.js +25 -0
- package/es/library/behaviours/search/frameworks/ui/SearchStringStoreBehaviourFactory.js +26 -0
- package/es/library/custom-component/adapters/gateways/event-manager/EventManager.js +5 -0
- package/es/library/custom-component/domain/entities/ComponentProperties.js +1 -1
- package/es/library/custom-component/domain/entities/Logger.js +3 -3
- package/es/library/dot/components/action-location/frameworks/ui/ActionComponentMapping.js +3 -1
- package/es/library/dot/components/table-list/adapters/controllers/ScrollController.js +2 -2
- package/es/library/dot/components/table-list/frameworks/ui/TableListView.js +24 -1
- package/es/library/dot/components/table-list/frameworks/ui/css/TableList.module.css +19 -2
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/Row.js +4 -6
- package/es/library/dot/legacy-to-new-arch/action-icon/frameworks/ui/ActionIconView.js +5 -1
- package/es/library/dot/legacy-to-new-arch/email/frameworks/ui/EmailView.js +4 -2
- package/es/library/dot/legacy-to-new-arch/floating-pagination/frameworks/ui/FloatingPagination.js +10 -0
- package/es/library/dot/legacy-to-new-arch/floating-pagination/frameworks/ui/FloatingPaginationView.js +47 -0
- package/es/library/dot/legacy-to-new-arch/highlighted-value/frameworks/ui/HighlightedValueView.js +6 -1
- package/es/library/dot/legacy-to-new-arch/index.js +1 -0
- package/es/library/dot/legacy-to-new-arch/link/frameworks/ui/LinkView.js +4 -2
- package/es/library/dot/legacy-to-new-arch/radio-dropdown/frameworks/ui/RadioDropdownView.js +1 -0
- package/es/library/dot/legacy-to-new-arch/ribbon/frameworks/ui/Ribbon.js +10 -0
- package/es/library/dot/legacy-to-new-arch/ribbon/frameworks/ui/RibbonView.js +37 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/checkbox-field/frameworks/ui/CheckboxField.js +12 -2
- package/es/library/dot/legacy-to-new-arch/table-field-components/checkbox-field/frameworks/ui/CheckboxFieldView.js +8 -5
- package/es/library/dot/legacy-to-new-arch/table-field-components/checkbox-field/frameworks/ui/EventHandlersFactory.js +3 -3
- package/es/library/dot/legacy-to-new-arch/table-field-components/email-field/frameworks/ui/EmailField.js +3 -3
- package/es/library/dot/legacy-to-new-arch/table-field-components/email-field/frameworks/ui/EmailFieldView.js +8 -6
- package/es/library/dot/legacy-to-new-arch/table-field-components/index.js +22 -5
- package/es/library/dot/legacy-to-new-arch/table-field-components/lookup-field/frameworks/ui/LookupFieldView.js +1 -1
- package/es/library/dot/legacy-to-new-arch/table-field-components/phone-field/frameworks/ui/PhoneFieldView.js +1 -1
- package/es/library/dot/legacy-to-new-arch/table-field-components/radio-dropdown-field/frameworks/ui/EventHandlersFactory.js +14 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/radio-dropdown-field/frameworks/ui/RadioDropdownField.js +17 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/radio-dropdown-field/frameworks/ui/RadioDropdownFieldView.js +1 -1
- package/es/library/dot/legacy-to-new-arch/table-field-components/switch-field/frameworks/ui/EventHandlersFactory.js +3 -3
- package/es/library/dot/legacy-to-new-arch/table-field-components/switch-field/frameworks/ui/SwitchField.js +14 -4
- package/es/library/dot/legacy-to-new-arch/table-field-components/switch-field/frameworks/ui/SwitchFieldView.js +8 -4
- package/es/library/dot/legacy-to-new-arch/table-field-components/tags-list-dropdown-field/frameworks/ui/TagsListDropdownField.js +33 -1
- package/es/library/dot/legacy-to-new-arch/table-field-components/tags-list-dropdown-field/frameworks/ui/TagsListDropdownFieldView.js +1 -1
- package/es/library/dot/legacy-to-new-arch/table-field-components/url-field/frameworks/ui/UrlFieldView.js +1 -1
- package/es/platform/components/table-connected/adapters/controllers/ScrollController.js +29 -8
- package/es/platform/components/table-connected/adapters/controllers/ScrollEndReachedController.js +23 -0
- package/es/platform/components/table-connected/frameworks/EventHandlersFactory.js +26 -4
- package/es/platform/components/table-connected/frameworks/TableConnectedFactory.js +2 -1
- package/es/platform/components/table-connected/frameworks/TableConnectedView.js +2 -0
- package/es/platform/data-source/http-template/fetchLookupFields.js +6 -0
- package/es/platform/data-source/http-template/getComponentMapping.js +1 -1
- package/es/platform/data-source/http-template/getSingleRecord.js +51 -0
- package/es/platform/data-source/index.js +3 -1
- package/es/platform/zfield/applications/usecases/FetchSuccessUseCase.js +33 -0
- package/es/platform/zfield/domain/entities/fields-manager/FieldsManager.js +5 -0
- package/es/platform/zform/adapters/controllers/GetInitialRecordSuccessController.js +31 -0
- package/es/platform/zform/adapters/gateway/FormRepository.js +1 -3
- package/es/platform/zform/adapters/presenter/translators/fields/LookUpFieldTranslator.js +11 -12
- package/es/platform/zform/applications/interfaces/input/GetInitialRecordSuccessUseCaseInputModel.js +1 -0
- package/es/platform/zform/applications/usecases/GetInitialRecordSuccessUseCase.js +132 -0
- package/es/platform/zform/applications/usecases/MyFormSuccessUseCase.js +10 -9
- package/es/platform/zform/domain/ZForm.js +0 -2
- package/es/platform/zlist/adapters/presenters/TableTranslator.js +44 -6
- package/es/platform/zlist/adapters/presenters/translators/ColumnTranslator.js +57 -49
- package/es/platform/zlist/adapters/presenters/translators/Row.js +16 -2
- package/es/platform/zlist/adapters/presenters/translators/RowsTranslator.js +3 -1
- package/es/platform/zlist/adapters/presenters/translators/fields/BooleanFieldTranslator.js +87 -12
- package/es/platform/zlist/adapters/presenters/translators/fields/CurrencyFieldTranslator.js +66 -11
- package/es/platform/zlist/adapters/presenters/translators/fields/DateFieldTranslator.js +33 -8
- package/es/platform/zlist/adapters/presenters/translators/fields/DateTimeFieldTranslator.js +33 -8
- package/es/platform/zlist/adapters/presenters/translators/fields/DecimalFieldTranslator.js +16 -9
- package/es/platform/zlist/adapters/presenters/translators/fields/EmailFieldTranslator.js +29 -9
- package/es/platform/zlist/adapters/presenters/translators/fields/FormulaFieldTranslator.js +23 -27
- package/es/platform/zlist/adapters/presenters/translators/fields/LookUpFieldTranslator.js +106 -17
- package/es/platform/zlist/adapters/presenters/translators/fields/MultiLineFieldTranslator.js +16 -9
- package/es/platform/zlist/adapters/presenters/translators/fields/MultiSelectFieldTranslator.js +100 -26
- package/es/platform/zlist/adapters/presenters/translators/fields/NumberFieldTranslator.js +16 -9
- package/es/platform/zlist/adapters/presenters/translators/fields/PercentageFieldTranslator.js +16 -9
- package/es/platform/zlist/adapters/presenters/translators/fields/PhoneFieldTranslator.js +32 -9
- package/es/platform/zlist/adapters/presenters/translators/fields/PickListFieldTranslator.js +167 -26
- package/es/platform/zlist/adapters/presenters/translators/fields/SingleLineFieldTranslator.js +16 -9
- package/es/platform/zlist/adapters/presenters/translators/fields/URLFieldTranslator.js +32 -9
- package/es/platform/zlist/adapters/presenters/utils/DateAndTimeFormat.js +25 -0
- package/es/platform/zrecord/adapters/controllers/UpdateRecordController.js +30 -0
- package/es/platform/zrecord/applications/interfaces/input/UpdateRecordInputModel.js +0 -0
- package/es/platform/zrecord/applications/usecases/UpdateRecordUseCase.js +30 -0
- package/package.json +20 -20
- package/es/bc/sort-by/ActionHandlers.js +0 -1
- package/es/bc/sort-by/Constants.js +0 -2
- package/es/bc/sort-by/Properties.js +0 -26
- package/es/bc/sort-by/SortOrderEnum.js +0 -8
- package/es/bc/sort-by/index.js +0 -2
- package/es/cc/tags/model/TagModel.js +0 -26
- package/es/library/behaviours/sort-by/adapters/controllers/SortBy.js +0 -28
- package/es/library/behaviours/sort-by/adapters/gateway/Repository.js +0 -19
- package/es/library/behaviours/sort-by/adapters/gateway/Service.js +0 -10
- package/es/library/behaviours/sort-by/applications/usecases/SortBy.js +0 -28
- package/es/library/behaviours/sort-by/domain/entities/SortBy.js +0 -42
- package/es/library/behaviours/sort-by/frameworks/ui/ActionsHandlerFactory.js +0 -23
- package/es/library/behaviours/sort-by/frameworks/ui/DemoBehaviour.js +0 -20
- package/es/library/behaviours/sort-by/frameworks/ui/SortByBehaviourFactory.js +0 -24
- package/es/library/custom-component/frameworks/ui/CustomComponentFactory.js +0 -56
- package/es/library/dot/components/table-list/adapters/controllers/SortByController.js +0 -25
- package/es/library/dot/components/table-list/adapters/controllers/SortedController.js +0 -18
- package/es/library/dot/components/table-list/frameworks/ui/handlers/HandleSortClick.js +0 -12
- package/es/platform/zlist/adapters/gateways/SortBy.js +0 -38
- package/es/platform/zlist/domain/entities/SortBy.js +0 -58
- /package/es/{library/behaviours/sort-by/applications/interfaces/UseCaseDependencies.js → bc/float-pagination/types/FloatPaginationBehaviourState.js} +0 -0
- /package/es/{library/behaviours/sort-by/applications/interfaces/gateways/IRepository.js → bc/list-selection/Types.js} +0 -0
- /package/es/{library/behaviours/sort-by/applications/interfaces/gateways/IService.js → cc/table-list/data-types/FloatPaginationConfig.js} +0 -0
- /package/es/library/behaviours/{sort-by → float-pagination}/adapters/controllers/AbstractController.js +0 -0
- /package/es/library/behaviours/{sort-by/applications/interfaces/input/SortByInputModel.js → float-pagination/applications/interfaces/UseCaseDependencies.js} +0 -0
- /package/es/library/behaviours/{sort-by/applications/interfaces/output/IPresenter.js → float-pagination/applications/interfaces/gateways/IRepository.js} +0 -0
- /package/es/library/behaviours/{sort-by/applications/interfaces/output/SortByOutputModel.js → float-pagination/applications/interfaces/gateways/IService.js} +0 -0
- /package/es/library/behaviours/{sort-by/domain/entities/interfaces/ISortBy.js → float-pagination/applications/interfaces/input/DestructInputModel.js} +0 -0
- /package/es/{platform/zlist/applications/interfaces/gateways/ISortBy.js → library/behaviours/float-pagination/applications/interfaces/input/FloatPaginationInputModel.js} +0 -0
- /package/es/{platform/zlist/domain/entities/interfaces/ISortBy.js → library/behaviours/float-pagination/applications/interfaces/input/InitializeInputModel.js} +0 -0
- /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
|
+
}
|
package/es/library/behaviours/float-pagination/applications/interfaces/input/ScrollTopInputModel.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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;
|
package/es/library/behaviours/float-pagination/applications/usecases/FloatPaginationUseCase.js
ADDED
|
@@ -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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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;
|
package/es/library/behaviours/float-pagination/frameworks/ui/FloatPaginationBehaviourFactory.js
ADDED
|
@@ -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
|
}
|
|
@@ -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
|
-
|
|
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 = '
|
|
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
|
-
|
|
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.
|
|
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,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;
|