@itwin/grouping-mapping-widget 0.21.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/WidgetShell/GroupingMapping.js +5 -1
- package/lib/cjs/WidgetShell/GroupingMapping.js.map +1 -1
- package/lib/cjs/WidgetShell/GroupingMappingContent.js +5 -1
- package/lib/cjs/WidgetShell/GroupingMappingContent.js.map +1 -1
- package/lib/cjs/common/hooks/useIsMounted.d.ts +2 -0
- package/lib/cjs/common/hooks/useIsMounted.js +20 -0
- package/lib/cjs/common/hooks/useIsMounted.js.map +1 -0
- package/lib/cjs/common/hooks/useMemoizedCollectionPick.d.ts +2 -0
- package/lib/cjs/common/hooks/useMemoizedCollectionPick.js +31 -0
- package/lib/cjs/common/hooks/useMemoizedCollectionPick.js.map +1 -0
- package/lib/cjs/common/utils.d.ts +1 -0
- package/lib/cjs/common/utils.js +13 -1
- package/lib/cjs/common/utils.js.map +1 -1
- package/lib/cjs/components/Constants.d.ts +4 -0
- package/lib/cjs/components/Constants.js +13 -0
- package/lib/cjs/components/Constants.js.map +1 -0
- package/lib/cjs/components/GroupingMappingContext.d.ts +5 -0
- package/lib/cjs/components/GroupingMappingContext.js +56 -26
- package/lib/cjs/components/GroupingMappingContext.js.map +1 -1
- package/lib/cjs/components/Groups/Editing/GroupAction.js +57 -57
- package/lib/cjs/components/Groups/Editing/GroupAction.js.map +1 -1
- package/lib/cjs/components/Groups/Editing/GroupDetailsActionPanel.d.ts +1 -1
- package/lib/cjs/components/Groups/Editing/GroupDetailsActionPanel.js.map +1 -1
- package/lib/cjs/components/Groups/GroupItem.js +1 -1
- package/lib/cjs/components/Groups/GroupItem.js.map +1 -1
- package/lib/cjs/components/Groups/GroupMenuActions.js +5 -1
- package/lib/cjs/components/Groups/GroupMenuActions.js.map +1 -1
- package/lib/cjs/components/Groups/Groups.d.ts +3 -2
- package/lib/cjs/components/Groups/Groups.js +8 -4
- package/lib/cjs/components/Groups/Groups.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsShowHideButtons.d.ts +2 -2
- package/lib/cjs/components/Groups/GroupsShowHideButtons.js +8 -4
- package/lib/cjs/components/Groups/GroupsShowHideButtons.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsView.js +1 -1
- package/lib/cjs/components/Groups/GroupsView.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsVisualization.d.ts +1 -1
- package/lib/cjs/components/Groups/GroupsVisualization.js +103 -67
- package/lib/cjs/components/Groups/GroupsVisualization.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsVisualizationActions.d.ts +6 -4
- package/lib/cjs/components/Groups/GroupsVisualizationActions.js +8 -6
- package/lib/cjs/components/Groups/GroupsVisualizationActions.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsVisualizationActions.scss +1 -0
- package/lib/cjs/components/Groups/groupsHelpers.d.ts +19 -7
- package/lib/cjs/components/Groups/groupsHelpers.js +11 -70
- package/lib/cjs/components/Groups/groupsHelpers.js.map +1 -1
- package/lib/cjs/components/Groups/hooks/useFetchGroups.d.ts +5 -0
- package/lib/cjs/components/Groups/hooks/useFetchGroups.js +18 -0
- package/lib/cjs/components/Groups/hooks/useFetchGroups.js.map +1 -0
- package/lib/cjs/components/Groups/hooks/useGroupsOperations.d.ts +1 -5
- package/lib/cjs/components/Groups/hooks/useGroupsOperations.js +17 -31
- package/lib/cjs/components/Groups/hooks/useGroupsOperations.js.map +1 -1
- package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.d.ts +32 -0
- package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js +31 -0
- package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -0
- package/lib/cjs/components/Groups/hooks/useVisualization.js +4 -4
- package/lib/cjs/components/Groups/hooks/useVisualization.js.map +1 -1
- package/lib/cjs/components/Mappings/Editing/MappingAction.js +26 -31
- package/lib/cjs/components/Mappings/Editing/MappingAction.js.map +1 -1
- package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js +5 -1
- package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js.map +1 -1
- package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.d.ts +6 -1
- package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js +51 -40
- package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
- package/lib/cjs/components/Mappings/Extraction/ExtractionStatusIcon.d.ts +7 -1
- package/lib/cjs/components/Mappings/Extraction/ExtractionStatusIcon.js.map +1 -1
- package/lib/cjs/components/Mappings/{ConfirmMappingsImport.d.ts → Import/ConfirmMappingsImport.d.ts} +1 -1
- package/lib/cjs/components/Mappings/{ConfirmMappingsImport.js → Import/ConfirmMappingsImport.js} +32 -21
- package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -0
- package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js +9 -8
- package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
- package/lib/cjs/components/Mappings/Import/SelectIModel.js +35 -50
- package/lib/cjs/components/Mappings/Import/SelectIModel.js.map +1 -1
- package/lib/cjs/components/Mappings/Import/SelectITwin.d.ts +6 -1
- package/lib/cjs/components/Mappings/Import/SelectITwin.js +44 -53
- package/lib/cjs/components/Mappings/Import/SelectITwin.js.map +1 -1
- package/lib/cjs/components/Mappings/Import/SelectMappings.js +18 -37
- package/lib/cjs/components/Mappings/Import/SelectMappings.js.map +1 -1
- package/lib/cjs/components/Mappings/Mappings.js +5 -27
- package/lib/cjs/components/Mappings/Mappings.js.map +1 -1
- package/lib/cjs/components/Mappings/MappingsView.d.ts +5 -4
- package/lib/cjs/components/Mappings/MappingsView.js +33 -7
- package/lib/cjs/components/Mappings/MappingsView.js.map +1 -1
- package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.d.ts +13 -0
- package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js +50 -0
- package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -0
- package/lib/cjs/components/Mappings/hooks/useFetchMappings.d.ts +4 -0
- package/lib/cjs/components/Mappings/hooks/useFetchMappings.js +14 -0
- package/lib/cjs/components/Mappings/hooks/useFetchMappings.js.map +1 -0
- package/lib/cjs/components/Mappings/hooks/useMappingsOperations.d.ts +9 -10
- package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js +35 -108
- package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +5 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +16 -21
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.js +5 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.js.map +1 -1
- package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js +5 -1
- package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js.map +1 -1
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.js +5 -1
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.js.map +1 -1
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.js +5 -1
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.js.map +1 -1
- package/lib/cjs/components/Properties/GroupColorToggle.js +13 -10
- package/lib/cjs/components/Properties/GroupColorToggle.js.map +1 -1
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js +7 -3
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.js +5 -1
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.js.map +1 -1
- package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.js +5 -1
- package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.js.map +1 -1
- package/lib/cjs/components/Properties/PropertyAction.js +5 -1
- package/lib/cjs/components/Properties/PropertyAction.js.map +1 -1
- package/lib/cjs/components/Properties/PropertyMenu.js +5 -1
- package/lib/cjs/components/Properties/PropertyMenu.js.map +1 -1
- package/lib/cjs/components/Properties/PropertyMenuWithVisualization.js +5 -1
- package/lib/cjs/components/Properties/PropertyMenuWithVisualization.js.map +1 -1
- package/lib/cjs/components/Properties/PropertyTable.js +7 -2
- package/lib/cjs/components/Properties/PropertyTable.js.map +1 -1
- package/lib/cjs/components/SharedComponents/ActionPanel.js +5 -1
- package/lib/cjs/components/SharedComponents/ActionPanel.js.map +1 -1
- package/lib/cjs/components/SharedComponents/DeleteModal.d.ts +2 -2
- package/lib/cjs/components/SharedComponents/DeleteModal.js +20 -20
- package/lib/cjs/components/SharedComponents/DeleteModal.js.map +1 -1
- package/lib/cjs/components/context/GroupHilitedElementsContext.d.ts +9 -16
- package/lib/cjs/components/context/GroupHilitedElementsContext.js +13 -10
- package/lib/cjs/components/context/GroupHilitedElementsContext.js.map +1 -1
- package/lib/cjs/components/context/GroupingApiConfigContext.js +5 -1
- package/lib/cjs/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/cjs/components/context/PropertiesContext.js +5 -1
- package/lib/cjs/components/context/PropertiesContext.js.map +1 -1
- package/lib/cjs/components/context/PropertyGridWrapperContext.js +5 -1
- package/lib/cjs/components/context/PropertyGridWrapperContext.js.map +1 -1
- package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js +5 -1
- package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
- package/lib/cjs/formula/FormulaFunctionProvider.js +10 -1
- package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
- package/lib/cjs/grouping-mapping-widget.js +5 -1
- package/lib/cjs/grouping-mapping-widget.js.map +1 -1
- package/lib/cjs/test/GroupingMappingCustomUI.test.js +5 -1
- package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/cjs/test/MockFactory.js +5 -1
- package/lib/cjs/test/MockFactory.js.map +1 -1
- package/lib/cjs/test/PropertyFieldsHelpers.d.ts +4 -20
- package/lib/cjs/test/test-utils.js +13 -1
- package/lib/cjs/test/test-utils.js.map +1 -1
- package/lib/esm/common/hooks/useIsMounted.d.ts +2 -0
- package/lib/esm/common/hooks/useIsMounted.js +16 -0
- package/lib/esm/common/hooks/useIsMounted.js.map +1 -0
- package/lib/esm/common/hooks/useMemoizedCollectionPick.d.ts +2 -0
- package/lib/esm/common/hooks/useMemoizedCollectionPick.js +27 -0
- package/lib/esm/common/hooks/useMemoizedCollectionPick.js.map +1 -0
- package/lib/esm/common/utils.d.ts +1 -0
- package/lib/esm/common/utils.js +11 -0
- package/lib/esm/common/utils.js.map +1 -1
- package/lib/esm/components/Constants.d.ts +4 -0
- package/lib/esm/components/Constants.js +10 -0
- package/lib/esm/components/Constants.js.map +1 -0
- package/lib/esm/components/GroupingMappingContext.d.ts +5 -0
- package/lib/esm/components/GroupingMappingContext.js +52 -26
- package/lib/esm/components/GroupingMappingContext.js.map +1 -1
- package/lib/esm/components/Groups/Editing/GroupAction.js +53 -57
- package/lib/esm/components/Groups/Editing/GroupAction.js.map +1 -1
- package/lib/esm/components/Groups/Editing/GroupDetailsActionPanel.d.ts +1 -1
- package/lib/esm/components/Groups/Editing/GroupDetailsActionPanel.js.map +1 -1
- package/lib/esm/components/Groups/GroupItem.js +1 -1
- package/lib/esm/components/Groups/GroupItem.js.map +1 -1
- package/lib/esm/components/Groups/Groups.d.ts +3 -2
- package/lib/esm/components/Groups/Groups.js +3 -3
- package/lib/esm/components/Groups/Groups.js.map +1 -1
- package/lib/esm/components/Groups/GroupsShowHideButtons.d.ts +2 -2
- package/lib/esm/components/Groups/GroupsShowHideButtons.js +3 -3
- package/lib/esm/components/Groups/GroupsShowHideButtons.js.map +1 -1
- package/lib/esm/components/Groups/GroupsView.js +1 -1
- package/lib/esm/components/Groups/GroupsView.js.map +1 -1
- package/lib/esm/components/Groups/GroupsVisualization.d.ts +1 -1
- package/lib/esm/components/Groups/GroupsVisualization.js +100 -68
- package/lib/esm/components/Groups/GroupsVisualization.js.map +1 -1
- package/lib/esm/components/Groups/GroupsVisualizationActions.d.ts +6 -4
- package/lib/esm/components/Groups/GroupsVisualizationActions.js +9 -7
- package/lib/esm/components/Groups/GroupsVisualizationActions.js.map +1 -1
- package/lib/esm/components/Groups/GroupsVisualizationActions.scss +1 -0
- package/lib/esm/components/Groups/groupsHelpers.d.ts +19 -7
- package/lib/esm/components/Groups/groupsHelpers.js +10 -67
- package/lib/esm/components/Groups/groupsHelpers.js.map +1 -1
- package/lib/esm/components/Groups/hooks/useFetchGroups.d.ts +5 -0
- package/lib/esm/components/Groups/hooks/useFetchGroups.js +13 -0
- package/lib/esm/components/Groups/hooks/useFetchGroups.js.map +1 -0
- package/lib/esm/components/Groups/hooks/useGroupsOperations.d.ts +1 -5
- package/lib/esm/components/Groups/hooks/useGroupsOperations.js +18 -32
- package/lib/esm/components/Groups/hooks/useGroupsOperations.js.map +1 -1
- package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.d.ts +32 -0
- package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js +25 -0
- package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -0
- package/lib/esm/components/Groups/hooks/useVisualization.js +4 -4
- package/lib/esm/components/Groups/hooks/useVisualization.js.map +1 -1
- package/lib/esm/components/Mappings/Editing/MappingAction.js +22 -31
- package/lib/esm/components/Mappings/Editing/MappingAction.js.map +1 -1
- package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.d.ts +6 -1
- package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js +46 -39
- package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
- package/lib/esm/components/Mappings/Extraction/ExtractionStatusIcon.d.ts +7 -1
- package/lib/esm/components/Mappings/Extraction/ExtractionStatusIcon.js.map +1 -1
- package/lib/esm/components/Mappings/{ConfirmMappingsImport.d.ts → Import/ConfirmMappingsImport.d.ts} +1 -1
- package/lib/esm/components/Mappings/{ConfirmMappingsImport.js → Import/ConfirmMappingsImport.js} +27 -20
- package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -0
- package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js +4 -7
- package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
- package/lib/esm/components/Mappings/Import/SelectIModel.js +31 -50
- package/lib/esm/components/Mappings/Import/SelectIModel.js.map +1 -1
- package/lib/esm/components/Mappings/Import/SelectITwin.d.ts +6 -1
- package/lib/esm/components/Mappings/Import/SelectITwin.js +39 -53
- package/lib/esm/components/Mappings/Import/SelectITwin.js.map +1 -1
- package/lib/esm/components/Mappings/Import/SelectMappings.js +14 -37
- package/lib/esm/components/Mappings/Import/SelectMappings.js.map +1 -1
- package/lib/esm/components/Mappings/Mappings.js +3 -9
- package/lib/esm/components/Mappings/Mappings.js.map +1 -1
- package/lib/esm/components/Mappings/MappingsView.d.ts +5 -4
- package/lib/esm/components/Mappings/MappingsView.js +10 -7
- package/lib/esm/components/Mappings/MappingsView.js.map +1 -1
- package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.d.ts +13 -0
- package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js +46 -0
- package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -0
- package/lib/esm/components/Mappings/hooks/useFetchMappings.d.ts +4 -0
- package/lib/esm/components/Mappings/hooks/useFetchMappings.js +10 -0
- package/lib/esm/components/Mappings/hooks/useFetchMappings.js.map +1 -0
- package/lib/esm/components/Mappings/hooks/useMappingsOperations.d.ts +9 -10
- package/lib/esm/components/Mappings/hooks/useMappingsOperations.js +36 -109
- package/lib/esm/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +13 -22
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
- package/lib/esm/components/Properties/GroupColorToggle.js +9 -10
- package/lib/esm/components/Properties/GroupColorToggle.js.map +1 -1
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js +3 -3
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
- package/lib/esm/components/Properties/PropertyTable.js +2 -1
- package/lib/esm/components/Properties/PropertyTable.js.map +1 -1
- package/lib/esm/components/SharedComponents/DeleteModal.d.ts +2 -2
- package/lib/esm/components/SharedComponents/DeleteModal.js +16 -20
- package/lib/esm/components/SharedComponents/DeleteModal.js.map +1 -1
- package/lib/esm/components/context/GroupHilitedElementsContext.d.ts +9 -16
- package/lib/esm/components/context/GroupHilitedElementsContext.js +8 -9
- package/lib/esm/components/context/GroupHilitedElementsContext.js.map +1 -1
- package/lib/esm/formula/FormulaFunctionProvider.js +10 -1
- package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
- package/lib/esm/test/PropertyFieldsHelpers.d.ts +4 -20
- package/lib/esm/test/test-utils.js +8 -0
- package/lib/esm/test/test-utils.js.map +1 -1
- package/package.json +35 -31
- package/lib/cjs/components/Mappings/ConfirmMappingsImport.js.map +0 -1
- package/lib/cjs/components/context/ExtractionStatusDataContext.d.ts +0 -20
- package/lib/cjs/components/context/ExtractionStatusDataContext.js +0 -26
- package/lib/cjs/components/context/ExtractionStatusDataContext.js.map +0 -1
- package/lib/esm/components/Mappings/ConfirmMappingsImport.js.map +0 -1
- package/lib/esm/components/context/ExtractionStatusDataContext.d.ts +0 -20
- package/lib/esm/components/context/ExtractionStatusDataContext.js +0 -22
- package/lib/esm/components/context/ExtractionStatusDataContext.js.map +0 -1
- /package/lib/cjs/components/Mappings/{ConfirmMappingsImport.scss → Import/ConfirmMappingsImport.scss} +0 -0
- /package/lib/esm/components/Mappings/{ConfirmMappingsImport.scss → Import/ConfirmMappingsImport.scss} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../../src/components/Properties/GroupProperties/GroupPropertyAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n Alert,\n Button,\n Fieldset,\n Icon,\n IconButton,\n Label,\n LabeledInput,\n LabeledSelect,\n Modal,\n ModalButtonBar,\n Surface,\n Text,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport ActionPanel from \"../../SharedComponents/ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError } from \"../../../common/utils\";\nimport { useMappingClient } from \"../../context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { HorizontalTile } from \"../../SharedComponents/HorizontalTile\";\nimport { DataType, QuantityType } from \"@itwin/insights-client\";\nimport type {\n Group,\n GroupProperty,\n GroupPropertyCreate,\n} from \"@itwin/insights-client\";\nimport {\n SvgClose,\n SvgDragHandleVertical,\n SvgMoreVerticalSmall,\n SvgRemove,\n SvgSearch,\n} from \"@itwin/itwinui-icons-react\";\nimport type { DragEndEvent, DragStartEvent } from \"@dnd-kit/core\";\nimport {\n closestCenter,\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport SortableHorizontalTile from \"./SortableHorizontalTile\";\nimport Split from \"react-split\";\nimport \"./GroupPropertyAction.scss\";\nimport type { PropertyMetaData } from \"./GroupPropertyUtils\";\nimport {\n convertPresentationFields,\n convertToECProperties,\n fetchPresentationDescriptor,\n findProperties,\n} from \"./GroupPropertyUtils\";\nimport { manufactureKeys } from \"../../../common/viewerUtils\";\nimport { SaveModal } from \"./SaveModal\";\n\nexport interface GroupPropertyActionProps {\n mappingId: string;\n group: Group;\n groupProperty?: GroupProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<QuantityType>[] = [\n { value: QuantityType.Area, label: \"Area\" },\n { value: QuantityType.Distance, label: \"Distance\" },\n { value: QuantityType.Force, label: \"Force\" },\n { value: QuantityType.Mass, label: \"Mass\" },\n { value: QuantityType.Monetary, label: \"Monetary\" },\n { value: QuantityType.Time, label: \"Time\" },\n { value: QuantityType.Volume, label: \"Volume\" },\n { value: QuantityType.Undefined, label: \"No Quantity Type\" },\n];\n\nexport const GroupPropertyAction = ({\n mappingId,\n group,\n groupProperty,\n onSaveSuccess,\n onClickCancel,\n}: GroupPropertyActionProps) => {\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [oldPropertyName, setOldPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<DataType>(DataType.Undefined);\n const [quantityType, setQuantityType] = useState<QuantityType>(QuantityType.Undefined);\n const [selectedProperties, setSelectedProperties] = useState<PropertyMetaData[]>([]);\n const [propertiesMetaData, setPropertiesMetaData] = useState<PropertyMetaData[]>([]);\n const [propertiesNotFoundAlert, setPropertiesNotFoundAlert] = useState<boolean>(false);\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [searchInput, setSearchInput] = useState<string>(\"\");\n const [activeSearchInput, setActiveSearchInput] = useState<string>(\"\");\n const [searched, setSearched] = useState<boolean>(false);\n const [activeDragProperty, setActiveDragProperty] = useState<PropertyMetaData | undefined>();\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n const [showModal, setShowModal] = useState<boolean>(false);\n const [showSaveModal, setShowSaveModal] = useState<boolean>(false);\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n const { active } = event;\n const activeProperty = selectedProperties.find((p) => active.id === p.key);\n setActiveDragProperty(activeProperty);\n }, [selectedProperties]);\n\n const handleDragEnd = useCallback((event: DragEndEvent) => {\n const { active, over } = event;\n\n if (over && (active.id !== over.id)) {\n setSelectedProperties((items) => {\n const oldIndex = selectedProperties.findIndex((p) => active.id === p.key);\n const newIndex = selectedProperties.findIndex((p) => over.id === p.key);\n\n return arrayMove(items, oldIndex, newIndex);\n });\n }\n\n setActiveDragProperty(undefined);\n }, [selectedProperties]);\n\n const filteredProperties = useMemo(\n () =>\n propertiesMetaData.filter((p) =>\n [p.displayLabel, p.categoryLabel, p.actualECClassName]\n .map((l) => l.toLowerCase())\n .some((l) => l.includes(activeSearchInput.toLowerCase()))\n ),\n [activeSearchInput, propertiesMetaData]\n );\n\n const reset = useCallback(() => {\n setPropertyName(\"\");\n setDataType(DataType.Undefined);\n setSelectedProperties([]);\n }, []);\n\n useEffect(() => {\n const generateProperties = async () => {\n setIsLoading(true);\n\n if (!iModelConnection) return;\n\n const result = await manufactureKeys(group.query, iModelConnection);\n\n const descriptor = await fetchPresentationDescriptor(iModelConnection, result);\n\n // Only allow primitives and structs\n const propertyFields =\n descriptor?.fields.filter(\n (field) =>\n field.type.valueFormat === PropertyValueFormat.Primitive ||\n field.type.valueFormat === PropertyValueFormat.Struct\n ) ?? [];\n\n const propertiesMetaData = convertPresentationFields(propertyFields);\n\n setPropertiesMetaData(propertiesMetaData);\n\n if (groupProperty) {\n const accessToken = await getAccessToken();\n let response: GroupProperty | undefined;\n try {\n response = await mappingClient.getGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n groupProperty.id\n );\n\n setPropertyName(response.propertyName);\n setOldPropertyName(response.propertyName);\n setDataType(response.dataType);\n setQuantityType(response.quantityType);\n const properties = findProperties(response.ecProperties, propertiesMetaData);\n if (properties.length === 0) {\n setPropertiesNotFoundAlert(true);\n }\n\n setSelectedProperties(properties);\n } catch (error: any) {\n handleError(error.status);\n }\n }\n\n setIsLoading(false);\n };\n void generateProperties();\n }, [getAccessToken, mappingClient, iModelConnection, iModelId, groupProperty, mappingId, group]);\n\n const handleSaveClick = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (oldPropertyName !== propertyName && oldPropertyName !== \"\") {\n setShowSaveModal(true);\n } else {\n await onSave();\n }\n };\n\n const handleCloseSaveModal = () => {\n setShowSaveModal(false);\n };\n\n const onSave = async () => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const newGroupProperty: GroupPropertyCreate = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: selectedProperties.map((p) => convertToECProperties(p)).flat(),\n };\n groupProperty\n ? await mappingClient.updateGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n groupProperty.id,\n newGroupProperty\n )\n : await mappingClient.createGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n newGroupProperty\n );\n onSaveSuccess();\n reset();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n const startSearch = useCallback(() => {\n if (!searchInput) return;\n setActiveSearchInput(searchInput);\n setSearched(true);\n }, [searchInput]);\n\n const clearSearch = useCallback(() => {\n setSearchInput(\"\");\n setActiveSearchInput(\"\");\n setSearched(false);\n }, []);\n\n useEffect(() => {\n if (searchInput.length === 0) {\n setSearched(false);\n clearSearch();\n }\n }, [searchInput, setSearched, clearSearch]);\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className='gmw-group-property-action-container'>\n <Fieldset disabled={isLoading} className='gmw-property-options' legend='Property Details'>\n <Text variant='small' as='small' className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Text>\n <LabeledInput\n id='propertyName'\n label='Property Name'\n value={propertyName}\n required\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\n \"propertyName\",\n propertyName,\n NAME_REQUIREMENTS\n )}\n status={\n validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<DataType>\n label={\"Data Type\"}\n id='dataType'\n options={[\n { value: DataType.Boolean, label: \"Boolean\" },\n { value: DataType.Number, label: \"Number\" },\n { value: DataType.String, label: \"String\" },\n ]}\n required\n value={dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={\n validator.message(\"dataType\", propertyName, \"required\")\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n onShow={() => { }}\n onHide={() => { }}\n />\n <LabeledSelect<QuantityType>\n label='Quantity Type'\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n {propertiesNotFoundAlert &&\n <Alert type=\"warning\">\n Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new selection is made and saved.\n </Alert>\n }\n <Fieldset className='gmw-property-view-container' legend=\"Mapped Properties\">\n <div className=\"gmw-property-view-button\">\n <Button\n onClick={async () => setShowModal(true)}\n disabled={isLoading}\n >\n Select Properties\n </Button>\n </div>\n <div className=\"gmw-properties-list\">\n {selectedProperties.length === 0 && !isLoading ?\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Press the "Select Properties" button for options.</Text>\n </div> :\n selectedProperties.map((property) => (\n <HorizontalTile\n key={property.key}\n title={`${property.displayLabel} (${property.propertyType})`}\n titleTooltip={`${property.actualECClassName}`}\n subText={property.categoryLabel}\n actionGroup={null}\n />\n ))}\n </div>\n </Fieldset>\n </div>\n <ActionPanel\n onSave={handleSaveClick}\n onCancel={onClickCancel}\n isLoading={isLoading}\n isSavingDisabled={\n selectedProperties.length === 0 || !propertyName || dataType === DataType.Undefined\n }\n />\n <Modal\n title=\"Properties Selection\"\n isOpen={showModal}\n onClose={() => {\n setShowModal(false);\n clearSearch();\n }}\n closeOnExternalClick={false}\n >\n <Split\n expandToMin={false}\n className=\"gmw-property-selection-container\"\n gutterAlign=\"center\"\n gutterSize={2}\n gutter={() => {\n // Expects HTMLElement\n const dragHangle = renderToStaticMarkup(\n <Icon className=\"gmw-gutter-drag-icon\" size=\"large\">\n <SvgMoreVerticalSmall />\n </Icon>\n );\n const gutter = document.createElement(\"div\");\n gutter.className = `gmw-gutter`;\n gutter.innerHTML = dragHangle;\n return gutter;\n }}\n direction=\"horizontal\">\n <Surface className=\"gmw-available-properties\" elevation={1}>\n <div className=\"gmw-available-properties-header\">\n <Label as=\"span\">Available Properties</Label>\n <LabeledInput\n displayStyle=\"inline\"\n iconDisplayStyle=\"inline\"\n className=\"gmw-available-prop-search\"\n value={searchInput}\n size=\"small\"\n placeholder=\"Search....\"\n onChange={(event) => {\n const {\n target: { value },\n } = event;\n setSearchInput(value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n startSearch();\n }\n }}\n svgIcon={\n searched ? (\n <IconButton onClick={clearSearch} styleType=\"borderless\" title='Clear Search'>\n <SvgClose />\n </IconButton>\n ) : (\n <IconButton onClick={startSearch} styleType=\"borderless\" title='Search'>\n <SvgSearch />\n </IconButton>\n )\n }\n />\n </div>\n {filteredProperties.length === 0 ?\n <div className=\"gmw-empty-selection\">\n <Text>No properties available. </Text>\n </div> :\n <div className=\"gmw-properties-list\">\n {\n filteredProperties.map((property) => (\n <HorizontalTile\n key={property.key}\n title={`${property.displayLabel} (${property.propertyType})`}\n titleTooltip={`${property.actualECClassName}`}\n subText={property.categoryLabel}\n actionGroup={null}\n selected={selectedProperties.some((p) => property.key === p.key)}\n onClick={() =>\n setSelectedProperties((sp) =>\n sp.some((p) => property.key === p.key)\n ? sp.filter(\n (p) => property.key !== p.key\n )\n : [...sp, property]\n )\n }\n />\n ))}\n </div>}\n </Surface>\n <Surface className=\"gmw-selected-properties\" elevation={1}>\n <Label as=\"span\">Selected Properties</Label>\n {selectedProperties.length === 0 ?\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Add some by clicking on the properties shown left.</Text>\n </div> :\n <div className=\"gmw-properties-list\" >\n <SortableContext\n items={selectedProperties.map((p) => p.key)}\n strategy={verticalListSortingStrategy}\n >\n {selectedProperties.map((property) =>\n <SortableHorizontalTile\n key={property.key}\n id={property.key}\n title={`${property.displayLabel} (${property.propertyType})`}\n titleTooltip={`${property.actualECClassName}`}\n subText={property.categoryLabel}\n actionGroup={\n <div>\n <IconButton\n styleType=\"borderless\"\n title=\"Remove\"\n onClick={() => {\n setSelectedProperties((sp) => sp.filter(\n (p) => property.key !== p.key\n ));\n }\n }>\n <SvgRemove />\n </IconButton>\n </div>\n }\n />)}\n </SortableContext>\n </div>}\n </Surface>\n </Split>\n <ModalButtonBar>\n <Button\n onClick={() => {\n setShowModal(false);\n clearSearch();\n }}\n styleType=\"high-visibility\"\n >\n Close\n </Button>\n </ModalButtonBar>\n </Modal>\n <SaveModal\n onSave={onSave}\n onClose={handleCloseSaveModal}\n showSaveModal={showSaveModal}\n />\n <DragOverlay zIndex={9999}>\n {activeDragProperty ?\n <HorizontalTile\n title={`${activeDragProperty.displayLabel} (${activeDragProperty.propertyType})`}\n titleTooltip={`${activeDragProperty.actualECClassName}`}\n subText={activeDragProperty.categoryLabel}\n actionGroup={\n <IconButton\n styleType=\"borderless\">\n <SvgRemove />\n </IconButton>}\n dragHandle={\n <Icon className=\"gmw-drag-icon\" size=\"large\">\n <SvgDragHandleVertical />\n </Icon>\n }\n /> : null}\n </DragOverlay>\n </DndContext>\n );\n};\n\n"]}
|
|
1
|
+
{"version":3,"file":"GroupPropertyAction.js","sourceRoot":"","sources":["../../../../../src/components/Properties/GroupProperties/GroupPropertyAction.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport {\n Alert,\n Button,\n Fieldset,\n Icon,\n IconButton,\n Label,\n LabeledInput,\n LabeledSelect,\n Modal,\n ModalButtonBar,\n Surface,\n Text,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport ActionPanel from \"../../SharedComponents/ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { getLocalizedStringPresentation, handleError } from \"../../../common/utils\";\nimport { useMappingClient } from \"../../context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { HorizontalTile } from \"../../SharedComponents/HorizontalTile\";\nimport { DataType, QuantityType } from \"@itwin/insights-client\";\nimport type {\n Group,\n GroupProperty,\n GroupPropertyCreate,\n} from \"@itwin/insights-client\";\nimport {\n SvgClose,\n SvgDragHandleVertical,\n SvgMoreVerticalSmall,\n SvgRemove,\n SvgSearch,\n} from \"@itwin/itwinui-icons-react\";\nimport type { DragEndEvent, DragStartEvent } from \"@dnd-kit/core\";\nimport {\n closestCenter,\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport SortableHorizontalTile from \"./SortableHorizontalTile\";\nimport Split from \"react-split\";\nimport \"./GroupPropertyAction.scss\";\nimport type { PropertyMetaData } from \"./GroupPropertyUtils\";\nimport {\n convertPresentationFields,\n convertToECProperties,\n fetchPresentationDescriptor,\n findProperties,\n} from \"./GroupPropertyUtils\";\nimport { manufactureKeys } from \"../../../common/viewerUtils\";\nimport { SaveModal } from \"./SaveModal\";\n\nexport interface GroupPropertyActionProps {\n mappingId: string;\n group: Group;\n groupProperty?: GroupProperty;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nexport const quantityTypesSelectionOptions: SelectOption<QuantityType>[] = [\n { value: QuantityType.Area, label: \"Area\" },\n { value: QuantityType.Distance, label: \"Distance\" },\n { value: QuantityType.Force, label: \"Force\" },\n { value: QuantityType.Mass, label: \"Mass\" },\n { value: QuantityType.Monetary, label: \"Monetary\" },\n { value: QuantityType.Time, label: \"Time\" },\n { value: QuantityType.Volume, label: \"Volume\" },\n { value: QuantityType.Undefined, label: \"No Quantity Type\" },\n];\n\nexport const GroupPropertyAction = ({\n mappingId,\n group,\n groupProperty,\n onSaveSuccess,\n onClickCancel,\n}: GroupPropertyActionProps) => {\n const { getAccessToken, iModelId, iModelConnection } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\"\");\n const [oldPropertyName, setOldPropertyName] = useState<string>(\"\");\n const [dataType, setDataType] = useState<DataType>(DataType.Undefined);\n const [quantityType, setQuantityType] = useState<QuantityType>(QuantityType.Undefined);\n const [selectedProperties, setSelectedProperties] = useState<PropertyMetaData[]>([]);\n const [propertiesMetaData, setPropertiesMetaData] = useState<PropertyMetaData[]>([]);\n const [propertiesNotFoundAlert, setPropertiesNotFoundAlert] = useState<boolean>(false);\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [searchInput, setSearchInput] = useState<string>(\"\");\n const [activeSearchInput, setActiveSearchInput] = useState<string>(\"\");\n const [searched, setSearched] = useState<boolean>(false);\n const [activeDragProperty, setActiveDragProperty] = useState<PropertyMetaData | undefined>();\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n const [showModal, setShowModal] = useState<boolean>(false);\n const [showSaveModal, setShowSaveModal] = useState<boolean>(false);\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n const { active } = event;\n const activeProperty = selectedProperties.find((p) => active.id === p.key);\n setActiveDragProperty(activeProperty);\n }, [selectedProperties]);\n\n const handleDragEnd = useCallback((event: DragEndEvent) => {\n const { active, over } = event;\n\n if (over && (active.id !== over.id)) {\n setSelectedProperties((items) => {\n const oldIndex = selectedProperties.findIndex((p) => active.id === p.key);\n const newIndex = selectedProperties.findIndex((p) => over.id === p.key);\n\n return arrayMove(items, oldIndex, newIndex);\n });\n }\n\n setActiveDragProperty(undefined);\n }, [selectedProperties]);\n\n const filteredProperties = useMemo(\n () =>\n propertiesMetaData.filter((p) =>\n [p.displayLabel, p.categoryLabel, p.actualECClassName]\n .map((l) => l.toLowerCase())\n .some((l) => l.includes(activeSearchInput.toLowerCase()))\n ),\n [activeSearchInput, propertiesMetaData]\n );\n\n const reset = useCallback(() => {\n setPropertyName(\"\");\n setDataType(DataType.Undefined);\n setSelectedProperties([]);\n }, []);\n\n useEffect(() => {\n const generateProperties = async () => {\n setIsLoading(true);\n\n if (!iModelConnection) return;\n\n const result = await manufactureKeys(group.query, iModelConnection);\n\n const descriptor = await fetchPresentationDescriptor(iModelConnection, result);\n\n // Only allow primitives and structs\n const propertyFields =\n descriptor?.fields.filter(\n (field) =>\n field.type.valueFormat === PropertyValueFormat.Primitive ||\n field.type.valueFormat === PropertyValueFormat.Struct\n ) ?? [];\n\n const propertiesMetaData = convertPresentationFields(propertyFields);\n\n setPropertiesMetaData(propertiesMetaData);\n\n if (groupProperty) {\n const accessToken = await getAccessToken();\n let response: GroupProperty | undefined;\n try {\n response = await mappingClient.getGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n groupProperty.id\n );\n\n setPropertyName(response.propertyName);\n setOldPropertyName(response.propertyName);\n setDataType(response.dataType);\n setQuantityType(response.quantityType);\n const properties = findProperties(response.ecProperties, propertiesMetaData);\n if (properties.length === 0) {\n setPropertiesNotFoundAlert(true);\n }\n\n setSelectedProperties(properties);\n } catch (error: any) {\n handleError(error.status);\n }\n }\n\n setIsLoading(false);\n };\n void generateProperties();\n }, [getAccessToken, mappingClient, iModelConnection, iModelId, groupProperty, mappingId, group]);\n\n const handleSaveClick = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (oldPropertyName !== propertyName && oldPropertyName !== \"\") {\n setShowSaveModal(true);\n } else {\n await onSave();\n }\n };\n\n const handleCloseSaveModal = () => {\n setShowSaveModal(false);\n };\n\n const onSave = async () => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const newGroupProperty: GroupPropertyCreate = {\n propertyName,\n dataType,\n quantityType,\n ecProperties: selectedProperties.map((p) => convertToECProperties(p)).flat(),\n };\n groupProperty\n ? await mappingClient.updateGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n groupProperty.id,\n newGroupProperty\n )\n : await mappingClient.createGroupProperty(\n accessToken,\n iModelId,\n mappingId,\n group.id,\n newGroupProperty\n );\n onSaveSuccess();\n reset();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n const startSearch = useCallback(() => {\n if (!searchInput) return;\n setActiveSearchInput(searchInput);\n setSearched(true);\n }, [searchInput]);\n\n const clearSearch = useCallback(() => {\n setSearchInput(\"\");\n setActiveSearchInput(\"\");\n setSearched(false);\n }, []);\n\n useEffect(() => {\n if (searchInput.length === 0) {\n setSearched(false);\n clearSearch();\n }\n }, [searchInput, setSearched, clearSearch]);\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className='gmw-group-property-action-container'>\n <Fieldset disabled={isLoading} className='gmw-property-options' legend='Property Details'>\n <Text variant='small' as='small' className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Text>\n <LabeledInput\n id='propertyName'\n label='Property Name'\n value={propertyName}\n required\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"propertyName\");\n }}\n message={validator.message(\n \"propertyName\",\n propertyName,\n NAME_REQUIREMENTS\n )}\n status={\n validator.message(\"propertyName\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"propertyName\");\n }}\n />\n <LabeledSelect<DataType>\n label={\"Data Type\"}\n id='dataType'\n options={[\n { value: DataType.Boolean, label: \"Boolean\" },\n { value: DataType.Number, label: \"Number\" },\n { value: DataType.String, label: \"String\" },\n ]}\n required\n value={dataType}\n onChange={(value) => {\n validator.showMessageFor(\"dataType\");\n setDataType(value);\n }}\n message={validator.message(\"dataType\", propertyName, \"required\")}\n status={\n validator.message(\"dataType\", propertyName, \"required\")\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"dataType\");\n }}\n onShow={() => { }}\n onHide={() => { }}\n />\n <LabeledSelect<QuantityType>\n label='Quantity Type'\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n {propertiesNotFoundAlert &&\n <Alert type=\"warning\">\n Warning: Could not match saved properties from the current generated list. It does not confirm or deny validity. Overwriting will occur if a new selection is made and saved.\n </Alert>\n }\n <Fieldset className='gmw-property-view-container' legend=\"Mapped Properties\">\n <div className=\"gmw-property-view-button\">\n <Button\n onClick={async () => setShowModal(true)}\n disabled={isLoading}\n >\n Select Properties\n </Button>\n </div>\n <div className=\"gmw-properties-list\">\n {selectedProperties.length === 0 && !isLoading ?\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Press the "Select Properties" button for options.</Text>\n </div> :\n selectedProperties.map((property) => (\n <HorizontalTile\n key={property.key}\n title={`${property.displayLabel} (${property.propertyType})`}\n titleTooltip={`${property.actualECClassName}`}\n subText={getLocalizedStringPresentation(property.categoryLabel)}\n actionGroup={null}\n />\n ))}\n </div>\n </Fieldset>\n </div>\n <ActionPanel\n onSave={handleSaveClick}\n onCancel={onClickCancel}\n isLoading={isLoading}\n isSavingDisabled={\n selectedProperties.length === 0 || !propertyName || dataType === DataType.Undefined\n }\n />\n <Modal\n title=\"Properties Selection\"\n isOpen={showModal}\n onClose={() => {\n setShowModal(false);\n clearSearch();\n }}\n closeOnExternalClick={false}\n >\n <Split\n expandToMin={false}\n className=\"gmw-property-selection-container\"\n gutterAlign=\"center\"\n gutterSize={2}\n gutter={() => {\n // Expects HTMLElement\n const dragHangle = renderToStaticMarkup(\n <Icon className=\"gmw-gutter-drag-icon\" size=\"large\">\n <SvgMoreVerticalSmall />\n </Icon>\n );\n const gutter = document.createElement(\"div\");\n gutter.className = `gmw-gutter`;\n gutter.innerHTML = dragHangle;\n return gutter;\n }}\n direction=\"horizontal\">\n <Surface className=\"gmw-available-properties\" elevation={1}>\n <div className=\"gmw-available-properties-header\">\n <Label as=\"span\">Available Properties</Label>\n <LabeledInput\n displayStyle=\"inline\"\n iconDisplayStyle=\"inline\"\n className=\"gmw-available-prop-search\"\n value={searchInput}\n size=\"small\"\n placeholder=\"Search....\"\n onChange={(event) => {\n const {\n target: { value },\n } = event;\n setSearchInput(value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n startSearch();\n }\n }}\n svgIcon={\n searched ? (\n <IconButton onClick={clearSearch} styleType=\"borderless\" title='Clear Search'>\n <SvgClose />\n </IconButton>\n ) : (\n <IconButton onClick={startSearch} styleType=\"borderless\" title='Search'>\n <SvgSearch />\n </IconButton>\n )\n }\n />\n </div>\n {filteredProperties.length === 0 ?\n <div className=\"gmw-empty-selection\">\n <Text>No properties available. </Text>\n </div> :\n <div className=\"gmw-properties-list\">\n {\n filteredProperties.map((property) => (\n <HorizontalTile\n key={property.key}\n title={`${property.displayLabel} (${property.propertyType})`}\n titleTooltip={`${property.actualECClassName}`}\n subText={getLocalizedStringPresentation(property.categoryLabel)}\n actionGroup={null}\n selected={selectedProperties.some((p) => property.key === p.key)}\n onClick={() =>\n setSelectedProperties((sp) =>\n sp.some((p) => property.key === p.key)\n ? sp.filter(\n (p) => property.key !== p.key\n )\n : [...sp, property]\n )\n }\n />\n ))}\n </div>}\n </Surface>\n <Surface className=\"gmw-selected-properties\" elevation={1}>\n <Label as=\"span\">Selected Properties</Label>\n {selectedProperties.length === 0 ?\n <div className=\"gmw-empty-selection\">\n <Text>No properties selected.</Text>\n <Text>Add some by clicking on the properties shown left.</Text>\n </div> :\n <div className=\"gmw-properties-list\" >\n <SortableContext\n items={selectedProperties.map((p) => p.key)}\n strategy={verticalListSortingStrategy}\n >\n {selectedProperties.map((property) =>\n <SortableHorizontalTile\n key={property.key}\n id={property.key}\n title={`${property.displayLabel} (${property.propertyType})`}\n titleTooltip={`${property.actualECClassName}`}\n subText={property.categoryLabel}\n actionGroup={\n <div>\n <IconButton\n styleType=\"borderless\"\n title=\"Remove\"\n onClick={() => {\n setSelectedProperties((sp) => sp.filter(\n (p) => property.key !== p.key\n ));\n }\n }>\n <SvgRemove />\n </IconButton>\n </div>\n }\n />)}\n </SortableContext>\n </div>}\n </Surface>\n </Split>\n <ModalButtonBar>\n <Button\n onClick={() => {\n setShowModal(false);\n clearSearch();\n }}\n styleType=\"high-visibility\"\n >\n Close\n </Button>\n </ModalButtonBar>\n </Modal>\n <SaveModal\n onSave={onSave}\n onClose={handleCloseSaveModal}\n showSaveModal={showSaveModal}\n />\n <DragOverlay zIndex={9999}>\n {activeDragProperty ?\n <HorizontalTile\n title={`${activeDragProperty.displayLabel} (${activeDragProperty.propertyType})`}\n titleTooltip={`${activeDragProperty.actualECClassName}`}\n subText={activeDragProperty.categoryLabel}\n actionGroup={\n <IconButton\n styleType=\"borderless\">\n <SvgRemove />\n </IconButton>}\n dragHandle={\n <Icon className=\"gmw-drag-icon\" size=\"large\">\n <SvgDragHandleVertical />\n </Icon>\n }\n /> : null}\n </DragOverlay>\n </DndContext>\n );\n};\n"]}
|
|
@@ -22,6 +22,7 @@ export const PropertyTable = ({ propertyType, columnsFactory, data, isLoading, o
|
|
|
22
22
|
return (React.createElement("div", { className: "gmw-property-table-container" },
|
|
23
23
|
React.createElement(PropertyTableToolbar, { propertyType: propertyType, onClickAddProperty: onClickAdd, refreshProperties: refreshProperties, isLoading: isLoading }),
|
|
24
24
|
React.createElement(Table, { data: isLoading ? [] : data, density: 'extra-condensed', columns: memoizedColumns, emptyTableContent: `No ${propertyType} Properties`, isSortable: true, isLoading: isLoading }),
|
|
25
|
-
|
|
25
|
+
showDeleteModal &&
|
|
26
|
+
React.createElement(DeleteModal, { entityName: showDeleteModal.propertyName, onClose: handleCloseDeleteModal, onDelete: handleDeleteProperty, refresh: refreshProperties })));
|
|
26
27
|
};
|
|
27
28
|
//# sourceMappingURL=PropertyTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyTable.js","sourceRoot":"","sources":["../../../../src/components/Properties/PropertyTable.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG9D,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,sBAAsB,CAAC;AAiB9B,MAAM,CAAC,MAAM,aAAa,GAAG,CAA8B,EACzD,YAAY,EACZ,cAAc,EACd,IAAI,EACJ,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,cAAc,GACQ,EAAE,EAAE;IAE1B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAC;IAEjF,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClD,MAAM,cAAc,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,QAAW,EAAE,EAAE;QACxD,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CACnC,cAAc,CAAC,qBAAqB,CAAC,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAElF,OAAO,CACL,6BAAK,SAAS,EAAC,8BAA8B;QAC3C,oBAAC,oBAAoB,IACnB,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,UAAU,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,GACpB;QACF,oBAAC,KAAK,IACJ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAC3B,OAAO,EAAC,iBAAiB,EACzB,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,MAAM,YAAY,aAAa,EAClD,UAAU,QACV,SAAS,EAAE,SAAS,GACpB;
|
|
1
|
+
{"version":3,"file":"PropertyTable.js","sourceRoot":"","sources":["../../../../src/components/Properties/PropertyTable.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG9D,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,sBAAsB,CAAC;AAiB9B,MAAM,CAAC,MAAM,aAAa,GAAG,CAA8B,EACzD,YAAY,EACZ,cAAc,EACd,IAAI,EACJ,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,cAAc,GACQ,EAAE,EAAE;IAE1B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAC;IAEjF,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClD,MAAM,cAAc,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,QAAW,EAAE,EAAE;QACxD,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CACnC,cAAc,CAAC,qBAAqB,CAAC,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAElF,OAAO,CACL,6BAAK,SAAS,EAAC,8BAA8B;QAC3C,oBAAC,oBAAoB,IACnB,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,UAAU,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,GACpB;QACF,oBAAC,KAAK,IACJ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAC3B,OAAO,EAAC,iBAAiB,EACzB,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,MAAM,YAAY,aAAa,EAClD,UAAU,QACV,SAAS,EAAE,SAAS,GACpB;QACD,eAAe;YACd,oBAAC,WAAW,IACV,UAAU,EAAE,eAAe,CAAC,YAAY,EACxC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,iBAAiB,GAC1B,CACA,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Table } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport type { Column } from \"react-table\";\nimport type { CreateTypeFromInterface } from \"../../common/utils\";\nimport DeleteModal from \"../SharedComponents/DeleteModal\";\nimport { PropertyTableToolbar } from \"./PropertyTableToolbar\";\nimport \"./PropertyTable.scss\";\n\nexport interface PropertyTableItem {\n propertyName: string;\n id: string;\n}\n\nexport interface PropertyTableProps<T extends PropertyTableItem> {\n propertyType: string;\n columnsFactory: (handleShowDeleteModal: (value: T) => void) => Array<Column<T>>;\n data: T[];\n isLoading: boolean;\n onClickAdd?: () => void;\n refreshProperties: () => Promise<void>;\n deleteProperty: (propertyId: string) => Promise<void>;\n}\n\nexport const PropertyTable = <T extends PropertyTableItem>({\n propertyType,\n columnsFactory,\n data,\n isLoading,\n onClickAdd,\n refreshProperties,\n deleteProperty,\n}: PropertyTableProps<T>) => {\n\n const [showDeleteModal, setShowDeleteModal] = useState<T | undefined>(undefined);\n\n const handleDeleteProperty = useCallback(async () => {\n await deleteProperty(showDeleteModal?.id ?? \"\");\n }, [deleteProperty, showDeleteModal?.id]);\n\n const handleShowDeleteModal = useCallback((property: T) => {\n setShowDeleteModal(property);\n }, []);\n\n const handleCloseDeleteModal = () => {\n setShowDeleteModal(undefined);\n };\n\n const memoizedColumns = useMemo(() =>\n columnsFactory(handleShowDeleteModal), [columnsFactory, handleShowDeleteModal]);\n\n return (\n <div className=\"gmw-property-table-container\">\n <PropertyTableToolbar\n propertyType={propertyType}\n onClickAddProperty={onClickAdd}\n refreshProperties={refreshProperties}\n isLoading={isLoading}\n />\n <Table<CreateTypeFromInterface<T>>\n data={isLoading ? [] : data}\n density='extra-condensed'\n columns={memoizedColumns}\n emptyTableContent={`No ${propertyType} Properties`}\n isSortable\n isLoading={isLoading}\n />\n {showDeleteModal &&\n <DeleteModal\n entityName={showDeleteModal.propertyName}\n onClose={handleCloseDeleteModal}\n onDelete={handleDeleteProperty}\n refresh={refreshProperties}\n />}\n </div>\n );\n};\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import "./DeleteModal.scss";
|
|
3
3
|
export interface DeleteModalProps {
|
|
4
|
-
entityName
|
|
4
|
+
entityName: string;
|
|
5
5
|
onClose: () => void;
|
|
6
6
|
onDelete: () => Promise<void>;
|
|
7
|
-
refresh
|
|
7
|
+
refresh?: () => Promise<void>;
|
|
8
8
|
}
|
|
9
9
|
export declare const DeleteModal: ({ entityName, onClose, onDelete, refresh, }: DeleteModalProps) => JSX.Element;
|
|
10
10
|
export default DeleteModal;
|
|
@@ -3,37 +3,33 @@
|
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { Button, MiddleTextTruncation, Modal, ModalButtonBar, Text, } from "@itwin/itwinui-react";
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
6
|
+
import { useMutation } from "@tanstack/react-query";
|
|
7
|
+
import React, { useCallback, useState } from "react";
|
|
8
8
|
import "./DeleteModal.scss";
|
|
9
9
|
import { LoadingSpinner } from "./LoadingSpinner";
|
|
10
10
|
export const DeleteModal = ({ entityName, onClose, onDelete, refresh, }) => {
|
|
11
|
-
const [
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
await
|
|
16
|
-
await refresh();
|
|
11
|
+
const [localEntityName] = useState(entityName);
|
|
12
|
+
const deleteMutation = useMutation({
|
|
13
|
+
mutationFn: onDelete,
|
|
14
|
+
onSuccess: async () => {
|
|
15
|
+
refresh && await refresh();
|
|
17
16
|
onClose();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
setIsDeleting(false);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
const deleteCallback = useCallback(() => {
|
|
20
|
+
deleteMutation.mutate();
|
|
21
|
+
}, [deleteMutation]);
|
|
26
22
|
return (React.createElement(React.Fragment, null,
|
|
27
|
-
React.createElement(Modal, { title: 'Confirm', modalRootId: 'grouping-mapping-widget', isOpen: !!
|
|
23
|
+
React.createElement(Modal, { title: 'Confirm', modalRootId: 'grouping-mapping-widget', isOpen: !!localEntityName, isDismissible: !deleteMutation.isLoading, onClose: onClose },
|
|
28
24
|
React.createElement("div", { className: "gmw-delete-modal-body-text" },
|
|
29
25
|
React.createElement(Text, { variant: "leading", as: "h3" }, "Are you sure you want to delete"),
|
|
30
26
|
React.createElement("strong", null, React.createElement(MiddleTextTruncation, { text: `${entityName}?` }))),
|
|
31
27
|
React.createElement(ModalButtonBar, null,
|
|
32
|
-
|
|
28
|
+
deleteMutation.isLoading &&
|
|
33
29
|
React.createElement("div", { className: "gmw-loading-delete" },
|
|
34
30
|
React.createElement(LoadingSpinner, null)),
|
|
35
|
-
React.createElement(Button, { styleType: 'high-visibility', onClick: deleteCallback, disabled:
|
|
36
|
-
React.createElement(Button, { styleType: 'default', onClick: onClose, disabled:
|
|
31
|
+
React.createElement(Button, { styleType: 'high-visibility', onClick: deleteCallback, disabled: deleteMutation.isLoading }, "Delete"),
|
|
32
|
+
React.createElement(Button, { styleType: 'default', onClick: onClose, disabled: deleteMutation.isLoading }, "Cancel")))));
|
|
37
33
|
};
|
|
38
34
|
export default DeleteModal;
|
|
39
35
|
//# sourceMappingURL=DeleteModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/components/SharedComponents/DeleteModal.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,KAAK,EACL,cAAc,EACd,IAAI,GACL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/components/SharedComponents/DeleteModal.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,KAAK,EACL,cAAc,EACd,IAAI,GACL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,OAAO,EACP,QAAQ,EACR,OAAO,GACU,EAAE,EAAE;IACrB,MAAM,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,cAAc,GAAG,WAAW,CAAC;QACjC,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,KAAK,IAAI,EAAE;YACpB,OAAO,IAAI,MAAM,OAAO,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,cAAc,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO,CACL;QACE,oBAAC,KAAK,IACJ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,yBAAyB,EACrC,MAAM,EAAE,CAAC,CAAC,eAAe,EACzB,aAAa,EAAE,CAAC,cAAc,CAAC,SAAS,EACxC,OAAO,EAAE,OAAO;YAEhB,6BAAK,SAAS,EAAC,4BAA4B;gBACzC,oBAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,EAAE,EAAC,IAAI,sCAExB;gBACP,oCACG,oBAAC,oBAAoB,IAAC,IAAI,EAAE,GAAG,UAAU,GAAG,GAAI,CAC1C,CACL;YACN,oBAAC,cAAc;gBACZ,cAAc,CAAC,SAAS;oBACvB,6BAAK,SAAS,EAAC,oBAAoB;wBACjC,oBAAC,cAAc,OAAG,CACd;gBACR,oBAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,SAAS,aAEtF;gBACT,oBAAC,MAAM,IACL,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,CAAC,SAAS,aAG3B,CACM,CACX,CACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n Button,\n MiddleTextTruncation,\n Modal,\n ModalButtonBar,\n Text,\n} from \"@itwin/itwinui-react\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport React, { useCallback, useState } from \"react\";\nimport \"./DeleteModal.scss\";\nimport { LoadingSpinner } from \"./LoadingSpinner\";\n\nexport interface DeleteModalProps {\n entityName: string;\n onClose: () => void;\n onDelete: () => Promise<void>;\n refresh?: () => Promise<void>;\n}\n\nexport const DeleteModal = ({\n entityName,\n onClose,\n onDelete,\n refresh,\n}: DeleteModalProps) => {\n const [localEntityName] = useState(entityName);\n\n const deleteMutation = useMutation({\n mutationFn: onDelete,\n onSuccess: async () => {\n refresh && await refresh();\n onClose();\n },\n });\n\n const deleteCallback = useCallback(() => {\n deleteMutation.mutate();\n }, [deleteMutation]);\n\n return (\n <>\n <Modal\n title='Confirm'\n modalRootId='grouping-mapping-widget'\n isOpen={!!localEntityName}\n isDismissible={!deleteMutation.isLoading}\n onClose={onClose}\n >\n <div className=\"gmw-delete-modal-body-text\">\n <Text variant=\"leading\" as=\"h3\">\n Are you sure you want to delete\n </Text>\n <strong>\n {<MiddleTextTruncation text={`${entityName}?`} />}\n </strong>\n </div>\n <ModalButtonBar>\n {deleteMutation.isLoading &&\n <div className=\"gmw-loading-delete\">\n <LoadingSpinner />\n </div>}\n <Button styleType='high-visibility' onClick={deleteCallback} disabled={deleteMutation.isLoading}>\n Delete\n </Button>\n <Button\n styleType='default'\n onClick={onClose}\n disabled={deleteMutation.isLoading}\n >\n Cancel\n </Button>\n </ModalButtonBar>\n </Modal>\n </>\n );\n};\n\nexport default DeleteModal;\n"]}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type { MutableRefObject } from "react";
|
|
3
|
-
import type { Group } from "@itwin/insights-client";
|
|
4
|
-
import type { KeySet } from "@itwin/presentation-common";
|
|
5
|
-
export interface QueryCacheItem {
|
|
6
|
-
keySet: KeySet;
|
|
7
|
-
ids: string[];
|
|
8
|
-
}
|
|
9
2
|
export interface OverlappedInfo {
|
|
10
3
|
groupIds: string[];
|
|
11
4
|
elements: string[];
|
|
@@ -14,24 +7,24 @@ export interface OverlappedElementGroupPairs {
|
|
|
14
7
|
elementIds: Set<string>;
|
|
15
8
|
groupIds: Set<string>;
|
|
16
9
|
}
|
|
10
|
+
export interface OverlappedElementsMetadata {
|
|
11
|
+
overlappedElementsInfo: Map<string, OverlappedInfo[]>;
|
|
12
|
+
groupElementsInfo: Map<string, number>;
|
|
13
|
+
overlappedElementGroupPairs: OverlappedElementGroupPairs[];
|
|
14
|
+
}
|
|
17
15
|
export interface GroupHilitedElements {
|
|
18
|
-
hilitedElementsQueryCache: MutableRefObject<Map<string, QueryCacheItem>>;
|
|
19
16
|
hiddenGroupsIds: Set<string>;
|
|
20
17
|
showGroupColor: boolean;
|
|
21
|
-
groups: Group[];
|
|
22
18
|
currentHilitedGroups: number;
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
overlappedElementsMetadata: OverlappedElementsMetadata;
|
|
20
|
+
isVisualizationsEnabled: boolean;
|
|
25
21
|
isOverlappedColored: boolean;
|
|
26
|
-
overlappedElementGroupPairs: OverlappedElementGroupPairs[];
|
|
27
|
-
setGroups: (groups: Group[]) => void;
|
|
28
22
|
setHiddenGroupsIds: (hiddenGroupIds: Set<string>) => void;
|
|
29
23
|
setShowGroupColor: (showGroupColor: boolean | ((showGroupColor: boolean) => boolean)) => void;
|
|
30
24
|
setNumberOfVisualizedGroups: (numberOfVisualizedGroups: number | ((numberOfVisualizedGroups: number) => number)) => void;
|
|
31
|
-
|
|
32
|
-
setGroupElementsInfo: (groupElementsInfo: Map<string, number> | ((groupElementsInfo: Map<string, number>) => Map<string, number>)) => void;
|
|
25
|
+
setOverlappedElementsMetadata: (overlappedElementsMetaData: OverlappedElementsMetadata) => void;
|
|
33
26
|
setIsOverlappedColored: (isOverlappedColored: boolean | ((isOverlappedColored: boolean) => boolean)) => void;
|
|
34
|
-
|
|
27
|
+
setIsVisualizationsEnabled: (isVisualizationsEnabled: boolean | ((isVisualizationsEnabled: boolean) => boolean)) => void;
|
|
35
28
|
}
|
|
36
29
|
export declare const GroupHilitedElementsContext: React.Context<GroupHilitedElements>;
|
|
37
30
|
export declare const useGroupHilitedElementsContext: () => GroupHilitedElements;
|
|
@@ -4,23 +4,22 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
export const GroupHilitedElementsContext = React.createContext({
|
|
7
|
-
hilitedElementsQueryCache: { current: new Map() },
|
|
8
7
|
hiddenGroupsIds: new Set(),
|
|
9
8
|
showGroupColor: false,
|
|
10
|
-
groups: [],
|
|
11
9
|
currentHilitedGroups: 0,
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
overlappedElementsMetadata: {
|
|
11
|
+
overlappedElementsInfo: new Map(),
|
|
12
|
+
groupElementsInfo: new Map(),
|
|
13
|
+
overlappedElementGroupPairs: [],
|
|
14
|
+
},
|
|
15
|
+
isVisualizationsEnabled: false,
|
|
14
16
|
isOverlappedColored: false,
|
|
15
|
-
overlappedElementGroupPairs: [],
|
|
16
|
-
setGroups: () => { },
|
|
17
17
|
setHiddenGroupsIds: () => { },
|
|
18
18
|
setShowGroupColor: () => { },
|
|
19
19
|
setNumberOfVisualizedGroups: () => { },
|
|
20
|
-
|
|
21
|
-
setGroupElementsInfo: () => { },
|
|
20
|
+
setOverlappedElementsMetadata: () => { },
|
|
22
21
|
setIsOverlappedColored: () => { },
|
|
23
|
-
|
|
22
|
+
setIsVisualizationsEnabled: () => { },
|
|
24
23
|
});
|
|
25
24
|
export const useGroupHilitedElementsContext = () => {
|
|
26
25
|
const context = React.useContext(GroupHilitedElementsContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupHilitedElementsContext.js","sourceRoot":"","sources":["../../../../src/components/context/GroupHilitedElementsContext.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupHilitedElementsContext.js","sourceRoot":"","sources":["../../../../src/components/context/GroupHilitedElementsContext.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA+B/B,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAAuB;IACnF,eAAe,EAAE,IAAI,GAAG,EAAE;IAC1B,cAAc,EAAE,KAAK;IACrB,oBAAoB,EAAE,CAAC;IACvB,0BAA0B,EAAE;QAC1B,sBAAsB,EAAE,IAAI,GAAG,EAAE;QACjC,iBAAiB,EAAE,IAAI,GAAG,EAAE;QAC5B,2BAA2B,EAAE,EAAE;KAChC;IACD,uBAAuB,EAAE,KAAK;IAC9B,mBAAmB,EAAE,KAAK;IAC1B,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC;IAC7B,iBAAiB,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5B,2BAA2B,EAAE,GAAG,EAAE,GAAG,CAAC;IACtC,6BAA6B,EAAE,GAAG,EAAE,GAAG,CAAC;IACxC,sBAAsB,EAAE,GAAG,EAAE,GAAG,CAAC;IACjC,0BAA0B,EAAE,GAAG,EAAE,GAAG,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAyB,EAAE;IACvE,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;KACH;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nexport interface OverlappedInfo {\n groupIds: string[];\n elements: string[];\n}\n\nexport interface OverlappedElementGroupPairs {\n elementIds: Set<string>;\n groupIds: Set<string>;\n}\n\nexport interface OverlappedElementsMetadata {\n overlappedElementsInfo: Map<string, OverlappedInfo[]>;\n groupElementsInfo: Map<string, number>;\n overlappedElementGroupPairs: OverlappedElementGroupPairs[];\n}\nexport interface GroupHilitedElements {\n hiddenGroupsIds: Set<string>;\n showGroupColor: boolean;\n currentHilitedGroups: number;\n overlappedElementsMetadata: OverlappedElementsMetadata;\n isVisualizationsEnabled: boolean;\n isOverlappedColored: boolean;\n setHiddenGroupsIds: (hiddenGroupIds: Set<string>) => void;\n setShowGroupColor: (showGroupColor: boolean | ((showGroupColor: boolean) => boolean)) => void;\n setNumberOfVisualizedGroups: (numberOfVisualizedGroups: number | ((numberOfVisualizedGroups: number) => number)) => void;\n setOverlappedElementsMetadata: (overlappedElementsMetaData: OverlappedElementsMetadata) => void;\n setIsOverlappedColored: (isOverlappedColored: boolean | ((isOverlappedColored: boolean) => boolean)) => void;\n setIsVisualizationsEnabled: (isVisualizationsEnabled: boolean | ((isVisualizationsEnabled: boolean) => boolean)) => void;\n}\n\nexport const GroupHilitedElementsContext = React.createContext<GroupHilitedElements>({\n hiddenGroupsIds: new Set(),\n showGroupColor: false,\n currentHilitedGroups: 0,\n overlappedElementsMetadata: {\n overlappedElementsInfo: new Map(),\n groupElementsInfo: new Map(),\n overlappedElementGroupPairs: [],\n },\n isVisualizationsEnabled: false,\n isOverlappedColored: false,\n setHiddenGroupsIds: () => { },\n setShowGroupColor: () => { },\n setNumberOfVisualizedGroups: () => { },\n setOverlappedElementsMetadata: () => { },\n setIsOverlappedColored: () => { },\n setIsVisualizationsEnabled: () => { },\n});\n\nexport const useGroupHilitedElementsContext = (): GroupHilitedElements => {\n const context = React.useContext(GroupHilitedElementsContext);\n if (!context) {\n throw new Error(\n \"useGroupHilitedElementsContext should be used within a GroupHilitedElementsContext provider\"\n );\n }\n return context;\n};\n"]}
|
|
@@ -87,6 +87,7 @@ function getNumericalFunction(name) {
|
|
|
87
87
|
case "tan": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Number" }], returnType: "Number" };
|
|
88
88
|
case "tanh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Number" }], returnType: "Number" };
|
|
89
89
|
case "trunc": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Number" }], returnType: "Number" };
|
|
90
|
+
case "tonumber": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: "Number" };
|
|
90
91
|
default: return undefined;
|
|
91
92
|
}
|
|
92
93
|
}
|
|
@@ -103,6 +104,7 @@ function getStringFunction(name) {
|
|
|
103
104
|
case "trim": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "String" }], returnType: "String" };
|
|
104
105
|
case "trimend": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "String" }], returnType: "String" };
|
|
105
106
|
case "trimstart": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "String" }], returnType: "String" };
|
|
107
|
+
case "tostring": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: "String" };
|
|
106
108
|
default: return undefined;
|
|
107
109
|
}
|
|
108
110
|
}
|
|
@@ -120,9 +122,16 @@ function getConditionalFunction(name) {
|
|
|
120
122
|
default: return undefined;
|
|
121
123
|
}
|
|
122
124
|
}
|
|
125
|
+
function getBooleanFunction(name) {
|
|
126
|
+
switch (name) {
|
|
127
|
+
case "isin": return { argumentCountBounds: [2, -1], expectedArguments: [{ canBeAny: true }, { canBeAny: true }], typesMatchFromIndex: 0, returnType: "Boolean" };
|
|
128
|
+
case "toboolean": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: "Boolean" };
|
|
129
|
+
default: return undefined;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
123
132
|
export function getFunction(name) {
|
|
124
133
|
const nameLowerCase = name.toLowerCase();
|
|
125
|
-
return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase);
|
|
134
|
+
return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase) || getBooleanFunction(nameLowerCase);
|
|
126
135
|
}
|
|
127
136
|
export function isFunction(name) {
|
|
128
137
|
return !!getFunction(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormulaFunctionProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaFunctionProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAsBxD,SAAS,eAAe,CAAC,GAAqB,EAAE,MAAc,EAAE,WAAoC;IAClG,IAAI,OAAgB,CAAC;IACrB,IAAI,GAAG,KAAK,WAAW,EAAE;QACvB,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,2BAA2B,EAAE,CAAC;KAC3I;IAED,OAAO,GAAG,WAAW,CAAC,QAAQ,IAAI,GAAG,KAAK,WAAW,CAAC,QAAQ,CAAC;IAC/D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,2BAA2B,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnK,CAAC;AAED,SAAS,iCAAiC;IACxC,IAAI,SAAS,GAAqB,WAAW,CAAC;IAC9C,OAAO,CAAC,GAAqB,EAAE,MAAc,EAAE,WAAoC,EAAE,eAAwB,EAAE,EAAE;QAC/G,IAAI,eAAe,IAAI,SAAS,KAAK,WAAW;YAC9C,SAAS,GAAG,GAAG,CAAC;QAElB,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,OAAO;YACrB,OAAO,UAAU,CAAC;QAEpB,MAAM,OAAO,GAAG,CAAC,SAAS,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1H,IAAI,SAAS,KAAK,WAAW,IAAI,CAAC,OAAO;YACvC,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,SAAS;gBACvB,aAAa,EAAE,YAAY,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,2BAA2B,SAAS,GAAG;aAC5G,CAAC;QAEJ,OAAO;YACL,OAAO;YACP,YAAY,EAAE,SAAS;YACvB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,uBAAuB;SACzG,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAqB,EAAE,IAAwB;IAC1F,MAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC3C,OAAO,EAAE,YAAY,EAAE,qDAAqD,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IAC1H,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,YAAY,EAAE,sDAAsD,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IAE3H,IAAI,UAAU,GAAqB,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC;IAClE,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iCAAiC,EAAE,CAAC;IAEtH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC;QAChG,MAAM,iBAAiB,GAAG,qBAAqB,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7H,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QAC9D,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAClF,IAAI,CAAC,gBAAgB,CAAC,OAAO;YAC3B,OAAO,EAAE,YAAY,EAAE,gBAAgB,CAAC,aAAa,EAAE,CAAC;QAE1D,IAAI,IAAI,CAAC,yBAAyB,IAAI,eAAe;YACnD,UAAU,GAAG,gBAAgB,CAAC,YAAY,IAAI,WAAW,CAAC;KAC7D;IAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE;QACZ,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACtH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAChJ,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACtH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACtH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACzH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACjJ,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC/I,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACtH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC/I,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC/I,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC9I,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACnG,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACtH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACtH,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxH,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;KAC3B;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,QAAQ,IAAI,EAAE;QACZ,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACjJ,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAClJ,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACzK,KAAK,UAAU,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC3K,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC5K,KAAK,SAAS,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC1K,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC9H,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC9H,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvH,KAAK,SAAS,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC1H,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC5H,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;KAC3B;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,QAAQ,IAAI,EAAE;QACZ,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC;QAC7O,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC;QAClM,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC;QACrM,KAAK,SAAS,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAClJ,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACrJ,KAAK,eAAe,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC9K,KAAK,kBAAkB,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACjL,KAAK,oBAAoB,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACnL,KAAK,uBAAuB,CAAC,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACtL,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;KAC3B;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,oBAAoB,CAAC,aAAa,CAAC,IAAI,iBAAiB,CAAC,aAAa,CAAC,IAAI,sBAAsB,CAAC,aAAa,CAAC,CAAC;AAC1H,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\nimport { formatNumericalPositionString } from \"./Utils\";\n\nexport interface FormulaFunctionArgument {\n dataType?: DataType;\n canBeAny?: boolean;\n canBeUndefined?: boolean;\n}\n\nexport interface FormulaFunction {\n argumentCountBounds: [number, number];\n expectedArguments: FormulaFunctionArgument[];\n returnType?: DataType;\n typesMatchFromIndex?: number;\n isreturnTypeFromTypeMatch?: boolean;\n}\n\ninterface ArgumentValidationResult {\n isValid: boolean;\n matchingType?: PossibleDataType;\n invalidReason?: string;\n}\n\nfunction isValidArgument(arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument): ArgumentValidationResult {\n let isValid: boolean;\n if (arg === \"Undefined\") {\n isValid = !!expectedArg.canBeUndefined;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to not be null.` };\n }\n\n isValid = expectedArg.canBeAny || arg === expectedArg.dataType;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.` };\n}\n\nfunction validateArgumentsWithTypeMatching(): (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldTypeMatch: boolean) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\")\n matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid)\n return validation;\n\n const isValid = (matchType === \"Undefined\" || arg === matchType || (arg === \"Undefined\" && !!expectedArg.canBeUndefined));\n if (matchType !== \"Undefined\" && !isValid)\n return {\n isValid,\n matchingType: matchType,\n invalidReason: `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${matchType}.`,\n };\n\n return {\n isValid,\n matchingType: matchType,\n invalidReason: isValid ? undefined : `${formatNumericalPositionString(argPos + 1)} argument is invalid.`,\n };\n };\n}\n\nexport function getFormulaFunctionReturnType(func: FormulaFunction, args: PossibleDataType[]): IResult<PossibleDataType> {\n const hasUnlimitedArguments = func.argumentCountBounds[1] === -1;\n if (args.length < func.argumentCountBounds[0])\n return { errorMessage: `Too few arguments received. Expected a minimum of ${func.argumentCountBounds[0]} argument(s)` };\n if (!hasUnlimitedArguments && args.length > func.argumentCountBounds[1])\n return { errorMessage: `Too many arguments received. Expected a maximum of ${func.argumentCountBounds[1]} argument(s)` };\n\n let returnType: PossibleDataType = func.returnType ?? \"Undefined\";\n const validationFunc = func.typesMatchFromIndex === undefined ? isValidArgument : validateArgumentsWithTypeMatching();\n\n for (let i = 0; i < args.length; i++) {\n const shouldTypeMatch = func.typesMatchFromIndex !== undefined && i >= func.typesMatchFromIndex;\n const expectedTypeIndex = hasUnlimitedArguments && i > func.argumentCountBounds[0] - 1 ? func.argumentCountBounds[0] - 1 : i;\n const expectedArg = func.expectedArguments[expectedTypeIndex];\n const validationResult = validationFunc(args[i], i, expectedArg, shouldTypeMatch);\n if (!validationResult.isValid)\n return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch)\n returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nfunction getNumericalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"abs\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan2\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"cbrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"ceil\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"clz32\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"exp\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"expm1\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"floor\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"fround\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"hypot\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"imul\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"log\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log1p\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log10\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log2\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"max\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"min\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"pow\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"random\": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Number\" };\n case \"round\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sign\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sqrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"trunc\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n default: return undefined;\n }\n}\n\nfunction getStringFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"charat\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"concat\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padend\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padstart\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"substring\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"indexof\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"tolowercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"touppercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trim\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimend\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimstart\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getConditionalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"if\": return { argumentCountBounds: [3, 3], expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }], typesMatchFromIndex: 1, isreturnTypeFromTypeMatch: true };\n case \"ifnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifnotnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase);\n}\n\nexport function isFunction(name: string): boolean {\n return !!getFunction(name);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FormulaFunctionProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaFunctionProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\nimport { formatNumericalPositionString } from \"./Utils\";\n\nexport interface FormulaFunctionArgument {\n dataType?: DataType;\n canBeAny?: boolean;\n canBeUndefined?: boolean;\n}\n\nexport interface FormulaFunction {\n argumentCountBounds: [number, number];\n expectedArguments: FormulaFunctionArgument[];\n returnType?: DataType;\n typesMatchFromIndex?: number;\n isreturnTypeFromTypeMatch?: boolean;\n}\n\ninterface ArgumentValidationResult {\n isValid: boolean;\n matchingType?: PossibleDataType;\n invalidReason?: string;\n}\n\nfunction isValidArgument(arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument): ArgumentValidationResult {\n let isValid: boolean;\n if (arg === \"Undefined\") {\n isValid = !!expectedArg.canBeUndefined;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to not be null.` };\n }\n\n isValid = expectedArg.canBeAny || arg === expectedArg.dataType;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.` };\n}\n\nfunction validateArgumentsWithTypeMatching(): (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldTypeMatch: boolean) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\")\n matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid)\n return validation;\n\n const isValid = (matchType === \"Undefined\" || arg === matchType || (arg === \"Undefined\" && !!expectedArg.canBeUndefined));\n if (matchType !== \"Undefined\" && !isValid)\n return {\n isValid,\n matchingType: matchType,\n invalidReason: `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${matchType}.`,\n };\n\n return {\n isValid,\n matchingType: matchType,\n invalidReason: isValid ? undefined : `${formatNumericalPositionString(argPos + 1)} argument is invalid.`,\n };\n };\n}\n\nexport function getFormulaFunctionReturnType(func: FormulaFunction, args: PossibleDataType[]): IResult<PossibleDataType> {\n const hasUnlimitedArguments = func.argumentCountBounds[1] === -1;\n if (args.length < func.argumentCountBounds[0])\n return { errorMessage: `Too few arguments received. Expected a minimum of ${func.argumentCountBounds[0]} argument(s)` };\n if (!hasUnlimitedArguments && args.length > func.argumentCountBounds[1])\n return { errorMessage: `Too many arguments received. Expected a maximum of ${func.argumentCountBounds[1]} argument(s)` };\n\n let returnType: PossibleDataType = func.returnType ?? \"Undefined\";\n const validationFunc = func.typesMatchFromIndex === undefined ? isValidArgument : validateArgumentsWithTypeMatching();\n\n for (let i = 0; i < args.length; i++) {\n const shouldTypeMatch = func.typesMatchFromIndex !== undefined && i >= func.typesMatchFromIndex;\n const expectedTypeIndex = hasUnlimitedArguments && i > func.argumentCountBounds[0] - 1 ? func.argumentCountBounds[0] - 1 : i;\n const expectedArg = func.expectedArguments[expectedTypeIndex];\n const validationResult = validationFunc(args[i], i, expectedArg, shouldTypeMatch);\n if (!validationResult.isValid)\n return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch)\n returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nfunction getNumericalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"abs\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan2\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"cbrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"ceil\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"clz32\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"exp\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"expm1\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"floor\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"fround\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"hypot\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"imul\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"log\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log1p\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log10\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log2\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"max\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"min\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"pow\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"random\": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Number\" };\n case \"round\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sign\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sqrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"trunc\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tonumber\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Number\" };\n default: return undefined;\n }\n}\n\nfunction getStringFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"charat\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"concat\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padend\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padstart\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"substring\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"indexof\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"tolowercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"touppercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trim\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimend\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimstart\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"tostring\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getConditionalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"if\": return { argumentCountBounds: [3, 3], expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }], typesMatchFromIndex: 1, isreturnTypeFromTypeMatch: true };\n case \"ifnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifnotnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getBooleanFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"isin\": return { argumentCountBounds: [2, -1], expectedArguments: [{ canBeAny: true }, { canBeAny: true }], typesMatchFromIndex: 0, returnType: \"Boolean\"};\n case \"toboolean\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Boolean\"};\n default: return undefined;\n }\n}\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase) || getBooleanFunction(nameLowerCase);\n}\n\nexport function isFunction(name: string): boolean {\n return !!getFunction(name);\n}\n"]}
|