@itwin/grouping-mapping-widget 0.9.3 → 0.11.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/grouping-mapping-widget.d.ts +9 -3
- package/lib/cjs/grouping-mapping-widget.js +15 -3
- package/lib/cjs/grouping-mapping-widget.js.map +1 -1
- package/lib/cjs/test/GroupingMappingCustomUI.test.js +49 -86
- package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/cjs/test/test-utils.d.ts +0 -6
- package/lib/cjs/test/test-utils.js +8 -24
- package/lib/cjs/test/test-utils.js.map +1 -1
- package/lib/cjs/widget/components/ActionPanel.d.ts +1 -1
- package/lib/cjs/widget/components/ActionPanel.js +1 -1
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
- package/lib/cjs/widget/components/ConfirmMappingsImport.d.ts +5 -1
- package/lib/cjs/widget/components/ConfirmMappingsImport.js +10 -9
- package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/cjs/widget/components/GroupAction.d.ts +13 -9
- package/lib/cjs/widget/components/GroupAction.js +56 -58
- package/lib/cjs/widget/components/GroupAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyAction.d.ts +1 -1
- package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupPropertyUtils.js +4 -0
- package/lib/cjs/widget/components/GroupPropertyUtils.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.d.ts +8 -9
- package/lib/cjs/widget/components/Grouping.js +118 -273
- package/lib/cjs/widget/components/Grouping.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.scss +2 -2
- package/lib/cjs/widget/components/GroupingMapping.d.ts +28 -21
- package/lib/cjs/widget/components/GroupingMapping.js +59 -38
- package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
- package/lib/cjs/widget/components/GroupingMappingContent.d.ts +8 -0
- package/lib/cjs/widget/components/GroupingMappingContent.js +47 -0
- package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -0
- package/lib/cjs/widget/components/GroupingMappingContext.d.ts +31 -0
- package/lib/cjs/widget/components/GroupingMappingContext.js +84 -0
- package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -0
- package/lib/cjs/widget/components/GroupingMappingHeader.d.ts +8 -0
- package/lib/cjs/widget/components/GroupingMappingHeader.js +17 -0
- package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -0
- package/lib/cjs/widget/components/GroupingMappingRouter.d.ts +8 -0
- package/lib/cjs/widget/components/GroupingMappingRouter.js +87 -0
- package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -0
- package/lib/cjs/widget/components/Mapping.d.ts +12 -2
- package/lib/cjs/widget/components/Mapping.js +57 -84
- package/lib/cjs/widget/components/Mapping.js.map +1 -1
- package/lib/cjs/widget/components/MappingAction.d.ts +9 -5
- package/lib/cjs/widget/components/MappingAction.js +19 -8
- package/lib/cjs/widget/components/MappingAction.js.map +1 -1
- package/lib/cjs/widget/components/MappingImportWizardModal.d.ts +5 -1
- package/lib/cjs/widget/components/MappingImportWizardModal.js +11 -7
- package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
- package/lib/cjs/widget/components/QueryBuilder.js +2 -7
- package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
- package/lib/cjs/widget/components/SelectMappings.d.ts +5 -1
- package/lib/cjs/widget/components/SelectMappings.js +8 -4
- package/lib/cjs/widget/components/SelectMappings.js.map +1 -1
- package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
- package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +45 -0
- package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +1 -0
- package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
- package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
- package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
- package/lib/cjs/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
- package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js +40 -0
- package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
- package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
- package/lib/cjs/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +36 -16
- package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
- package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
- package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
- package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
- package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +2 -1
- package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
- package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
- package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js +2 -1
- package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
- package/lib/cjs/widget/components/groupsHelpers.d.ts +7 -0
- package/lib/cjs/widget/components/groupsHelpers.js +84 -0
- package/lib/cjs/widget/components/groupsHelpers.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.js +29 -15
- package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/cjs/widget/components/utils.d.ts +1 -3
- package/lib/cjs/widget/components/utils.js +1 -26
- package/lib/cjs/widget/components/utils.js.map +1 -1
- package/lib/esm/grouping-mapping-widget.d.ts +9 -3
- package/lib/esm/grouping-mapping-widget.js +7 -1
- package/lib/esm/grouping-mapping-widget.js.map +1 -1
- package/lib/esm/test/GroupingMappingCustomUI.test.js +46 -83
- package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/esm/test/test-utils.d.ts +0 -6
- package/lib/esm/test/test-utils.js +7 -22
- package/lib/esm/test/test-utils.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.d.ts +1 -1
- package/lib/esm/widget/components/ActionPanel.js +1 -1
- package/lib/esm/widget/components/ActionPanel.js.map +1 -1
- package/lib/esm/widget/components/ConfirmMappingsImport.d.ts +5 -1
- package/lib/esm/widget/components/ConfirmMappingsImport.js +10 -9
- package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
- package/lib/esm/widget/components/GroupAction.d.ts +13 -9
- package/lib/esm/widget/components/GroupAction.js +57 -61
- package/lib/esm/widget/components/GroupAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyAction.d.ts +1 -1
- package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/GroupPropertyUtils.js +4 -0
- package/lib/esm/widget/components/GroupPropertyUtils.js.map +1 -1
- package/lib/esm/widget/components/Grouping.d.ts +8 -9
- package/lib/esm/widget/components/Grouping.js +122 -277
- package/lib/esm/widget/components/Grouping.js.map +1 -1
- package/lib/esm/widget/components/Grouping.scss +2 -2
- package/lib/esm/widget/components/GroupingMapping.d.ts +28 -21
- package/lib/esm/widget/components/GroupingMapping.js +59 -39
- package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
- package/lib/esm/widget/components/GroupingMappingContent.d.ts +8 -0
- package/lib/esm/widget/components/GroupingMappingContent.js +24 -0
- package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -0
- package/lib/esm/widget/components/GroupingMappingContext.d.ts +31 -0
- package/lib/esm/widget/components/GroupingMappingContext.js +61 -0
- package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -0
- package/lib/esm/widget/components/GroupingMappingHeader.d.ts +8 -0
- package/lib/esm/widget/components/GroupingMappingHeader.js +10 -0
- package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -0
- package/lib/esm/widget/components/GroupingMappingRouter.d.ts +8 -0
- package/lib/esm/widget/components/GroupingMappingRouter.js +80 -0
- package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -0
- package/lib/esm/widget/components/Mapping.d.ts +12 -2
- package/lib/esm/widget/components/Mapping.js +59 -86
- package/lib/esm/widget/components/Mapping.js.map +1 -1
- package/lib/esm/widget/components/MappingAction.d.ts +9 -5
- package/lib/esm/widget/components/MappingAction.js +18 -9
- package/lib/esm/widget/components/MappingAction.js.map +1 -1
- package/lib/esm/widget/components/MappingImportWizardModal.d.ts +5 -1
- package/lib/esm/widget/components/MappingImportWizardModal.js +11 -7
- package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
- package/lib/esm/widget/components/QueryBuilder.js +2 -7
- package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
- package/lib/esm/widget/components/SelectMappings.d.ts +5 -1
- package/lib/esm/widget/components/SelectMappings.js +8 -4
- package/lib/esm/widget/components/SelectMappings.js.map +1 -1
- package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
- package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +22 -0
- package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js +1 -0
- package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
- package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
- package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
- package/lib/esm/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
- package/lib/esm/widget/components/customUI/DefaultGroupingUI.js +34 -0
- package/lib/esm/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
- package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
- package/lib/esm/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +11 -7
- package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
- package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
- package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
- package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
- package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +1 -2
- package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
- package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
- package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js +1 -2
- package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
- package/lib/esm/widget/components/groupsHelpers.d.ts +7 -0
- package/lib/esm/widget/components/groupsHelpers.js +77 -0
- package/lib/esm/widget/components/groupsHelpers.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +1 -1
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.js +1 -3
- package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/esm/widget/components/utils.d.ts +1 -3
- package/lib/esm/widget/components/utils.js +0 -24
- package/lib/esm/widget/components/utils.js.map +1 -1
- package/package.json +3 -3
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +0 -1
- package/lib/esm/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +0 -1
- /package/lib/cjs/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
- /package/lib/esm/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyView.js","sourceRoot":"","sources":["../../../../../src/widget/components/property-grid/PropertyView.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 React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { ElementSeparator, Orientation } from \"@itwin/core-react\";\nimport { ActionButtonList } from \"@itwin/components-react\";\nimport \"./PropertyView.scss\";\nimport type { SharedRendererProps } from \"./PropertyRender\";\nimport { useCallback } from \"react\";\nimport { PropertyGridColumnStyleProvider } from \"@itwin/components-react/lib/cjs/components-react/properties/renderers/PropertyGridColumns\";\nimport { Checkbox } from \"@itwin/itwinui-react\";\nimport { CommonPropertyRenderer } from \"@itwin/components-react/lib/cjs/components-react/properties/renderers/CommonPropertyRenderer\";\nimport { usePropertyGridWrapper } from \"../context/PropertyGridWrapperContext\";\n\n/** Properties of [[PropertyView]] React component\n * @public\n */\nexport interface PropertyViewProps extends SharedRendererProps {\n /** Property label as a React element */\n labelElement: React.ReactNode;\n /** Property value as a React element */\n valueElement?: React.ReactNode;\n /** Render callback for property value. If specified, `valueElement` is ignored. */\n valueElementRenderer?: () => React.ReactNode;\n /** Multiplier of how much the property is indented to the right */\n indentation?: number;\n}\n\n/**\n * A React component that renders property as label/value pair\n * @public\n */\nexport const PropertyView = (props: PropertyViewProps) => {\n const [isCheckboxLoading, setIsCheckboxLoading] = useState(false);\n const {\n currentPropertyList,\n queryBuilder,\n setCurrentPropertyList,\n setQuery,\n isUpdating,\n } = usePropertyGridWrapper();\n\n const _validatePropertySelection = () => {\n if (currentPropertyList.includes(props.propertyRecord)) {\n return true;\n }\n // Check if all subproperties are selected\n if (!_validateNestedPropertiesSelection(props.propertyRecord)) {\n return false;\n }\n return true;\n };\n\n const _validateNestedPropertiesSelection = (prop: PropertyRecord) => {\n switch (prop.value.valueFormat) {\n case PropertyValueFormat.Primitive:\n if (!currentPropertyList.includes(prop)) {\n return false;\n }\n break;\n case PropertyValueFormat.Array:\n if (prop.value.items.length === 0) {\n if (!currentPropertyList.includes(prop)) {\n return false;\n }\n }\n break;\n case PropertyValueFormat.Struct:\n for (const subPropName in prop.value.members) {\n if (\n Object.prototype.hasOwnProperty.call(\n prop.value.members,\n subPropName\n )\n ) {\n if (\n !_validateNestedPropertiesSelection(\n prop.value.members[subPropName]\n )\n ) {\n return false;\n }\n }\n }\n }\n return true;\n };\n\n const [isHovered, setIsHovered] = useState<boolean>(false);\n const [isPropertySelected, setIsPropertySelected] = useState<boolean>(\n _validatePropertySelection()\n );\n\n const _addSelectedProperty = useCallback(\n async (prop: PropertyRecord) => {\n // TODO: roof selected item/category value is an object but format is primitive(needs further exploration)\n if (\n !currentPropertyList.includes(prop) &&\n prop.value.valueFormat === PropertyValueFormat.Primitive\n ) {\n if (!(await queryBuilder?.addProperty(prop))) {\n setIsCheckboxLoading(false);\n setIsPropertySelected(false);\n return;\n }\n setCurrentPropertyList(\n currentPropertyList.concat(prop)\n );\n setQuery(queryBuilder?.buildQueryString() ?? \"\");\n }\n },\n [currentPropertyList, queryBuilder, setCurrentPropertyList, setQuery]\n );\n\n const _addNestedProperties = useCallback(\n (prop: PropertyRecord) => {\n switch (prop.value.valueFormat) {\n case PropertyValueFormat.Primitive:\n void _addSelectedProperty(prop);\n break;\n case PropertyValueFormat.Array:\n if (prop.value.items.length === 0) {\n void _addSelectedProperty(prop);\n }\n break;\n case PropertyValueFormat.Struct:\n for (const subPropName in prop.value.members) {\n if (\n Object.prototype.hasOwnProperty.call(\n prop.value.members,\n subPropName\n )\n ) {\n _addNestedProperties(prop.value.members[subPropName]);\n }\n }\n }\n },\n [_addSelectedProperty]\n );\n\n const _removeSelectedProperty = useCallback(\n async (prop: PropertyRecord): Promise<void> => {\n if (currentPropertyList.includes(prop)) {\n setCurrentPropertyList(\n currentPropertyList.filter((x: PropertyRecord) => x !== prop)\n );\n await queryBuilder?.removeProperty(prop);\n setQuery(queryBuilder?.buildQueryString() ?? \"\");\n }\n },\n [currentPropertyList, queryBuilder, setCurrentPropertyList, setQuery]\n );\n\n const _removeNestedProperties = useCallback(\n (prop: PropertyRecord) => {\n switch (prop.value.valueFormat) {\n case PropertyValueFormat.Primitive:\n void _removeSelectedProperty(prop);\n break;\n case PropertyValueFormat.Array:\n if (prop.value.items.length === 0) {\n void _removeSelectedProperty(prop);\n }\n break;\n case PropertyValueFormat.Struct:\n for (const subPropName in prop.value.members) {\n if (\n Object.prototype.hasOwnProperty.call(\n prop.value.members,\n subPropName\n )\n ) {\n _removeNestedProperties(prop.value.members[subPropName]);\n }\n }\n }\n },\n [_removeSelectedProperty]\n );\n\n useEffect(() => {\n if (!currentPropertyList.includes(props.propertyRecord)) {\n setIsPropertySelected(false);\n }\n }, [currentPropertyList, props.propertyRecord]);\n\n useEffect(() => {\n if (props?.propertyRecord) {\n if (isPropertySelected) {\n if (isUpdating) {\n setIsCheckboxLoading(true);\n }\n _addNestedProperties(props.propertyRecord);\n } else {\n _removeNestedProperties(props.propertyRecord);\n }\n }\n }, [\n _addNestedProperties,\n _removeNestedProperties,\n isPropertySelected,\n props.propertyRecord,\n isUpdating,\n ]);\n\n useEffect(() => {\n if (!isUpdating) {\n setIsCheckboxLoading(false);\n }\n }, [isUpdating]);\n\n const _onPropertySelectionChanged = () => {\n setIsPropertySelected(!isPropertySelected);\n };\n\n const _onClick = () => {\n if (props.onClick) {\n props.onClick(props.propertyRecord, props.uniqueKey);\n }\n };\n\n const _onMouseEnter = () => {\n if (props.isHoverable) {\n setIsHovered(true);\n }\n };\n\n const _onMouseLeave = () => {\n if (props.isHoverable) {\n setIsHovered(false);\n }\n };\n\n const _onContextMenu = (e: React.MouseEvent) => {\n if (props.onContextMenu) {\n props.onContextMenu(props.propertyRecord, e);\n }\n if (props.onRightClick) {\n props.onRightClick(props.propertyRecord, props.uniqueKey);\n }\n e.preventDefault();\n return false;\n };\n\n const getClassName = (viewProps: PropertyViewProps) => {\n let propertyRecordClassName =\n viewProps.orientation === Orientation.Horizontal\n ? \"gmw-components-property-record--horizontal\"\n : \"gmw-components-property-record--vertical\";\n if (viewProps.isSelected) {\n propertyRecordClassName += \" components--selected\";\n }\n if (viewProps.onClick) {\n propertyRecordClassName += \" components--clickable\";\n }\n if (viewProps.isHoverable) {\n propertyRecordClassName += \" components--hoverable\";\n }\n return propertyRecordClassName;\n };\n\n const ratio = props.columnRatio ? props.columnRatio : 0.25;\n const needElementSeparator =\n props.orientation === Orientation.Horizontal &&\n !!props.onColumnRatioChanged;\n const needActionButtons = !!props.actionButtonRenderers;\n const columnsStyleProvider = new PropertyGridColumnStyleProvider(\n props.columnInfo\n );\n\n const offset = CommonPropertyRenderer.getLabelOffset(\n props.indentation,\n props.orientation,\n props.width,\n props.columnRatio,\n props.columnInfo?.minLabelWidth\n );\n\n return (\n <div\n style={columnsStyleProvider.getStyle(\n props.orientation,\n needActionButtons,\n ratio,\n needElementSeparator\n )}\n className={getClassName(props)}\n onClick={_onClick}\n onContextMenu={_onContextMenu}\n onMouseEnter={_onMouseEnter}\n onMouseLeave={_onMouseLeave}\n role=\"presentation\"\n >\n <div className=\"gmw-components-property-record-label\">\n {props.propertyRecord.value.valueFormat ===\n PropertyValueFormat.Primitive && (\n <Checkbox\n style={{ marginLeft: offset }}\n className=\"gmw-components-property-selection-checkbox\"\n checked={isPropertySelected}\n onChange={_onPropertySelectionChanged}\n disabled={\n isUpdating ||\n props.propertyRecord.value.value === undefined\n }\n isLoading={isCheckboxLoading}\n />\n )}\n {props.labelElement}\n </div>\n {needElementSeparator ? (\n <ElementSeparator\n movableArea={props.width}\n onRatioChanged={props.onColumnRatioChanged}\n ratio={ratio}\n orientation={props.orientation}\n isResizeHandleHovered={props.isResizeHandleHovered}\n onResizeHandleHoverChanged={props.onResizeHandleHoverChanged}\n isResizeHandleBeingDragged={props.isResizeHandleBeingDragged}\n onResizeHandleDragChanged={props.onResizeHandleDragChanged}\n />\n ) : undefined}\n {props.propertyRecord.value.valueFormat ===\n PropertyValueFormat.Primitive ? (\n <div className=\"gmw-components-property-record-value\">\n <span>\n {props.valueElementRenderer\n ? props.valueElementRenderer()\n : props.valueElement}\n </span>\n </div>\n ) : undefined}\n {props.actionButtonRenderers ? (\n <ActionButtonList\n orientation={props.orientation}\n property={props.propertyRecord}\n isPropertyHovered={isHovered}\n actionButtonRenderers={props.actionButtonRenderers}\n />\n ) : undefined}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"PropertyView.js","sourceRoot":"","sources":["../../../../../src/widget/components/property-grid/PropertyView.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 React, { useCallback, useEffect, useState } from \"react\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { ElementSeparator, Orientation } from \"@itwin/core-react\";\nimport { ActionButtonList } from \"@itwin/components-react\";\nimport \"./PropertyView.scss\";\nimport type { SharedRendererProps } from \"./PropertyRender\";\nimport { PropertyGridColumnStyleProvider } from \"@itwin/components-react/lib/cjs/components-react/properties/renderers/PropertyGridColumns\";\nimport { Checkbox } from \"@itwin/itwinui-react\";\nimport { CommonPropertyRenderer } from \"@itwin/components-react/lib/cjs/components-react/properties/renderers/CommonPropertyRenderer\";\nimport { usePropertyGridWrapper } from \"../context/PropertyGridWrapperContext\";\n\n/** Properties of [[PropertyView]] React component\n * @public\n */\nexport interface PropertyViewProps extends SharedRendererProps {\n /** Property label as a React element */\n labelElement: React.ReactNode;\n /** Property value as a React element */\n valueElement?: React.ReactNode;\n /** Render callback for property value. If specified, `valueElement` is ignored. */\n valueElementRenderer?: () => React.ReactNode;\n /** Multiplier of how much the property is indented to the right */\n indentation?: number;\n}\n\n/**\n * A React component that renders property as label/value pair\n * @public\n */\nexport const PropertyView = (props: PropertyViewProps) => {\n const [isCheckboxLoading, setIsCheckboxLoading] = useState(false);\n const {\n currentPropertyList,\n queryBuilder,\n setCurrentPropertyList,\n setQuery,\n isUpdating,\n } = usePropertyGridWrapper();\n\n const _validatePropertySelection = () => {\n if (currentPropertyList.includes(props.propertyRecord)) {\n return true;\n }\n // Check if all subproperties are selected\n if (!_validateNestedPropertiesSelection(props.propertyRecord)) {\n return false;\n }\n return true;\n };\n\n const _validateNestedPropertiesSelection = (prop: PropertyRecord) => {\n switch (prop.value.valueFormat) {\n case PropertyValueFormat.Primitive:\n if (!currentPropertyList.includes(prop)) {\n return false;\n }\n break;\n case PropertyValueFormat.Array:\n if (prop.value.items.length === 0) {\n if (!currentPropertyList.includes(prop)) {\n return false;\n }\n }\n break;\n case PropertyValueFormat.Struct:\n for (const subPropName in prop.value.members) {\n if (\n Object.prototype.hasOwnProperty.call(\n prop.value.members,\n subPropName\n )\n ) {\n if (\n !_validateNestedPropertiesSelection(\n prop.value.members[subPropName]\n )\n ) {\n return false;\n }\n }\n }\n }\n return true;\n };\n\n const [isHovered, setIsHovered] = useState<boolean>(false);\n const [isPropertySelected, setIsPropertySelected] = useState<boolean>(\n _validatePropertySelection()\n );\n\n const _addSelectedProperty = useCallback(\n async (prop: PropertyRecord) => {\n // TODO: roof selected item/category value is an object but format is primitive(needs further exploration)\n if (\n !currentPropertyList.includes(prop) &&\n prop.value.valueFormat === PropertyValueFormat.Primitive\n ) {\n if (!(await queryBuilder?.addProperty(prop))) {\n setIsCheckboxLoading(false);\n setIsPropertySelected(false);\n return;\n }\n setCurrentPropertyList(\n currentPropertyList.concat(prop)\n );\n setQuery(queryBuilder?.buildQueryString() ?? \"\");\n }\n },\n [currentPropertyList, queryBuilder, setCurrentPropertyList, setQuery]\n );\n\n const _addNestedProperties = useCallback(\n (prop: PropertyRecord) => {\n switch (prop.value.valueFormat) {\n case PropertyValueFormat.Primitive:\n void _addSelectedProperty(prop);\n break;\n case PropertyValueFormat.Array:\n if (prop.value.items.length === 0) {\n void _addSelectedProperty(prop);\n }\n break;\n case PropertyValueFormat.Struct:\n for (const subPropName in prop.value.members) {\n if (\n Object.prototype.hasOwnProperty.call(\n prop.value.members,\n subPropName\n )\n ) {\n _addNestedProperties(prop.value.members[subPropName]);\n }\n }\n }\n },\n [_addSelectedProperty]\n );\n\n const _removeSelectedProperty = useCallback(\n async (prop: PropertyRecord): Promise<void> => {\n if (currentPropertyList.includes(prop)) {\n setCurrentPropertyList(\n currentPropertyList.filter((x: PropertyRecord) => x !== prop)\n );\n await queryBuilder?.removeProperty(prop);\n setQuery(queryBuilder?.buildQueryString() ?? \"\");\n }\n },\n [currentPropertyList, queryBuilder, setCurrentPropertyList, setQuery]\n );\n\n const _removeNestedProperties = useCallback(\n (prop: PropertyRecord) => {\n switch (prop.value.valueFormat) {\n case PropertyValueFormat.Primitive:\n void _removeSelectedProperty(prop);\n break;\n case PropertyValueFormat.Array:\n if (prop.value.items.length === 0) {\n void _removeSelectedProperty(prop);\n }\n break;\n case PropertyValueFormat.Struct:\n for (const subPropName in prop.value.members) {\n if (\n Object.prototype.hasOwnProperty.call(\n prop.value.members,\n subPropName\n )\n ) {\n _removeNestedProperties(prop.value.members[subPropName]);\n }\n }\n }\n },\n [_removeSelectedProperty]\n );\n\n useEffect(() => {\n if (!currentPropertyList.includes(props.propertyRecord)) {\n setIsPropertySelected(false);\n }\n }, [currentPropertyList, props.propertyRecord]);\n\n useEffect(() => {\n if (props?.propertyRecord) {\n if (isPropertySelected) {\n if (isUpdating) {\n setIsCheckboxLoading(true);\n }\n _addNestedProperties(props.propertyRecord);\n } else {\n _removeNestedProperties(props.propertyRecord);\n }\n }\n }, [\n _addNestedProperties,\n _removeNestedProperties,\n isPropertySelected,\n props.propertyRecord,\n isUpdating,\n ]);\n\n useEffect(() => {\n if (!isUpdating) {\n setIsCheckboxLoading(false);\n }\n }, [isUpdating]);\n\n const _onPropertySelectionChanged = () => {\n setIsPropertySelected(!isPropertySelected);\n };\n\n const _onClick = () => {\n if (props.onClick) {\n props.onClick(props.propertyRecord, props.uniqueKey);\n }\n };\n\n const _onMouseEnter = () => {\n if (props.isHoverable) {\n setIsHovered(true);\n }\n };\n\n const _onMouseLeave = () => {\n if (props.isHoverable) {\n setIsHovered(false);\n }\n };\n\n const _onContextMenu = (e: React.MouseEvent) => {\n if (props.onContextMenu) {\n props.onContextMenu(props.propertyRecord, e);\n }\n if (props.onRightClick) {\n props.onRightClick(props.propertyRecord, props.uniqueKey);\n }\n e.preventDefault();\n return false;\n };\n\n const getClassName = (viewProps: PropertyViewProps) => {\n let propertyRecordClassName =\n viewProps.orientation === Orientation.Horizontal\n ? \"gmw-components-property-record--horizontal\"\n : \"gmw-components-property-record--vertical\";\n if (viewProps.isSelected) {\n propertyRecordClassName += \" components--selected\";\n }\n if (viewProps.onClick) {\n propertyRecordClassName += \" components--clickable\";\n }\n if (viewProps.isHoverable) {\n propertyRecordClassName += \" components--hoverable\";\n }\n return propertyRecordClassName;\n };\n\n const ratio = props.columnRatio ? props.columnRatio : 0.25;\n const needElementSeparator =\n props.orientation === Orientation.Horizontal &&\n !!props.onColumnRatioChanged;\n const needActionButtons = !!props.actionButtonRenderers;\n const columnsStyleProvider = new PropertyGridColumnStyleProvider(\n props.columnInfo\n );\n\n const offset = CommonPropertyRenderer.getLabelOffset(\n props.indentation,\n props.orientation,\n props.width,\n props.columnRatio,\n props.columnInfo?.minLabelWidth\n );\n\n return (\n <div\n style={columnsStyleProvider.getStyle(\n props.orientation,\n needActionButtons,\n ratio,\n needElementSeparator\n )}\n className={getClassName(props)}\n onClick={_onClick}\n onContextMenu={_onContextMenu}\n onMouseEnter={_onMouseEnter}\n onMouseLeave={_onMouseLeave}\n role=\"presentation\"\n >\n <div className=\"gmw-components-property-record-label\">\n {props.propertyRecord.value.valueFormat ===\n PropertyValueFormat.Primitive && (\n <Checkbox\n style={{ marginLeft: offset }}\n className=\"gmw-components-property-selection-checkbox\"\n checked={isPropertySelected}\n onChange={_onPropertySelectionChanged}\n disabled={\n isUpdating ||\n props.propertyRecord.value.value === undefined\n }\n isLoading={isCheckboxLoading}\n />\n )}\n {props.labelElement}\n </div>\n {needElementSeparator ? (\n <ElementSeparator\n movableArea={props.width}\n onRatioChanged={props.onColumnRatioChanged}\n ratio={ratio}\n orientation={props.orientation}\n isResizeHandleHovered={props.isResizeHandleHovered}\n onResizeHandleHoverChanged={props.onResizeHandleHoverChanged}\n isResizeHandleBeingDragged={props.isResizeHandleBeingDragged}\n onResizeHandleDragChanged={props.onResizeHandleDragChanged}\n />\n ) : undefined}\n {props.propertyRecord.value.valueFormat ===\n PropertyValueFormat.Primitive ? (\n <div className=\"gmw-components-property-record-value\">\n <span>\n {props.valueElementRenderer\n ? props.valueElementRenderer()\n : props.valueElement}\n </span>\n </div>\n ) : undefined}\n {props.actionButtonRenderers ? (\n <ActionButtonList\n orientation={props.orientation}\n property={props.propertyRecord}\n isPropertyHovered={isHovered}\n actionButtonRenderers={props.actionButtonRenderers}\n />\n ) : undefined}\n </div>\n );\n};\n"]}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import "./utils.scss";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import type { ISelectionProvider, SelectionChangeEventArgs } from "@itwin/presentation-frontend";
|
|
4
3
|
import type { IModelConnection } from "@itwin/core-frontend";
|
|
5
|
-
export declare const onSelectionChanged: (evt: SelectionChangeEventArgs, selectionProvider: ISelectionProvider) => void;
|
|
6
4
|
export interface WidgetHeaderProps {
|
|
7
5
|
title: string;
|
|
8
6
|
disabled?: boolean;
|
|
9
|
-
returnFn?: () =>
|
|
7
|
+
returnFn?: () => void;
|
|
10
8
|
}
|
|
11
9
|
export declare const WidgetHeader: ({ title, disabled, returnFn, }: WidgetHeaderProps) => JSX.Element;
|
|
12
10
|
export declare const handleInputChange: <T>(e: React.ChangeEvent<HTMLInputElement>, values: T, setValues: React.Dispatch<React.SetStateAction<T>>) => void;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.LoadingSpinner = exports.EmptyMessage = exports.LoadingOverlay = exports.handleError = exports.fetchIdsFromQuery = exports.handleInputChange = exports.WidgetHeader =
|
|
6
|
+
exports.LoadingSpinner = exports.EmptyMessage = exports.LoadingOverlay = exports.handleError = exports.fetchIdsFromQuery = exports.handleInputChange = exports.WidgetHeader = void 0;
|
|
7
7
|
/*---------------------------------------------------------------------------------------------
|
|
8
8
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
9
9
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -13,31 +13,6 @@ const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
|
13
13
|
require("./utils.scss");
|
|
14
14
|
const react_1 = __importDefault(require("react"));
|
|
15
15
|
const core_common_1 = require("@itwin/core-common");
|
|
16
|
-
const onSelectionChanged = (evt, selectionProvider) => {
|
|
17
|
-
/* eslint-disable no-console */
|
|
18
|
-
const selection = selectionProvider.getSelection(evt.imodel, evt.level);
|
|
19
|
-
if (selection.isEmpty) {
|
|
20
|
-
console.log("========== Selection cleared ==========");
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
console.log("========== Selection change ===========");
|
|
24
|
-
if (selection.instanceKeys.size !== 0) {
|
|
25
|
-
// log all selected ECInstance ids grouped by ECClass name
|
|
26
|
-
console.log("ECInstances:");
|
|
27
|
-
selection.instanceKeys.forEach((ids, ecclass) => {
|
|
28
|
-
console.log(`${ecclass}: [${[...ids].join(",")}]`);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
if (selection.nodeKeys.size !== 0) {
|
|
32
|
-
// log all selected node keys
|
|
33
|
-
console.log("Nodes:");
|
|
34
|
-
selection.nodeKeys.forEach((key) => console.log(JSON.stringify(key)));
|
|
35
|
-
}
|
|
36
|
-
console.log("=======================================");
|
|
37
|
-
}
|
|
38
|
-
/* eslint-enable no-console */
|
|
39
|
-
};
|
|
40
|
-
exports.onSelectionChanged = onSelectionChanged;
|
|
41
16
|
const WidgetHeader = ({ title, disabled = false, returnFn, }) => {
|
|
42
17
|
return (react_1.default.createElement("div", { className: 'gmw-widget-header-container' },
|
|
43
18
|
returnFn && (react_1.default.createElement("div", { className: disabled ? "gmw-chevron-disabled" : "gmw-chevron", onClick: disabled ? undefined : returnFn },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/widget/components/utils.tsx"],"names":[],"mappings":";;;;;;AAAA;;;+FAG+F;AAC/F,oEAA4D;AAC5D,wDAAqE;AACrE,wBAAsB;AACtB,kDAA0B;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/widget/components/utils.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 { SvgChevronLeft } from \"@itwin/itwinui-icons-react\";\nimport { ProgressRadial, Text, toaster } from \"@itwin/itwinui-react\";\nimport \"./utils.scss\";\nimport React from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\n\nexport interface WidgetHeaderProps {\n title: string;\n disabled?: boolean;\n returnFn?: () => void;\n}\n\nexport const WidgetHeader = ({\n title,\n disabled = false,\n returnFn,\n}: WidgetHeaderProps) => {\n return (\n <div className='gmw-widget-header-container'>\n {returnFn && (\n <div\n className={disabled ? \"gmw-chevron-disabled\" : \"gmw-chevron\"}\n onClick={disabled ? undefined : returnFn}\n >\n <SvgChevronLeft />\n </div>\n )}\n <Text className='gmw-title' variant='title'>\n {title}\n </Text>\n </div>\n );\n};\n\nexport const handleInputChange = <T,>(\n e: React.ChangeEvent<HTMLInputElement>,\n values: T,\n setValues: React.Dispatch<React.SetStateAction<T>>,\n) => {\n const { name, value } = e.target;\n\n setValues({\n ...values,\n [name]: value,\n });\n};\n\nexport const fetchIdsFromQuery = async (\n query: string,\n iModelConnection: IModelConnection,\n) => {\n if (query === \"\") {\n return [];\n }\n const ids: string[] = [];\n const rowIterator = iModelConnection.query(query, undefined, {\n rowFormat: QueryRowFormat.UseJsPropertyNames,\n });\n while (true) {\n const { done, value } = await rowIterator.next();\n if (done) {\n break;\n }\n if (Object.keys(value).includes(\"id\")) {\n ids.push(value.id);\n } else if (Object.keys(value).includes(\"element.id\")) {\n ids.push(value[\"element.id\"]);\n } else if (Object.keys(value).includes(\"eCInstanceId\")) {\n ids.push(value.eCInstanceId);\n }\n }\n return ids;\n};\n\nexport const handleError = (errorStatus: number) => {\n let errorMessage = \"Error! \";\n switch (errorStatus) {\n case 401:\n errorMessage += `You are unauthorized to do this operation.`;\n break;\n case 403:\n errorMessage += `You don't have permission to access the requested resource.`;\n break;\n case 404:\n errorMessage += `The requested resource was not found.`;\n break;\n case 409:\n errorMessage += `This property name is already being used.`;\n break;\n case 422:\n errorMessage += `Unable to process the request.`;\n break;\n case 429:\n errorMessage += `Too many requests.`;\n break;\n case 500:\n errorMessage += `Internal server error.`;\n break;\n case 502:\n errorMessage += `Bad gateway.`;\n break;\n case 503:\n errorMessage += `Service unavailable.`;\n break;\n default:\n errorMessage += `Something went wrong!`;\n }\n toaster.negative(errorMessage);\n\n};\n\nexport const LoadingOverlay = () => (\n <div className='gmw-center-overlay'>\n <Text>Loading</Text>\n <ProgressRadial indeterminate />\n <Text>Please wait...</Text>\n </div>\n);\n\ninterface EmptyMessageProps {\n message: string;\n}\n\nexport const EmptyMessage = ({ message }: EmptyMessageProps) => (\n <div className='gmw-center-overlay'>\n <Text>{message}</Text>\n </div>\n);\n\nexport const LoadingSpinner = () => {\n return (\n <div className=\"gmw-loading-spinner\">\n <ProgressRadial size=\"small\" indeterminate />\n </div>\n );\n};\n"]}
|
|
@@ -5,12 +5,18 @@ export { createDefaultMappingClient, createMappingClient, MappingClientContext,
|
|
|
5
5
|
export { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from "./widget/components/context/GroupingApiConfigContext";
|
|
6
6
|
export * from "@itwin/insights-client";
|
|
7
7
|
/** Internal components for custom UIs */
|
|
8
|
-
export { Mappings } from "./widget/components/Mapping";
|
|
9
|
-
export {
|
|
8
|
+
export { Mappings, MappingsProps } from "./widget/components/Mapping";
|
|
9
|
+
export { MappingAction, MappingActionProps } from "./widget/components/MappingAction";
|
|
10
|
+
export { GroupingMappingContext, GroupingMappingContextProps } from "./widget/components/GroupingMappingContext";
|
|
11
|
+
export { Groupings, GroupingProps } from "./widget/components/Grouping";
|
|
12
|
+
export { GroupAction, GroupActionProps } from "./widget/components/GroupAction";
|
|
10
13
|
export { PropertyMenu } from "./widget/components/PropertyMenu";
|
|
14
|
+
export { SearchGroupingCustomUI } from "./widget/components/customUI/SearchGroupingCustomUI";
|
|
15
|
+
export { ManualGroupingCustomUI } from "./widget/components/customUI/ManualGroupingCustomUI";
|
|
16
|
+
export { GroupQueryBuilderCustomUI } from "./widget/components/customUI/GroupQueryBuilderCustomUI";
|
|
17
|
+
export { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from "./widget/components/customUI/GroupingMappingCustomUI";
|
|
11
18
|
/** Formula DataType resolver */
|
|
12
19
|
export { resolveFormulaDataType } from "./formula/FormulaDataTypeResolver";
|
|
13
20
|
export { DataType, PropertyMap } from "./formula/Types";
|
|
14
21
|
export { IResult } from "./formula/IResult";
|
|
15
|
-
export { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from "./widget/components/customUI/GroupingMappingCustomUI";
|
|
16
22
|
//# sourceMappingURL=grouping-mapping-widget.d.ts.map
|
|
@@ -10,9 +10,15 @@ export { GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from "./
|
|
|
10
10
|
export * from "@itwin/insights-client";
|
|
11
11
|
/** Internal components for custom UIs */
|
|
12
12
|
export { Mappings } from "./widget/components/Mapping";
|
|
13
|
+
export { MappingAction } from "./widget/components/MappingAction";
|
|
14
|
+
export { GroupingMappingContext } from "./widget/components/GroupingMappingContext";
|
|
13
15
|
export { Groupings } from "./widget/components/Grouping";
|
|
16
|
+
export { GroupAction } from "./widget/components/GroupAction";
|
|
14
17
|
export { PropertyMenu } from "./widget/components/PropertyMenu";
|
|
18
|
+
export { SearchGroupingCustomUI } from "./widget/components/customUI/SearchGroupingCustomUI";
|
|
19
|
+
export { ManualGroupingCustomUI } from "./widget/components/customUI/ManualGroupingCustomUI";
|
|
20
|
+
export { GroupQueryBuilderCustomUI } from "./widget/components/customUI/GroupQueryBuilderCustomUI";
|
|
21
|
+
export { GroupingMappingCustomUIType } from "./widget/components/customUI/GroupingMappingCustomUI";
|
|
15
22
|
/** Formula DataType resolver */
|
|
16
23
|
export { resolveFormulaDataType } from "./formula/FormulaDataTypeResolver";
|
|
17
|
-
export { GroupingMappingCustomUIType } from "./widget/components/customUI/GroupingMappingCustomUI";
|
|
18
24
|
//# sourceMappingURL=grouping-mapping-widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,cAAc,gCAAgC,CAAC;AAE/C,0EAA0E;AAC1E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAC3J,OAAO,EAA4D,+BAA+B,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAC9L,cAAc,wBAAwB,CAAC;AAEvC,yCAAyC;AACzC,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,cAAc,gCAAgC,CAAC;AAE/C,0EAA0E;AAC1E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAC3J,OAAO,EAA4D,+BAA+B,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAC9L,cAAc,wBAAwB,CAAC;AAEvC,yCAAyC;AACzC,OAAO,EAAE,QAAQ,EAAiB,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAsB,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAA+B,MAAM,4CAA4C,CAAC;AACjH,OAAO,EAAE,SAAS,EAAiB,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAoB,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAA2B,2BAA2B,EAAkF,MAAM,sDAAsD,CAAC;AAE5M,gCAAgC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,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*--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/GroupingMappingWidget\";\n\n/** Interfaces for providing custom MappingClient and API configuration */\nexport { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from \"./widget/components/context/MappingClientContext\";\nexport { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from \"./widget/components/context/GroupingApiConfigContext\";\nexport * from \"@itwin/insights-client\";\n\n/** Internal components for custom UIs */\nexport { Mappings, MappingsProps } from \"./widget/components/Mapping\";\nexport { MappingAction, MappingActionProps } from \"./widget/components/MappingAction\";\nexport { GroupingMappingContext, GroupingMappingContextProps } from \"./widget/components/GroupingMappingContext\";\nexport { Groupings, GroupingProps } from \"./widget/components/Grouping\";\nexport { GroupAction, GroupActionProps } from \"./widget/components/GroupAction\";\nexport { PropertyMenu } from \"./widget/components/PropertyMenu\";\nexport { SearchGroupingCustomUI } from \"./widget/components/customUI/SearchGroupingCustomUI\";\nexport { ManualGroupingCustomUI } from \"./widget/components/customUI/ManualGroupingCustomUI\";\nexport { GroupQueryBuilderCustomUI } from \"./widget/components/customUI/GroupQueryBuilderCustomUI\";\nexport { GroupingMappingCustomUI, GroupingMappingCustomUIType, ContextCustomUI, GroupingCustomUI, GroupingCustomUIProps, ContextCustomUIProps } from \"./widget/components/customUI/GroupingMappingCustomUI\";\n\n/** Formula DataType resolver */\nexport { resolveFormulaDataType } from \"./formula/FormulaDataTypeResolver\";\nexport { DataType, PropertyMap } from \"./formula/Types\";\nexport { IResult } from \"./formula/IResult\";\n"]}
|
|
@@ -4,13 +4,11 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import React from "react";
|
|
6
6
|
import "@testing-library/jest-dom";
|
|
7
|
-
import { screen, waitForElementToBeRemoved, within } from "./test-utils";
|
|
8
7
|
import { faker } from "@faker-js/faker";
|
|
9
|
-
import { Groupings } from "../grouping-mapping-widget";
|
|
8
|
+
import { GroupingMappingCustomUIType, Groupings } from "../grouping-mapping-widget";
|
|
10
9
|
import * as moq from "typemoq";
|
|
11
|
-
import { GroupingMappingCustomUIType } from "../grouping-mapping-widget";
|
|
12
10
|
import userEvent from "@testing-library/user-event";
|
|
13
|
-
import { render } from "
|
|
11
|
+
import { render, screen, waitForElementToBeRemoved, within } from "../test/test-utils";
|
|
14
12
|
const mockITwinId = faker.datatype.uuid();
|
|
15
13
|
const mockIModelId = faker.datatype.uuid();
|
|
16
14
|
const mockMappingId = faker.datatype.uuid();
|
|
@@ -52,61 +50,44 @@ const groupsFactory = () => ({
|
|
|
52
50
|
},
|
|
53
51
|
});
|
|
54
52
|
const connectionMock = moq.Mock.ofType();
|
|
55
|
-
|
|
53
|
+
const viewManagerMock = moq.Mock.ofType();
|
|
56
54
|
const mappingClientMock = moq.Mock.ofType();
|
|
57
55
|
jest.mock("@itwin/appui-react", () => ({
|
|
58
56
|
...jest.requireActual("@itwin/appui-react"),
|
|
59
57
|
useActiveIModelConnection: () => connectionMock.object,
|
|
60
58
|
}));
|
|
61
|
-
|
|
62
|
-
jest.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}),
|
|
67
|
-
}));
|
|
68
|
-
jest.mock("../widget/components/context/GroupingMappingCustomUIContext", () => ({
|
|
69
|
-
...jest.requireActual("../widget/components/context/GroupingMappingCustomUIContext"),
|
|
70
|
-
useGroupingMappingCustomUI: () => groupingMappingCustomUIMock,
|
|
59
|
+
jest.mock("@itwin/core-frontend", () => ({
|
|
60
|
+
...jest.requireActual("@itwin/core-frontend"),
|
|
61
|
+
IModelApp: {
|
|
62
|
+
viewManager: {},
|
|
63
|
+
},
|
|
71
64
|
}));
|
|
72
65
|
jest.mock("../widget/components/context/MappingClientContext", () => ({
|
|
73
66
|
...jest.requireActual("../widget/components/context/MappingClientContext"),
|
|
74
67
|
useMappingClient: () => mappingClientMock.object,
|
|
75
68
|
}));
|
|
76
69
|
const mockGroups = groupsFactory();
|
|
77
|
-
describe("Groupings View
|
|
70
|
+
describe("Groupings View", () => {
|
|
78
71
|
beforeEach(async () => {
|
|
79
72
|
connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);
|
|
80
73
|
connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);
|
|
81
|
-
const mockedAccessToken = await mockAccessToken();
|
|
82
74
|
mappingClientMock
|
|
83
|
-
.setup(async (x) => x.getGroups(
|
|
75
|
+
.setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))
|
|
84
76
|
.returns(async () => Promise.resolve(mockGroups.groups));
|
|
85
77
|
});
|
|
86
78
|
afterEach(() => {
|
|
87
79
|
connectionMock.reset();
|
|
88
80
|
mappingClientMock.reset();
|
|
89
|
-
|
|
81
|
+
viewManagerMock.reset();
|
|
90
82
|
});
|
|
91
|
-
it("List all groups
|
|
83
|
+
it("List all groups", async () => {
|
|
92
84
|
// Arange
|
|
93
85
|
// Act
|
|
94
86
|
const user = userEvent.setup();
|
|
95
|
-
render(React.createElement(Groupings, { mapping: mockMapping,
|
|
87
|
+
render(React.createElement(Groupings, { mapping: mockMapping, onClickAddGroup: jest.fn(), onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: jest.fn() }));
|
|
96
88
|
await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
|
|
97
89
|
// Assert
|
|
98
|
-
|
|
99
|
-
expect(addButton).toHaveLength(1);
|
|
100
|
-
// Click on 'Add Group' button
|
|
101
|
-
await user.click(addButton[0]);
|
|
102
|
-
// Should have three menu items
|
|
103
|
-
const addSelection = screen.getAllByTestId("gmw-add-0");
|
|
104
|
-
expect(addSelection).toHaveLength(1);
|
|
105
|
-
const addSearch = screen.getAllByTestId("gmw-add-1");
|
|
106
|
-
expect(addSearch).toHaveLength(1);
|
|
107
|
-
const addManual = screen.getAllByTestId("gmw-add-2");
|
|
108
|
-
expect(addManual).toHaveLength(1);
|
|
109
|
-
// Should have the right group number
|
|
90
|
+
// Should have the correct random mockGroups.groups count listed
|
|
110
91
|
const horizontalTiles = screen.getAllByTestId("gmw-horizontal-tile");
|
|
111
92
|
expect(horizontalTiles).toHaveLength(mockGroups.groups.length);
|
|
112
93
|
horizontalTiles.forEach((horizontalTile, index) => {
|
|
@@ -119,23 +100,12 @@ describe("Groupings View with default UIs", () => {
|
|
|
119
100
|
const moreButton = screen.getAllByTestId("gmw-more-button");
|
|
120
101
|
expect(moreButton).toHaveLength(mockGroups.groups.length);
|
|
121
102
|
await user.click(moreButton[0]);
|
|
122
|
-
// Should have
|
|
103
|
+
// Should only have the permanent delete context item.
|
|
123
104
|
const contextMenuItems = screen.getAllByTestId("gmw-context-menu-item");
|
|
124
|
-
expect(contextMenuItems).toHaveLength(
|
|
125
|
-
expect(contextMenuItems[0]).toHaveTextContent("
|
|
126
|
-
expect(contextMenuItems[1]).toHaveTextContent("Properties");
|
|
127
|
-
expect(contextMenuItems[2]).toHaveTextContent("Remove");
|
|
128
|
-
// Hover on 'Edit'
|
|
129
|
-
await user.hover(contextMenuItems[0]);
|
|
130
|
-
// Should have 3 sub menu items
|
|
131
|
-
const editSelection = screen.getAllByTestId(`gmw-edit-0`);
|
|
132
|
-
expect(editSelection).toHaveLength(1);
|
|
133
|
-
const editSearch = screen.getAllByTestId(`gmw-edit-1`);
|
|
134
|
-
expect(editSearch).toHaveLength(1);
|
|
135
|
-
const editManual = screen.getAllByTestId(`gmw-edit-2`);
|
|
136
|
-
expect(editManual).toHaveLength(1);
|
|
105
|
+
expect(contextMenuItems).toHaveLength(1);
|
|
106
|
+
expect(contextMenuItems[0]).toHaveTextContent("Remove");
|
|
137
107
|
});
|
|
138
|
-
it("Set up grouping custom UI
|
|
108
|
+
it("Set up grouping custom UI", async () => {
|
|
139
109
|
// Arange
|
|
140
110
|
const mockedUIComponent = (_props) => React.createElement("div");
|
|
141
111
|
const mockGroupingUI = {
|
|
@@ -144,10 +114,9 @@ describe("Groupings View with default UIs", () => {
|
|
|
144
114
|
displayLabel: "Mock Grouping UI",
|
|
145
115
|
uiComponent: mockedUIComponent,
|
|
146
116
|
};
|
|
147
|
-
groupingMappingCustomUIMock = [mockGroupingUI];
|
|
117
|
+
const groupingMappingCustomUIMock = [mockGroupingUI];
|
|
148
118
|
// Act
|
|
149
|
-
const user =
|
|
150
|
-
render(React.createElement(Groupings, { mapping: mockMapping, goBack: jest.fn() }));
|
|
119
|
+
const { user } = render(React.createElement(Groupings, { mapping: mockMapping, onClickAddGroup: jest.fn(), onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: jest.fn() }), groupingMappingCustomUIMock);
|
|
151
120
|
await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
|
|
152
121
|
// Assert
|
|
153
122
|
const addButton = screen.getAllByTestId("gmw-add-group-button");
|
|
@@ -164,9 +133,9 @@ describe("Groupings View with default UIs", () => {
|
|
|
164
133
|
expect(moreButton.length).toBeGreaterThan(0);
|
|
165
134
|
// Click on first more icon
|
|
166
135
|
await user.click(moreButton[0]);
|
|
167
|
-
// Should have
|
|
136
|
+
// Should have 2 context menu items
|
|
168
137
|
const contextMenuItems = screen.getAllByTestId("gmw-context-menu-item");
|
|
169
|
-
expect(contextMenuItems).toHaveLength(
|
|
138
|
+
expect(contextMenuItems).toHaveLength(2);
|
|
170
139
|
expect(contextMenuItems[0]).toHaveTextContent("Edit");
|
|
171
140
|
// Hover on 'Edit'
|
|
172
141
|
await user.hover(contextMenuItems[0]);
|
|
@@ -179,7 +148,7 @@ describe("Groupings View with default UIs", () => {
|
|
|
179
148
|
const groupName = screen.getAllByText(mockGroups.groups[0].groupName);
|
|
180
149
|
expect(groupName).toHaveLength(1);
|
|
181
150
|
});
|
|
182
|
-
it("Set up context custom UI - should have
|
|
151
|
+
it("Set up context custom UI - should have add context menu", async () => {
|
|
183
152
|
// Arange
|
|
184
153
|
const mockedUIComponent = (_props) => React.createElement("div");
|
|
185
154
|
const mockContextUI = {
|
|
@@ -188,23 +157,12 @@ describe("Groupings View with default UIs", () => {
|
|
|
188
157
|
displayLabel: "Mock Grouping UI",
|
|
189
158
|
uiComponent: mockedUIComponent,
|
|
190
159
|
};
|
|
191
|
-
groupingMappingCustomUIMock = [mockContextUI];
|
|
160
|
+
const groupingMappingCustomUIMock = [mockContextUI];
|
|
161
|
+
const onClickRenderContextCustomUIMock = jest.fn();
|
|
192
162
|
// Act
|
|
193
|
-
const user =
|
|
194
|
-
render(React.createElement(Groupings, { mapping: mockMapping, goBack: jest.fn() }));
|
|
163
|
+
const { user } = render(React.createElement(Groupings, { mapping: mockMapping, onClickAddGroup: jest.fn(), onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: onClickRenderContextCustomUIMock }), groupingMappingCustomUIMock);
|
|
195
164
|
await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
|
|
196
165
|
// Assert
|
|
197
|
-
const addButton = screen.getAllByTestId("gmw-add-group-button");
|
|
198
|
-
expect(addButton).toHaveLength(1);
|
|
199
|
-
// Click on 'Add Group' button
|
|
200
|
-
await user.click(addButton[0]);
|
|
201
|
-
// Should have three menu items
|
|
202
|
-
const addSelection = screen.getAllByTestId("gmw-add-0");
|
|
203
|
-
expect(addSelection).toHaveLength(1);
|
|
204
|
-
const addSearch = screen.getAllByTestId("gmw-add-1");
|
|
205
|
-
expect(addSearch).toHaveLength(1);
|
|
206
|
-
const addManual = screen.getAllByTestId("gmw-add-2");
|
|
207
|
-
expect(addManual).toHaveLength(1);
|
|
208
166
|
// Should have the right group number
|
|
209
167
|
const horizontalTiles = screen.getAllByTestId("gmw-horizontal-tile");
|
|
210
168
|
expect(horizontalTiles).toHaveLength(mockGroups.groups.length);
|
|
@@ -212,15 +170,15 @@ describe("Groupings View with default UIs", () => {
|
|
|
212
170
|
const moreButton = screen.getAllByTestId("gmw-more-button");
|
|
213
171
|
expect(moreButton).toHaveLength(mockGroups.groups.length);
|
|
214
172
|
await user.click(moreButton[0]);
|
|
215
|
-
// Should have
|
|
173
|
+
// Should have 2 context menu items
|
|
216
174
|
const contextMenuItems = screen.getAllByTestId("gmw-context-menu-item");
|
|
217
|
-
expect(contextMenuItems).toHaveLength(
|
|
218
|
-
expect(contextMenuItems[0]).toHaveTextContent(
|
|
219
|
-
expect(contextMenuItems[1]).toHaveTextContent("
|
|
220
|
-
expect(contextMenuItems[2]).toHaveTextContent("Remove");
|
|
221
|
-
expect(contextMenuItems[3]).toHaveTextContent(mockContextUI.displayLabel);
|
|
175
|
+
expect(contextMenuItems).toHaveLength(2);
|
|
176
|
+
expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);
|
|
177
|
+
expect(contextMenuItems[1]).toHaveTextContent("Remove");
|
|
222
178
|
// Click on the context ui
|
|
223
|
-
await user.click(contextMenuItems[
|
|
179
|
+
await user.click(contextMenuItems[0]);
|
|
180
|
+
// Callback should have been called with correct parameters
|
|
181
|
+
expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0]);
|
|
224
182
|
});
|
|
225
183
|
it("Set up both grouping and context custom UI", async () => {
|
|
226
184
|
// Arange
|
|
@@ -238,10 +196,11 @@ describe("Groupings View with default UIs", () => {
|
|
|
238
196
|
displayLabel: "Mock Grouping UI",
|
|
239
197
|
uiComponent: mockedContextUIComponent,
|
|
240
198
|
};
|
|
241
|
-
groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];
|
|
199
|
+
const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];
|
|
200
|
+
const onClickAddGroup = jest.fn();
|
|
201
|
+
const onClickRenderContextCustomUIMock = jest.fn();
|
|
242
202
|
// Act
|
|
243
|
-
const user =
|
|
244
|
-
render(React.createElement(Groupings, { mapping: mockMapping, goBack: jest.fn() }));
|
|
203
|
+
const { user } = render(React.createElement(Groupings, { mapping: mockMapping, onClickAddGroup: onClickAddGroup, onClickGroupModify: jest.fn(), onClickGroupTitle: jest.fn, onClickRenderContextCustomUI: onClickRenderContextCustomUIMock }), groupingMappingCustomUIMock);
|
|
245
204
|
await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
|
|
246
205
|
// Assert
|
|
247
206
|
const addButton = screen.getAllByTestId("gmw-add-group-button");
|
|
@@ -252,6 +211,9 @@ describe("Groupings View with default UIs", () => {
|
|
|
252
211
|
const addCustom = screen.getAllByTestId("gmw-add-0");
|
|
253
212
|
expect(addCustom).toHaveLength(1);
|
|
254
213
|
expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);
|
|
214
|
+
await user.click(addCustom[0]);
|
|
215
|
+
// Callback should have been called with correct parameters
|
|
216
|
+
expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);
|
|
255
217
|
// Check the group tile number
|
|
256
218
|
const horizontalTiles = screen.getAllByTestId("gmw-horizontal-tile");
|
|
257
219
|
expect(horizontalTiles).toHaveLength(mockGroups.groups.length);
|
|
@@ -259,15 +221,16 @@ describe("Groupings View with default UIs", () => {
|
|
|
259
221
|
const moreButton = screen.getAllByTestId("gmw-more-button");
|
|
260
222
|
expect(moreButton).toHaveLength(mockGroups.groups.length);
|
|
261
223
|
await user.click(moreButton[0]);
|
|
262
|
-
// Should have
|
|
224
|
+
// Should have 3 context menu items
|
|
263
225
|
const contextMenuItems = screen.getAllByTestId("gmw-context-menu-item");
|
|
264
|
-
expect(contextMenuItems).toHaveLength(
|
|
226
|
+
expect(contextMenuItems).toHaveLength(3);
|
|
265
227
|
expect(contextMenuItems[0]).toHaveTextContent("Edit");
|
|
266
|
-
expect(contextMenuItems[1]).toHaveTextContent(
|
|
228
|
+
expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);
|
|
267
229
|
expect(contextMenuItems[2]).toHaveTextContent("Remove");
|
|
268
|
-
expect(contextMenuItems[3]).toHaveTextContent(mockContextUI.displayLabel);
|
|
269
230
|
// Click on the context ui
|
|
270
|
-
await user.click(contextMenuItems[
|
|
231
|
+
await user.click(contextMenuItems[1]);
|
|
232
|
+
// Callback should have been called with correct parameters
|
|
233
|
+
expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0]);
|
|
271
234
|
});
|
|
272
235
|
});
|
|
273
236
|
//# sourceMappingURL=GroupingMappingCustomUI.test.js.map
|