@itwin/grouping-mapping-widget 0.11.1 → 0.12.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.
Files changed (189) hide show
  1. package/lib/cjs/grouping-mapping-widget.d.ts +4 -1
  2. package/lib/cjs/grouping-mapping-widget.js +7 -1
  3. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  4. package/lib/cjs/test/WidgetHeader.test.js +3 -3
  5. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  6. package/lib/cjs/widget/components/CalculatedPropertyAction.d.ts +7 -9
  7. package/lib/cjs/widget/components/CalculatedPropertyAction.js +49 -24
  8. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  9. package/lib/cjs/widget/components/CalculatedPropertyTable.d.ts +9 -16
  10. package/lib/cjs/widget/components/CalculatedPropertyTable.js +29 -31
  11. package/lib/cjs/widget/components/CalculatedPropertyTable.js.map +1 -1
  12. package/lib/cjs/widget/components/CalculatedPropertyTable.scss +9 -0
  13. package/lib/cjs/widget/components/CustomCalculationAction.d.ts +6 -9
  14. package/lib/cjs/widget/components/CustomCalculationAction.js +79 -9
  15. package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
  16. package/lib/cjs/widget/components/CustomCalculationTable.d.ts +8 -16
  17. package/lib/cjs/widget/components/CustomCalculationTable.js +22 -29
  18. package/lib/cjs/widget/components/CustomCalculationTable.js.map +1 -1
  19. package/lib/cjs/widget/components/DeleteModal.d.ts +4 -5
  20. package/lib/cjs/widget/components/DeleteModal.js +9 -13
  21. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  22. package/lib/cjs/widget/components/GroupAction.js +1 -0
  23. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  24. package/lib/cjs/widget/components/GroupInformationPanel.d.ts +10 -0
  25. package/lib/cjs/widget/components/GroupInformationPanel.js +23 -0
  26. package/lib/cjs/widget/components/GroupInformationPanel.js.map +1 -0
  27. package/lib/cjs/widget/components/GroupInformationPanel.scss +13 -0
  28. package/lib/cjs/widget/components/GroupPropertyAction.d.ts +6 -9
  29. package/lib/cjs/widget/components/GroupPropertyAction.js +26 -15
  30. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  31. package/lib/cjs/widget/components/GroupPropertyTable.d.ts +8 -15
  32. package/lib/cjs/widget/components/GroupPropertyTable.js +23 -28
  33. package/lib/cjs/widget/components/GroupPropertyTable.js.map +1 -1
  34. package/lib/cjs/widget/components/Grouping.d.ts +2 -1
  35. package/lib/cjs/widget/components/Grouping.js +12 -15
  36. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  37. package/lib/cjs/widget/components/Grouping.scss +2 -9
  38. package/lib/cjs/widget/components/GroupingMapping.js +1 -2
  39. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  40. package/lib/cjs/widget/components/GroupingMappingContent.js +8 -4
  41. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -1
  42. package/lib/cjs/widget/components/GroupingMappingContext.js +17 -1
  43. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  44. package/lib/cjs/widget/components/GroupingMappingHeader.js +2 -2
  45. package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -1
  46. package/lib/cjs/widget/components/GroupingMappingRouter.js +23 -2
  47. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  48. package/lib/cjs/widget/components/GroupsAddButton.d.ts +9 -0
  49. package/lib/cjs/widget/components/GroupsAddButton.js +17 -0
  50. package/lib/cjs/widget/components/GroupsAddButton.js.map +1 -0
  51. package/lib/cjs/widget/components/GroupsAddButton.scss +7 -0
  52. package/lib/cjs/widget/components/Mapping.js +5 -11
  53. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  54. package/lib/cjs/widget/components/PropertyMenu.d.ts +12 -17
  55. package/lib/cjs/widget/components/PropertyMenu.js +52 -155
  56. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  57. package/lib/cjs/widget/components/PropertyMenu.scss +4 -28
  58. package/lib/cjs/widget/components/PropertyNameCell.d.ts +11 -0
  59. package/lib/cjs/widget/components/PropertyNameCell.js +15 -0
  60. package/lib/cjs/widget/components/PropertyNameCell.js.map +1 -0
  61. package/lib/cjs/widget/components/PropertyTable.d.ts +18 -0
  62. package/lib/cjs/widget/components/PropertyTable.js +54 -0
  63. package/lib/cjs/widget/components/PropertyTable.js.map +1 -0
  64. package/lib/cjs/widget/components/PropertyTable.scss +11 -0
  65. package/lib/cjs/widget/components/PropertyTableToolbar.d.ts +10 -0
  66. package/lib/cjs/widget/components/PropertyTableToolbar.js +23 -0
  67. package/lib/cjs/widget/components/PropertyTableToolbar.js.map +1 -0
  68. package/lib/cjs/widget/components/PropertyTableToolbar.scss +12 -0
  69. package/lib/cjs/widget/components/ToggleGroupVisibility.d.ts +9 -0
  70. package/lib/cjs/widget/components/ToggleGroupVisibility.js +16 -0
  71. package/lib/cjs/widget/components/ToggleGroupVisibility.js.map +1 -0
  72. package/lib/cjs/widget/components/ToggleGroupVisibility.scss +9 -0
  73. package/lib/cjs/widget/components/WidgetHeader.d.ts +9 -0
  74. package/lib/cjs/widget/components/WidgetHeader.js +22 -0
  75. package/lib/cjs/widget/components/WidgetHeader.js.map +1 -0
  76. package/lib/cjs/widget/components/WidgetHeader.scss +36 -0
  77. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +6 -1
  78. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  79. package/lib/cjs/widget/components/context/PropertiesContext.d.ts +15 -0
  80. package/lib/cjs/widget/components/context/PropertiesContext.js +43 -0
  81. package/lib/cjs/widget/components/context/PropertiesContext.js.map +1 -0
  82. package/lib/cjs/widget/components/groupsHelpers.d.ts +6 -3
  83. package/lib/cjs/widget/components/groupsHelpers.js +43 -40
  84. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -1
  85. package/lib/cjs/widget/components/utils.d.ts +0 -6
  86. package/lib/cjs/widget/components/utils.js +1 -9
  87. package/lib/cjs/widget/components/utils.js.map +1 -1
  88. package/lib/cjs/widget/components/utils.scss +0 -29
  89. package/lib/cjs/widget/components/viewerUtils.d.ts +4 -2
  90. package/lib/cjs/widget/components/viewerUtils.js +4 -22
  91. package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
  92. package/lib/cjs/widget/hooks/useFetchData.d.ts +3 -5
  93. package/lib/cjs/widget/hooks/useFetchData.js +9 -7
  94. package/lib/cjs/widget/hooks/useFetchData.js.map +1 -1
  95. package/lib/esm/grouping-mapping-widget.d.ts +4 -1
  96. package/lib/esm/grouping-mapping-widget.js +3 -0
  97. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  98. package/lib/esm/test/WidgetHeader.test.js +1 -1
  99. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  100. package/lib/esm/widget/components/CalculatedPropertyAction.d.ts +7 -9
  101. package/lib/esm/widget/components/CalculatedPropertyAction.js +50 -27
  102. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  103. package/lib/esm/widget/components/CalculatedPropertyTable.d.ts +9 -16
  104. package/lib/esm/widget/components/CalculatedPropertyTable.js +30 -31
  105. package/lib/esm/widget/components/CalculatedPropertyTable.js.map +1 -1
  106. package/lib/esm/widget/components/CalculatedPropertyTable.scss +9 -0
  107. package/lib/esm/widget/components/CustomCalculationAction.d.ts +6 -9
  108. package/lib/esm/widget/components/CustomCalculationAction.js +79 -11
  109. package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
  110. package/lib/esm/widget/components/CustomCalculationTable.d.ts +8 -16
  111. package/lib/esm/widget/components/CustomCalculationTable.js +23 -29
  112. package/lib/esm/widget/components/CustomCalculationTable.js.map +1 -1
  113. package/lib/esm/widget/components/DeleteModal.d.ts +4 -5
  114. package/lib/esm/widget/components/DeleteModal.js +9 -13
  115. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  116. package/lib/esm/widget/components/GroupAction.js +1 -0
  117. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  118. package/lib/esm/widget/components/GroupInformationPanel.d.ts +10 -0
  119. package/lib/esm/widget/components/GroupInformationPanel.js +16 -0
  120. package/lib/esm/widget/components/GroupInformationPanel.js.map +1 -0
  121. package/lib/esm/widget/components/GroupInformationPanel.scss +13 -0
  122. package/lib/esm/widget/components/GroupPropertyAction.d.ts +6 -9
  123. package/lib/esm/widget/components/GroupPropertyAction.js +25 -15
  124. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  125. package/lib/esm/widget/components/GroupPropertyTable.d.ts +8 -15
  126. package/lib/esm/widget/components/GroupPropertyTable.js +24 -28
  127. package/lib/esm/widget/components/GroupPropertyTable.js.map +1 -1
  128. package/lib/esm/widget/components/Grouping.d.ts +2 -1
  129. package/lib/esm/widget/components/Grouping.js +14 -17
  130. package/lib/esm/widget/components/Grouping.js.map +1 -1
  131. package/lib/esm/widget/components/Grouping.scss +2 -9
  132. package/lib/esm/widget/components/GroupingMapping.js +1 -2
  133. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  134. package/lib/esm/widget/components/GroupingMappingContent.js +9 -5
  135. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -1
  136. package/lib/esm/widget/components/GroupingMappingContext.js +17 -1
  137. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  138. package/lib/esm/widget/components/GroupingMappingHeader.js +1 -1
  139. package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -1
  140. package/lib/esm/widget/components/GroupingMappingRouter.js +23 -2
  141. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  142. package/lib/esm/widget/components/GroupsAddButton.d.ts +9 -0
  143. package/lib/esm/widget/components/GroupsAddButton.js +10 -0
  144. package/lib/esm/widget/components/GroupsAddButton.js.map +1 -0
  145. package/lib/esm/widget/components/GroupsAddButton.scss +7 -0
  146. package/lib/esm/widget/components/Mapping.js +5 -11
  147. package/lib/esm/widget/components/Mapping.js.map +1 -1
  148. package/lib/esm/widget/components/PropertyMenu.d.ts +12 -17
  149. package/lib/esm/widget/components/PropertyMenu.js +54 -154
  150. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  151. package/lib/esm/widget/components/PropertyMenu.scss +4 -28
  152. package/lib/esm/widget/components/PropertyNameCell.d.ts +11 -0
  153. package/lib/esm/widget/components/PropertyNameCell.js +8 -0
  154. package/lib/esm/widget/components/PropertyNameCell.js.map +1 -0
  155. package/lib/esm/widget/components/PropertyTable.d.ts +18 -0
  156. package/lib/esm/widget/components/PropertyTable.js +28 -0
  157. package/lib/esm/widget/components/PropertyTable.js.map +1 -0
  158. package/lib/esm/widget/components/PropertyTable.scss +11 -0
  159. package/lib/esm/widget/components/PropertyTableToolbar.d.ts +10 -0
  160. package/lib/esm/widget/components/PropertyTableToolbar.js +16 -0
  161. package/lib/esm/widget/components/PropertyTableToolbar.js.map +1 -0
  162. package/lib/esm/widget/components/PropertyTableToolbar.scss +12 -0
  163. package/lib/esm/widget/components/ToggleGroupVisibility.d.ts +9 -0
  164. package/lib/esm/widget/components/ToggleGroupVisibility.js +9 -0
  165. package/lib/esm/widget/components/ToggleGroupVisibility.js.map +1 -0
  166. package/lib/esm/widget/components/ToggleGroupVisibility.scss +9 -0
  167. package/lib/esm/widget/components/WidgetHeader.d.ts +9 -0
  168. package/lib/esm/widget/components/WidgetHeader.js +15 -0
  169. package/lib/esm/widget/components/WidgetHeader.js.map +1 -0
  170. package/lib/esm/widget/components/WidgetHeader.scss +36 -0
  171. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +6 -1
  172. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -1
  173. package/lib/esm/widget/components/context/PropertiesContext.d.ts +15 -0
  174. package/lib/esm/widget/components/context/PropertiesContext.js +20 -0
  175. package/lib/esm/widget/components/context/PropertiesContext.js.map +1 -0
  176. package/lib/esm/widget/components/groupsHelpers.d.ts +6 -3
  177. package/lib/esm/widget/components/groupsHelpers.js +41 -40
  178. package/lib/esm/widget/components/groupsHelpers.js.map +1 -1
  179. package/lib/esm/widget/components/utils.d.ts +0 -6
  180. package/lib/esm/widget/components/utils.js +0 -7
  181. package/lib/esm/widget/components/utils.js.map +1 -1
  182. package/lib/esm/widget/components/utils.scss +0 -29
  183. package/lib/esm/widget/components/viewerUtils.d.ts +4 -2
  184. package/lib/esm/widget/components/viewerUtils.js +3 -20
  185. package/lib/esm/widget/components/viewerUtils.js.map +1 -1
  186. package/lib/esm/widget/hooks/useFetchData.d.ts +3 -5
  187. package/lib/esm/widget/hooks/useFetchData.js +9 -7
  188. package/lib/esm/widget/hooks/useFetchData.js.map +1 -1
  189. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CustomCalculationAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationAction.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 {\n Fieldset,\n LabeledInput,\n LabeledSelect,\n LabeledTextarea,\n Small,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, WidgetHeader } from \"./utils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport type { ICustomCalculationTyped } from \"./CustomCalculationTable\";\nimport \"./CustomCalculationAction.scss\";\nimport { quantityTypesSelectionOptions } from \"./GroupPropertyAction\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport type { PropertyMap } from \"../../formula/Types\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { QuantityType } from \"@itwin/insights-client\";\n\ninterface CalculatedPropertyActionProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n properties: PropertyMap;\n customCalculation?: ICustomCalculationTyped;\n returnFn: (modified: boolean) => Promise<void>;\n}\n\nconst CustomCalculationAction = ({\n iModelId,\n mappingId,\n groupId,\n properties,\n customCalculation,\n returnFn,\n}: CalculatedPropertyActionProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n customCalculation?.propertyName ?? \"\",\n );\n const [formula, setFormula] = useState<string>(\n customCalculation?.formula ?? \"\",\n );\n const [quantityType, setQuantityType] = useState<QuantityType>(customCalculation?.quantityType ?? QuantityType.Undefined);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const { isValid, forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, properties, setFormulaErrorMessage);\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (!forceValidation()) {\n return;\n }\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n customCalculation\n ? await mappingClient.updateCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n customCalculation.id,\n {\n propertyName,\n formula,\n quantityType,\n }\n )\n : await mappingClient.createCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n {\n propertyName,\n formula,\n quantityType,\n }\n );\n await returnFn(true);\n } catch (error: any) {\n // error instanceof Response refuses to be true when it should be.\n if (error.status === 422) {\n error = error as Response;\n const erroredResponse = await error.json();\n if (\n erroredResponse.error.code === \"InvalidInsightsRequest\" &&\n erroredResponse.error.target === \"formula\"\n ) {\n setFormulaErrorMessage(erroredResponse.error.message);\n }\n } else {\n handleError(error.status);\n }\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <WidgetHeader\n title={\n customCalculation\n ? `${customCalculation.propertyName}`\n : \"Create Custom Calculation\"\n }\n returnFn={async () => returnFn(false)}\n />\n <div className='gmw-custom-calculation-action-container'>\n <Fieldset legend='Custom Calculation Details' className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n value={propertyName}\n required\n name='name'\n label='Name'\n disabled={isLoading}\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", propertyName, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledTextarea\n value={formula}\n required\n name='formula'\n label='Formula'\n disabled={isLoading}\n onChange={(event) => {\n setFormula(event.target.value);\n }}\n message={formulaErrorMessage}\n status={formulaErrorMessage ? \"negative\" : undefined}\n />\n <LabeledSelect<QuantityType>\n label='Quantity Type'\n disabled={isLoading}\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={async () => returnFn(false)}\n isSavingDisabled={!(formula && propertyName && isValid)}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default CustomCalculationAction;\n"]}
