@talxis/base-controls 0.0.1
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/README.md +41 -0
- package/dist/components/DatasetControl/DatasetControl.d.ts +3 -0
- package/dist/components/DatasetControl/DatasetControl.js +72 -0
- package/dist/components/DatasetControl/DatasetControl.js.map +1 -0
- package/dist/components/DatasetControl/Paging/DatasetPaging.d.ts +3 -0
- package/dist/components/DatasetControl/Paging/DatasetPaging.js +69 -0
- package/dist/components/DatasetControl/Paging/DatasetPaging.js.map +1 -0
- package/dist/components/DatasetControl/Paging/Paging.d.ts +26 -0
- package/dist/components/DatasetControl/Paging/Paging.js +80 -0
- package/dist/components/DatasetControl/Paging/Paging.js.map +1 -0
- package/dist/components/DatasetControl/Paging/index.d.ts +3 -0
- package/dist/components/DatasetControl/Paging/index.js +3 -0
- package/dist/components/DatasetControl/Paging/index.js.map +1 -0
- package/dist/components/DatasetControl/Paging/interfaces.d.ts +16 -0
- package/dist/components/DatasetControl/Paging/styles.d.ts +35 -0
- package/dist/components/DatasetControl/Paging/styles.js +41 -0
- package/dist/components/DatasetControl/Paging/styles.js.map +1 -0
- package/dist/components/DatasetControl/Paging/translations.d.ts +38 -0
- package/dist/components/DatasetControl/Paging/translations.js +14 -0
- package/dist/components/DatasetControl/Paging/translations.js.map +1 -0
- package/dist/components/DatasetControl/QuickFind/QuickFind.d.ts +13 -0
- package/dist/components/DatasetControl/QuickFind/QuickFind.js +59 -0
- package/dist/components/DatasetControl/QuickFind/QuickFind.js.map +1 -0
- package/dist/components/DatasetControl/QuickFind/styles.d.ts +8 -0
- package/dist/components/DatasetControl/QuickFind/styles.js +15 -0
- package/dist/components/DatasetControl/QuickFind/styles.js.map +1 -0
- package/dist/components/DatasetControl/index.d.ts +3 -0
- package/dist/components/DatasetControl/index.js +4 -0
- package/dist/components/DatasetControl/index.js.map +1 -0
- package/dist/components/DatasetControl/interfaces.d.ts +32 -0
- package/dist/components/DatasetControl/styles.d.ts +18 -0
- package/dist/components/DatasetControl/styles.js +29 -0
- package/dist/components/DatasetControl/styles.js.map +1 -0
- package/dist/components/DatasetControl/translations.d.ts +18 -0
- package/dist/components/DatasetControl/translations.js +9 -0
- package/dist/components/DatasetControl/translations.js.map +1 -0
- package/dist/components/DateTime/DateTime.d.ts +3 -0
- package/dist/components/DateTime/DateTime.js +149 -0
- package/dist/components/DateTime/DateTime.js.map +1 -0
- package/dist/components/DateTime/components/Calendar.d.ts +17 -0
- package/dist/components/DateTime/components/Calendar.js +63 -0
- package/dist/components/DateTime/components/Calendar.js.map +1 -0
- package/dist/components/DateTime/hooks/useDateTime.d.ts +32 -0
- package/dist/components/DateTime/hooks/useDateTime.js +150 -0
- package/dist/components/DateTime/hooks/useDateTime.js.map +1 -0
- package/dist/components/DateTime/index.d.ts +3 -0
- package/dist/components/DateTime/index.js +3 -0
- package/dist/components/DateTime/index.js.map +1 -0
- package/dist/components/DateTime/interfaces.d.ts +23 -0
- package/dist/components/DateTime/styles.d.ts +31 -0
- package/dist/components/DateTime/styles.js +37 -0
- package/dist/components/DateTime/styles.js.map +1 -0
- package/dist/components/DateTime/translations.d.ts +19 -0
- package/dist/components/DateTime/translations.js +23 -0
- package/dist/components/DateTime/translations.js.map +1 -0
- package/dist/components/Decimal/Decimal.d.ts +3 -0
- package/dist/components/Decimal/Decimal.js +204 -0
- package/dist/components/Decimal/Decimal.js.map +1 -0
- package/dist/components/Decimal/components/ArrowButtons.d.ts +10 -0
- package/dist/components/Decimal/components/ArrowButtons.js +38 -0
- package/dist/components/Decimal/components/ArrowButtons.js.map +1 -0
- package/dist/components/Decimal/components/styles.d.ts +20 -0
- package/dist/components/Decimal/components/styles.js +26 -0
- package/dist/components/Decimal/components/styles.js.map +1 -0
- package/dist/components/Decimal/index.d.ts +2 -0
- package/dist/components/Decimal/index.js +2 -0
- package/dist/components/Decimal/index.js.map +1 -0
- package/dist/components/Decimal/interfaces.d.ts +13 -0
- package/dist/components/Duration/Duration.d.ts +3 -0
- package/dist/components/Duration/Duration.js +155 -0
- package/dist/components/Duration/Duration.js.map +1 -0
- package/dist/components/Duration/durationOptions.d.ts +2 -0
- package/dist/components/Duration/durationOptions.js +27 -0
- package/dist/components/Duration/durationOptions.js.map +1 -0
- package/dist/components/Duration/index.d.ts +2 -0
- package/dist/components/Duration/index.js +2 -0
- package/dist/components/Duration/index.js.map +1 -0
- package/dist/components/Duration/interfaces.d.ts +13 -0
- package/dist/components/Duration/translations.d.ts +26 -0
- package/dist/components/Duration/translations.js +31 -0
- package/dist/components/Duration/translations.js.map +1 -0
- package/dist/components/Grid/Grid.d.ts +3 -0
- package/dist/components/Grid/Grid.js +37 -0
- package/dist/components/Grid/Grid.js.map +1 -0
- package/dist/components/Grid/GridContext.d.ts +3 -0
- package/dist/components/Grid/GridContext.js +6 -0
- package/dist/components/Grid/GridContext.js.map +1 -0
- package/dist/components/Grid/aggregation/Aggregation.d.ts +18 -0
- package/dist/components/Grid/aggregation/Aggregation.js +129 -0
- package/dist/components/Grid/aggregation/Aggregation.js.map +1 -0
- package/dist/components/Grid/constants.d.ts +1 -0
- package/dist/components/Grid/constants.js +4 -0
- package/dist/components/Grid/constants.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/AgGrid.d.ts +5 -0
- package/dist/components/Grid/core/components/AgGrid/AgGrid.js +203 -0
- package/dist/components/Grid/core/components/AgGrid/AgGrid.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/components/EmptyRecordsOverlay/EmptyRecords.d.ts +2 -0
- package/dist/components/Grid/core/components/AgGrid/components/EmptyRecordsOverlay/EmptyRecords.js +12 -0
- package/dist/components/Grid/core/components/AgGrid/components/EmptyRecordsOverlay/EmptyRecords.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/components/EmptyRecordsOverlay/styles.d.ts +18 -0
- package/dist/components/Grid/core/components/AgGrid/components/EmptyRecordsOverlay/styles.js +23 -0
- package/dist/components/Grid/core/components/AgGrid/components/EmptyRecordsOverlay/styles.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/components/LoadingOverlay/LoadingOverlay.d.ts +2 -0
- package/dist/components/Grid/core/components/AgGrid/components/LoadingOverlay/LoadingOverlay.js +10 -0
- package/dist/components/Grid/core/components/AgGrid/components/LoadingOverlay/LoadingOverlay.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/context.d.ts +3 -0
- package/dist/components/Grid/core/components/AgGrid/context.js +6 -0
- package/dist/components/Grid/core/components/AgGrid/context.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/model/AgGrid.d.ts +52 -0
- package/dist/components/Grid/core/components/AgGrid/model/AgGrid.js +343 -0
- package/dist/components/Grid/core/components/AgGrid/model/AgGrid.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/model/Comparator.d.ts +9 -0
- package/dist/components/Grid/core/components/AgGrid/model/Comparator.js +86 -0
- package/dist/components/Grid/core/components/AgGrid/model/Comparator.js.map +1 -0
- package/dist/components/Grid/core/components/AgGrid/styles.d.ts +72 -0
- package/dist/components/Grid/core/components/AgGrid/styles.js +78 -0
- package/dist/components/Grid/core/components/AgGrid/styles.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/Cell.d.ts +13 -0
- package/dist/components/Grid/core/components/Cell/Cell.js +158 -0
- package/dist/components/Grid/core/components/Cell/Cell.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/CellContent/CellContent.d.ts +8 -0
- package/dist/components/Grid/core/components/Cell/CellContent/CellContent.js +230 -0
- package/dist/components/Grid/core/components/Cell/CellContent/CellContent.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/CellContent/styles.d.ts +33 -0
- package/dist/components/Grid/core/components/Cell/CellContent/styles.js +39 -0
- package/dist/components/Grid/core/components/Cell/CellContent/styles.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/Notifications/Notifications.d.ts +12 -0
- package/dist/components/Grid/core/components/Cell/Notifications/Notifications.js +112 -0
- package/dist/components/Grid/core/components/Cell/Notifications/Notifications.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/Notifications/styles.d.ts +39 -0
- package/dist/components/Grid/core/components/Cell/Notifications/styles.js +46 -0
- package/dist/components/Grid/core/components/Cell/Notifications/styles.js.map +1 -0
- package/dist/components/Grid/core/components/Cell/styles.d.ts +40 -0
- package/dist/components/Grid/core/components/Cell/styles.js +59 -0
- package/dist/components/Grid/core/components/Cell/styles.js.map +1 -0
- package/dist/components/Grid/core/components/ColumnHeader/ColumnHeader.d.ts +6 -0
- package/dist/components/Grid/core/components/ColumnHeader/ColumnHeader.js +61 -0
- package/dist/components/Grid/core/components/ColumnHeader/ColumnHeader.js.map +1 -0
- package/dist/components/Grid/core/components/ColumnHeader/components/GlobalCheckbox/GlobalCheckbox.d.ts +2 -0
- package/dist/components/Grid/core/components/ColumnHeader/components/GlobalCheckbox/GlobalCheckbox.js +50 -0
- package/dist/components/Grid/core/components/ColumnHeader/components/GlobalCheckbox/GlobalCheckbox.js.map +1 -0
- package/dist/components/Grid/core/components/ColumnHeader/components/GlobalCheckbox/styles.d.ts +14 -0
- package/dist/components/Grid/core/components/ColumnHeader/components/GlobalCheckbox/styles.js +20 -0
- package/dist/components/Grid/core/components/ColumnHeader/components/GlobalCheckbox/styles.js.map +1 -0
- package/dist/components/Grid/core/components/ColumnHeader/styles.d.ts +42 -0
- package/dist/components/Grid/core/components/ColumnHeader/styles.js +48 -0
- package/dist/components/Grid/core/components/ColumnHeader/styles.js.map +1 -0
- package/dist/components/Grid/core/components/Dialog/Constants.d.ts +2 -0
- package/dist/components/Grid/core/components/Dialog/Constants.js +9 -0
- package/dist/components/Grid/core/components/Dialog/Constants.js.map +1 -0
- package/dist/components/Grid/core/components/Dialog/Styles.d.ts +2 -0
- package/dist/components/Grid/core/components/Dialog/Styles.js +61 -0
- package/dist/components/Grid/core/components/Dialog/Styles.js.map +1 -0
- package/dist/components/Grid/core/components/Dialog/index.d.ts +4 -0
- package/dist/components/Grid/core/components/Dialog/index.js +16 -0
- package/dist/components/Grid/core/components/Dialog/index.js.map +1 -0
- package/dist/components/Grid/core/components/Dialog/interfaces/index.d.ts +6 -0
- package/dist/components/Grid/core/components/Dialog/interfaces/index.js +2 -0
- package/dist/components/Grid/core/components/Dialog/interfaces/index.js.map +1 -0
- package/dist/components/Grid/core/components/Save/Save.d.ts +2 -0
- package/dist/components/Grid/core/components/Save/Save.js +59 -0
- package/dist/components/Grid/core/components/Save/Save.js.map +1 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/ChangeEditor.d.ts +7 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/ChangeEditor.js +73 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/ChangeEditor.js.map +1 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/ChangeGrid.d.ts +11 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/ChangeGrid.js +231 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/ChangeGrid.js.map +1 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/styles.d.ts +39 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/styles.js +45 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/components/ChangeGrid/styles.js.map +1 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/styles.d.ts +31 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/styles.js +37 -0
- package/dist/components/Grid/core/components/Save/components/ChangeEditor/styles.js.map +1 -0
- package/dist/components/Grid/core/components/Save/styles.d.ts +35 -0
- package/dist/components/Grid/core/components/Save/styles.js +42 -0
- package/dist/components/Grid/core/components/Save/styles.js.map +1 -0
- package/dist/components/Grid/core/controllers/useGridController.d.ts +7 -0
- package/dist/components/Grid/core/controllers/useGridController.js +29 -0
- package/dist/components/Grid/core/controllers/useGridController.js.map +1 -0
- package/dist/components/Grid/core/enums/ConditionOperator.d.ts +48 -0
- package/dist/components/Grid/core/enums/ConditionOperator.js +52 -0
- package/dist/components/Grid/core/enums/ConditionOperator.js.map +1 -0
- package/dist/components/Grid/core/enums/DataType.d.ts +25 -0
- package/dist/components/Grid/core/enums/DataType.js +30 -0
- package/dist/components/Grid/core/enums/DataType.js.map +1 -0
- package/dist/components/Grid/core/hooks/useGridInstance.d.ts +2 -0
- package/dist/components/Grid/core/hooks/useGridInstance.js +9 -0
- package/dist/components/Grid/core/hooks/useGridInstance.js.map +1 -0
- package/dist/components/Grid/core/hooks/useRefreshCallback.d.ts +2 -0
- package/dist/components/Grid/core/hooks/useRefreshCallback.js +20 -0
- package/dist/components/Grid/core/hooks/useRefreshCallback.js.map +1 -0
- package/dist/components/Grid/core/interfaces/IGridColumn.d.ts +13 -0
- package/dist/components/Grid/core/interfaces/IGridContext.d.ts +4 -0
- package/dist/components/Grid/core/model/Grid.d.ts +81 -0
- package/dist/components/Grid/core/model/Grid.js +513 -0
- package/dist/components/Grid/core/model/Grid.js.map +1 -0
- package/dist/components/Grid/core/model/GridDependency.d.ts +13 -0
- package/dist/components/Grid/core/model/GridDependency.js +28 -0
- package/dist/components/Grid/core/model/GridDependency.js.map +1 -0
- package/dist/components/Grid/core/services/KeyListener.d.ts +12 -0
- package/dist/components/Grid/core/services/KeyListener.js +31 -0
- package/dist/components/Grid/core/services/KeyListener.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/FilterCallout.d.ts +8 -0
- package/dist/components/Grid/filtering/components/FilterCallout/FilterCallout.js +59 -0
- package/dist/components/Grid/filtering/components/FilterCallout/FilterCallout.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionOperator/ConditionOperator.d.ts +7 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionOperator/ConditionOperator.js +56 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionOperator/ConditionOperator.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/ConditionValue.d.ts +7 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/ConditionValue.js +73 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/ConditionValue.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/ConditionValueBetween.d.ts +7 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/ConditionValueBetween.js +90 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/ConditionValueBetween.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/model/ConditionComponentValue.d.ts +48 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/model/ConditionComponentValue.js +146 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/ConditionValue/model/ConditionComponentValue.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/Component.d.ts +11 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/Component.js +53 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/Component.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/controller/useComponentController.d.ts +9 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/controller/useComponentController.js +31 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/controller/useComponentController.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/model/Component.d.ts +10 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/model/Component.js +294 -0
- package/dist/components/Grid/filtering/components/FilterCallout/components/LegacyControlRendering/model/Component.js.map +1 -0
- package/dist/components/Grid/filtering/components/FilterCallout/styles.d.ts +35 -0
- package/dist/components/Grid/filtering/components/FilterCallout/styles.js +40 -0
- package/dist/components/Grid/filtering/components/FilterCallout/styles.js.map +1 -0
- package/dist/components/Grid/filtering/constants.d.ts +5 -0
- package/dist/components/Grid/filtering/constants.js +53 -0
- package/dist/components/Grid/filtering/constants.js.map +1 -0
- package/dist/components/Grid/filtering/controller/useColumnFilterConditionController.d.ts +21 -0
- package/dist/components/Grid/filtering/controller/useColumnFilterConditionController.js +44 -0
- package/dist/components/Grid/filtering/controller/useColumnFilterConditionController.js.map +1 -0
- package/dist/components/Grid/filtering/model/Condition.d.ts +49 -0
- package/dist/components/Grid/filtering/model/Condition.js +347 -0
- package/dist/components/Grid/filtering/model/Condition.js.map +1 -0
- package/dist/components/Grid/filtering/model/Filtering.d.ts +11 -0
- package/dist/components/Grid/filtering/model/Filtering.js +78 -0
- package/dist/components/Grid/filtering/model/Filtering.js.map +1 -0
- package/dist/components/Grid/filtering/utils/FilteringUtilts.d.ts +34 -0
- package/dist/components/Grid/filtering/utils/FilteringUtilts.js +195 -0
- package/dist/components/Grid/filtering/utils/FilteringUtilts.js.map +1 -0
- package/dist/components/Grid/index.d.ts +2 -0
- package/dist/components/Grid/index.js +2 -0
- package/dist/components/Grid/index.js.map +1 -0
- package/dist/components/Grid/interfaces.d.ts +36 -0
- package/dist/components/Grid/selection/model/Selection.d.ts +12 -0
- package/dist/components/Grid/selection/model/Selection.js +54 -0
- package/dist/components/Grid/selection/model/Selection.js.map +1 -0
- package/dist/components/Grid/sorting/Sorting.d.ts +10 -0
- package/dist/components/Grid/sorting/Sorting.js +31 -0
- package/dist/components/Grid/sorting/Sorting.js.map +1 -0
- package/dist/components/Grid/sorting/components/SortingContextualMenu/SortingContextualMenu.d.ts +8 -0
- package/dist/components/Grid/sorting/components/SortingContextualMenu/SortingContextualMenu.js +157 -0
- package/dist/components/Grid/sorting/components/SortingContextualMenu/SortingContextualMenu.js.map +1 -0
- package/dist/components/Grid/sorting/components/SortingContextualMenu/styles.d.ts +9 -0
- package/dist/components/Grid/sorting/components/SortingContextualMenu/styles.js +15 -0
- package/dist/components/Grid/sorting/components/SortingContextualMenu/styles.js.map +1 -0
- package/dist/components/Grid/sorting/controllers/useColumnSortingController.d.ts +9 -0
- package/dist/components/Grid/sorting/controllers/useColumnSortingController.js +22 -0
- package/dist/components/Grid/sorting/controllers/useColumnSortingController.js.map +1 -0
- package/dist/components/Grid/translations.d.ts +366 -0
- package/dist/components/Grid/translations.js +99 -0
- package/dist/components/Grid/translations.js.map +1 -0
- package/dist/components/GridCellRenderer/DefaultContentRenderer/DefaultContentRenderer.d.ts +2 -0
- package/dist/components/GridCellRenderer/DefaultContentRenderer/DefaultContentRenderer.js +11 -0
- package/dist/components/GridCellRenderer/DefaultContentRenderer/DefaultContentRenderer.js.map +1 -0
- package/dist/components/GridCellRenderer/DefaultContentRenderer/index.d.ts +1 -0
- package/dist/components/GridCellRenderer/DefaultContentRenderer/index.js +2 -0
- package/dist/components/GridCellRenderer/DefaultContentRenderer/index.js.map +1 -0
- package/dist/components/GridCellRenderer/GridCellRenderer.d.ts +3 -0
- package/dist/components/GridCellRenderer/GridCellRenderer.js +293 -0
- package/dist/components/GridCellRenderer/GridCellRenderer.js.map +1 -0
- package/dist/components/GridCellRenderer/OptionSet/OptionSet.d.ts +5 -0
- package/dist/components/GridCellRenderer/OptionSet/OptionSet.js +75 -0
- package/dist/components/GridCellRenderer/OptionSet/OptionSet.js.map +1 -0
- package/dist/components/GridCellRenderer/OptionSet/index.d.ts +1 -0
- package/dist/components/GridCellRenderer/OptionSet/index.js +2 -0
- package/dist/components/GridCellRenderer/OptionSet/index.js.map +1 -0
- package/dist/components/GridCellRenderer/OptionSet/styles.d.ts +20 -0
- package/dist/components/GridCellRenderer/OptionSet/styles.js +29 -0
- package/dist/components/GridCellRenderer/OptionSet/styles.js.map +1 -0
- package/dist/components/GridCellRenderer/RecordCommands/Icon.d.ts +7 -0
- package/dist/components/GridCellRenderer/RecordCommands/Icon.js +32 -0
- package/dist/components/GridCellRenderer/RecordCommands/Icon.js.map +1 -0
- package/dist/components/GridCellRenderer/RecordCommands/RecordCommands.d.ts +13 -0
- package/dist/components/GridCellRenderer/RecordCommands/RecordCommands.js +103 -0
- package/dist/components/GridCellRenderer/RecordCommands/RecordCommands.js.map +1 -0
- package/dist/components/GridCellRenderer/RecordCommands/styles.d.ts +13 -0
- package/dist/components/GridCellRenderer/RecordCommands/styles.js +32 -0
- package/dist/components/GridCellRenderer/RecordCommands/styles.js.map +1 -0
- package/dist/components/GridCellRenderer/index.d.ts +2 -0
- package/dist/components/GridCellRenderer/index.js +2 -0
- package/dist/components/GridCellRenderer/index.js.map +1 -0
- package/dist/components/GridCellRenderer/interfaces.d.ts +66 -0
- package/dist/components/GridCellRenderer/styles.d.ts +85 -0
- package/dist/components/GridCellRenderer/styles.js +119 -0
- package/dist/components/GridCellRenderer/styles.js.map +1 -0
- package/dist/components/GridCellRenderer/translations.d.ts +30 -0
- package/dist/components/GridCellRenderer/translations.js +35 -0
- package/dist/components/GridCellRenderer/translations.js.map +1 -0
- package/dist/components/GridCellRenderer/useComponentProps.d.ts +6 -0
- package/dist/components/GridCellRenderer/useComponentProps.js +10 -0
- package/dist/components/GridCellRenderer/useComponentProps.js.map +1 -0
- package/dist/components/Lookup/Lookup.d.ts +3 -0
- package/dist/components/Lookup/Lookup.js +222 -0
- package/dist/components/Lookup/Lookup.js.map +1 -0
- package/dist/components/Lookup/components/RecordCreator.d.ts +10 -0
- package/dist/components/Lookup/components/RecordCreator.js +37 -0
- package/dist/components/Lookup/components/RecordCreator.js.map +1 -0
- package/dist/components/Lookup/components/TargetSelector.d.ts +9 -0
- package/dist/components/Lookup/components/TargetSelector.js +19 -0
- package/dist/components/Lookup/components/TargetSelector.js.map +1 -0
- package/dist/components/Lookup/hooks/useFetchXml.d.ts +6 -0
- package/dist/components/Lookup/hooks/useFetchXml.js +52 -0
- package/dist/components/Lookup/hooks/useFetchXml.js.map +1 -0
- package/dist/components/Lookup/hooks/useLoadedEntities.d.ts +6 -0
- package/dist/components/Lookup/hooks/useLoadedEntities.js +20 -0
- package/dist/components/Lookup/hooks/useLoadedEntities.js.map +1 -0
- package/dist/components/Lookup/hooks/useLookup.d.ts +43 -0
- package/dist/components/Lookup/hooks/useLookup.js +120 -0
- package/dist/components/Lookup/hooks/useLookup.js.map +1 -0
- package/dist/components/Lookup/index.d.ts +3 -0
- package/dist/components/Lookup/index.js +3 -0
- package/dist/components/Lookup/index.js.map +1 -0
- package/dist/components/Lookup/interfaces.d.ts +75 -0
- package/dist/components/Lookup/styles.d.ts +95 -0
- package/dist/components/Lookup/styles.js +112 -0
- package/dist/components/Lookup/styles.js.map +1 -0
- package/dist/components/Lookup/translations.d.ts +30 -0
- package/dist/components/Lookup/translations.js +33 -0
- package/dist/components/Lookup/translations.js.map +1 -0
- package/dist/components/MultiSelectOptionSet/ColofulOptions/ColorfulOptions.d.ts +8 -0
- package/dist/components/MultiSelectOptionSet/ColofulOptions/ColorfulOptions.js +42 -0
- package/dist/components/MultiSelectOptionSet/ColofulOptions/ColorfulOptions.js.map +1 -0
- package/dist/components/MultiSelectOptionSet/ColofulOptions/styles.d.ts +17 -0
- package/dist/components/MultiSelectOptionSet/ColofulOptions/styles.js +24 -0
- package/dist/components/MultiSelectOptionSet/ColofulOptions/styles.js.map +1 -0
- package/dist/components/MultiSelectOptionSet/MultiSelectOptionSet.d.ts +3 -0
- package/dist/components/MultiSelectOptionSet/MultiSelectOptionSet.js +132 -0
- package/dist/components/MultiSelectOptionSet/MultiSelectOptionSet.js.map +1 -0
- package/dist/components/MultiSelectOptionSet/index.d.ts +2 -0
- package/dist/components/MultiSelectOptionSet/index.js +2 -0
- package/dist/components/MultiSelectOptionSet/index.js.map +1 -0
- package/dist/components/MultiSelectOptionSet/interfaces.d.ts +13 -0
- package/dist/components/MultiSelectOptionSet/styles.d.ts +31 -0
- package/dist/components/MultiSelectOptionSet/styles.js +42 -0
- package/dist/components/MultiSelectOptionSet/styles.js.map +1 -0
- package/dist/components/NestedControlRenderer/NestedControl.d.ts +86 -0
- package/dist/components/NestedControlRenderer/NestedControl.js +456 -0
- package/dist/components/NestedControlRenderer/NestedControl.js.map +1 -0
- package/dist/components/NestedControlRenderer/NestedControlError.d.ts +4 -0
- package/dist/components/NestedControlRenderer/NestedControlError.js +13 -0
- package/dist/components/NestedControlRenderer/NestedControlError.js.map +1 -0
- package/dist/components/NestedControlRenderer/NestedControlRenderer.d.ts +3 -0
- package/dist/components/NestedControlRenderer/NestedControlRenderer.js +194 -0
- package/dist/components/NestedControlRenderer/NestedControlRenderer.js.map +1 -0
- package/dist/components/NestedControlRenderer/index.d.ts +1 -0
- package/dist/components/NestedControlRenderer/index.js +2 -0
- package/dist/components/NestedControlRenderer/index.js.map +1 -0
- package/dist/components/NestedControlRenderer/interfaces.d.ts +122 -0
- package/dist/components/NestedControlRenderer/manifest/Control.d.ts +16 -0
- package/dist/components/NestedControlRenderer/manifest/Control.js +40 -0
- package/dist/components/NestedControlRenderer/manifest/Control.js.map +1 -0
- package/dist/components/NestedControlRenderer/manifest/Manifest.d.ts +5 -0
- package/dist/components/NestedControlRenderer/manifest/Manifest.js +12 -0
- package/dist/components/NestedControlRenderer/manifest/Manifest.js.map +1 -0
- package/dist/components/NestedControlRenderer/manifest/TypeGroup.d.ts +6 -0
- package/dist/components/NestedControlRenderer/manifest/TypeGroup.js +13 -0
- package/dist/components/NestedControlRenderer/manifest/TypeGroup.js.map +1 -0
- package/dist/components/NestedControlRenderer/manifest/index.d.ts +1 -0
- package/dist/components/NestedControlRenderer/manifest/index.js +2 -0
- package/dist/components/NestedControlRenderer/manifest/index.js.map +1 -0
- package/dist/components/NestedControlRenderer/manifest/property/Property.d.ts +16 -0
- package/dist/components/NestedControlRenderer/manifest/property/Property.js +34 -0
- package/dist/components/NestedControlRenderer/manifest/property/Property.js.map +1 -0
- package/dist/components/NestedControlRenderer/manifest/property/Value.d.ts +8 -0
- package/dist/components/NestedControlRenderer/manifest/property/Value.js +12 -0
- package/dist/components/NestedControlRenderer/manifest/property/Value.js.map +1 -0
- package/dist/components/NestedControlRenderer/properties/DateProperty.d.ts +5 -0
- package/dist/components/NestedControlRenderer/properties/DateProperty.js +20 -0
- package/dist/components/NestedControlRenderer/properties/DateProperty.js.map +1 -0
- package/dist/components/NestedControlRenderer/properties/FileProperty.d.ts +5 -0
- package/dist/components/NestedControlRenderer/properties/FileProperty.js +14 -0
- package/dist/components/NestedControlRenderer/properties/FileProperty.js.map +1 -0
- package/dist/components/NestedControlRenderer/properties/LookupProperty.d.ts +6 -0
- package/dist/components/NestedControlRenderer/properties/LookupProperty.js +35 -0
- package/dist/components/NestedControlRenderer/properties/LookupProperty.js.map +1 -0
- package/dist/components/NestedControlRenderer/properties/NumberProperty.d.ts +5 -0
- package/dist/components/NestedControlRenderer/properties/NumberProperty.js +15 -0
- package/dist/components/NestedControlRenderer/properties/NumberProperty.js.map +1 -0
- package/dist/components/NestedControlRenderer/properties/OptionSetProperty.d.ts +5 -0
- package/dist/components/NestedControlRenderer/properties/OptionSetProperty.js +18 -0
- package/dist/components/NestedControlRenderer/properties/OptionSetProperty.js.map +1 -0
- package/dist/components/NestedControlRenderer/properties/Property.d.ts +17 -0
- package/dist/components/NestedControlRenderer/properties/Property.js +46 -0
- package/dist/components/NestedControlRenderer/properties/Property.js.map +1 -0
- package/dist/components/NestedControlRenderer/properties/TextProperty.d.ts +5 -0
- package/dist/components/NestedControlRenderer/properties/TextProperty.js +15 -0
- package/dist/components/NestedControlRenderer/properties/TextProperty.js.map +1 -0
- package/dist/components/NestedControlRenderer/styles.d.ts +14 -0
- package/dist/components/NestedControlRenderer/styles.js +21 -0
- package/dist/components/NestedControlRenderer/styles.js.map +1 -0
- package/dist/components/NestedControlRenderer/translations.d.ts +14 -0
- package/dist/components/NestedControlRenderer/translations.js +19 -0
- package/dist/components/NestedControlRenderer/translations.js.map +1 -0
- package/dist/components/OptionSet/OptionSet.d.ts +3 -0
- package/dist/components/OptionSet/OptionSet.js +80 -0
- package/dist/components/OptionSet/OptionSet.js.map +1 -0
- package/dist/components/OptionSet/index.d.ts +2 -0
- package/dist/components/OptionSet/index.js +2 -0
- package/dist/components/OptionSet/index.js.map +1 -0
- package/dist/components/OptionSet/interfaces.d.ts +13 -0
- package/dist/components/OptionSet/shared.d.ts +5 -0
- package/dist/components/OptionSet/shared.js +19 -0
- package/dist/components/OptionSet/shared.js.map +1 -0
- package/dist/components/OptionSet/styles.d.ts +11 -0
- package/dist/components/OptionSet/styles.js +18 -0
- package/dist/components/OptionSet/styles.js.map +1 -0
- package/dist/components/OptionSet/useComboBoxTheme.d.ts +3 -0
- package/dist/components/OptionSet/useComboBoxTheme.js +61 -0
- package/dist/components/OptionSet/useComboBoxTheme.js.map +1 -0
- package/dist/components/TextField/TextField.d.ts +3 -0
- package/dist/components/TextField/TextField.js +120 -0
- package/dist/components/TextField/TextField.js.map +1 -0
- package/dist/components/TextField/index.d.ts +2 -0
- package/dist/components/TextField/index.js +2 -0
- package/dist/components/TextField/index.js.map +1 -0
- package/dist/components/TextField/interfaces.d.ts +14 -0
- package/dist/components/TwoOptions/TwoOptions.d.ts +3 -0
- package/dist/components/TwoOptions/TwoOptions.js +55 -0
- package/dist/components/TwoOptions/TwoOptions.js.map +1 -0
- package/dist/components/TwoOptions/index.d.ts +2 -0
- package/dist/components/TwoOptions/index.js +2 -0
- package/dist/components/TwoOptions/index.js.map +1 -0
- package/dist/components/TwoOptions/interfaces.d.ts +13 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.js +17 -0
- package/dist/components/index.js.map +1 -0
- package/dist/constants.d.ts +15 -0
- package/dist/constants.js +35 -0
- package/dist/constants.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useControl.d.ts +17 -0
- package/dist/hooks/useControl.js +67 -0
- package/dist/hooks/useControl.js.map +1 -0
- package/dist/hooks/useControlLabels.d.ts +14 -0
- package/dist/hooks/useControlLabels.js +47 -0
- package/dist/hooks/useControlLabels.js.map +1 -0
- package/dist/hooks/useControlSizing.d.ts +5 -0
- package/dist/hooks/useControlSizing.js +15 -0
- package/dist/hooks/useControlSizing.js.map +1 -0
- package/dist/hooks/useFocusIn.d.ts +1 -0
- package/dist/hooks/useFocusIn.js +33 -0
- package/dist/hooks/useFocusIn.js.map +1 -0
- package/dist/hooks/useInputBasedControl.d.ts +37 -0
- package/dist/hooks/useInputBasedControl.js +36 -0
- package/dist/hooks/useInputBasedControl.js.map +1 -0
- package/dist/hooks/useMouseOver.d.ts +1 -0
- package/dist/hooks/useMouseOver.js +23 -0
- package/dist/hooks/useMouseOver.js.map +1 -0
- package/dist/hooks/usePrevious.d.ts +1 -0
- package/dist/index.d.ts +1504 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/context.d.ts +27 -0
- package/dist/interfaces/index.d.ts +9 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/parameters.d.ts +25 -0
- package/dist/interfaces/property.d.ts +67 -0
- package/dist/utils/BaseControls.d.ts +16 -0
- package/dist/utils/BaseControls.js +82 -0
- package/dist/utils/BaseControls.js.map +1 -0
- package/dist/utils/dataset/adapters/DatasetAdapter.d.ts +59 -0
- package/dist/utils/dataset/adapters/DatasetAdapter.js +229 -0
- package/dist/utils/dataset/adapters/DatasetAdapter.js.map +1 -0
- package/dist/utils/dataset/adapters/VirtualDatasetAdapter.d.ts +48 -0
- package/dist/utils/dataset/adapters/VirtualDatasetAdapter.js +169 -0
- package/dist/utils/dataset/adapters/VirtualDatasetAdapter.js.map +1 -0
- package/dist/utils/dataset/adapters/index.d.ts +2 -0
- package/dist/utils/dataset/adapters/index.js +3 -0
- package/dist/utils/dataset/adapters/index.js.map +1 -0
- package/dist/utils/dataset/index.d.ts +1 -0
- package/dist/utils/dataset/index.js +3 -0
- package/dist/utils/dataset/index.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/theme/ControlTheme.d.ts +21 -0
- package/dist/utils/theme/ControlTheme.js +39 -0
- package/dist/utils/theme/ControlTheme.js.map +1 -0
- package/dist/utils/theme/components/ThemeWrapper.d.ts +9 -0
- package/dist/utils/theme/components/ThemeWrapper.js +11 -0
- package/dist/utils/theme/components/ThemeWrapper.js.map +1 -0
- package/dist/utils/theme/components/index.d.ts +1 -0
- package/dist/utils/theme/components/index.js +2 -0
- package/dist/utils/theme/components/index.js.map +1 -0
- package/dist/utils/theme/hooks/index.d.ts +2 -0
- package/dist/utils/theme/hooks/index.js +3 -0
- package/dist/utils/theme/hooks/index.js.map +1 -0
- package/dist/utils/theme/hooks/useControlTheme.d.ts +3 -0
- package/dist/utils/theme/hooks/useControlTheme.js +12 -0
- package/dist/utils/theme/hooks/useControlTheme.js.map +1 -0
- package/dist/utils/theme/hooks/useControlThemeGenerator.d.ts +14 -0
- package/dist/utils/theme/hooks/useControlThemeGenerator.js +11 -0
- package/dist/utils/theme/hooks/useControlThemeGenerator.js.map +1 -0
- package/dist/utils/theme/index.d.ts +3 -0
- package/dist/utils/theme/index.js +5 -0
- package/dist/utils/theme/index.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useLookup } from './hooks/useLookup.js';
|
|
3
|
+
import { useRef, useMemo, useState, useEffect } from 'react';
|
|
4
|
+
import { ThemeProvider } from '@fluentui/react';
|
|
5
|
+
import { TagPicker } from '@talxis/react-components';
|
|
6
|
+
import { TargetSelector } from './components/TargetSelector.js';
|
|
7
|
+
import { useMouseOver } from '../../hooks/useMouseOver.js';
|
|
8
|
+
import { getLookupStyles, getSuggestionsCalloutStyles } from './styles.js';
|
|
9
|
+
import { RecordCreator } from './components/RecordCreator.js';
|
|
10
|
+
import { useFocusIn } from '../../hooks/useFocusIn.js';
|
|
11
|
+
import { useControlSizing } from '../../hooks/useControlSizing.js';
|
|
12
|
+
import dayjs from 'dayjs';
|
|
13
|
+
|
|
14
|
+
const Lookup = (props) => {
|
|
15
|
+
const context = props.context;
|
|
16
|
+
const ref = useRef(null);
|
|
17
|
+
const componentRef = useRef(null);
|
|
18
|
+
const itemLimit = props.parameters.MultipleEnabled?.raw === true ? Infinity : 1;
|
|
19
|
+
const { height } = useControlSizing(props.context.mode);
|
|
20
|
+
const [value, entities, labels, records, selectEntity, getSearchResults, theme] = useLookup(props);
|
|
21
|
+
const styles = getLookupStyles(theme, itemLimit === 1, height);
|
|
22
|
+
const suggestionsCalloutTheme = props.context.fluentDesignLanguage?.applicationTheme ?? theme;
|
|
23
|
+
const suggestionsCalloutStyles = useMemo(() => getSuggestionsCalloutStyles(suggestionsCalloutTheme), [suggestionsCalloutTheme]);
|
|
24
|
+
const mouseOver = useMouseOver(ref);
|
|
25
|
+
const isFocused = useFocusIn(ref, 100);
|
|
26
|
+
const firstRenderRef = useRef(true);
|
|
27
|
+
const shouldFocusRef = useRef(false);
|
|
28
|
+
const [placeholder, setPlaceholder] = useState('---');
|
|
29
|
+
const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (firstRenderRef.current) {
|
|
32
|
+
firstRenderRef.current = false;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
//@ts-ignore
|
|
36
|
+
if (componentRef.current.state.suggestionsVisible) {
|
|
37
|
+
//if the suggestions callout is open and the selected target changes, refresh the results
|
|
38
|
+
forceSearch();
|
|
39
|
+
}
|
|
40
|
+
}, [entities]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
const onKeyPress = (ev) => {
|
|
43
|
+
if (context.mode.isControlDisabled) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (ev.key === 'Backspace') {
|
|
47
|
+
const picker = ref.current?.querySelector('[class*="TALXIS__tag-picker__root"]');
|
|
48
|
+
if ((document.activeElement === picker) && value.length === 1) {
|
|
49
|
+
records.select(undefined);
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
componentRef.current?.focusInput();
|
|
52
|
+
}, 200);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
document.addEventListener('keydown', onKeyPress);
|
|
57
|
+
return () => {
|
|
58
|
+
document.removeEventListener('keydown', onKeyPress);
|
|
59
|
+
};
|
|
60
|
+
}, [value]);
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (props.parameters.AutoFocus?.raw === true) {
|
|
63
|
+
focus();
|
|
64
|
+
}
|
|
65
|
+
}, []);
|
|
66
|
+
const focus = () => {
|
|
67
|
+
if (componentRef.current?.items?.length === itemLimit) {
|
|
68
|
+
const el = ref.current?.querySelector(':scope>div');
|
|
69
|
+
el?.click();
|
|
70
|
+
el?.focus();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
componentRef.current?.focusInput();
|
|
74
|
+
};
|
|
75
|
+
const forceSearch = async () => {
|
|
76
|
+
//@ts-ignore - We need to use internal methods to show and fill the suggestions on entity change
|
|
77
|
+
componentRef.current.suggestionStore.updateSuggestions([]);
|
|
78
|
+
//@ts-ignore - ^^same as above
|
|
79
|
+
componentRef.current.setState({
|
|
80
|
+
suggestionsVisible: true,
|
|
81
|
+
suggestionsLoading: true,
|
|
82
|
+
});
|
|
83
|
+
//@ts-ignore - ^^same as above
|
|
84
|
+
const results = await onResolveSuggestions(componentRef.current.input.current.value);
|
|
85
|
+
//@ts-ignore - ^^same as above
|
|
86
|
+
componentRef.current.updateSuggestionsList(results);
|
|
87
|
+
//@ts-ignore - ^^same above
|
|
88
|
+
componentRef.current.setState({
|
|
89
|
+
isMostRecentlyUsedVisible: false,
|
|
90
|
+
suggestionsVisible: true,
|
|
91
|
+
moreSuggestionsAvailable: false,
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
const isComponentActive = () => {
|
|
95
|
+
return mouseOver || isFocused;
|
|
96
|
+
};
|
|
97
|
+
const getSecondaryName = (result, metadata) => {
|
|
98
|
+
//polymorphic, selected all
|
|
99
|
+
if (!entities.find(x => x.selected)) {
|
|
100
|
+
return metadata?.DisplayName;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
let text = result.entityData[result.layout?.Rows?.[0]?.Cells?.[1]?.Name];
|
|
104
|
+
const dateRegex = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/;
|
|
105
|
+
if (typeof text === 'string' && text.match(dateRegex)) {
|
|
106
|
+
text = props.context.formatting.formatTime(dayjs(text).toDate(), 1);
|
|
107
|
+
}
|
|
108
|
+
return text;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const onResolveSuggestions = async (filter, selectedItems) => {
|
|
112
|
+
//TODO: onResolveSuggestions gets called when the record gets selected resulting in unnecessary call
|
|
113
|
+
const results = await getSearchResults(filter);
|
|
114
|
+
const suggestions = [];
|
|
115
|
+
for (const result of results) {
|
|
116
|
+
if (selectedItems?.find(x => x.key === result.id)) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const metadata = await entities.find(x => x.entityName === result.entityType)?.metadata;
|
|
120
|
+
suggestions.push({
|
|
121
|
+
key: result.id,
|
|
122
|
+
text: result.name,
|
|
123
|
+
secondaryText: getSecondaryName(result, metadata),
|
|
124
|
+
'data-entity': result.entityType
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return suggestions;
|
|
128
|
+
};
|
|
129
|
+
const componentProps = onOverrideComponentProps({
|
|
130
|
+
ref: componentRef,
|
|
131
|
+
readOnly: context.mode.isControlDisabled,
|
|
132
|
+
resolveDelay: 200,
|
|
133
|
+
stackItems: itemLimit === 1,
|
|
134
|
+
errorMessage: props.parameters.value.errorMessage,
|
|
135
|
+
hideErrorMessage: !props.parameters.ShowErrorMessage?.raw,
|
|
136
|
+
pickerCalloutProps: {
|
|
137
|
+
layerProps: {
|
|
138
|
+
eventBubblingEnabled: true
|
|
139
|
+
},
|
|
140
|
+
className: suggestionsCalloutStyles.suggestionsCallout,
|
|
141
|
+
theme: suggestionsCalloutTheme,
|
|
142
|
+
},
|
|
143
|
+
inputProps: {
|
|
144
|
+
placeholder: placeholder,
|
|
145
|
+
onMouseEnter: () => {
|
|
146
|
+
if (context.mode.isControlDisabled) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
setPlaceholder(`${labels.placeholder()} ${props.parameters.value.attributes.DisplayName}`);
|
|
150
|
+
},
|
|
151
|
+
onMouseLeave: () => {
|
|
152
|
+
setPlaceholder("---");
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
pickerSuggestionsProps: {
|
|
156
|
+
loadingText: labels.searching(),
|
|
157
|
+
theme: suggestionsCalloutTheme,
|
|
158
|
+
noResultsFoundText: labels.noRecordsFound(),
|
|
159
|
+
className: suggestionsCalloutStyles.suggestionsContainer,
|
|
160
|
+
// @ts-ignore
|
|
161
|
+
suggestionsHeaderText: (jsxs(Fragment, { children: [props.parameters.IsInlineNewEnabled?.raw !== false && (jsx(RecordCreator, { labels: labels, entities: entities, onCreateRecord: records.create })), props.parameters.value.attributes.Targets.length > 1 && (jsx(TargetSelector, { labels: labels, entities: entities, onEntitySelected: (entityName) => {
|
|
162
|
+
selectEntity(entityName);
|
|
163
|
+
} }))] }))
|
|
164
|
+
},
|
|
165
|
+
transparent: itemLimit === 1,
|
|
166
|
+
onChange: (items) => {
|
|
167
|
+
records.select(items?.map((item) => {
|
|
168
|
+
return {
|
|
169
|
+
entityType: item['data-entity'],
|
|
170
|
+
id: item.key,
|
|
171
|
+
name: item.text
|
|
172
|
+
};
|
|
173
|
+
}));
|
|
174
|
+
},
|
|
175
|
+
searchBtnProps: {
|
|
176
|
+
key: 'search',
|
|
177
|
+
iconProps: {
|
|
178
|
+
iconName: 'Search'
|
|
179
|
+
},
|
|
180
|
+
showOnlyOnHover: true
|
|
181
|
+
},
|
|
182
|
+
selectedItems: value.map((lookup) => {
|
|
183
|
+
return {
|
|
184
|
+
key: lookup.id,
|
|
185
|
+
text: lookup.name || labels.noName(),
|
|
186
|
+
'data-entity': lookup.entityType,
|
|
187
|
+
'data-navigation-enabled': props.parameters.EnableNavigation?.raw !== false,
|
|
188
|
+
onClick: () => {
|
|
189
|
+
if (props.parameters.EnableNavigation?.raw === false) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
context.navigation.openForm({
|
|
193
|
+
entityName: lookup.entityType,
|
|
194
|
+
entityId: lookup.id
|
|
195
|
+
});
|
|
196
|
+
},
|
|
197
|
+
deleteButtonProps: isComponentActive() || itemLimit > 1
|
|
198
|
+
? {
|
|
199
|
+
key: 'delete',
|
|
200
|
+
iconProps: {
|
|
201
|
+
iconName: 'Cancel',
|
|
202
|
+
},
|
|
203
|
+
onClick: () => {
|
|
204
|
+
shouldFocusRef.current = false;
|
|
205
|
+
records.deselect(lookup);
|
|
206
|
+
setTimeout(() => {
|
|
207
|
+
focus();
|
|
208
|
+
}, 200);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
: undefined
|
|
212
|
+
};
|
|
213
|
+
}),
|
|
214
|
+
itemLimit: itemLimit,
|
|
215
|
+
onEmptyResolveSuggestions: !context.mode.isControlDisabled ? (selectedItems) => onResolveSuggestions("", selectedItems) : undefined,
|
|
216
|
+
onResolveSuggestions: onResolveSuggestions,
|
|
217
|
+
});
|
|
218
|
+
return (jsx(ThemeProvider, { applyTo: "none", theme: theme, className: `talxis__lookupControl ${styles.root}`, ref: ref, children: jsx(TagPicker, { ...componentProps }) }));
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
export { Lookup };
|
|
222
|
+
//# sourceMappingURL=Lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lookup.js","sources":["../../../src/components/Lookup/Lookup.tsx"],"sourcesContent":["\nimport { ILayout, ILookup, IMetadata } from \"./interfaces\";\nimport { useLookup } from \"./hooks/useLookup\";\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { ThemeProvider } from \"@fluentui/react\";\nimport { IItemProps, TagPicker } from \"@talxis/react-components\";\nimport { TargetSelector } from \"./components/TargetSelector\";\nimport { useMouseOver } from \"../../hooks/useMouseOver\";\nimport { getLookupStyles, getSuggestionsCalloutStyles } from \"./styles\";\nimport { IBasePicker } from \"@fluentui/react/lib/components/pickers/BasePicker.types\";\nimport { ITag } from \"@fluentui/react/lib/components/pickers/TagPicker/TagPicker.types\";\nimport { RecordCreator } from \"./components/RecordCreator\";\nimport { useFocusIn } from \"../../hooks/useFocusIn\";\nimport { useControlSizing } from \"../../hooks/useControlSizing\";\nimport dayjs from \"dayjs\";\n\nexport const Lookup = (props: ILookup) => {\n const context = props.context;\n const ref = useRef<HTMLDivElement>(null);\n const componentRef = useRef<IBasePicker<ITag>>(null);\n const itemLimit = props.parameters.MultipleEnabled?.raw === true ? Infinity : 1\n const { height } = useControlSizing(props.context.mode);\n const [value, entities, labels, records, selectEntity, getSearchResults, theme] = useLookup(props);\n const styles = getLookupStyles(theme, itemLimit === 1, height);\n const suggestionsCalloutTheme = props.context.fluentDesignLanguage?.applicationTheme ?? theme;\n const suggestionsCalloutStyles = useMemo(() => getSuggestionsCalloutStyles(suggestionsCalloutTheme), [suggestionsCalloutTheme])\n const mouseOver = useMouseOver(ref);\n const isFocused = useFocusIn(ref, 100);\n const firstRenderRef = useRef(true);\n const shouldFocusRef = useRef(false);\n const [placeholder, setPlaceholder] = useState('---');\n const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);\n\n\n useEffect(() => {\n if (firstRenderRef.current) {\n firstRenderRef.current = false;\n return;\n }\n //@ts-ignore\n if (componentRef.current.state.suggestionsVisible) {\n //if the suggestions callout is open and the selected target changes, refresh the results\n forceSearch();\n }\n }, [entities])\n\n useEffect(() => {\n const onKeyPress = (ev: KeyboardEvent) => {\n if (context.mode.isControlDisabled) {\n return;\n }\n if (ev.key === 'Backspace') {\n const picker = ref.current?.querySelector('[class*=\"TALXIS__tag-picker__root\"]');\n if ((document.activeElement === picker) && value.length === 1) {\n records.select(undefined);\n setTimeout(() => {\n componentRef.current?.focusInput()\n }, 200)\n }\n }\n }\n document.addEventListener('keydown', onKeyPress)\n return () => {\n document.removeEventListener('keydown', onKeyPress);\n }\n }, [value]);\n\n useEffect(() => {\n if (props.parameters.AutoFocus?.raw === true) {\n focus();\n }\n }, []);\n\n const focus = () => {\n if (componentRef.current?.items?.length === itemLimit) {\n const el = ref.current?.querySelector(':scope>div') as HTMLDivElement;\n el?.click();\n el?.focus();\n return;\n }\n componentRef.current?.focusInput();\n }\n\n const forceSearch = async () => {\n //@ts-ignore - We need to use internal methods to show and fill the suggestions on entity change\n componentRef.current.suggestionStore.updateSuggestions([]);\n //@ts-ignore - ^^same as above\n componentRef.current.setState({\n suggestionsVisible: true,\n suggestionsLoading: true,\n });\n //@ts-ignore - ^^same as above\n const results = await onResolveSuggestions(componentRef.current.input.current.value)\n //@ts-ignore - ^^same as above\n componentRef.current.updateSuggestionsList(results);\n //@ts-ignore - ^^same above\n componentRef.current.setState({\n isMostRecentlyUsedVisible: false,\n suggestionsVisible: true,\n moreSuggestionsAvailable: false,\n });\n }\n\n const isComponentActive = () => {\n return mouseOver || isFocused;\n }\n\n const getSecondaryName = (result: ComponentFramework.LookupValue & {\n entityData: {\n [key: string]: any;\n };\n layout: ILayout;\n }, metadata?: IMetadata) => {\n //polymorphic, selected all\n if (!entities.find(x => x.selected)) {\n return metadata?.DisplayName;\n }\n else {\n let text: string | undefined = result.entityData[result.layout?.Rows?.[0]?.Cells?.[1]?.Name];\n const dateRegex = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z/;\n if (typeof text === 'string' && text.match(dateRegex)) {\n text = props.context.formatting.formatTime(dayjs(text).toDate(), 1);\n }\n return text;\n }\n }\n\n const onResolveSuggestions = async (filter: string, selectedItems?: IItemProps[] | undefined): Promise<IItemProps[]> => {\n //TODO: onResolveSuggestions gets called when the record gets selected resulting in unnecessary call\n const results = await getSearchResults(filter);\n const suggestions: IItemProps[] = [];\n for (const result of results) {\n if (selectedItems?.find(x => x.key === result.id)) {\n continue;\n }\n const metadata = await entities.find(x => x.entityName === result.entityType)?.metadata;\n suggestions.push({\n key: result.id,\n text: result.name,\n secondaryText: getSecondaryName(result, metadata),\n 'data-entity': result.entityType\n })\n }\n return suggestions;\n }\n\n const componentProps = onOverrideComponentProps({\n ref: componentRef,\n readOnly: context.mode.isControlDisabled,\n resolveDelay: 200,\n stackItems: itemLimit === 1,\n errorMessage: props.parameters.value.errorMessage,\n hideErrorMessage: !props.parameters.ShowErrorMessage?.raw,\n pickerCalloutProps: {\n layerProps: {\n eventBubblingEnabled: true\n },\n className: suggestionsCalloutStyles.suggestionsCallout,\n theme: suggestionsCalloutTheme,\n },\n inputProps: {\n placeholder: placeholder,\n onMouseEnter: () => {\n if (context.mode.isControlDisabled) {\n return;\n }\n setPlaceholder(`${labels.placeholder()} ${props.parameters.value.attributes.DisplayName}`);\n },\n onMouseLeave: () => {\n setPlaceholder(\"---\");\n }\n\n },\n pickerSuggestionsProps: {\n loadingText: labels.searching(),\n theme: suggestionsCalloutTheme,\n noResultsFoundText: labels.noRecordsFound(),\n className: suggestionsCalloutStyles.suggestionsContainer,\n // @ts-ignore\n suggestionsHeaderText: (\n <>\n {props.parameters.IsInlineNewEnabled?.raw !== false && (\n <RecordCreator labels={labels} entities={entities} onCreateRecord={records.create} />\n )}\n {props.parameters.value.attributes.Targets.length > 1 && (\n <TargetSelector\n labels={labels}\n entities={entities}\n onEntitySelected={(entityName) => {\n selectEntity(entityName);\n }}\n />\n )}\n </>\n )\n },\n transparent: itemLimit === 1,\n onChange: (items) => {\n records.select(\n items?.map((item) => {\n return {\n entityType: item['data-entity'],\n id: item.key,\n name: item.text\n };\n })\n );\n },\n searchBtnProps: {\n key: 'search',\n iconProps: {\n iconName: 'Search'\n },\n showOnlyOnHover: true\n },\n selectedItems: value.map((lookup) => {\n return {\n key: lookup.id,\n text: lookup.name || labels.noName(),\n 'data-entity': lookup.entityType,\n 'data-navigation-enabled': props.parameters.EnableNavigation?.raw !== false,\n onClick: () => {\n if (props.parameters.EnableNavigation?.raw === false) {\n return;\n }\n context.navigation.openForm({\n entityName: lookup.entityType,\n entityId: lookup.id\n });\n },\n deleteButtonProps:\n isComponentActive() || itemLimit > 1\n ? {\n key: 'delete',\n iconProps: {\n iconName: 'Cancel',\n },\n onClick: () => {\n shouldFocusRef.current = false;\n records.deselect(lookup);\n setTimeout(() => {\n focus();\n }, 200);\n }\n }\n : undefined\n };\n }),\n itemLimit: itemLimit,\n onEmptyResolveSuggestions: !context.mode.isControlDisabled ? (selectedItems) => onResolveSuggestions(\"\", selectedItems as IItemProps[]) as any : undefined,\n onResolveSuggestions: onResolveSuggestions,\n });\n\n return (\n <ThemeProvider applyTo=\"none\" theme={theme} className={`talxis__lookupControl ${styles.root}`} ref={ref}>\n <TagPicker {...componentProps} />\n </ThemeProvider>\n );\n};"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { IEntity, ILookupTranslations } from "../interfaces";
|
|
3
|
+
import { StringProps } from '../../../types';
|
|
4
|
+
interface IRecordCreator {
|
|
5
|
+
labels: Required<StringProps<ILookupTranslations>>;
|
|
6
|
+
entities: IEntity[];
|
|
7
|
+
onCreateRecord: (entityName: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const RecordCreator: (props: IRecordCreator) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useTheme, CommandBarButton, ContextualMenuItemType } from '@fluentui/react';
|
|
3
|
+
import { getLookupStyles } from '../styles.js';
|
|
4
|
+
import { useLoadedEntities } from '../hooks/useLoadedEntities.js';
|
|
5
|
+
|
|
6
|
+
const RecordCreator = (props) => {
|
|
7
|
+
const { labels, entities, onCreateRecord } = { ...props };
|
|
8
|
+
const [loadedEntities] = useLoadedEntities(entities);
|
|
9
|
+
const theme = useTheme();
|
|
10
|
+
const styles = getLookupStyles(theme, 0);
|
|
11
|
+
const selectedEntity = entities.find(x => x.selected);
|
|
12
|
+
return (jsx(CommandBarButton, { className: styles.createRecordBtn, iconProps: {
|
|
13
|
+
iconName: 'Add'
|
|
14
|
+
}, onClick: selectedEntity ? () => onCreateRecord(selectedEntity.entityName) : undefined, menuProps: !selectedEntity ? {
|
|
15
|
+
calloutProps: {
|
|
16
|
+
coverTarget: false
|
|
17
|
+
},
|
|
18
|
+
isBeakVisible: true,
|
|
19
|
+
items: loadedEntities ? (() => {
|
|
20
|
+
const items = [{
|
|
21
|
+
key: 'header',
|
|
22
|
+
itemType: ContextualMenuItemType.Header,
|
|
23
|
+
text: 'Vyberte tabulku'
|
|
24
|
+
}];
|
|
25
|
+
return [...items, ...loadedEntities.map(entity => {
|
|
26
|
+
return {
|
|
27
|
+
key: entity.entityName,
|
|
28
|
+
text: entity.metadata.DisplayName,
|
|
29
|
+
onClick: () => onCreateRecord(entity.entityName)
|
|
30
|
+
};
|
|
31
|
+
})];
|
|
32
|
+
})() : []
|
|
33
|
+
} : undefined, text: labels.newRecord() }));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { RecordCreator };
|
|
37
|
+
//# sourceMappingURL=RecordCreator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecordCreator.js","sources":["../../../../src/components/Lookup/components/RecordCreator.tsx"],"sourcesContent":["\n//@ts-nocheck - typescript\nimport { ContextualMenuItemType, IContextualMenuItem, useTheme } from \"@fluentui/react\";\nimport { CommandBarButton } from \"@fluentui/react\";\nimport { IEntity, ILookupTranslations } from \"../interfaces\";\nimport { getLookupStyles } from \"../styles\";\nimport { StringProps } from '../../../types';\nimport { useLoadedEntities } from \"../hooks/useLoadedEntities\";\nimport React from 'react';\n\ninterface IRecordCreator {\n labels: Required<StringProps<ILookupTranslations>>,\n entities: IEntity[];\n onCreateRecord: (entityName: string) => void;\n}\n\nexport const RecordCreator = (props: IRecordCreator) => {\n const {labels, entities, onCreateRecord} = {...props};\n const [loadedEntities] = useLoadedEntities(entities);\n const theme = useTheme();\n const styles = getLookupStyles(theme, 0)\n const selectedEntity = entities.find(x => x.selected);\n\n return (\n <CommandBarButton\n className={styles.createRecordBtn}\n iconProps={{\n iconName: 'Add'\n }}\n onClick={selectedEntity ? () => onCreateRecord(selectedEntity.entityName) : undefined}\n menuProps={!selectedEntity ? {\n calloutProps: {\n coverTarget: false \n },\n isBeakVisible: true,\n items: loadedEntities ? (() => {\n const items: IContextualMenuItem[] = [{\n key: 'header',\n itemType: ContextualMenuItemType.Header,\n text: 'Vyberte tabulku'\n }]\n return [...items, ...loadedEntities.map(entity => {\n return {\n key: entity.entityName,\n text: entity.metadata.DisplayName,\n onClick: () => onCreateRecord(entity.entityName)\n }\n })];\n })() : []\n }: undefined} \n text={labels.newRecord()} />\n )\n}"],"names":["_jsx"],"mappings":";;;;;AAgBa,MAAA,aAAa,GAAG,CAAC,KAAqB,KAAI;AACnD,IAAA,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAC,GAAG,EAAC,GAAG,KAAK,EAAC,CAAC;IACtD,MAAM,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrD,IAAA,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AACxC,IAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEtD,QACIA,GAAC,CAAA,gBAAgB,EACb,EAAA,SAAS,EAAE,MAAM,CAAC,eAAe,EACjC,SAAS,EAAE;AACP,YAAA,QAAQ,EAAE,KAAK;SAClB,EACD,OAAO,EAAE,cAAc,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,SAAS,EACrF,SAAS,EAAE,CAAC,cAAc,GAAG;AACzB,YAAA,YAAY,EAAE;AACV,gBAAA,WAAW,EAAE,KAAK;AACrB,aAAA;AACD,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,KAAK,EAAE,cAAc,GAAG,CAAC,MAAK;gBAC1B,MAAM,KAAK,GAA0B,CAAC;AAClC,wBAAA,GAAG,EAAE,QAAQ;wBACb,QAAQ,EAAE,sBAAsB,CAAC,MAAM;AACvC,wBAAA,IAAI,EAAE,iBAAiB;AACvB,qBAAA,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,IAAG;wBAC7C,OAAO;4BACH,GAAG,EAAE,MAAM,CAAC,UAAU;AACtB,4BAAA,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;4BACjC,OAAO,EAAE,MAAM,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC;yBACnD,CAAA;qBACJ,CAAC,CAAC,CAAC;AACX,aAAC,GAAG,GAAG,EAAE;AACZ,SAAA,GAAE,SAAS,EACZ,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,EAAI,CAAA,EACnC;AACL;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { IEntity } from '../interfaces';
|
|
3
|
+
interface ITargetSelector {
|
|
4
|
+
labels: any;
|
|
5
|
+
entities: IEntity[];
|
|
6
|
+
onEntitySelected: (entityName: string | null) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const TargetSelector: (props: ITargetSelector) => JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { Text } from '@fluentui/react/lib/Text';
|
|
3
|
+
import { useTheme, Link } from '@fluentui/react';
|
|
4
|
+
import { getTargetSelectorStyles } from '../styles.js';
|
|
5
|
+
import { useLoadedEntities } from '../hooks/useLoadedEntities.js';
|
|
6
|
+
|
|
7
|
+
const TargetSelector = (props) => {
|
|
8
|
+
const { labels, entities, onEntitySelected } = { ...props };
|
|
9
|
+
const [loadedEntities] = useLoadedEntities(entities);
|
|
10
|
+
const theme = useTheme();
|
|
11
|
+
const styles = getTargetSelectorStyles(theme);
|
|
12
|
+
return (jsxs("div", { className: styles.targetSelector, children: [jsxs(Text, { variant: 'small', children: [labels.resultsFrom(), " "] }), jsxs("div", { className: styles.targetSelectorLinks, children: [jsx(Link, { onClick: () => onEntitySelected(null), className: styles.targetSelectorLink, "data-selected": !entities.find(x => x.selected), children: "All" }), loadedEntities &&
|
|
13
|
+
jsx(Fragment, { children: loadedEntities.map((entity) => {
|
|
14
|
+
return jsx(Link, { className: styles.targetSelectorLink, "data-selected": entity.selected, onClick: () => onEntitySelected(entity.entityName), children: entity.metadata.DisplayName });
|
|
15
|
+
}) })] })] }));
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { TargetSelector };
|
|
19
|
+
//# sourceMappingURL=TargetSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TargetSelector.js","sources":["../../../../src/components/Lookup/components/TargetSelector.tsx"],"sourcesContent":["import React from 'react';\nimport { IEntity } from '../interfaces';\nimport { Text } from '@fluentui/react/lib/Text';\nimport { Link, useTheme } from '@fluentui/react';\nimport { getTargetSelectorStyles } from '../styles';\nimport { useLoadedEntities } from '../hooks/useLoadedEntities';\n\ninterface ITargetSelector {\n labels: any;\n entities: IEntity[];\n onEntitySelected: (entityName: string | null) => void;\n}\n\n\nexport const TargetSelector = (props: ITargetSelector) => {\n const { labels, entities, onEntitySelected } = { ...props };\n const [loadedEntities] = useLoadedEntities(entities);\n const theme = useTheme();\n const styles = getTargetSelectorStyles(theme);\n\n return (\n <div className={styles.targetSelector}>\n <Text variant='small'>{labels.resultsFrom()} </Text>\n <div className={styles.targetSelectorLinks}>\n <Link\n onClick={() => onEntitySelected(null)}\n className={styles.targetSelectorLink}\n data-selected={!entities.find(x => x.selected)}>All</Link>\n {loadedEntities &&\n <>\n {loadedEntities.map((entity) => {\n return <Link\n className={styles.targetSelectorLink}\n data-selected={entity.selected}\n onClick={() => onEntitySelected(entity.entityName)}>{entity.metadata.DisplayName}</Link>\n })}\n </>\n }\n </div>\n </div>\n )\n}"],"names":["_jsxs","_jsx","_Fragment"],"mappings":";;;;;;AAca,MAAA,cAAc,GAAG,CAAC,KAAsB,KAAI;AACrD,IAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC5D,MAAM,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrD,IAAA,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;AACzB,IAAA,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAE9C,IAAA,QACIA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,cAAc,EAAA,QAAA,EAAA,CACjCA,IAAC,CAAA,IAAI,EAAC,EAAA,OAAO,EAAC,OAAO,EAAE,QAAA,EAAA,CAAA,MAAM,CAAC,WAAW,EAAE,EAAA,GAAA,CAAA,EAAA,CAAS,EACpDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAA,QAAA,EAAA,CACtCC,IAAC,IAAI,EAAA,EACD,OAAO,EAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC,EACrC,SAAS,EAAE,MAAM,CAAC,kBAAkB,EAAA,eAAA,EACrB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAA,QAAA,EAAA,KAAA,EAAA,CAAY,EAC7D,cAAc;AACX,wBAAAA,GAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EACK,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAC3B,gCAAA,OAAOD,GAAC,CAAA,IAAI,EACR,EAAA,SAAS,EAAE,MAAM,CAAC,kBAAkB,EACrB,eAAA,EAAA,MAAM,CAAC,QAAQ,EAC9B,OAAO,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAG,QAAA,EAAA,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAQ,CAAA;AAChG,6BAAC,CAAC,EAAA,CACH,CAEL,EAAA,CAAA,CAAA,EAAA,CACJ,EACT;AACL;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="@types/powerapps-component-framework" />
|
|
2
|
+
import { IEntity } from "../interfaces";
|
|
3
|
+
export declare const useFetchXml: (context: ComponentFramework.Context<any>) => [(viewId: string) => Promise<{
|
|
4
|
+
fetchxml: string;
|
|
5
|
+
layoutjson: string;
|
|
6
|
+
}>, (entity: IEntity, fetchXml: string, query: string) => Promise<string>];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { FetchXmlBuilder } from '@talxis/client-libraries';
|
|
3
|
+
|
|
4
|
+
const useFetchXml = (context) => {
|
|
5
|
+
const cachedFetchXml = useRef({});
|
|
6
|
+
const get = async (viewId) => {
|
|
7
|
+
if (!cachedFetchXml.current[viewId]) {
|
|
8
|
+
cachedFetchXml.current[viewId] = context.webAPI.retrieveRecord('savedquery', viewId, '?$select=fetchxml,layoutjson');
|
|
9
|
+
}
|
|
10
|
+
return cachedFetchXml.current[viewId];
|
|
11
|
+
};
|
|
12
|
+
const applyLookupQuery = async (entity, fetchXml, query) => {
|
|
13
|
+
const parser = new DOMParser();
|
|
14
|
+
const parsedFetchXml = parser.parseFromString(fetchXml, "application/xml");
|
|
15
|
+
const conditions = parsedFetchXml.getElementsByTagName("condition");
|
|
16
|
+
const placeholderConditions = [];
|
|
17
|
+
for (const cond of conditions) {
|
|
18
|
+
if (cond.getAttribute('value') === "{0}") {
|
|
19
|
+
if (query) {
|
|
20
|
+
cond.setAttribute('value', `%${query}%`);
|
|
21
|
+
}
|
|
22
|
+
placeholderConditions.push(cond);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (!query) {
|
|
26
|
+
for (const cond of placeholderConditions) {
|
|
27
|
+
const parentFilter = cond.parentElement;
|
|
28
|
+
parentFilter?.removeChild(cond);
|
|
29
|
+
if (parentFilter?.children.length === 0) {
|
|
30
|
+
const grandParent = parentFilter.parentElement;
|
|
31
|
+
grandParent?.removeChild(parentFilter);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return new XMLSerializer().serializeToString(parsedFetchXml);
|
|
35
|
+
}
|
|
36
|
+
if (placeholderConditions.length > 0) {
|
|
37
|
+
return new XMLSerializer().serializeToString(parsedFetchXml);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const metadata = await entity.metadata;
|
|
41
|
+
const xmlObject = FetchXmlBuilder.fetch.fromXml(fetchXml);
|
|
42
|
+
xmlObject.entity.addFilter(new FetchXmlBuilder.filter(FetchXmlBuilder.FilterType.Or, [
|
|
43
|
+
new FetchXmlBuilder.condition(metadata.PrimaryNameAttribute, FetchXmlBuilder.Operator.Like, [new FetchXmlBuilder.value(`%${query}%`)])
|
|
44
|
+
]));
|
|
45
|
+
return xmlObject.toXml();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return [get, applyLookupQuery];
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export { useFetchXml };
|
|
52
|
+
//# sourceMappingURL=useFetchXml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFetchXml.js","sources":["../../../../src/components/Lookup/hooks/useFetchXml.ts"],"sourcesContent":["import { useRef } from \"react\"\nimport { IEntity } from \"../interfaces\";\nimport { FetchXmlBuilder } from \"@talxis/client-libraries\";\n\nexport const useFetchXml = (context: ComponentFramework.Context<any>): [\n (viewId: string) => Promise<{ fetchxml: string, layoutjson: string }>,\n (entity: IEntity, fetchXml: string, query: string) => Promise<string>\n] => {\n const cachedFetchXml = useRef<{\n [viewId: string]: Promise<any>\n }>({});\n\n const get = async (viewId: string): Promise<{ fetchxml: string, layoutjson: string }> => {\n if (!cachedFetchXml.current[viewId]) {\n cachedFetchXml.current[viewId] = context.webAPI.retrieveRecord('savedquery', viewId, '?$select=fetchxml,layoutjson');\n }\n\n return cachedFetchXml.current[viewId];\n }\n const applyLookupQuery = async (entity: IEntity, fetchXml: string, query: string): Promise<string> => {\n const parser = new DOMParser();\n const parsedFetchXml = parser.parseFromString(fetchXml, \"application/xml\");\n const conditions = parsedFetchXml.getElementsByTagName(\"condition\");\n const placeholderConditions: Element[] = [];\n for (const cond of conditions) {\n if (cond.getAttribute('value') === \"{0}\") {\n if(query) {\n cond.setAttribute('value', `%${query}%`);\n }\n placeholderConditions.push(cond);\n }\n }\n if (!query) {\n for (const cond of placeholderConditions) {\n const parentFilter = cond.parentElement;\n parentFilter?.removeChild(cond);\n if(parentFilter?.children.length === 0) {\n const grandParent = parentFilter.parentElement;\n grandParent?.removeChild(parentFilter);\n }\n }\n return new XMLSerializer().serializeToString(parsedFetchXml);\n }\n if (placeholderConditions.length > 0) {\n return new XMLSerializer().serializeToString(parsedFetchXml);\n }\n else {\n const metadata = await entity.metadata;\n const xmlObject = FetchXmlBuilder.fetch.fromXml(fetchXml);\n xmlObject.entity.addFilter(new FetchXmlBuilder.filter(FetchXmlBuilder.FilterType.Or, [\n new FetchXmlBuilder.condition(metadata.PrimaryNameAttribute, FetchXmlBuilder.Operator.Like, [new FetchXmlBuilder.value(`%${query}%`)])\n ]))\n return xmlObject.toXml();\n }\n }\n return [get, applyLookupQuery]\n}"],"names":[],"mappings":";;;AAIa,MAAA,WAAW,GAAG,CAAC,OAAwC,KAGhE;AACA,IAAA,MAAM,cAAc,GAAG,MAAM,CAE1B,EAAE,CAAC,CAAC;AAEP,IAAA,MAAM,GAAG,GAAG,OAAO,MAAc,KAAuD;AACpF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACjC,YAAA,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC;AACxH,SAAA;AAED,QAAA,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1C,KAAC,CAAA;IACD,MAAM,gBAAgB,GAAG,OAAO,MAAe,EAAE,QAAgB,EAAE,KAAa,KAAqB;AACjG,QAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACpE,MAAM,qBAAqB,GAAc,EAAE,CAAC;AAC5C,QAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE;AACtC,gBAAA,IAAG,KAAK,EAAE;oBACN,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAI,CAAA,EAAA,KAAK,CAAG,CAAA,CAAA,CAAC,CAAC;AAC5C,iBAAA;AACD,gBAAA,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,aAAA;AACJ,SAAA;QACD,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE;AACtC,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;AACxC,gBAAA,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AAChC,gBAAA,IAAG,YAAY,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,oBAAA,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC;AAC/C,oBAAA,WAAW,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1C,iBAAA;AACJ,aAAA;YACD,OAAO,IAAI,aAAa,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AAChE,SAAA;AACD,QAAA,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,OAAO,IAAI,aAAa,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AAChE,SAAA;AACI,aAAA;AACD,YAAA,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACvC,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1D,YAAA,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,EAAE;gBACjF,IAAI,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC;AACzI,aAAA,CAAC,CAAC,CAAA;AACH,YAAA,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5B,SAAA;AACL,KAAC,CAAA;AACD,IAAA,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;AAClC;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const useLoadedEntities = (entities) => {
|
|
4
|
+
const [loadedEntities, setLoadedEntities] = useState(null);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
(async () => {
|
|
7
|
+
setLoadedEntities(await Promise.all(entities.map(async (entity) => {
|
|
8
|
+
return {
|
|
9
|
+
entityName: entity.entityName,
|
|
10
|
+
selected: entity.selected,
|
|
11
|
+
metadata: await entity.metadata
|
|
12
|
+
};
|
|
13
|
+
})));
|
|
14
|
+
})();
|
|
15
|
+
}, [entities]);
|
|
16
|
+
return [loadedEntities];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { useLoadedEntities };
|
|
20
|
+
//# sourceMappingURL=useLoadedEntities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoadedEntities.js","sources":["../../../../src/components/Lookup/hooks/useLoadedEntities.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { IEntity, IMetadata } from \"../interfaces\";\n\ninterface ILoadedEntity extends Omit<IEntity, 'metadata'> {\n metadata: IMetadata\n}\n\nexport const useLoadedEntities = (entities: IEntity[]): [ILoadedEntity[] | null] => {\n const [loadedEntities, setLoadedEntities] = useState<ILoadedEntity[] | null>(null);\n useEffect(() => {\n (async () => {\n setLoadedEntities(await Promise.all(entities.map(async entity => {\n return {\n entityName: entity.entityName,\n selected: entity.selected,\n metadata: await entity.metadata\n }\n })))\n })();\n }, [entities]);\n\n return [loadedEntities]\n}"],"names":[],"mappings":";;AAOa,MAAA,iBAAiB,GAAG,CAAC,QAAmB,KAA8B;IAC/E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAyB,IAAI,CAAC,CAAC;IACnF,SAAS,CAAC,MAAK;QACX,CAAC,YAAW;AACR,YAAA,iBAAiB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAM,MAAM,KAAG;gBAC5D,OAAO;oBACH,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,oBAAA,QAAQ,EAAE,MAAM,MAAM,CAAC,QAAQ;iBAClC,CAAA;aACJ,CAAC,CAAC,CAAC,CAAA;SACP,GAAG,CAAC;AACT,KAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CAAC,cAAc,CAAC,CAAA;AAC3B;;;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/// <reference types="@types/powerapps-component-framework" />
|
|
2
|
+
import { ITranslation } from "../../../hooks";
|
|
3
|
+
import { IEntity, ILayout, ILookup } from "../interfaces";
|
|
4
|
+
import { ITheme } from "@talxis/react-components";
|
|
5
|
+
export declare const useLookup: (props: ILookup) => [ComponentFramework.LookupValue[], IEntity[], ITranslation<Partial<import("../../..").ITranslations<{
|
|
6
|
+
search: {
|
|
7
|
+
1033: string;
|
|
8
|
+
1029: string;
|
|
9
|
+
};
|
|
10
|
+
newRecord: {
|
|
11
|
+
1033: string;
|
|
12
|
+
1029: string;
|
|
13
|
+
};
|
|
14
|
+
searching: {
|
|
15
|
+
1033: string;
|
|
16
|
+
1029: string;
|
|
17
|
+
};
|
|
18
|
+
noRecordsFound: {
|
|
19
|
+
1033: string;
|
|
20
|
+
1029: string;
|
|
21
|
+
};
|
|
22
|
+
resultsFrom: {
|
|
23
|
+
1033: string;
|
|
24
|
+
1029: string;
|
|
25
|
+
};
|
|
26
|
+
noName: {
|
|
27
|
+
1033: string;
|
|
28
|
+
1029: string;
|
|
29
|
+
};
|
|
30
|
+
placeholder: {
|
|
31
|
+
1033: string;
|
|
32
|
+
1029: string;
|
|
33
|
+
};
|
|
34
|
+
}>>>, {
|
|
35
|
+
create: (entityName: string) => void;
|
|
36
|
+
select: (record: ComponentFramework.LookupValue[] | undefined) => void;
|
|
37
|
+
deselect: (record: ComponentFramework.LookupValue) => void;
|
|
38
|
+
}, (entityName: string | null) => void, (query: string) => Promise<(ComponentFramework.LookupValue & {
|
|
39
|
+
entityData: {
|
|
40
|
+
[key: string]: any;
|
|
41
|
+
};
|
|
42
|
+
layout: ILayout;
|
|
43
|
+
})[]>, ITheme];
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { lookupTranslations } from '../translations.js';
|
|
3
|
+
import { useFetchXml } from './useFetchXml.js';
|
|
4
|
+
import { useControl } from '../../../hooks/useControl.js';
|
|
5
|
+
|
|
6
|
+
const useLookup = (props) => {
|
|
7
|
+
const targets = props.parameters.value.attributes.Targets;
|
|
8
|
+
const boundValue = props.parameters.value.raw;
|
|
9
|
+
const context = props.context;
|
|
10
|
+
const { labels, theme, onNotifyOutputChanged } = useControl('Lookup', props, lookupTranslations);
|
|
11
|
+
const [getFetchXml, applyLookupQuery] = useFetchXml(context);
|
|
12
|
+
const [entities, setEntities] = useState(() => {
|
|
13
|
+
return targets.map(target => {
|
|
14
|
+
return {
|
|
15
|
+
entityName: target,
|
|
16
|
+
selected: targets.length === 1 ? true : false,
|
|
17
|
+
metadata: props.context.utils.getEntityMetadata(target, []),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
const selectedEntity = entities.find(x => x.selected);
|
|
22
|
+
const selectEntity = (entityName) => {
|
|
23
|
+
setEntities([...entities].map(entity => {
|
|
24
|
+
return {
|
|
25
|
+
entityName: entity.entityName,
|
|
26
|
+
metadata: entity.metadata,
|
|
27
|
+
selected: entity.entityName === entityName
|
|
28
|
+
};
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
31
|
+
const selectRecords = (records) => {
|
|
32
|
+
onNotifyOutputChanged({
|
|
33
|
+
value: records
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
const getSearchFetchXml = async (entityName, query, viewIdCallBack) => {
|
|
37
|
+
const response = (await props.parameters.value.getAllViews(entityName)).find(x => x.isDefault);
|
|
38
|
+
if (!response?.viewId) {
|
|
39
|
+
throw new Error(`Entity ${entityName} does not have a default view id!`);
|
|
40
|
+
}
|
|
41
|
+
viewIdCallBack(response.viewId);
|
|
42
|
+
let fetchXml = response?.fetchXml;
|
|
43
|
+
if (!fetchXml) {
|
|
44
|
+
fetchXml = (await getFetchXml(response.viewId)).fetchxml;
|
|
45
|
+
}
|
|
46
|
+
return applyLookupQuery(entities.find(x => x.entityName === entityName), fetchXml, query);
|
|
47
|
+
};
|
|
48
|
+
const getSearchResults = async (query) => {
|
|
49
|
+
if (props.onSearch) {
|
|
50
|
+
return props.onSearch(selectedEntity ? [selectedEntity?.entityName] : targets, query);
|
|
51
|
+
}
|
|
52
|
+
const fetchXmlMap = new Map();
|
|
53
|
+
const entityViewIdMap = new Map();
|
|
54
|
+
if (selectedEntity) {
|
|
55
|
+
fetchXmlMap.set(selectedEntity.entityName, getSearchFetchXml(selectedEntity.entityName, query, (viewId) => entityViewIdMap.set(selectedEntity.entityName, viewId)));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
for (const entity of targets) {
|
|
59
|
+
fetchXmlMap.set(entity, getSearchFetchXml(entity, query, (viewId) => entityViewIdMap.set(entity, viewId)));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
await Promise.all(fetchXmlMap.values());
|
|
63
|
+
const responsePromiseMap = new Map();
|
|
64
|
+
for (const [entityName, fetchXml] of fetchXmlMap) {
|
|
65
|
+
responsePromiseMap.set(entityName, context.webAPI.retrieveMultipleRecords(entityName, `?$top=25&fetchXml=${encodeURIComponent((await fetchXml))}`));
|
|
66
|
+
}
|
|
67
|
+
await Promise.all(responsePromiseMap.values());
|
|
68
|
+
const result = [];
|
|
69
|
+
for (const [entityName, response] of responsePromiseMap) {
|
|
70
|
+
const layout = JSON.parse((await getFetchXml(entityViewIdMap.get(entityName))).layoutjson ?? "{}");
|
|
71
|
+
for (const entity of (await response).entities) {
|
|
72
|
+
const entityMetadata = await entities.find(x => x.entityName === entityName).metadata;
|
|
73
|
+
result.push({
|
|
74
|
+
entityType: entityName,
|
|
75
|
+
id: entity[entityMetadata.PrimaryIdAttribute],
|
|
76
|
+
name: entity[layout.Rows?.[0]?.Cells?.[0]?.Name] ?? entity[entityMetadata.PrimaryNameAttribute] ?? labels.noName(),
|
|
77
|
+
entityData: entity,
|
|
78
|
+
layout: layout
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
};
|
|
84
|
+
const createRecord = async (entityName) => {
|
|
85
|
+
const formParameters = props.onGetOnCreateFormParameters?.(entityName);
|
|
86
|
+
const result = await context.navigation.openForm({
|
|
87
|
+
entityName: entityName,
|
|
88
|
+
useQuickCreateForm: true
|
|
89
|
+
}, formParameters);
|
|
90
|
+
if (!result.savedEntityReference) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
onNotifyOutputChanged({
|
|
94
|
+
value: [
|
|
95
|
+
...boundValue,
|
|
96
|
+
...result.savedEntityReference
|
|
97
|
+
]
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
const deselectRecord = (record) => {
|
|
101
|
+
const map = new Map(boundValue.map(value => [value.id, value]));
|
|
102
|
+
map.delete(record.id);
|
|
103
|
+
onNotifyOutputChanged({
|
|
104
|
+
value: [...map.values()]
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
return [
|
|
108
|
+
boundValue, entities, labels, {
|
|
109
|
+
create: createRecord,
|
|
110
|
+
deselect: deselectRecord,
|
|
111
|
+
select: selectRecords
|
|
112
|
+
},
|
|
113
|
+
selectEntity,
|
|
114
|
+
getSearchResults,
|
|
115
|
+
theme
|
|
116
|
+
];
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export { useLookup };
|
|
120
|
+
//# sourceMappingURL=useLookup.js.map
|