1
+ {"version":3,"file":"CustomCalculationAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationAction.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 {\n Fieldset,\n LabeledInput,\n LabeledSelect,\n LabeledTextarea,\n Small,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError } from \"./utils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport \"./CustomCalculationAction.scss\";\nimport { quantityTypesSelectionOptions } from \"./GroupPropertyAction\";\nimport { useFormulaValidation } from \"../hooks/useFormulaValidation\";\nimport type { PossibleDataType, PropertyMap } from \"../../formula/Types\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CalculatedProperty, CustomCalculation, GroupProperty } from \"@itwin/insights-client\";\nimport { QuantityType } from \"@itwin/insights-client\";\nimport { usePropertiesContext } from \"./context/PropertiesContext\";\n\nexport interface CustomCalculationActionProps {\n mappingId: string;\n groupId: string;\n customCalculation?: CustomCalculation;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n}\n\nconst stringToPossibleDataType = (str?: string): PossibleDataType => {\n switch (str?.toLowerCase()) {\n case \"double\":\n case \"number\": return \"Number\";\n case \"string\": return \"String\";\n case \"boolean\": return \"Boolean\";\n default: return \"Undefined\";\n }\n};\n\nconst convertToPropertyMap = (\n groupProperties: GroupProperty[],\n calculatedProperties: CalculatedProperty[],\n customCalculations: CustomCalculation[],\n selectedPropertyName?: string\n): PropertyMap => {\n const map: PropertyMap = {};\n const selectedLowerName = selectedPropertyName?.toLowerCase();\n\n groupProperties.forEach((p) => {\n const lowerName = p.propertyName?.toLowerCase();\n if (lowerName && lowerName !== selectedLowerName)\n map[lowerName] = stringToPossibleDataType(p.dataType);\n });\n\n calculatedProperties.forEach((p) => {\n const lowerName = p.propertyName?.toLowerCase();\n if (lowerName)\n map[lowerName] = \"Number\";\n });\n\n customCalculations.forEach((p) => {\n const lowerName = p.propertyName?.toLowerCase();\n if (lowerName && lowerName !== selectedLowerName)\n map[lowerName] = stringToPossibleDataType(p.dataType);\n });\n\n return map;\n};\n\nexport const CustomCalculationAction = ({\n mappingId,\n groupId,\n customCalculation,\n onSaveSuccess,\n onClickCancel,\n}: CustomCalculationActionProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [propertyName, setPropertyName] = useState<string>(\n customCalculation?.propertyName ?? \"\",\n );\n const [formula, setFormula] = useState<string>(\n customCalculation?.formula ?? \"\",\n );\n const {\n groupProperties,\n setGroupProperties,\n calculatedProperties,\n setCalculatedProperties,\n customCalculationProperties,\n setCustomCalculationProperties,\n } = usePropertiesContext();\n const [quantityType, setQuantityType] = useState<QuantityType>(customCalculation?.quantityType ?? QuantityType.Undefined);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [properties, setProperties] = useState<PropertyMap>({});\n const { isValid, forceValidation } = useFormulaValidation(propertyName.toLowerCase(), formula, properties, setFormulaErrorMessage);\n\n const initialize = useCallback(async () => {\n const accessToken = await getAccessToken();\n const [groupProps, calcProps, customCalcProps] = await Promise.all([\n mappingClient.getGroupProperties(accessToken, iModelId, mappingId, groupId),\n mappingClient.getCalculatedProperties(accessToken, iModelId, mappingId, groupId),\n mappingClient.getCustomCalculations(accessToken, iModelId, mappingId, groupId),\n ]);\n setGroupProperties(groupProps);\n setCalculatedProperties(calcProps);\n setCustomCalculationProperties(customCalcProps);\n }, [getAccessToken, groupId, iModelId, mappingClient, mappingId, setCalculatedProperties, setCustomCalculationProperties, setGroupProperties]);\n\n const fetchAllProperties = useCallback(async () => {\n setIsLoading(true);\n try {\n if (!groupProperties || !calculatedProperties || !customCalculationProperties) {\n await initialize();\n }\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [calculatedProperties, customCalculationProperties, groupProperties, initialize]);\n\n useEffect(() => {\n const propertiesMap = convertToPropertyMap(groupProperties ?? [], calculatedProperties ?? [], customCalculationProperties ?? []);\n setProperties(propertiesMap);\n }, [calculatedProperties, customCalculationProperties, groupProperties]);\n\n useEffect(() => {\n void fetchAllProperties();\n }, [fetchAllProperties]);\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n if (!forceValidation()) {\n return;\n }\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n customCalculation\n ? await mappingClient.updateCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n customCalculation.id,\n {\n propertyName,\n formula,\n quantityType,\n }\n )\n : await mappingClient.createCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n {\n propertyName,\n formula,\n quantityType,\n }\n );\n onSaveSuccess();\n setPropertyName(\"\");\n setFormula(\"\");\n setQuantityType(QuantityType.Undefined);\n } catch (error: any) {\n // error instanceof Response refuses to be true when it should be.\n if (error.status === 422) {\n error = error as Response;\n const erroredResponse = await error.json();\n if (\n erroredResponse.error.code === \"InvalidInsightsRequest\" &&\n erroredResponse.error.target === \"formula\"\n ) {\n setFormulaErrorMessage(erroredResponse.error.message);\n }\n } else {\n handleError(error.status);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <div className='gmw-custom-calculation-action-container'>\n <Fieldset legend='Custom Calculation Details' className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n value={propertyName}\n required\n name='name'\n label='Name'\n disabled={isLoading}\n onChange={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", propertyName, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", propertyName, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n setPropertyName(event.target.value);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledTextarea\n value={formula}\n required\n name='formula'\n label='Formula'\n disabled={isLoading}\n onChange={(event) => {\n setFormula(event.target.value);\n }}\n message={formulaErrorMessage}\n status={formulaErrorMessage ? \"negative\" : undefined}\n />\n <LabeledSelect<QuantityType>\n label='Quantity Type'\n disabled={isLoading}\n options={quantityTypesSelectionOptions}\n value={quantityType}\n onChange={setQuantityType}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!(formula && propertyName && isValid)}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -1,21 +1,13 @@
1
- import React from "react";
2
- import type { CreateTypeFromInterface } from "../utils";
3
- import { PropertyMenuView } from "./PropertyMenu";
4
- import type { CellProps } from "react-table";
1
+ /// <reference types="react" />
5
2
  import type { CustomCalculation } from "@itwin/insights-client";
6
- export declare type ICustomCalculationTyped = CreateTypeFromInterface<CustomCalculation>;
7
- interface CustomCalculationTableProps {
8
- iModelId: string;
3
+ export interface CustomCalculationTableProps {
9
4
  mappingId: string;
10
5
  groupId: string;
11
- setSelectedCustomCalculation: React.Dispatch<React.SetStateAction<ICustomCalculationTyped | undefined>>;
12
- setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;
13
- onCustomCalculationModify: (value: CellProps<ICustomCalculationTyped>) => void;
14
- isLoadingCustomCalculations: boolean;
15
- customCalculations: ICustomCalculationTyped[];
16
- refreshCustomCalculations: () => Promise<void>;
17
- selectedCustomCalculation?: ICustomCalculationTyped;
6
+ onClickAdd?: () => void;
7
+ onClickModify?: (value: CustomCalculation) => void;
8
+ isLoading: boolean;
9
+ customCalculations: CustomCalculation[];
10
+ refresh: () => Promise<void>;
18
11
  }
19
- declare const CustomCalculationTable: ({ iModelId, mappingId, groupId, setSelectedCustomCalculation, setGroupModifyView, onCustomCalculationModify, isLoadingCustomCalculations, customCalculations, refreshCustomCalculations, selectedCustomCalculation, }: CustomCalculationTableProps) => JSX.Element;
20
- export default CustomCalculationTable;
12
+ export declare const CustomCalculationTable: ({ mappingId, groupId, onClickAdd, onClickModify, isLoading, customCalculations, refresh, }: CustomCalculationTableProps) => JSX.Element;
21
13
  //# sourceMappingURL=CustomCalculationTable.d.ts.map
@@ -2,19 +2,17 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { SvgAdd, SvgDelete, SvgEdit, SvgMore, } from "@itwin/itwinui-icons-react";
6
- import { Button, DropdownMenu, IconButton, MenuItem, Table, } from "@itwin/itwinui-react";
7
- import React, { useMemo, useState } from "react";
8
- import { PropertyMenuView } from "./PropertyMenu";
9
- import DeleteModal from "./DeleteModal";
5
+ import { SvgDelete, SvgEdit, SvgMore, } from "@itwin/itwinui-icons-react";
6
+ import { DropdownMenu, IconButton, MenuItem, } from "@itwin/itwinui-react";
7
+ import React, { useCallback } from "react";
10
8
  import { useMappingClient } from "./context/MappingClientContext";
9
+ import { PropertyNameCell } from "./PropertyNameCell";
10
+ import { PropertyTable } from "./PropertyTable";
11
11
  import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
12
- const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCustomCalculation, setGroupModifyView, onCustomCalculationModify, isLoadingCustomCalculations, customCalculations, refreshCustomCalculations, selectedCustomCalculation, }) => {
13
- var _a;
14
- const { getAccessToken } = useGroupingMappingApiConfig();
12
+ export const CustomCalculationTable = ({ mappingId, groupId, onClickAdd, onClickModify, isLoading, customCalculations, refresh, }) => {
15
13
  const mappingClient = useMappingClient();
16
- const [showCustomCalculationDeleteModal, setShowCustomCalculationDeleteModal,] = useState(false);
17
- const CustomCalculationsColumns = useMemo(() => [
14
+ const { getAccessToken, iModelId } = useGroupingMappingApiConfig();
15
+ const columnsFactory = useCallback((handleShowDeleteModal) => [
18
16
  {
19
17
  Header: "Table",
20
18
  columns: [
@@ -22,7 +20,7 @@ const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCusto
22
20
  id: "propertyName",
23
21
  Header: "Custom Calculation",
24
22
  accessor: "propertyName",
25
- Cell: (value) => (React.createElement("div", { className: 'iui-anchor', onClick: () => onCustomCalculationModify(value) }, value.row.original.propertyName)),
23
+ Cell: (value) => (React.createElement(PropertyNameCell, { property: value.row.original, onClickModify: onClickModify })),
26
24
  },
27
25
  {
28
26
  id: "formula",
@@ -34,14 +32,16 @@ const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCusto
34
32
  Header: "",
35
33
  width: 80,
36
34
  Cell: (value) => {
37
- return (React.createElement(DropdownMenu, { menuItems: (close) => [
38
- React.createElement(MenuItem, { key: 0, onClick: () => onCustomCalculationModify(value), icon: React.createElement(SvgEdit, null) }, "Modify"),
39
- React.createElement(MenuItem, { key: 1, onClick: () => {
40
- setSelectedCustomCalculation(value.row.original);
41
- setShowCustomCalculationDeleteModal(true);
35
+ return (React.createElement(DropdownMenu, { menuItems: (close) => [onClickModify ? [
36
+ React.createElement(MenuItem, { key: 0, onClick: () => {
37
+ onClickModify(value.row.original);
38
+ close();
39
+ }, icon: React.createElement(SvgEdit, null) }, "Modify")
40
+ ] : [], React.createElement(MenuItem, { key: 1, onClick: () => {
41
+ handleShowDeleteModal(value.row.original);
42
42
  close();
43
43
  }, icon: React.createElement(SvgDelete, null) }, "Remove"),
44
- ] },
44
+ ].flatMap((p) => p) },
45
45
  React.createElement(IconButton, { styleType: 'borderless' },
46
46
  React.createElement(SvgMore, { style: {
47
47
  width: "16px",
@@ -51,17 +51,11 @@ const CustomCalculationTable = ({ iModelId, mappingId, groupId, setSelectedCusto
51
51
  },
52
52
  ],
53
53
  },
54
- ], [onCustomCalculationModify, setSelectedCustomCalculation]);
55
- return (React.createElement(React.Fragment, null,
56
- React.createElement(Button, { startIcon: React.createElement(SvgAdd, null), styleType: 'high-visibility', onClick: () => {
57
- setGroupModifyView(PropertyMenuView.ADD_CUSTOM_CALCULATION);
58
- } }, "Add Custom Calculation"),
59
- React.createElement(Table, { data: customCalculations, density: 'extra-condensed', columns: CustomCalculationsColumns, emptyTableContent: 'No Custom Calculations', isSortable: true, isLoading: isLoadingCustomCalculations }),
60
- React.createElement(DeleteModal, { entityName: (_a = selectedCustomCalculation === null || selectedCustomCalculation === void 0 ? void 0 : selectedCustomCalculation.propertyName) !== null && _a !== void 0 ? _a : "", show: showCustomCalculationDeleteModal, setShow: setShowCustomCalculationDeleteModal, onDelete: async () => {
61
- var _a;
62
- const accessToken = await getAccessToken();
63
- await mappingClient.deleteCustomCalculation(accessToken, iModelId, mappingId, groupId, (_a = selectedCustomCalculation === null || selectedCustomCalculation === void 0 ? void 0 : selectedCustomCalculation.id) !== null && _a !== void 0 ? _a : "");
64
- }, refresh: refreshCustomCalculations })));
54
+ ], [onClickModify]);
55
+ const deleteProperty = useCallback(async (propertyId) => {
56
+ const accessToken = await getAccessToken();
57
+ await mappingClient.deleteCustomCalculation(accessToken, iModelId, mappingId, groupId, propertyId);
58
+ }, [getAccessToken, groupId, iModelId, mappingClient, mappingId]);
59
+ return (React.createElement(PropertyTable, { propertyType: "Custom Calculation", columnsFactory: columnsFactory, data: customCalculations, isLoading: isLoading, onClickAdd: onClickAdd, refreshProperties: refresh, deleteProperty: deleteProperty }));
65
60
  };
66
- export default CustomCalculationTable;
67
61
  //# sourceMappingURL=CustomCalculationTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomCalculationTable.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationTable.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 {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Table,\n} from \"@itwin/itwinui-react\";\nimport React, { useMemo, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport { PropertyMenuView } from \"./PropertyMenu\";\nimport type { CellProps } from \"react-table\";\nimport DeleteModal from \"./DeleteModal\";\nimport type { CustomCalculation } from \"@itwin/insights-client\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nexport type ICustomCalculationTyped =\n CreateTypeFromInterface<CustomCalculation>;\n\ninterface CustomCalculationTableProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n setSelectedCustomCalculation: React.Dispatch<React.SetStateAction<ICustomCalculationTyped | undefined>>;\n setGroupModifyView: React.Dispatch<React.SetStateAction<PropertyMenuView>>;\n onCustomCalculationModify: (value: CellProps<ICustomCalculationTyped>) => void;\n isLoadingCustomCalculations: boolean;\n customCalculations: ICustomCalculationTyped[];\n refreshCustomCalculations: () => Promise<void>;\n selectedCustomCalculation?: ICustomCalculationTyped;\n}\n\nconst CustomCalculationTable = ({\n iModelId,\n mappingId,\n groupId,\n setSelectedCustomCalculation,\n setGroupModifyView,\n onCustomCalculationModify,\n isLoadingCustomCalculations,\n customCalculations,\n refreshCustomCalculations,\n selectedCustomCalculation,\n}: CustomCalculationTableProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [\n showCustomCalculationDeleteModal,\n setShowCustomCalculationDeleteModal,\n ] = useState<boolean>(false);\n\n const CustomCalculationsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Custom Calculation\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<ICustomCalculationTyped>) => (\n <div\n className='iui-anchor'\n onClick={() => onCustomCalculationModify(value)}\n >\n {value.row.original.propertyName}\n </div>\n ),\n },\n {\n id: \"formula\",\n Header: \"Formula\",\n accessor: \"formula\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<ICustomCalculationTyped>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onCustomCalculationModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => {\n setSelectedCustomCalculation(value.row.original);\n setShowCustomCalculationDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton styleType='borderless'>\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n );\n },\n },\n ],\n },\n ],\n [onCustomCalculationModify, setSelectedCustomCalculation],\n );\n\n return (\n <>\n <Button\n startIcon={<SvgAdd />}\n styleType='high-visibility'\n onClick={() => {\n setGroupModifyView(PropertyMenuView.ADD_CUSTOM_CALCULATION);\n }}\n >\n Add Custom Calculation\n </Button>\n <Table<ICustomCalculationTyped>\n data={customCalculations}\n density='extra-condensed'\n columns={CustomCalculationsColumns}\n emptyTableContent='No Custom Calculations'\n isSortable\n isLoading={isLoadingCustomCalculations}\n />\n\n <DeleteModal\n entityName={selectedCustomCalculation?.propertyName ?? \"\"}\n show={showCustomCalculationDeleteModal}\n setShow={setShowCustomCalculationDeleteModal}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n selectedCustomCalculation?.id ?? \"\",\n );\n }}\n refresh={refreshCustomCalculations}\n />\n </>\n );\n};\n\nexport default CustomCalculationTable;\n"]}
1
+ {"version":3,"file":"CustomCalculationTable.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationTable.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 {\n SvgDelete,\n SvgEdit,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n DropdownMenu,\n IconButton,\n MenuItem,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback } from \"react\";\nimport type { CellProps } from \"react-table\";\nimport type { CustomCalculation } from \"@itwin/insights-client\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { PropertyNameCell } from \"./PropertyNameCell\";\nimport { PropertyTable } from \"./PropertyTable\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nexport interface CustomCalculationTableProps {\n mappingId: string;\n groupId: string;\n onClickAdd?: () => void;\n onClickModify?: (value: CustomCalculation) => void;\n isLoading: boolean;\n customCalculations: CustomCalculation[];\n refresh: () => Promise<void>;\n}\n\nexport const CustomCalculationTable = ({\n mappingId,\n groupId,\n onClickAdd,\n onClickModify,\n isLoading,\n customCalculations,\n refresh,\n}: CustomCalculationTableProps) => {\n const mappingClient = useMappingClient();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n\n const columnsFactory = useCallback(\n (handleShowDeleteModal: (value: CustomCalculation) => void) => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"propertyName\",\n Header: \"Custom Calculation\",\n accessor: \"propertyName\",\n Cell: (value: CellProps<CustomCalculation>) => (\n <PropertyNameCell\n property={value.row.original}\n onClickModify={onClickModify}\n />\n ),\n },\n {\n id: \"formula\",\n Header: \"Formula\",\n accessor: \"formula\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<CustomCalculation>) => {\n return (\n <DropdownMenu\n menuItems={(close: () => void) => [onClickModify ? [\n <MenuItem\n key={0}\n onClick={() => {\n onClickModify(value.row.original);\n close();\n }}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>] : [],\n <MenuItem\n key={1}\n onClick={() => {\n handleShowDeleteModal(value.row.original);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ].flatMap((p) => p)}\n >\n <IconButton styleType='borderless'>\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n );\n },\n },\n ],\n },\n ],\n [onClickModify],\n );\n\n const deleteProperty = useCallback(async (propertyId: string) => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteCustomCalculation(\n accessToken,\n iModelId,\n mappingId,\n groupId,\n propertyId,\n );\n }, [getAccessToken, groupId, iModelId, mappingClient, mappingId]);\n\n return (\n <PropertyTable\n propertyType=\"Custom Calculation\"\n columnsFactory={columnsFactory}\n data={customCalculations}\n isLoading={isLoading}\n onClickAdd={onClickAdd}\n refreshProperties={refresh}\n deleteProperty={deleteProperty}\n />\n );\n};\n\n"]}
@@ -1,12 +1,11 @@
1
- import React from "react";
1
+ /// <reference types="react" />
2
2
  import "./DeleteModal.scss";
3
3
  export interface DeleteModalProps {
4
- entityName: string;
5
- show: boolean;
6
- setShow: React.Dispatch<React.SetStateAction<boolean>>;
4
+ entityName?: string;
5
+ onClose: () => void;
7
6
  onDelete: () => Promise<void>;
8
7
  refresh: () => Promise<void>;
9
8
  }
10
- export declare const DeleteModal: ({ entityName, show, setShow, onDelete, refresh, }: DeleteModalProps) => JSX.Element;
9
+ export declare const DeleteModal: ({ entityName, onClose, onDelete, refresh, }: DeleteModalProps) => JSX.Element;
11
10
  export default DeleteModal;
12
11
  //# sourceMappingURL=DeleteModal.d.ts.map
@@ -6,37 +6,33 @@ import { Button, Leading, MiddleTextTruncation, Modal, ModalButtonBar, } from "@
6
6
  import React, { useState } from "react";
7
7
  import "./DeleteModal.scss";
8
8
  import { handleError, LoadingSpinner } from "./utils";
9
- export const DeleteModal = ({ entityName, show, setShow, onDelete, refresh, }) => {
10
- const [isLoading, setIsLoading] = useState(false);
9
+ export const DeleteModal = ({ entityName, onClose, onDelete, refresh, }) => {
10
+ const [isDeleting, setIsDeleting] = useState(false);
11
11
  const deleteCallback = async () => {
12
12
  try {
13
- setIsLoading(true);
13
+ setIsDeleting(true);
14
14
  await onDelete();
15
- setShow(false);
16
15
  await refresh();
16
+ onClose();
17
17
  }
18
18
  catch (error) {
19
19
  handleError(error.status);
20
20
  }
21
21
  finally {
22
- setIsLoading(false);
22
+ setIsDeleting(false);
23
23
  }
24
24
  };
25
25
  return (React.createElement(React.Fragment, null,
26
- React.createElement(Modal, { title: 'Confirm', modalRootId: 'grouping-mapping-widget', isOpen: show, isDismissible: !isLoading, onClose: () => {
27
- setShow(false);
28
- } },
26
+ React.createElement(Modal, { title: 'Confirm', modalRootId: 'grouping-mapping-widget', isOpen: !!entityName, isDismissible: !isDeleting, onClose: onClose },
29
27
  React.createElement("div", { className: "gmw-delete-modal-body-text" },
30
28
  React.createElement(Leading, null, "Are you sure you want to delete"),
31
29
  React.createElement("strong", null, React.createElement(MiddleTextTruncation, { text: `${entityName}?` }))),
32
30
  React.createElement(ModalButtonBar, null,
33
- isLoading &&
31
+ isDeleting &&
34
32
  React.createElement("div", { className: "gmw-loading-delete" },
35
33
  React.createElement(LoadingSpinner, null)),
36
- React.createElement(Button, { styleType: 'high-visibility', onClick: deleteCallback, disabled: isLoading }, "Delete"),
37
- React.createElement(Button, { styleType: 'default', onClick: () => {
38
- setShow(false);
39
- }, disabled: isLoading }, "Cancel")))));
34
+ React.createElement(Button, { styleType: 'high-visibility', onClick: deleteCallback, disabled: isDeleting }, "Delete"),
35
+ React.createElement(Button, { styleType: 'default', onClick: onClose, disabled: isDeleting }, "Cancel")))));
40
36
  };
41
37
  export default DeleteModal;
42
38
  //# sourceMappingURL=DeleteModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/widget/components/DeleteModal.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,MAAM,EACN,OAAO,EACP,oBAAoB,EACpB,KAAK,EACL,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAUtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAO,GACU,EAAE,EAAE;IACrB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE3D,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,MAAM,OAAO,EAAE,CAAC;SACjB;QAAC,OAAO,KAAU,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,KAAK,IACJ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,yBAAyB,EACrC,MAAM,EAAE,IAAI,EACZ,aAAa,EAAE,CAAC,SAAS,EACzB,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAED,6BAAK,SAAS,EAAC,4BAA4B;gBACzC,oBAAC,OAAO,0CAEE;gBACV,oCACG,oBAAC,oBAAoB,IAAC,IAAI,EAAE,GAAG,UAAU,GAAG,GAAI,CAC1C,CACL;YACN,oBAAC,cAAc;gBACZ,SAAS;oBACR,6BAAK,SAAS,EAAC,oBAAoB;wBACjC,oBAAC,cAAc,OAAG,CACd;gBACR,oBAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,aAEvE;gBACT,oBAAC,MAAM,IACL,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,GAAG,EAAE;wBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC,EACD,QAAQ,EAAE,SAAS,aAGZ,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 Leading,\n MiddleTextTruncation,\n Modal,\n ModalButtonBar,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport \"./DeleteModal.scss\";\nimport { handleError, LoadingSpinner } from \"./utils\";\n\nexport interface DeleteModalProps {\n entityName: string;\n show: boolean;\n setShow: React.Dispatch<React.SetStateAction<boolean>>;\n onDelete: () => Promise<void>;\n refresh: () => Promise<void>;\n}\n\nexport const DeleteModal = ({\n entityName,\n show,\n setShow,\n onDelete,\n refresh,\n}: DeleteModalProps) => {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const deleteCallback = async () => {\n try {\n setIsLoading(true);\n await onDelete();\n setShow(false);\n await refresh();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <Modal\n title='Confirm'\n modalRootId='grouping-mapping-widget'\n isOpen={show}\n isDismissible={!isLoading}\n onClose={() => {\n setShow(false);\n }}\n >\n <div className=\"gmw-delete-modal-body-text\">\n <Leading>\n Are you sure you want to delete\n </Leading>\n <strong>\n {<MiddleTextTruncation text={`${entityName}?`} />}\n </strong>\n </div>\n <ModalButtonBar>\n {isLoading &&\n <div className=\"gmw-loading-delete\">\n <LoadingSpinner />\n </div>}\n <Button styleType='high-visibility' onClick={deleteCallback} disabled={isLoading}>\n Delete\n </Button>\n <Button\n styleType='default'\n onClick={() => {\n setShow(false);\n }}\n disabled={isLoading}\n >\n Cancel\n </Button>\n </ModalButtonBar>\n </Modal>\n </>\n );\n};\n\nexport default DeleteModal;\n"]}
1
+ {"version":3,"file":"DeleteModal.js","sourceRoot":"","sources":["../../../../src/widget/components/DeleteModal.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EACL,MAAM,EACN,OAAO,EACP,oBAAoB,EACpB,KAAK,EACL,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAStD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,OAAO,EACP,QAAQ,EACR,OAAO,GACU,EAAE,EAAE;IACrB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE7D,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI;YACF,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM,QAAQ,EAAE,CAAC;YACjB,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;SACX;QAAC,OAAO,KAAU,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;gBAAS;YACR,aAAa,CAAC,KAAK,CAAC,CAAC;SACtB;IACH,CAAC,CAAC;IAEF,OAAO,CACL;QACE,oBAAC,KAAK,IACJ,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,yBAAyB,EACrC,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,aAAa,EAAE,CAAC,UAAU,EAC1B,OAAO,EAAE,OAAO;YAEhB,6BAAK,SAAS,EAAC,4BAA4B;gBACzC,oBAAC,OAAO,0CAEE;gBACV,oCACG,oBAAC,oBAAoB,IAAC,IAAI,EAAE,GAAG,UAAU,GAAG,GAAI,CAC1C,CACL;YACN,oBAAC,cAAc;gBACZ,UAAU;oBACT,6BAAK,SAAS,EAAC,oBAAoB;wBACjC,oBAAC,cAAc,OAAG,CACd;gBACR,oBAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,aAExE;gBACT,oBAAC,MAAM,IACL,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,UAAU,aAGb,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 Leading,\n MiddleTextTruncation,\n Modal,\n ModalButtonBar,\n} from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport \"./DeleteModal.scss\";\nimport { handleError, LoadingSpinner } from \"./utils\";\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 [isDeleting, setIsDeleting] = useState<boolean>(false);\n\n const deleteCallback = async () => {\n try {\n setIsDeleting(true);\n await onDelete();\n await refresh();\n onClose();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <>\n <Modal\n title='Confirm'\n modalRootId='grouping-mapping-widget'\n isOpen={!!entityName}\n isDismissible={!isDeleting}\n onClose={onClose}\n >\n <div className=\"gmw-delete-modal-body-text\">\n <Leading>\n Are you sure you want to delete\n </Leading>\n <strong>\n {<MiddleTextTruncation text={`${entityName}?`} />}\n </strong>\n </div>\n <ModalButtonBar>\n {isDeleting &&\n <div className=\"gmw-loading-delete\">\n <LoadingSpinner />\n </div>}\n <Button styleType='high-visibility' onClick={deleteCallback} disabled={isDeleting}>\n Delete\n </Button>\n <Button\n styleType='default'\n onClick={onClose}\n disabled={isDeleting}\n >\n Cancel\n </Button>\n </ModalButtonBar>\n </Modal>\n </>\n );\n};\n\nexport default DeleteModal;\n"]}
@@ -43,6 +43,7 @@ export const GroupAction = (props) => {
43
43
  }
44
44
  }, [iModelConnection]);
45
45
  const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };
46
+ useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);
46
47
  const resetView = async () => {
47
48
  if (groups.length > 0) {
48
49
  if (showGroupColor) {
@@ -1 +1 @@
1
- {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.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 type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n Fieldset,\n LabeledInput,\n RadioTile,\n RadioTileGroup,\n Small,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport type { ReactElement } from \"react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n handleInputChange,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { SvgAdd } from \"@itwin/itwinui-icons-react\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"./groupsHelpers\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nexport interface GroupActionProps {\n mappingId: string;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const isUpdating = isLoading || isRendering;\n\n useEffect(() => {\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n }, [iModelConnection]);\n\n const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };\n\n const resetView = async () => {\n if (groups.length > 0) {\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n }\n clearEmphasizedElements();\n };\n\n const changeGroupByType = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, showValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);\n\n const createQueryBuilderComponent = () => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find(\n (e) => e.name === queryGenerationType,\n );\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n });\n }\n }\n return <EmptyMessage message='No query generation method selected. ' />;\n };\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getRadioTileComponent = (\n icon: ReactElement,\n value: string,\n label: string,\n ) => {\n return (\n <RadioTile\n name={\"groupby\"}\n icon={icon}\n key={value}\n onChange={changeGroupByType}\n value={value}\n label={label}\n disabled={isUpdating}\n checked={queryGenerationType === value}\n />\n );\n };\n\n return (\n <>\n <div className='gmw-group-add-modify-container'>\n <Fieldset legend={displayStrings.groupDetails} className='gmw-group-details'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend={displayStrings.groupBy} className='gmw-query-builder-container'>\n <RadioTileGroup className='gmw-radio-group-tile' required>\n {groupUIs.map((ext) => getRadioTileComponent(ext.icon ?? <SvgAdd />, ext.name, ext.displayLabel))}\n </RadioTileGroup>\n {queryGenerationType && createQueryBuilderComponent()}\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={props.onClickCancel ? async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n props.onClickCancel && props.onClickCancel();\n } : undefined}\n isSavingDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.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 type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n Fieldset,\n LabeledInput,\n RadioTile,\n RadioTileGroup,\n Small,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport type { ReactElement } from \"react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n handleInputChange,\n} from \"./utils\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport {\n clearEmphasizedElements,\n clearOverriddenElements,\n transparentOverriddenElements,\n visualizeElementsByQuery,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport { useGroupingMappingCustomUI } from \"./context/GroupingMappingCustomUIContext\";\nimport { SvgAdd } from \"@itwin/itwinui-icons-react\";\nimport type { GroupingCustomUI } from \"./customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"./customUI/GroupingMappingCustomUI\";\nimport type { Group } from \"@itwin/insights-client\";\nimport { useGroupHilitedElementsContext } from \"./context/GroupHilitedElementsContext\";\nimport { visualizeGroupColors } from \"./groupsHelpers\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nexport interface GroupActionProps {\n mappingId: string;\n group?: Group;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const GroupAction = (props: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const { showGroupColor, groups, hiddenGroupsIds, hilitedElementsQueryCache } = useGroupHilitedElementsContext();\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs\n .filter((p) => p.type === GroupingMappingCustomUIType.Grouping) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleSelectionQuery, setSimpleSelectionQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [queryGenerationType, setQueryGenerationType] = useState(\n props.queryGenerationType,\n );\n const isUpdating = isLoading || isRendering;\n\n useEffect(() => {\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n }, [iModelConnection]);\n\n const displayStrings = { ...defaultDisplayStrings, ...props.displayStrings };\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const resetView = async () => {\n if (groups.length > 0) {\n if (showGroupColor) {\n await visualizeGroupColors(iModelConnection, groups, groups, hiddenGroupsIds, hilitedElementsQueryCache);\n } else {\n clearOverriddenElements();\n }\n }\n clearEmphasizedElements();\n };\n\n const changeGroupByType = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const {\n target: { value },\n } = event;\n setQueryGenerationType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n if (queryGenerationType === \"Selection\") {\n const selection = selectionProvider.getSelection(\n evt.imodel,\n evt.level,\n );\n const query = selection.instanceKeys.size > 0\n ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value}`\n : \"\";\n setSimpleSelectionQuery(query);\n }\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection, queryGenerationType]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n transparentOverriddenElements();\n const resolvedHiliteIds = await visualizeElementsByQuery(\n query,\n \"red\",\n iModelConnection,\n );\n await zoomToElements(resolvedHiliteIds);\n } catch {\n toaster.negative(\"Sorry, we have failed to generate a valid query. 😔\");\n } finally {\n setIsRendering(false);\n }\n };\n\n void reemphasize();\n }, [iModelConnection, query]);\n\n useEffect(() => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n }, [iModelConnection]);\n\n const save = useCallback(async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n const currentQuery = query || simpleSelectionQuery;\n\n const accessToken = await getAccessToken();\n\n props.group\n ? await mappingClient.updateGroup(\n accessToken,\n iModelId,\n props.mappingId,\n props.group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await mappingClient.createGroup(\n accessToken,\n iModelId,\n props.mappingId,\n {\n ...details,\n query: currentQuery,\n },\n );\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n props.onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n }, [validator, showValidationMessage, query, simpleSelectionQuery, getAccessToken, props, mappingClient, iModelId, details, iModelConnection]);\n\n const createQueryBuilderComponent = () => {\n if (queryGenerationType && queryGenerationType.length > 0) {\n const selectedCustomUI = groupUIs.find(\n (e) => e.name === queryGenerationType,\n );\n if (selectedCustomUI) {\n return React.createElement(selectedCustomUI.uiComponent, {\n updateQuery: setQuery,\n isUpdating,\n resetView,\n });\n }\n }\n return <EmptyMessage message='No query generation method selected. ' />;\n };\n\n const isBlockingActions = !(\n details.groupName &&\n (query || simpleSelectionQuery) &&\n !isRendering &&\n !isLoading\n );\n\n const getRadioTileComponent = (\n icon: ReactElement,\n value: string,\n label: string,\n ) => {\n return (\n <RadioTile\n name={\"groupby\"}\n icon={icon}\n key={value}\n onChange={changeGroupByType}\n value={value}\n label={label}\n disabled={isUpdating}\n checked={queryGenerationType === value}\n />\n );\n };\n\n return (\n <>\n <div className='gmw-group-add-modify-container'>\n <Fieldset legend={displayStrings.groupDetails} className='gmw-group-details'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='groupName'\n name='groupName'\n label='Name'\n value={details.groupName}\n required\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n message={validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )}\n status={\n validator.message(\n \"groupName\",\n details.groupName,\n NAME_REQUIREMENTS,\n )\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"groupName\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"groupName\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n }}\n />\n </Fieldset>\n <Fieldset legend={displayStrings.groupBy} className='gmw-query-builder-container'>\n <RadioTileGroup className='gmw-radio-group-tile' required>\n {groupUIs.map((ext) => getRadioTileComponent(ext.icon ?? <SvgAdd />, ext.name, ext.displayLabel))}\n </RadioTileGroup>\n {queryGenerationType && createQueryBuilderComponent()}\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={props.onClickCancel ? async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n props.onClickCancel && props.onClickCancel();\n } : undefined}\n isSavingDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import "./GroupInformationPanel.scss";
3
+ export interface GroupInformationPanelProps {
4
+ isOpen: boolean;
5
+ onClose: () => void;
6
+ groupName: string;
7
+ query: string;
8
+ }
9
+ export declare const GroupInformationPanel: ({ isOpen, onClose, groupName, query }: GroupInformationPanelProps) => JSX.Element;
10
+ //# sourceMappingURL=GroupInformationPanel.d.ts.map
@@ -0,0 +1,16 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import React from "react";
6
+ import { InformationPanel, InformationPanelBody, InformationPanelHeader, LabeledTextarea, Text } from "@itwin/itwinui-react";
7
+ import "./GroupInformationPanel.scss";
8
+ export const GroupInformationPanel = ({ isOpen, onClose, groupName, query }) => {
9
+ return (React.createElement(InformationPanel, { isOpen: isOpen },
10
+ React.createElement(InformationPanelHeader, { onClose: onClose },
11
+ React.createElement(Text, { variant: "subheading" }, `${groupName} Information`)),
12
+ React.createElement(InformationPanelBody, null,
13
+ React.createElement("div", { className: "gmw-group-information-body" },
14
+ React.createElement(LabeledTextarea, { label: "Query", rows: 15, readOnly: true, defaultValue: query })))));
15
+ };
16
+ //# sourceMappingURL=GroupInformationPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupInformationPanel.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupInformationPanel.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC7H,OAAO,8BAA8B,CAAC;AAStC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAA8B,EAAE,EAAE;IACzG,OAAO,CACL,oBAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM;QAC9B,oBAAC,sBAAsB,IAAC,OAAO,EAAE,OAAO;YACtC,oBAAC,IAAI,IAAC,OAAO,EAAC,YAAY,IAAE,GAAG,SAAS,cAAc,CAAQ,CACvC;QACzB,oBAAC,oBAAoB;YACnB,6BAAK,SAAS,EAAC,4BAA4B;gBACzC,oBAAC,eAAe,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,QAAC,YAAY,EAAE,KAAK,GAAI,CACrE,CACe,CACN,CACpB,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 React from \"react\";\nimport { InformationPanel, InformationPanelBody, InformationPanelHeader, LabeledTextarea, Text } from \"@itwin/itwinui-react\";\nimport \"./GroupInformationPanel.scss\";\n\nexport interface GroupInformationPanelProps {\n isOpen: boolean;\n onClose: () => void;\n groupName: string;\n query: string;\n}\n\nexport const GroupInformationPanel = ({ isOpen, onClose, groupName, query }: GroupInformationPanelProps) => {\n return (\n <InformationPanel isOpen={isOpen}>\n <InformationPanelHeader onClose={onClose}>\n <Text variant=\"subheading\">{`${groupName} Information`}</Text>\n </InformationPanelHeader>\n <InformationPanelBody>\n <div className=\"gmw-group-information-body\">\n <LabeledTextarea label=\"Query\" rows={15} readOnly defaultValue={query} />\n </div>\n </InformationPanelBody>\n </InformationPanel>\n );\n};\n"]}
@@ -0,0 +1,13 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ .gmw-group-information-body {
6
+ max-width: 100%;
7
+ width: 100%;
8
+ .gmw-information-body {
9
+ textarea {
10
+ resize: vertical;
11
+ }
12
+ }
13
+ }
@@ -1,18 +1,15 @@
1
1
  /// <reference types="react" />
2
- import type { KeySet } from "@itwin/presentation-common";
3
2
  import type { SelectOption } from "@itwin/itwinui-react";
4
3
  import { QuantityType } from "@itwin/insights-client";
4
+ import type { Group, GroupProperty } from "@itwin/insights-client";
5
5
  import "./GroupPropertyAction.scss";
6
6
  export interface GroupPropertyActionProps {
7
- iModelId: string;
8
7
  mappingId: string;
9
- groupId: string;
10
- groupPropertyId?: string;
11
- groupPropertyName?: string;
12
- keySet: KeySet;
13
- returnFn: (modified: boolean) => Promise<void>;
8
+ group: Group;
9
+ groupProperty?: GroupProperty;
10
+ onSaveSuccess: () => void;
11
+ onClickCancel?: () => void;
14
12
  }
15
13
  export declare const quantityTypesSelectionOptions: SelectOption<QuantityType>[];
16
- declare const GroupPropertyAction: ({ iModelId, mappingId, groupId, groupPropertyId, groupPropertyName, keySet, returnFn, }: GroupPropertyActionProps) => JSX.Element;
17
- export default GroupPropertyAction;
14
+ export declare const GroupPropertyAction: ({ mappingId, group, groupProperty, onSaveSuccess, onClickCancel, }: GroupPropertyActionProps) => JSX.Element;
18
15
  //# sourceMappingURL=GroupPropertyAction.d.ts.map