@itwin/grouping-mapping-widget 0.2.3 → 0.3.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/widget/components/ActionPanel.d.ts +3 -2
- package/lib/cjs/widget/components/ActionPanel.js +3 -3
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
- package/lib/cjs/widget/components/CalculatedPropertyAction.js +2 -2
- package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
- package/lib/cjs/widget/components/CalculatedPropertyAction.scss +5 -5
- package/lib/cjs/widget/components/CustomCalculationAction.js +1 -1
- package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
- package/lib/cjs/widget/components/GroupAction.js +2 -1
- package/lib/cjs/widget/components/GroupAction.js.map +1 -1
- package/lib/cjs/widget/components/Grouping.js +4 -4
- package/lib/cjs/widget/components/Grouping.js.map +1 -1
- package/lib/cjs/widget/components/MappingAction.js +1 -1
- package/lib/cjs/widget/components/MappingAction.js.map +1 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.js +4 -1
- package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
- package/lib/esm/widget/components/ActionPanel.d.ts +3 -2
- package/lib/esm/widget/components/ActionPanel.js +3 -3
- package/lib/esm/widget/components/ActionPanel.js.map +1 -1
- package/lib/esm/widget/components/CalculatedPropertyAction.js +2 -2
- package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
- package/lib/esm/widget/components/CalculatedPropertyAction.scss +5 -5
- package/lib/esm/widget/components/CustomCalculationAction.js +1 -1
- package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
- package/lib/esm/widget/components/GroupAction.js +2 -1
- package/lib/esm/widget/components/GroupAction.js.map +1 -1
- package/lib/esm/widget/components/Grouping.js +4 -4
- package/lib/esm/widget/components/Grouping.js.map +1 -1
- package/lib/esm/widget/components/MappingAction.js +1 -1
- package/lib/esm/widget/components/MappingAction.js.map +1 -1
- package/lib/esm/widget/components/property-grid/PropertyView.js +4 -1
- package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
- package/package.json +5 -3
|
@@ -3,9 +3,10 @@ import "./ActionPanel.scss";
|
|
|
3
3
|
export interface ActionPanelProps {
|
|
4
4
|
onSave: () => void;
|
|
5
5
|
onCancel: () => void;
|
|
6
|
-
|
|
6
|
+
isCancelDisabled?: boolean;
|
|
7
|
+
isSavingDisabled?: boolean;
|
|
7
8
|
isLoading?: boolean;
|
|
8
9
|
}
|
|
9
|
-
declare const ActionPanel: ({ onSave, onCancel,
|
|
10
|
+
declare const ActionPanel: ({ onSave, onCancel, isCancelDisabled, isSavingDisabled, isLoading, }: ActionPanelProps) => JSX.Element;
|
|
10
11
|
export default ActionPanel;
|
|
11
12
|
//# sourceMappingURL=ActionPanel.d.ts.map
|
|
@@ -27,13 +27,13 @@ const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
|
27
27
|
const React = __importStar(require("react"));
|
|
28
28
|
require("./ActionPanel.scss");
|
|
29
29
|
const utils_1 = require("./utils");
|
|
30
|
-
const ActionPanel = ({ onSave, onCancel,
|
|
30
|
+
const ActionPanel = ({ onSave, onCancel, isCancelDisabled = false, isSavingDisabled = false, isLoading = false, }) => {
|
|
31
31
|
return (React.createElement("div", { id: 'action', className: 'action-panel-container' },
|
|
32
32
|
React.createElement("div", { className: 'action-panel' },
|
|
33
33
|
isLoading &&
|
|
34
34
|
React.createElement(utils_1.LoadingSpinner, null),
|
|
35
|
-
React.createElement(itwinui_react_1.Button, { disabled:
|
|
36
|
-
React.createElement(itwinui_react_1.Button, { styleType: 'default', type: 'button', id: 'cancel', onClick: onCancel, disabled:
|
|
35
|
+
React.createElement(itwinui_react_1.Button, { disabled: isSavingDisabled || isLoading, styleType: 'high-visibility', id: 'save-app', onClick: onSave }, "Save"),
|
|
36
|
+
React.createElement(itwinui_react_1.Button, { styleType: 'default', type: 'button', id: 'cancel', onClick: onCancel, disabled: isCancelDisabled || isLoading }, "Cancel"))));
|
|
37
37
|
};
|
|
38
38
|
exports.default = ActionPanel;
|
|
39
39
|
//# sourceMappingURL=ActionPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionPanel.js","sourceRoot":"","sources":["../../../../src/widget/components/ActionPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAA8C;AAC9C,6CAA+B;AAC/B,8BAA4B;AAC5B,mCAAyC;
|
|
1
|
+
{"version":3,"file":"ActionPanel.js","sourceRoot":"","sources":["../../../../src/widget/components/ActionPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,wDAA8C;AAC9C,6CAA+B;AAC/B,8BAA4B;AAC5B,mCAAyC;AAUzC,MAAM,WAAW,GAAG,CAAC,EACnB,MAAM,EACN,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,KAAK,EACxB,SAAS,GAAG,KAAK,GACA,EAAe,EAAE;IAClC,OAAO,CACL,6BAAK,EAAE,EAAC,QAAQ,EAAC,SAAS,EAAC,wBAAwB;QACjD,6BAAK,SAAS,EAAC,cAAc;YAC1B,SAAS;gBACR,oBAAC,sBAAc,OAAG;YAEpB,oBAAC,sBAAM,IACL,QAAQ,EAAE,gBAAgB,IAAI,SAAS,EACvC,SAAS,EAAC,iBAAiB,EAC3B,EAAE,EAAC,UAAU,EACb,OAAO,EAAE,MAAM,WAGR;YACT,oBAAC,sBAAM,IACL,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,QAAQ,EACX,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,gBAAgB,IAAI,SAAS,aAGhC,CACL,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,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 { Button } from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport \"./ActionPanel.scss\";\nimport { LoadingSpinner } from \"./utils\";\n\nexport interface ActionPanelProps {\n onSave: () => void;\n onCancel: () => void;\n isCancelDisabled?: boolean;\n isSavingDisabled?: boolean;\n isLoading?: boolean;\n}\n\nconst ActionPanel = ({\n onSave,\n onCancel,\n isCancelDisabled = false,\n isSavingDisabled = false,\n isLoading = false,\n}: ActionPanelProps): JSX.Element => {\n return (\n <div id='action' className='action-panel-container'>\n <div className='action-panel'>\n {isLoading &&\n <LoadingSpinner />\n }\n <Button\n disabled={isSavingDisabled || isLoading}\n styleType='high-visibility'\n id='save-app'\n onClick={onSave}\n >\n Save\n </Button>\n <Button\n styleType='default'\n type='button'\n id='cancel'\n onClick={onCancel}\n disabled={isCancelDisabled || isLoading}\n >\n Cancel\n </Button>\n </div>\n </div>\n );\n};\n\nexport default ActionPanel;\n"]}
|
|
@@ -155,12 +155,12 @@ const CalculatedPropertyAction = ({ iModelId, mappingId, groupId, property, ids,
|
|
|
155
155
|
label: "Shortest Face Diagonal Length",
|
|
156
156
|
},
|
|
157
157
|
], value: type, onChange: setType, itemRenderer: (option) => (react_1.default.createElement(itwinui_react_1.MenuItem, null,
|
|
158
|
-
react_1.default.createElement("div", { className: 'menu-item' },
|
|
158
|
+
react_1.default.createElement("div", { className: 'gr-cp-menu-item' },
|
|
159
159
|
react_1.default.createElement("div", null, option.label),
|
|
160
160
|
getSpatialData(option.value)))), selectedItemRenderer: (option) => (react_1.default.createElement("div", { className: 'select-item' },
|
|
161
161
|
react_1.default.createElement("div", null, option.label),
|
|
162
162
|
getSpatialData(option.value))), onShow: () => { }, onHide: () => { } }))),
|
|
163
|
-
react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: returnFn,
|
|
163
|
+
react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: returnFn, isSavingDisabled: !(type && propertyName), isLoading: isLoading })));
|
|
164
164
|
};
|
|
165
165
|
exports.default = CalculatedPropertyAction;
|
|
166
166
|
//# sourceMappingURL=CalculatedPropertyAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalculatedPropertyAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyAction.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 { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Fieldset,\n LabeledInput,\n LabeledSelect,\n MenuItem,\n Small,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport type { CalculatedPropertyCreateReportingAPI } from \"../../api/generated/api\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport ActionPanel from \"./ActionPanel\";\nimport {\n BboxDimension,\n BboxDimensionsDecorator,\n} from \"../../decorators/BboxDimensionsDecorator\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, WidgetHeader } from \"./utils\";\nimport { visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport type { CalculatedProperty } from \"./CalculatedPropertyTable\";\n\ninterface CalculatedPropertyActionProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n property?: CalculatedProperty;\n ids: string[];\n returnFn: () => Promise<void>;\n}\n\nconst CalculatedPropertyAction = ({\n iModelId,\n mappingId,\n groupId,\n property,\n ids,\n returnFn,\n}: CalculatedPropertyActionProps) => {\n const [propertyName, setPropertyName] = useState<string>(\n property?.propertyName ?? \"\",\n );\n const [type, setType] = useState<string>(property?.type ?? \"\");\n const [bboxDecorator, setBboxDecorator] = useState<\n BboxDimensionsDecorator | undefined\n >();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [inferredSpatialData, setInferredSpatialData] = useState<\n Map<BboxDimension, number> | undefined\n >();\n const [validator, showValidationMessage] = useValidator();\n\n useEffect(() => {\n const decorator = new BboxDimensionsDecorator();\n IModelApp.viewManager.addDecorator(decorator);\n setBboxDecorator(decorator);\n return () => {\n IModelApp.viewManager.dropDecorator(decorator);\n };\n }, []);\n\n useEffect(() => {\n if (ids.length === 0) {\n return;\n }\n visualizeElements([ids[0]], \"red\");\n void zoomToElements([ids[0]]);\n }, [ids]);\n\n useEffect(() => {\n if (ids.length === 0) {\n return;\n }\n const setContext = async () => {\n if (bboxDecorator) {\n await bboxDecorator.setContext(ids[0]);\n setInferredSpatialData(bboxDecorator.getInferredSpatialData());\n }\n };\n void setContext();\n }, [bboxDecorator, ids]);\n\n useEffect(() => {\n if (bboxDecorator && type && inferredSpatialData) {\n inferredSpatialData.has(BboxDimension[type as keyof typeof BboxDimension])\n ? bboxDecorator.drawContext(\n BboxDimension[type as keyof typeof BboxDimension],\n )\n : bboxDecorator.clearContext();\n }\n }, [bboxDecorator, inferredSpatialData, type]);\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const calculatedProperty: CalculatedPropertyCreateReportingAPI = {\n propertyName,\n type,\n };\n\n property\n ? await reportingClientApi.updateCalculatedProperty(\n iModelId,\n mappingId,\n groupId,\n property.id ?? \"\",\n calculatedProperty,\n )\n : await reportingClientApi.createCalculatedProperty(\n iModelId,\n mappingId,\n groupId,\n calculatedProperty,\n );\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n };\n\n const getSpatialData = (value: string) =>\n inferredSpatialData?.has(\n BboxDimension[value as keyof typeof BboxDimension],\n ) && (\n <div>\n {`${inferredSpatialData\n ?.get(BboxDimension[value as keyof typeof BboxDimension])\n ?.toPrecision(4)}m`}\n </div>\n );\n\n return (\n <>\n <WidgetHeader\n title={\n property\n ? `${property?.propertyName ?? \"\"}`\n : \"Create Calculated Property\"\n }\n returnFn={returnFn}\n />\n <div className='calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='details-form'>\n <Small className='field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n value={propertyName}\n required\n name='name'\n label='Name'\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 <LabeledSelect<string>\n label='Quantity Type'\n required\n options={[\n { value: \"Length\", label: \"Length\" },\n { value: \"Area\", label: \"Area\" },\n { value: \"Volume\", label: \"Volume\" },\n {\n value: \"BoundingBoxLongestEdgeLength\",\n label: \"Longest Edge Length\",\n },\n {\n value: \"BoundingBoxIntermediateEdgeLength\",\n label: \"Intermediate Edge Length\",\n },\n {\n value: \"BoundingBoxShortestEdgeLength\",\n label: \"Shortest Edge Length\",\n },\n {\n value: \"BoundingBoxDiagonalLength\",\n label: \"Diagonal Length\",\n },\n {\n value: \"BoundingBoxLongestFaceDiagonalLength\",\n label: \"Longest Face Diagonal Length\",\n },\n {\n value: \"BoundingBoxIntermediateFaceDiagonalLength\",\n label: \"Intermediate Face Diagonal Length\",\n },\n {\n value: \"BoundingBoxShortestFaceDiagonalLength\",\n label: \"Shortest Face Diagonal Length\",\n },\n ]}\n value={type}\n onChange={setType}\n itemRenderer={(option: SelectOption<string>) => (\n <MenuItem>\n <div className='menu-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n </MenuItem>\n )}\n selectedItemRenderer={(option: SelectOption<string>) => (\n <div className='select-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n )}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={returnFn}\n disabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default CalculatedPropertyAction;\n"]}
|
|
1
|
+
{"version":3,"file":"CalculatedPropertyAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CalculatedPropertyAction.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 { IModelApp } from \"@itwin/core-frontend\";\nimport type {\n SelectOption,\n} from \"@itwin/itwinui-react\";\nimport {\n Fieldset,\n LabeledInput,\n LabeledSelect,\n MenuItem,\n Small,\n} from \"@itwin/itwinui-react\";\nimport React, { useEffect, useState } from \"react\";\nimport type { CalculatedPropertyCreateReportingAPI } from \"../../api/generated/api\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport ActionPanel from \"./ActionPanel\";\nimport {\n BboxDimension,\n BboxDimensionsDecorator,\n} from \"../../decorators/BboxDimensionsDecorator\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, WidgetHeader } from \"./utils\";\nimport { visualizeElements, zoomToElements } from \"./viewerUtils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport type { CalculatedProperty } from \"./CalculatedPropertyTable\";\n\ninterface CalculatedPropertyActionProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n property?: CalculatedProperty;\n ids: string[];\n returnFn: () => Promise<void>;\n}\n\nconst CalculatedPropertyAction = ({\n iModelId,\n mappingId,\n groupId,\n property,\n ids,\n returnFn,\n}: CalculatedPropertyActionProps) => {\n const [propertyName, setPropertyName] = useState<string>(\n property?.propertyName ?? \"\",\n );\n const [type, setType] = useState<string>(property?.type ?? \"\");\n const [bboxDecorator, setBboxDecorator] = useState<\n BboxDimensionsDecorator | undefined\n >();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [inferredSpatialData, setInferredSpatialData] = useState<\n Map<BboxDimension, number> | undefined\n >();\n const [validator, showValidationMessage] = useValidator();\n\n useEffect(() => {\n const decorator = new BboxDimensionsDecorator();\n IModelApp.viewManager.addDecorator(decorator);\n setBboxDecorator(decorator);\n return () => {\n IModelApp.viewManager.dropDecorator(decorator);\n };\n }, []);\n\n useEffect(() => {\n if (ids.length === 0) {\n return;\n }\n visualizeElements([ids[0]], \"red\");\n void zoomToElements([ids[0]]);\n }, [ids]);\n\n useEffect(() => {\n if (ids.length === 0) {\n return;\n }\n const setContext = async () => {\n if (bboxDecorator) {\n await bboxDecorator.setContext(ids[0]);\n setInferredSpatialData(bboxDecorator.getInferredSpatialData());\n }\n };\n void setContext();\n }, [bboxDecorator, ids]);\n\n useEffect(() => {\n if (bboxDecorator && type && inferredSpatialData) {\n inferredSpatialData.has(BboxDimension[type as keyof typeof BboxDimension])\n ? bboxDecorator.drawContext(\n BboxDimension[type as keyof typeof BboxDimension],\n )\n : bboxDecorator.clearContext();\n }\n }, [bboxDecorator, inferredSpatialData, type]);\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const calculatedProperty: CalculatedPropertyCreateReportingAPI = {\n propertyName,\n type,\n };\n\n property\n ? await reportingClientApi.updateCalculatedProperty(\n iModelId,\n mappingId,\n groupId,\n property.id ?? \"\",\n calculatedProperty,\n )\n : await reportingClientApi.createCalculatedProperty(\n iModelId,\n mappingId,\n groupId,\n calculatedProperty,\n );\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n };\n\n const getSpatialData = (value: string) =>\n inferredSpatialData?.has(\n BboxDimension[value as keyof typeof BboxDimension],\n ) && (\n <div>\n {`${inferredSpatialData\n ?.get(BboxDimension[value as keyof typeof BboxDimension])\n ?.toPrecision(4)}m`}\n </div>\n );\n\n return (\n <>\n <WidgetHeader\n title={\n property\n ? `${property?.propertyName ?? \"\"}`\n : \"Create Calculated Property\"\n }\n returnFn={returnFn}\n />\n <div className='calculated-properties-action-container'>\n <Fieldset legend='Calculated Property Details' className='details-form'>\n <Small className='field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n value={propertyName}\n required\n name='name'\n label='Name'\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 <LabeledSelect<string>\n label='Quantity Type'\n required\n options={[\n { value: \"Length\", label: \"Length\" },\n { value: \"Area\", label: \"Area\" },\n { value: \"Volume\", label: \"Volume\" },\n {\n value: \"BoundingBoxLongestEdgeLength\",\n label: \"Longest Edge Length\",\n },\n {\n value: \"BoundingBoxIntermediateEdgeLength\",\n label: \"Intermediate Edge Length\",\n },\n {\n value: \"BoundingBoxShortestEdgeLength\",\n label: \"Shortest Edge Length\",\n },\n {\n value: \"BoundingBoxDiagonalLength\",\n label: \"Diagonal Length\",\n },\n {\n value: \"BoundingBoxLongestFaceDiagonalLength\",\n label: \"Longest Face Diagonal Length\",\n },\n {\n value: \"BoundingBoxIntermediateFaceDiagonalLength\",\n label: \"Intermediate Face Diagonal Length\",\n },\n {\n value: \"BoundingBoxShortestFaceDiagonalLength\",\n label: \"Shortest Face Diagonal Length\",\n },\n ]}\n value={type}\n onChange={setType}\n itemRenderer={(option: SelectOption<string>) => (\n <MenuItem>\n <div className='gr-cp-menu-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n </MenuItem>\n )}\n selectedItemRenderer={(option: SelectOption<string>) => (\n <div className='select-item'>\n <div>{option.label}</div>\n {getSpatialData(option.value)}\n </div>\n )}\n onShow={() => { }}\n onHide={() => { }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={returnFn}\n isSavingDisabled={!(type && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default CalculatedPropertyAction;\n"]}
|
|
@@ -13,11 +13,6 @@
|
|
|
13
13
|
flex-direction: column;
|
|
14
14
|
gap: $iui-baseline;
|
|
15
15
|
|
|
16
|
-
.menu-item {
|
|
17
|
-
display: flex;
|
|
18
|
-
justify-content: space-between;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
16
|
.select-item {
|
|
22
17
|
display: flex;
|
|
23
18
|
justify-content: space-between;
|
|
@@ -25,3 +20,8 @@
|
|
|
25
20
|
}
|
|
26
21
|
}
|
|
27
22
|
}
|
|
23
|
+
|
|
24
|
+
.gr-cp-menu-item {
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-content: space-between;
|
|
27
|
+
}
|
|
@@ -99,7 +99,7 @@ const CustomCalculationAction = ({ iModelId, mappingId, groupId, customCalculati
|
|
|
99
99
|
setFormula(event.target.value);
|
|
100
100
|
}, message: formulaErrorMessage, status: formulaErrorMessage ? "negative" : undefined }),
|
|
101
101
|
react_1.default.createElement(itwinui_react_1.LabeledSelect, { label: 'Quantity Type', disabled: isLoading, options: GroupPropertyAction_1.quantityTypesSelectionOptions, value: quantityType, onChange: setQuantityType, onShow: () => { }, onHide: () => { } }))),
|
|
102
|
-
react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: returnFn,
|
|
102
|
+
react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: returnFn, isSavingDisabled: !(formula && propertyName), isLoading: isLoading })));
|
|
103
103
|
};
|
|
104
104
|
exports.default = CustomCalculationAction;
|
|
105
105
|
//# sourceMappingURL=CustomCalculationAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomCalculationAction.js","sourceRoot":"","sources":["../../../../src/widget/components/CustomCalculationAction.tsx"],"names":[],"mappings":"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
|
|
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 { reportingClientApi } from \"../../api/reportingClient\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, WidgetHeader } from \"./utils\";\nimport \"./CalculatedPropertyAction.scss\";\nimport type { CustomCalculation } from \"./CustomCalculationTable\";\nimport type { CustomCalculationCreateReportingAPI } from \"../../api/generated/api\";\nimport \"./CustomCalculationAction.scss\";\nimport { quantityTypesSelectionOptions } from \"./GroupPropertyAction\";\n\ninterface CalculatedPropertyActionProps {\n iModelId: string;\n mappingId: string;\n groupId: string;\n customCalculation?: CustomCalculation;\n returnFn: () => Promise<void>;\n}\n\nconst CustomCalculationAction = ({\n iModelId,\n mappingId,\n groupId,\n customCalculation,\n returnFn,\n}: CalculatedPropertyActionProps) => {\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<string>(customCalculation?.quantityType ?? \"Undefined\");\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [formulaErrorMessage, setFormulaErrorMessage] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n\n const onSave = async () => {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n try {\n setIsLoading(true);\n\n const newCustomCalculation: CustomCalculationCreateReportingAPI = {\n propertyName,\n formula,\n quantityType,\n };\n\n customCalculation\n ? await reportingClientApi.updateCustomCalculation(\n iModelId,\n mappingId,\n groupId,\n customCalculation.id ?? \"\",\n newCustomCalculation,\n )\n : await reportingClientApi.createCustomCalculation(\n iModelId,\n mappingId,\n groupId,\n newCustomCalculation,\n );\n await returnFn();\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={returnFn}\n />\n <div className='custom-calculation-action-container'>\n <Fieldset legend='Custom Calculation Details' className='details-form'>\n <Small className='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<string>\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={returnFn}\n isSavingDisabled={!(formula && propertyName)}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default CustomCalculationAction;\n"]}
|
|
@@ -168,6 +168,7 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, }) => {
|
|
|
168
168
|
simpleQuery,
|
|
169
169
|
validator,
|
|
170
170
|
]);
|
|
171
|
+
const isBlockingActions = !(details.groupName && details.description && (query || simpleQuery) && !isRendering && !isLoading);
|
|
171
172
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
172
173
|
react_1.default.createElement(utils_1.WidgetHeader, { title: group ? (_c = group.groupName) !== null && _c !== void 0 ? _c : "" : "Add Group", returnFn: async () => {
|
|
173
174
|
presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
|
|
@@ -230,7 +231,7 @@ const GroupAction = ({ iModelId, mappingId, group, goBack, }) => {
|
|
|
230
231
|
}, onCancel: async () => {
|
|
231
232
|
presentation_frontend_1.Presentation.selection.clearSelection("GroupingMappingWidget", iModelConnection);
|
|
232
233
|
await goBack();
|
|
233
|
-
},
|
|
234
|
+
}, isSavingDisabled: isBlockingActions, isCancelDisabled: isBlockingActions, isLoading: isLoading })));
|
|
234
235
|
};
|
|
235
236
|
exports.default = GroupAction;
|
|
236
237
|
//# sourceMappingURL=GroupAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupAction.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AASA,wEAEsC;AACtC,oDAA+D;AAC/D,wDAAwI;AACxI,+CAAgE;AAChE,+DAA+D;AAC/D,mCAA0G;AAE1G,8BAA4B;AAC5B,gEAAwC;AACxC,sEAAwE;AAExE,6EAA0E;AAC1E,yEAAsE;AACtE,iDAA8C;AAC9C,+CAIuB;AACvB,oEAAkE;AASlE,MAAM,WAAW,GAAG,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAM,GACW,EAAE,EAAE;;IACrB,MAAM,gBAAgB,GAAG,uCAAyB,EAAsB,CAAC;IACzE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,gBAAQ,CAAC;QACrC,SAAS,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,EAAE;QACjC,WAAW,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,mCAAI,EAAE;KACtC,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,sBAAY,EAAE,CAAC;IAC1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAC/D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,eAAK,CAAC,QAAQ,CAElE,EAAE,CAAC,CAAC;IACN,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,eAAK,CAAC,QAAQ,CACpD,IAAI,2BAAY,CAAC,SAAS,CAAC,CAC5B,CAAC;IACF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEzD,MAAM,iBAAiB,GAAG,CAAC,KAA0C,EAAE,EAAE;QACvE,MAAM,EACJ,MAAM,EAAE,EAAE,KAAK,EAAE,GAClB,GAAG,KAAK,CAAC;QACV,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;QACF,QAAQ,CAAC,EAAE,CAAC,CAAC;IACf,CAAC,CAAC;IAEF,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,oCAAY,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CACvE,KAAK,EACH,GAA6B,EAC7B,iBAAqC,EACrC,EAAE;YACF,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,4BAA4B,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KACjH,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACR,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CACF,CAAC;QACF,OAAO,GAAG,EAAE;YACV,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,iBAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,IAAI;gBACF,qCAAuB,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;oBAC1B,OAAO;iBACR;gBAED,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,MAAM,yBAAiB,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBACnE,MAAM,iBAAiB,GAAG,MAAM,mCAAqB,CACnD,GAAG,EACH,KAAK,EACL,gBAAgB,CACjB,CAAC;gBACF,MAAM,4BAAc,CAAC,iBAAiB,CAAC,CAAC;aACzC;YAAC,MAAM;gBACN,uBAAO,CAAC,QAAQ,CAAC,qDAAqD,CAAC,CAAC;aACzE;oBAAS;gBACR,cAAc,CAAC,KAAK,CAAC,CAAC;aACvB;QACH,CAAC,CAAC;QAEF,KAAK,WAAW,EAAE,CAAC;IACrB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9B,iBAAS,CAAC,GAAG,EAAE;QACb,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,oDAAoD;IACpD,MAAM,mBAAmB,GAAG,CAAC,WAAqB,EAAE,EAAE;QACpD,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;SAWjD,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACtC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;4BACrC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAClF,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;;;;;;;SAWJ,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACtC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;uBAC1C,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAC7E,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;;;;SAQJ,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACtC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;4BACrC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAClF,CAAC,IAAI,CAAC,GAAG,CAAC;QACL,CAAC,CAAC,CAAC,EAAE,CAAC;QACV,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;IAExC,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,mBAAW,CAAC,KAAK,IAAI,EAAE;;QAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;YACzB,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO;SACR;QACD,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,YAAY,GAAG,KAAK,IAAI,WAAW,CAAC;YAE1C,KAAK;gBACH,CAAC,CAAC,MAAM,oCAAkB,CAAC,WAAW,CACpC,QAAQ,EACR,SAAS,EACT,MAAA,KAAK,CAAC,EAAE,mCAAI,EAAE,EACd,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CACpC;gBACD,CAAC,CAAC,MAAM,oCAAkB,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE;oBAC1D,GAAG,OAAO;oBACV,KAAK,EAAE,YAAY;iBACpB,CAAC,CAAC;YACL,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;YACF,MAAM,MAAM,EAAE,CAAC;SAChB;QAAC,OAAO,KAAU,EAAE;YACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,EAAE;QACD,OAAO;QACP,MAAM;QACN,KAAK;QACL,gBAAgB;QAChB,QAAQ;QACR,SAAS;QACT,KAAK;QACL,qBAAqB;QACrB,WAAW;QACX,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,CACL;QACE,8BAAC,oBAAY,IACX,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAClD,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;gBACF,MAAM,MAAM,EAAE,CAAC;YACjB,CAAC,GACD;QACF,uCAAK,SAAS,EAAC,4BAA4B;YACzC,8BAAC,wBAAQ,IAAC,MAAM,EAAC,eAAe,EAAC,SAAS,EAAC,eAAe;gBACxD,8BAAC,qBAAK,IAAC,SAAS,EAAC,cAAc,6CAEvB;gBACR,8BAAC,4BAAY,IACX,EAAE,EAAC,WAAW,EACd,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,SAAS,EACxB,QAAQ,QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CACxB,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,gCAAiB,CAClB,EACD,MAAM,EACJ,SAAS,CAAC,OAAO,CACf,WAAW,EACX,OAAO,CAAC,SAAS,EACjB,gCAAiB,CAClB;wBACC,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;wBACX,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,EACD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBACxC,CAAC,GACD;gBACF,8BAAC,4BAAY,IACX,EAAE,EAAC,aAAa,EAChB,QAAQ,QACR,IAAI,EAAC,aAAa,EAClB,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,OAAO,CAAC,WAAW,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;oBAC1C,CAAC,EACD,OAAO,EAAE,SAAS,CAAC,OAAO,CACxB,aAAa,EACb,OAAO,CAAC,WAAW,EACnB,UAAU,CACX,EACD,MAAM,EACJ,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC;wBAC/D,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,GAAG,EAAE;wBACX,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;oBAC1C,CAAC,EACD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACvB,yBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC9C,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;oBAC1C,CAAC,GACD,CACO;YACX,8BAAC,wBAAQ,IAAC,MAAM,EAAC,UAAU,EAAC,SAAS,EAAC,yBAAyB;gBAC7D,8BAAC,8BAAc,IACb,SAAS,EAAC,kBAAkB,EAC5B,QAAQ;oBACR,8BAAC,yBAAS,IACR,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,8BAAC,+BAAS,OAAG,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,QACd,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,SAAS,IAAI,WAAW,GAClC;oBACF,8BAAC,yBAAS,IACR,IAAI,EAAE,8BAAC,+BAAS,OAAG,EACnB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,SAAS,IAAI,WAAW,GAClC,CACa;gBAChB,WAAW,KAAK,WAAW,CAAC,CAAC;oBAC5B,8BAAC,mDAAwB,CAAC,QAAQ,IAChC,KAAK,EAAE;4BACL,mBAAmB;4BACnB,sBAAsB;4BACtB,KAAK;4BACL,QAAQ;4BACR,YAAY;4BACZ,eAAe;4BACf,SAAS;4BACT,WAAW;yBACZ;wBAED,8BAAC,uDAA0B,OAAG,CACI,CAAC,CAAC;oBACtC,uCAAK,SAAS,EAAC,aAAa;wBAC1B,8BAAC,oBAAI,kHAA+G;wBACpH,8BAAC,+BAAe,IACd,KAAK,EAAC,gBAAgB,EACtB,QAAQ,QACR,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACvD,QAAQ,EAAE,SAAS,IAAI,WAAW,EAClC,WAAW,EAAE,iCAAiC,GAAI;wBACpD,uCAAK,SAAS,EAAC,gBAAgB;4BAC5B,WAAW;gCACV,8BAAC,sBAAc,OAAG;4BAEpB,8BAAC,sBAAM,IAAC,QAAQ,EAAE,SAAS,IAAI,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAgB;4BACzI,8BAAC,sBAAM,IAAC,QAAQ,EAAE,SAAS,IAAI,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE;oCACxD,QAAQ,CAAC,EAAE,CAAC,CAAC;oCACb,cAAc,CAAC,EAAE,CAAC,CAAC;gCACrB,CAAC,YAAgB,CACb,CACF,CAEC,CACP;QACN,8BAAC,qBAAW,IACV,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,MAAM,IAAI,EAAE,CAAC;YACf,CAAC,EACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,oCAAY,CAAC,SAAS,CAAC,cAAc,CACnC,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;gBACF,MAAM,MAAM,EAAE,CAAC;YACjB,CAAC,EACD,QAAQ,EACN,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,EAErG,SAAS,EAAE,SAAS,GACpB,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,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 type { IModelConnection } from \"@itwin/core-frontend\";\nimport type {\n ISelectionProvider,\n SelectionChangeEventArgs,\n} from \"@itwin/presentation-frontend\";\nimport {\n Presentation,\n} from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Button, Fieldset, LabeledInput, LabeledTextarea, RadioTile, RadioTileGroup, Small, Text, toaster } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport { fetchIdsFromQuery, handleError, handleInputChange, LoadingSpinner, WidgetHeader } from \"./utils\";\nimport type { Group } from \"./Grouping\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { GroupQueryBuilderContainer } from \"./GroupQueryBuilderContainer\";\nimport { GroupQueryBuilderContext } from \"./GroupQueryBuilderContext\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport {\n clearEmphasizedElements,\n visualizeElementsById,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { SvgCursor, SvgSearch } from \"@itwin/itwinui-icons-react\";\n\ninterface GroupActionProps {\n iModelId: string;\n mappingId: string;\n group?: Group;\n goBack: () => Promise<void>;\n}\n\nconst GroupAction = ({\n iModelId,\n mappingId,\n group,\n goBack,\n}: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const [details, setDetails] = useState({\n groupName: group?.groupName ?? \"\",\n description: group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleQuery, setSimpleQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [currentPropertyList, setCurrentPropertyList] = React.useState<\n PropertyRecord[]\n >([]);\n const [queryBuilder, setQueryBuilder] = React.useState<QueryBuilder>(\n new QueryBuilder(undefined),\n );\n const [groupByType, setGroupByType] = React.useState(\"Selection\");\n const [searchInput, setSearchInput] = React.useState(\"\");\n\n const changeGroupByType = (event: React.ChangeEvent<HTMLInputElement>) => {\n const {\n target: { value },\n } = event;\n setGroupByType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value\n }` : \"\";\n setSimpleQuery(query);\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n clearEmphasizedElements();\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n const ids = await fetchIdsFromQuery(query ?? \"\", iModelConnection);\n const resolvedHiliteIds = await visualizeElementsById(\n ids,\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 isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n // Temporary until ECViews become available for use.\n const generateSearchQuery = (searchQuery: string[]) => {\n const generatedSearchQuery = searchQuery.length > 0 ? `SELECT\n be.ecinstanceid\n FROM\n generic.physicalobject be\n JOIN\n biscore.geometricelement3disincategory ce\n ON be.ecinstanceid = ce.sourceecinstanceid\n JOIN\n bis.ELEMENT de\n ON ce.targetecinstanceid = de.ecinstanceid\n WHERE\n (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : isWrappedInQuotes(token) ? \"AND\" : \"OR\"}\n de.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}\n )\n UNION\n SELECT\n de.ecinstanceid\n FROM\n biscore.geometricelement3d AS de\n JOIN\n ecdbmeta.ecclassdef AS be\n ON de.ecclassid = be.ecinstanceid\n WHERE\n (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : isWrappedInQuotes(token) ? \"AND\" : \"OR\"}\n be.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}\n )\n UNION\n SELECT\n be.ecinstanceid\n FROM\n generic.physicalobject be\n WHERE\n (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : isWrappedInQuotes(token) ? \"AND\" : \"OR\"}\n be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}\n )` : \"\";\n setQuery(generatedSearchQuery.trim());\n\n };\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 || simpleQuery;\n\n group\n ? await reportingClientApi.updateGroup(\n iModelId,\n mappingId,\n group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await reportingClientApi.createGroup(iModelId, mappingId, {\n ...details,\n query: currentQuery,\n });\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n }, [\n details,\n goBack,\n group,\n iModelConnection,\n iModelId,\n mappingId,\n query,\n showValidationMessage,\n simpleQuery,\n validator,\n ]);\n\n return (\n <>\n <WidgetHeader\n title={group ? group.groupName ?? \"\" : \"Add Group\"}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n />\n <div className='group-add-modify-container'>\n <Fieldset legend='Group Details' className='group-details'>\n <Small className='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 required\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"description\");\n }}\n message={validator.message(\n \"description\",\n details.description,\n \"required\",\n )}\n status={\n validator.message(\"description\", details.description, \"required\")\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"description\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"description\");\n }}\n />\n </Fieldset>\n <Fieldset legend='Group By' className='query-builder-container'>\n <RadioTileGroup\n className=\"radio-group-tile\"\n required>\n <RadioTile\n name={\"groupby\"}\n icon={<SvgCursor />}\n onChange={changeGroupByType}\n defaultChecked\n value={\"Selection\"}\n label={\"Selection\"}\n disabled={isLoading || isRendering}\n />\n <RadioTile\n icon={<SvgSearch />}\n name={\"groupby\"}\n onChange={changeGroupByType}\n value={\"Query Keywords\"}\n label={\"Query Keywords\"}\n disabled={isLoading || isRendering}\n />\n </RadioTileGroup>\n {groupByType === \"Selection\" ?\n <GroupQueryBuilderContext.Provider\n value={{\n currentPropertyList,\n setCurrentPropertyList,\n query,\n setQuery,\n queryBuilder,\n setQueryBuilder,\n isLoading,\n isRendering,\n }}\n >\n <GroupQueryBuilderContainer />\n </GroupQueryBuilderContext.Provider> :\n <div className=\"search-form\">\n <Text>Generate a query by keywords. Keywords wrapped in double quotes will be considered a required criteria.</Text>\n <LabeledTextarea\n label=\"Query Keywords\"\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isLoading || isRendering}\n placeholder={`ex: wall curtain \"panel\" facade`} />\n <div className=\"search-actions\">\n {isRendering &&\n <LoadingSpinner />\n }\n <Button disabled={isLoading || isRendering} onClick={() => generateSearchQuery(searchInput ? searchInput.split(\" \") : [])}>Apply</Button>\n <Button disabled={isLoading || isRendering} onClick={() => {\n setQuery(\"\");\n setSearchInput(\"\");\n }}>Clear</Button>\n </div>\n </div>\n }\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n disabled={\n !(details.groupName && details.description && (query || simpleQuery) && !isRendering && !isLoading)\n }\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default GroupAction;\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 {\n Presentation,\n} from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Button, Fieldset, LabeledInput, LabeledTextarea, RadioTile, RadioTileGroup, Small, Text, toaster } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport { fetchIdsFromQuery, handleError, handleInputChange, LoadingSpinner, WidgetHeader } from \"./utils\";\nimport type { Group } from \"./Grouping\";\nimport \"./GroupAction.scss\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { GroupQueryBuilderContainer } from \"./GroupQueryBuilderContainer\";\nimport { GroupQueryBuilderContext } from \"./GroupQueryBuilderContext\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport {\n clearEmphasizedElements,\n visualizeElementsById,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { SvgCursor, SvgSearch } from \"@itwin/itwinui-icons-react\";\n\ninterface GroupActionProps {\n iModelId: string;\n mappingId: string;\n group?: Group;\n goBack: () => Promise<void>;\n}\n\nconst GroupAction = ({\n iModelId,\n mappingId,\n group,\n goBack,\n}: GroupActionProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const [details, setDetails] = useState({\n groupName: group?.groupName ?? \"\",\n description: group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [simpleQuery, setSimpleQuery] = useState<string>(\"\");\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isRendering, setIsRendering] = useState<boolean>(false);\n const [currentPropertyList, setCurrentPropertyList] = React.useState<\n PropertyRecord[]\n >([]);\n const [queryBuilder, setQueryBuilder] = React.useState<QueryBuilder>(\n new QueryBuilder(undefined),\n );\n const [groupByType, setGroupByType] = React.useState(\"Selection\");\n const [searchInput, setSearchInput] = React.useState(\"\");\n\n const changeGroupByType = (event: React.ChangeEvent<HTMLInputElement>) => {\n const {\n target: { value },\n } = event;\n setGroupByType(value);\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n setQuery(\"\");\n };\n\n useEffect(() => {\n const removeListener = Presentation.selection.selectionChange.addListener(\n async (\n evt: SelectionChangeEventArgs,\n selectionProvider: ISelectionProvider,\n ) => {\n const selection = selectionProvider.getSelection(evt.imodel, evt.level);\n const query = selection.instanceKeys.size > 0 ? `SELECT ECInstanceId FROM ${selection.instanceKeys.keys().next().value\n }` : \"\";\n setSimpleQuery(query);\n },\n );\n return () => {\n removeListener();\n };\n }, [iModelConnection]);\n\n useEffect(() => {\n const reemphasize = async () => {\n try {\n clearEmphasizedElements();\n if (!query || query === \"\") {\n return;\n }\n\n setIsRendering(true);\n const ids = await fetchIdsFromQuery(query ?? \"\", iModelConnection);\n const resolvedHiliteIds = await visualizeElementsById(\n ids,\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 isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n // Temporary until ECViews become available for use.\n const generateSearchQuery = (searchQuery: string[]) => {\n const generatedSearchQuery = searchQuery.length > 0 ? `SELECT\n be.ecinstanceid\n FROM\n generic.physicalobject be\n JOIN\n biscore.geometricelement3disincategory ce\n ON be.ecinstanceid = ce.sourceecinstanceid\n JOIN\n bis.ELEMENT de\n ON ce.targetecinstanceid = de.ecinstanceid\n WHERE\n (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : isWrappedInQuotes(token) ? \"AND\" : \"OR\"}\n de.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}\n )\n UNION\n SELECT\n de.ecinstanceid\n FROM\n biscore.geometricelement3d AS de\n JOIN\n ecdbmeta.ecclassdef AS be\n ON de.ecclassid = be.ecinstanceid\n WHERE\n (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : isWrappedInQuotes(token) ? \"AND\" : \"OR\"}\n be.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}\n )\n UNION\n SELECT\n be.ecinstanceid\n FROM\n generic.physicalobject be\n WHERE\n (${searchQuery.map((token, index) =>\n `${index === 0 ? \"\" : isWrappedInQuotes(token) ? \"AND\" : \"OR\"}\n be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token}%'`\n ).join(\" \")}\n )` : \"\";\n setQuery(generatedSearchQuery.trim());\n\n };\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 || simpleQuery;\n\n group\n ? await reportingClientApi.updateGroup(\n iModelId,\n mappingId,\n group.id ?? \"\",\n { ...details, query: currentQuery },\n )\n : await reportingClientApi.createGroup(iModelId, mappingId, {\n ...details,\n query: currentQuery,\n });\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n }, [\n details,\n goBack,\n group,\n iModelConnection,\n iModelId,\n mappingId,\n query,\n showValidationMessage,\n simpleQuery,\n validator,\n ]);\n\n const isBlockingActions = !(details.groupName && details.description && (query || simpleQuery) && !isRendering && !isLoading);\n\n return (\n <>\n <WidgetHeader\n title={group ? group.groupName ?? \"\" : \"Add Group\"}\n returnFn={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n />\n <div className='group-add-modify-container'>\n <Fieldset legend='Group Details' className='group-details'>\n <Small className='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 required\n name='description'\n label='Description'\n value={details.description}\n onChange={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"description\");\n }}\n message={validator.message(\n \"description\",\n details.description,\n \"required\",\n )}\n status={\n validator.message(\"description\", details.description, \"required\")\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"description\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, details, setDetails);\n validator.showMessageFor(\"description\");\n }}\n />\n </Fieldset>\n <Fieldset legend='Group By' className='query-builder-container'>\n <RadioTileGroup\n className=\"radio-group-tile\"\n required>\n <RadioTile\n name={\"groupby\"}\n icon={<SvgCursor />}\n onChange={changeGroupByType}\n defaultChecked\n value={\"Selection\"}\n label={\"Selection\"}\n disabled={isLoading || isRendering}\n />\n <RadioTile\n icon={<SvgSearch />}\n name={\"groupby\"}\n onChange={changeGroupByType}\n value={\"Query Keywords\"}\n label={\"Query Keywords\"}\n disabled={isLoading || isRendering}\n />\n </RadioTileGroup>\n {groupByType === \"Selection\" ?\n <GroupQueryBuilderContext.Provider\n value={{\n currentPropertyList,\n setCurrentPropertyList,\n query,\n setQuery,\n queryBuilder,\n setQueryBuilder,\n isLoading,\n isRendering,\n }}\n >\n <GroupQueryBuilderContainer />\n </GroupQueryBuilderContext.Provider> :\n <div className=\"search-form\">\n <Text>Generate a query by keywords. Keywords wrapped in double quotes will be considered a required criteria.</Text>\n <LabeledTextarea\n label=\"Query Keywords\"\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isLoading || isRendering}\n placeholder={`ex: wall curtain \"panel\" facade`} />\n <div className=\"search-actions\">\n {isRendering &&\n <LoadingSpinner />\n }\n <Button disabled={isLoading || isRendering} onClick={() => generateSearchQuery(searchInput ? searchInput.split(\" \") : [])}>Apply</Button>\n <Button disabled={isLoading || isRendering} onClick={() => {\n setQuery(\"\");\n setSearchInput(\"\");\n }}>Clear</Button>\n </div>\n </div>\n }\n </Fieldset>\n </div>\n <ActionPanel\n onSave={async () => {\n await save();\n }}\n onCancel={async () => {\n Presentation.selection.clearSelection(\n \"GroupingMappingWidget\",\n iModelConnection,\n );\n await goBack();\n }}\n isSavingDisabled={\n isBlockingActions\n }\n isCancelDisabled={isBlockingActions}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default GroupAction;\n"]}
|
|
@@ -156,7 +156,7 @@ const Groupings = ({ mapping, goBack }) => {
|
|
|
156
156
|
return colour;
|
|
157
157
|
};
|
|
158
158
|
const onSelect = react_1.useCallback(async (selectedData) => {
|
|
159
|
-
var _a, _b, _c, _d
|
|
159
|
+
var _a, _b, _c, _d;
|
|
160
160
|
viewerUtils_1.clearEmphasizedElements();
|
|
161
161
|
if (selectedData && selectedData.length > 0) {
|
|
162
162
|
setLoadingQuery(true);
|
|
@@ -170,12 +170,12 @@ const Groupings = ({ mapping, goBack }) => {
|
|
|
170
170
|
}
|
|
171
171
|
else {
|
|
172
172
|
try {
|
|
173
|
-
const ids = await utils_1.fetchIdsFromQuery(
|
|
173
|
+
const ids = await utils_1.fetchIdsFromQuery(query, iModelConnection);
|
|
174
174
|
if (ids.length === 0) {
|
|
175
175
|
itwinui_react_1.toaster.warning(`${row.groupName}'s query is valid but produced no results.`);
|
|
176
176
|
}
|
|
177
|
-
const hiliteIds = await viewerUtils_1.visualizeElementsById(ids, stringToColor((
|
|
178
|
-
hilitedElements.current.set(
|
|
177
|
+
const hiliteIds = await viewerUtils_1.visualizeElementsById(ids, stringToColor((_d = row.id) !== null && _d !== void 0 ? _d : ""), iModelConnection);
|
|
178
|
+
hilitedElements.current.set(query, hiliteIds);
|
|
179
179
|
allIds = allIds.concat(ids);
|
|
180
180
|
}
|
|
181
181
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grouping.js","sourceRoot":"","sources":["../../../../src/widget/components/Grouping.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAUA,6CAEqB;AACrB,oDAA+D;AAC/D,+CAMe;AAEf,+DAA+D;AAE/D,wDAQ8B;AAC9B,oEAMoC;AACpC,gEAAwC;AACxC,2BAAyB;AAEzB,iDAA8C;AAC9C,+CAKuB;AACvB,mCAAuE;AACvE,gEAAwC;AAIxC,IAAK,UAKJ;AALD,WAAK,UAAU;IACb,+BAAiB,CAAA;IACjB,qCAAuB,CAAA;IACvB,yBAAW,CAAA;IACX,uCAAyB,CAAA;AAC3B,CAAC,EALI,UAAU,KAAV,UAAU,QAKd;AAOD,MAAM,WAAW,GAAG,KAAK,EACvB,SAAwD,EACxD,QAAgB,EAChB,SAAiB,EACjB,YAA2D,EAC3D,EAAE;;IACF,IAAI;QACF,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,oCAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvE,SAAS,CAAC,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC;KAChC;IAAC,OAAO,KAAU,EAAE;QACnB,mBAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B;YAAS;QACR,YAAY,CAAC,KAAK,CAAC,CAAC;KACrB;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,QAAgB,EAChB,SAAiB,EACjB,YAA2D,EACD,EAAE;IAC5D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,gBAAQ,CAAsB,EAAE,CAAC,CAAC;IAE9D,iBAAS,CAAC,GAAG,EAAE;QACb,KAAK,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAExC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEK,MAAM,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAmB,EAAE,EAAE;;IAChE,MAAM,gBAAgB,GAAG,uCAAyB,EAAsB,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAA,uCAAyB,EAAE,0CAAE,QAAkB,CAAC;IACjE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IACvE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAU,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,gBAAQ,CAAa,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,gBAAQ,CAChD,SAAS,CACV,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,cAAc,CACxC,QAAQ,EACR,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,EAChB,YAAY,CACb,CAAC;IACF,MAAM,eAAe,GAAG,cAAM,CAAwB,IAAI,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,gBAAQ,CAA0B,EAAE,CAAC,CAAC;IAC9E,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,GAAG,gBAAQ,CAAU,KAAK,CAAC,CAAC;IAEnE,MAAM,OAAO,GAAG,mBAAW,CAAC,KAAK,IAAI,EAAE;;QACrC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5B,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,MAAM,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,EAAE,YAAY,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,6FAA6F;QAC7F,yGAAyG;QACzG,aAAa;QACb,qCAAuB,EAAE,CAAC;QAC1B,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,mBAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QACrC,qCAAuB,EAAE,CAAC;QAC1B,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,mBAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3C,qCAAuB,EAAE,CAAC;QAC1B,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,eAAO,CAC3B,GAAG,EAAE,CAAC;QACJ;YACE,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP;oBACE,EAAE,EAAE,WAAW;oBACf,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,WAAW;oBACrB,IAAI,EAAE,CAAC,KAAuB,EAAE,EAAE,CAAC,CACjC,8DACG,cAAc,CAAC,CAAC,CAAC,CAChB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAC7B,CAAC,CAAC,CAAC,CACF,uCACE,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACb,CAAC,CAAC,eAAe,EAAE,CAAC;4BACpB,cAAc,CAAC,KAAK,CAAC,CAAC;wBACxB,CAAC,IAEA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CACzB,CACP,CACA,CACJ;iBACF;gBACD;oBACE,EAAE,EAAE,aAAa;oBACjB,MAAM,EAAE,aAAa;oBACrB,QAAQ,EAAE,aAAa;iBACxB;gBACD;oBACE,EAAE,EAAE,UAAU;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,CAAC,KAAuB,EAAE,EAAE;wBAChC,OAAO,CACL,uCAAK,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE;4BACtC,8BAAC,4BAAY,IACX,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC;oCAChC,8BAAC,wBAAQ,IACP,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC9B,IAAI,EAAE,8BAAC,6BAAO,OAAG,aAGR;oCACX,8BAAC,wBAAQ,IACP,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACpC,IAAI,EAAE,8BAAC,6BAAO,OAAG,iBAGR;oCACX,8BAAC,wBAAQ,IACP,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,GAAG,EAAE;4CACZ,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4CACrC,kBAAkB,CAAC,IAAI,CAAC,CAAC;4CACzB,KAAK,EAAE,CAAC;wCACV,CAAC,EACD,IAAI,EAAE,8BAAC,+BAAS,OAAG,aAGV;iCACZ;gCAED,8BAAC,0BAAU,IACT,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAC,YAAY;oCAEtB,8BAAC,6BAAO,IACN,KAAK,EAAE;4CACL,KAAK,EAAE,MAAM;4CACb,MAAM,EAAE,MAAM;yCACf,GACD,CACS,CACA,CACX,CACP,CAAC;oBACJ,CAAC;iBACF;aACF;SACF;KACF,EACD,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,CAC3C,CAAC;IAEF,OAAO;IACP,MAAM,aAAa,GAAG,UAAU,GAAW;QACzC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;SACjD;QACD,IAAI,MAAM,GAAG,GAAG,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACvC,MAAM,IAAI,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,mBAAW,CAC1B,KAAK,EAAE,YAAiC,EAAE,EAAE;;QAC1C,qCAAuB,EAAE,CAAC;QAC1B,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,MAAM,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;gBAC9B,MAAM,KAAK,GAAG,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,CAAC;gBAC9B,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACtC,MAAM,UAAU,GAAG,MAAA,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC;oBAC5D,+BAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,MAAA,GAAG,CAAC,EAAE,mCAAI,EAAE,CAAC,CAAC,CAAC;oBAC3D,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;iBACpC;qBAAM;oBACL,IAAI;wBACF,MAAM,GAAG,GAAa,MAAM,yBAAiB,CAC3C,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,EACf,gBAAgB,CACjB,CAAC;wBACF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;4BACpB,uBAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,SAAS,4CAA4C,CAAC,CAAC;yBAC/E;wBACD,MAAM,SAAS,GAAG,MAAM,mCAAqB,CAC3C,GAAG,EACH,aAAa,CAAC,MAAA,GAAG,CAAC,EAAE,mCAAI,EAAE,CAAC,EAC3B,gBAAgB,CACjB,CAAC;wBACF,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,EAAE,SAAS,CAAC,CAAC;wBAExD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;qBAC7B;oBAAC,MAAM;wBACN,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC/D,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE;4BACzB,MAAM,cAAc,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;4BACrC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;4BAC7B,OAAO,cAAc,CAAC;wBACxB,CAAC,CAAC,CAAC;wBACH,uBAAO,CAAC,QAAQ,CAAC,kBAAkB,GAAG,CAAC,SAAS,gCAAgC,CAAC,CAAC;qBAEnF;iBACF;aACF;YACD,MAAM,4BAAc,CAAC,MAAM,CAAC,CAAC;YAC7B,eAAe,CAAC,KAAK,CAAC,CAAC;SACxB;IACH,CAAC,EACD,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAC3B,CAAC;IAEF,MAAM,eAAe,GAAG,mBAAW,CACjC,CAAC,KAAK,EAAE,EAAE;QACR,OAAO;YACL,GAAG,KAAK;YACR,cAAc,EAAE,EAAE,GAAG,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,MAAM,kBAAkB,GAAG,mBAAW,CAAC,KAAK,IAAI,EAAE;QAChD,qCAAuB,EAAE,CAAC;QAC1B,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,iBAAiB,GAAG,CACxB,QAAoB,EACpB,MAAkB,EAClB,cAA0B,EAC1B,QAAwB,EACZ,EAAE;QACd,QAAQ,MAAM,CAAC,IAAI,EAAE;YACnB,KAAK,qBAAO,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,MAAM,eAAe,GAAG;oBACtB,GAAG,YAAY;iBAChB,CAAC;gBACF,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;iBACnC;qBAAM;oBACL,OAAO,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;iBACnC;gBACD,eAAe,CAAC,eAAe,CAAC,CAAC;gBACjC,QAAQ,CAAC,cAAc,GAAG,eAAe,CAAC;gBAC1C,MAAM;aACP;YACD,KAAK,qBAAO,CAAC,qBAAqB,CAAC,CAAC;gBAClC,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAA,EAAE;oBACvB,MAAM;iBACP;gBACD,MAAM,eAAe,GAAG,EAA6B,CAAC;gBACtD,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CACpC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CACrC,CAAC;iBACH;gBACD,eAAe,CAAC,eAAe,CAAC,CAAC;gBACjC,QAAQ,CAAC,cAAc,GAAG,eAAe,CAAC;gBAC1C,MAAM;aACP;YACD;gBACE,MAAM;SACT;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,QAAQ,UAAU,EAAE;QAClB,KAAK,UAAU,CAAC,GAAG;YACjB,OAAO,CACL,8BAAC,qBAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,EAC3B,MAAM,EAAE,KAAK,IAAI,EAAE;oBACjB,qCAAuB,EAAE,CAAC;oBAC1B,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACjC,MAAM,OAAO,EAAE,CAAC;gBAClB,CAAC,GACD,CACH,CAAC;QACJ,KAAK,UAAU,CAAC,SAAS;YACvB,OAAO,aAAa,CAAC,CAAC,CAAC,CACrB,8BAAC,qBAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,EAC3B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,KAAK,IAAI,EAAE;oBACjB,qCAAuB,EAAE,CAAC;oBAC1B,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACjC,MAAM,OAAO,EAAE,CAAC;gBAClB,CAAC,GACD,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;QACX,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,aAAa,CAAC,CAAC,CAAC,CACrB,8BAAC,2BAAY,IACX,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,EAC3B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,kBAAkB,GAC1B,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;QACX;YACE,OAAO,CACL;gBACE,8BAAC,oBAAY,IACX,KAAK,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE,EAChC,QAAQ,EAAE,SAAS,IAAI,cAAc,EACrC,QAAQ,EAAE,KAAK,IAAI,EAAE;wBACnB,qCAAuB,EAAE,CAAC;wBAC1B,MAAM,MAAM,EAAE,CAAC;oBACjB,CAAC,GACD;gBACF,uCAAK,SAAS,EAAC,kBAAkB;oBAC/B,8BAAC,sBAAM,IACL,SAAS,EACP,cAAc,CAAC,CAAC,CAAC,8BAAC,8BAAc,IAAC,IAAI,EAAC,OAAO,EAAC,aAAa,SAAG,CAAC,CAAC,CAAC,8BAAC,4BAAM,OAAG,EAE7E,SAAS,EAAC,iBAAiB,EAC3B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,IAExB,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAC3C;oBACT,8BAAC,qBAAK,IACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAC,iBAAiB,EACzB,OAAO,EAAE,aAAa,EACtB,iBAAiB,EAAC,sBAAsB,EACxC,UAAU,QACV,YAAY,QACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,GAAG,EAAE,CAAC,cAAc,EACnC,YAAY,EAAE,iBAAiB,EAC/B,kBAAkB,EAAE,eAAe,GACnC,CACE;gBACN,8BAAC,qBAAW,IACV,UAAU,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,SAAS,mCAAI,EAAE,EAC1C,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,KAAK,IAAI,EAAE;;wBACnB,MAAM,oCAAkB,CAAC,WAAW,CAClC,QAAQ,EACR,MAAA,OAAO,CAAC,EAAE,mCAAI,EAAE,EAChB,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,EAAE,mCAAI,EAAE,CACxB,CAAC;oBACJ,CAAC,EACD,OAAO,EAAE,OAAO,GAChB,CACD,CACJ,CAAC;KACL;AACH,CAAC,CAAC;AArVW,QAAA,SAAS,aAqVpB","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 {\n ActionType,\n CellProps,\n TableInstance,\n TableState,\n} from \"react-table\";\nimport {\n actions,\n} from \"react-table\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { GroupReportingAPI, MappingReportingAPI } from \"../../api/generated/api\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n ProgressRadial,\n Table,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgList,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport DeleteModal from \"./DeleteModal\";\nimport \"./Grouping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { PropertyMenu } from \"./PropertyMenu\";\nimport {\n clearEmphasizedElements,\n visualizeElements,\n visualizeElementsById,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { fetchIdsFromQuery, handleError, WidgetHeader } from \"./utils\";\nimport GroupAction from \"./GroupAction\";\n\nexport type Group = CreateTypeFromInterface<GroupReportingAPI>;\n\nenum GroupsView {\n GROUPS = \"groups\",\n MODIFYING = \"modifying\",\n ADD = \"ADD\",\n PROPERTIES = \"properties\",\n}\n\ninterface GroupsTreeProps {\n mapping: MappingReportingAPI;\n goBack: () => Promise<void>;\n}\n\nconst fetchGroups = async (\n setGroups: React.Dispatch<React.SetStateAction<Group[]>>,\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n) => {\n try {\n setIsLoading(true);\n const groups = await reportingClientApi.getGroups(iModelId, mappingId);\n setGroups(groups.groups ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst useFetchGroups = (\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n): [Group[], React.Dispatch<React.SetStateAction<Group[]>>] => {\n const [groups, setGroups] = useState<GroupReportingAPI[]>([]);\n\n useEffect(() => {\n void fetchGroups(setGroups, iModelId, mappingId, setIsLoading);\n }, [iModelId, mappingId, setIsLoading]);\n\n return [groups, setGroups];\n};\n\nexport const Groupings = ({ mapping, goBack }: GroupsTreeProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const iModelId = useActiveIModelConnection()?.iModelId as string;\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [groupsView, setGroupsView] = useState<GroupsView>(GroupsView.GROUPS);\n const [selectedGroup, setSelectedGroup] = useState<Group | undefined>(\n undefined,\n );\n const [groups, setGroups] = useFetchGroups(\n iModelId,\n mapping.id ?? \"\",\n setIsLoading,\n );\n const hilitedElements = useRef<Map<string, string[]>>(new Map());\n const [selectedRows, setSelectedRows] = useState<Record<string, boolean>>({});\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n\n const refresh = useCallback(async () => {\n setGroupsView(GroupsView.GROUPS);\n setSelectedGroup(undefined);\n setGroups([]);\n await fetchGroups(setGroups, iModelId, mapping.id ?? \"\", setIsLoading);\n }, [iModelId, mapping.id, setGroups]);\n\n const addGroup = () => {\n // TODO Retain selection in view without emphasizes. Goal is to make it so we can distinguish\n // hilited elements from regular elements without emphasis due to it blocking selection. For now clearing\n // selection.\n clearEmphasizedElements();\n setGroupsView(GroupsView.ADD);\n };\n\n const onModify = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.MODIFYING);\n }, []);\n\n const openProperties = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.PROPERTIES);\n }, []);\n\n const groupsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"groupName\",\n Header: \"Group\",\n accessor: \"groupName\",\n Cell: (value: CellProps<Group>) => (\n <>\n {isLoadingQuery ? (\n value.row.original.groupName\n ) : (\n <div\n className='iui-anchor'\n onClick={(e) => {\n e.stopPropagation();\n openProperties(value);\n }}\n >\n {value.row.original.groupName}\n </div>\n )}\n </>\n ),\n },\n {\n id: \"description\",\n Header: \"Description\",\n accessor: \"description\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<Group>) => {\n return (\n <div onClick={(e) => e.stopPropagation()}>\n <DropdownMenu\n disabled={isLoadingQuery}\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => openProperties(value)}\n icon={<SvgList />}\n >\n Properties\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedGroup(value.row.original);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n >\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n </div>\n );\n },\n },\n ],\n },\n ],\n [isLoadingQuery, onModify, openProperties],\n );\n\n // Temp\n const stringToColor = function (str: string) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let colour = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n colour += (`00${value.toString(16)}`).substr(-2);\n }\n return colour;\n };\n\n const onSelect = useCallback(\n async (selectedData: Group[] | undefined) => {\n clearEmphasizedElements();\n if (selectedData && selectedData.length > 0) {\n setLoadingQuery(true);\n let allIds: string[] = [];\n for (const row of selectedData) {\n const query = row.query ?? \"\";\n if (hilitedElements.current.has(query)) {\n const hilitedIds = hilitedElements.current.get(query) ?? [];\n visualizeElements(hilitedIds, stringToColor(row.id ?? \"\"));\n allIds = allIds.concat(hilitedIds);\n } else {\n try {\n const ids: string[] = await fetchIdsFromQuery(\n row.query ?? \"\",\n iModelConnection,\n );\n if (ids.length === 0) {\n toaster.warning(`${row.groupName}'s query is valid but produced no results.`);\n }\n const hiliteIds = await visualizeElementsById(\n ids,\n stringToColor(row.id ?? \"\"),\n iModelConnection,\n );\n hilitedElements.current.set(row.query ?? \"\", hiliteIds);\n\n allIds = allIds.concat(ids);\n } catch {\n const index = groups.findIndex((group) => group.id === row.id);\n setSelectedRows((rowIds) => {\n const selectedRowIds = { ...rowIds };\n delete selectedRowIds[index];\n return selectedRowIds;\n });\n toaster.negative(`Could not load ${row.groupName}. Query could not be resolved.`);\n\n }\n }\n }\n await zoomToElements(allIds);\n setLoadingQuery(false);\n }\n },\n [iModelConnection, groups],\n );\n\n const controlledState = useCallback(\n (state) => {\n return {\n ...state,\n selectedRowIds: { ...selectedRows },\n };\n },\n [selectedRows],\n );\n\n const propertyMenuGoBack = useCallback(async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }, [refresh]);\n\n const tableStateReducer = (\n newState: TableState,\n action: ActionType,\n _previousState: TableState,\n instance?: TableInstance,\n ): TableState => {\n switch (action.type) {\n case actions.toggleRowSelected: {\n const newSelectedRows = {\n ...selectedRows,\n };\n if (action.value) {\n newSelectedRows[action.id] = true;\n } else {\n delete newSelectedRows[action.id];\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n case actions.toggleAllRowsSelected: {\n if (!instance?.rowsById) {\n break;\n }\n const newSelectedRows = {} as Record<string, boolean>;\n if (action.value) {\n Object.keys(instance.rowsById).forEach(\n (id) => (newSelectedRows[id] = true),\n );\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n default:\n break;\n }\n return newState;\n };\n\n switch (groupsView) {\n case GroupsView.ADD:\n return (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n );\n case GroupsView.MODIFYING:\n return selectedGroup ? (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n ) : null;\n case GroupsView.PROPERTIES:\n return selectedGroup ? (\n <PropertyMenu\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={propertyMenuGoBack}\n />\n ) : null;\n default:\n return (\n <>\n <WidgetHeader\n title={mapping.mappingName ?? \"\"}\n disabled={isLoading || isLoadingQuery}\n returnFn={async () => {\n clearEmphasizedElements();\n await goBack();\n }}\n />\n <div className='groups-container'>\n <Button\n startIcon={\n isLoadingQuery ? <ProgressRadial size=\"small\" indeterminate /> : <SvgAdd />\n }\n styleType='high-visibility'\n disabled={isLoadingQuery}\n onClick={() => addGroup()}\n >\n {isLoadingQuery ? \"Loading Group(s)\" : \"Add Group\"}\n </Button>\n <Table<Group>\n data={groups}\n density='extra-condensed'\n columns={groupsColumns}\n emptyTableContent='No Groups available.'\n isSortable\n isSelectable\n onSelect={onSelect}\n isLoading={isLoading}\n isRowDisabled={() => isLoadingQuery}\n stateReducer={tableStateReducer}\n useControlledState={controlledState}\n />\n </div>\n <DeleteModal\n entityName={selectedGroup?.groupName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n await reportingClientApi.deleteGroup(\n iModelId,\n mapping.id ?? \"\",\n selectedGroup?.id ?? \"\",\n );\n }}\n refresh={refresh}\n />\n </>\n );\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Grouping.js","sourceRoot":"","sources":["../../../../src/widget/components/Grouping.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 {\n ActionType,\n CellProps,\n TableInstance,\n TableState,\n} from \"react-table\";\nimport {\n actions,\n} from \"react-table\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { GroupReportingAPI, MappingReportingAPI } from \"../../api/generated/api\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n ProgressRadial,\n Table,\n toaster,\n} from \"@itwin/itwinui-react\";\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgList,\n SvgMore,\n} from \"@itwin/itwinui-icons-react\";\nimport DeleteModal from \"./DeleteModal\";\nimport \"./Grouping.scss\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { PropertyMenu } from \"./PropertyMenu\";\nimport {\n clearEmphasizedElements,\n visualizeElements,\n visualizeElementsById,\n zoomToElements,\n} from \"./viewerUtils\";\nimport { fetchIdsFromQuery, handleError, WidgetHeader } from \"./utils\";\nimport GroupAction from \"./GroupAction\";\n\nexport type Group = CreateTypeFromInterface<GroupReportingAPI>;\n\nenum GroupsView {\n GROUPS = \"groups\",\n MODIFYING = \"modifying\",\n ADD = \"ADD\",\n PROPERTIES = \"properties\",\n}\n\ninterface GroupsTreeProps {\n mapping: MappingReportingAPI;\n goBack: () => Promise<void>;\n}\n\nconst fetchGroups = async (\n setGroups: React.Dispatch<React.SetStateAction<Group[]>>,\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n) => {\n try {\n setIsLoading(true);\n const groups = await reportingClientApi.getGroups(iModelId, mappingId);\n setGroups(groups.groups ?? []);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst useFetchGroups = (\n iModelId: string,\n mappingId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n): [Group[], React.Dispatch<React.SetStateAction<Group[]>>] => {\n const [groups, setGroups] = useState<GroupReportingAPI[]>([]);\n\n useEffect(() => {\n void fetchGroups(setGroups, iModelId, mappingId, setIsLoading);\n }, [iModelId, mappingId, setIsLoading]);\n\n return [groups, setGroups];\n};\n\nexport const Groupings = ({ mapping, goBack }: GroupsTreeProps) => {\n const iModelConnection = useActiveIModelConnection() as IModelConnection;\n const iModelId = useActiveIModelConnection()?.iModelId as string;\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [groupsView, setGroupsView] = useState<GroupsView>(GroupsView.GROUPS);\n const [selectedGroup, setSelectedGroup] = useState<Group | undefined>(\n undefined,\n );\n const [groups, setGroups] = useFetchGroups(\n iModelId,\n mapping.id ?? \"\",\n setIsLoading,\n );\n const hilitedElements = useRef<Map<string, string[]>>(new Map());\n const [selectedRows, setSelectedRows] = useState<Record<string, boolean>>({});\n const [isLoadingQuery, setLoadingQuery] = useState<boolean>(false);\n\n const refresh = useCallback(async () => {\n setGroupsView(GroupsView.GROUPS);\n setSelectedGroup(undefined);\n setGroups([]);\n await fetchGroups(setGroups, iModelId, mapping.id ?? \"\", setIsLoading);\n }, [iModelId, mapping.id, setGroups]);\n\n const addGroup = () => {\n // TODO Retain selection in view without emphasizes. Goal is to make it so we can distinguish\n // hilited elements from regular elements without emphasis due to it blocking selection. For now clearing\n // selection.\n clearEmphasizedElements();\n setGroupsView(GroupsView.ADD);\n };\n\n const onModify = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.MODIFYING);\n }, []);\n\n const openProperties = useCallback((value) => {\n clearEmphasizedElements();\n setSelectedGroup(value.row.original);\n setGroupsView(GroupsView.PROPERTIES);\n }, []);\n\n const groupsColumns = useMemo(\n () => [\n {\n Header: \"Table\",\n columns: [\n {\n id: \"groupName\",\n Header: \"Group\",\n accessor: \"groupName\",\n Cell: (value: CellProps<Group>) => (\n <>\n {isLoadingQuery ? (\n value.row.original.groupName\n ) : (\n <div\n className='iui-anchor'\n onClick={(e) => {\n e.stopPropagation();\n openProperties(value);\n }}\n >\n {value.row.original.groupName}\n </div>\n )}\n </>\n ),\n },\n {\n id: \"description\",\n Header: \"Description\",\n accessor: \"description\",\n },\n {\n id: \"dropdown\",\n Header: \"\",\n width: 80,\n Cell: (value: CellProps<Group>) => {\n return (\n <div onClick={(e) => e.stopPropagation()}>\n <DropdownMenu\n disabled={isLoadingQuery}\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => onModify(value)}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={() => openProperties(value)}\n icon={<SvgList />}\n >\n Properties\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedGroup(value.row.original);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton\n disabled={isLoadingQuery}\n styleType='borderless'\n >\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n </div>\n );\n },\n },\n ],\n },\n ],\n [isLoadingQuery, onModify, openProperties],\n );\n\n // Temp\n const stringToColor = function (str: string) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let colour = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n colour += (`00${value.toString(16)}`).substr(-2);\n }\n return colour;\n };\n\n const onSelect = useCallback(\n async (selectedData: Group[] | undefined) => {\n clearEmphasizedElements();\n if (selectedData && selectedData.length > 0) {\n setLoadingQuery(true);\n let allIds: string[] = [];\n for (const row of selectedData) {\n const query = row.query ?? \"\";\n if (hilitedElements.current.has(query)) {\n const hilitedIds = hilitedElements.current.get(query) ?? [];\n visualizeElements(hilitedIds, stringToColor(row.id ?? \"\"));\n allIds = allIds.concat(hilitedIds);\n } else {\n try {\n const ids: string[] = await fetchIdsFromQuery(\n query,\n iModelConnection,\n );\n if (ids.length === 0) {\n toaster.warning(`${row.groupName}'s query is valid but produced no results.`);\n }\n const hiliteIds = await visualizeElementsById(\n ids,\n stringToColor(row.id ?? \"\"),\n iModelConnection,\n );\n hilitedElements.current.set(query, hiliteIds);\n\n allIds = allIds.concat(ids);\n } catch {\n const index = groups.findIndex((group) => group.id === row.id);\n setSelectedRows((rowIds) => {\n const selectedRowIds = { ...rowIds };\n delete selectedRowIds[index];\n return selectedRowIds;\n });\n toaster.negative(`Could not load ${row.groupName}. Query could not be resolved.`);\n\n }\n }\n }\n await zoomToElements(allIds);\n setLoadingQuery(false);\n }\n },\n [iModelConnection, groups],\n );\n\n const controlledState = useCallback(\n (state) => {\n return {\n ...state,\n selectedRowIds: { ...selectedRows },\n };\n },\n [selectedRows],\n );\n\n const propertyMenuGoBack = useCallback(async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }, [refresh]);\n\n const tableStateReducer = (\n newState: TableState,\n action: ActionType,\n _previousState: TableState,\n instance?: TableInstance,\n ): TableState => {\n switch (action.type) {\n case actions.toggleRowSelected: {\n const newSelectedRows = {\n ...selectedRows,\n };\n if (action.value) {\n newSelectedRows[action.id] = true;\n } else {\n delete newSelectedRows[action.id];\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n case actions.toggleAllRowsSelected: {\n if (!instance?.rowsById) {\n break;\n }\n const newSelectedRows = {} as Record<string, boolean>;\n if (action.value) {\n Object.keys(instance.rowsById).forEach(\n (id) => (newSelectedRows[id] = true),\n );\n }\n setSelectedRows(newSelectedRows);\n newState.selectedRowIds = newSelectedRows;\n break;\n }\n default:\n break;\n }\n return newState;\n };\n\n switch (groupsView) {\n case GroupsView.ADD:\n return (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n );\n case GroupsView.MODIFYING:\n return selectedGroup ? (\n <GroupAction\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={async () => {\n clearEmphasizedElements();\n setGroupsView(GroupsView.GROUPS);\n await refresh();\n }}\n />\n ) : null;\n case GroupsView.PROPERTIES:\n return selectedGroup ? (\n <PropertyMenu\n iModelId={iModelId}\n mappingId={mapping.id ?? \"\"}\n group={selectedGroup}\n goBack={propertyMenuGoBack}\n />\n ) : null;\n default:\n return (\n <>\n <WidgetHeader\n title={mapping.mappingName ?? \"\"}\n disabled={isLoading || isLoadingQuery}\n returnFn={async () => {\n clearEmphasizedElements();\n await goBack();\n }}\n />\n <div className='groups-container'>\n <Button\n startIcon={\n isLoadingQuery ? <ProgressRadial size=\"small\" indeterminate /> : <SvgAdd />\n }\n styleType='high-visibility'\n disabled={isLoadingQuery}\n onClick={() => addGroup()}\n >\n {isLoadingQuery ? \"Loading Group(s)\" : \"Add Group\"}\n </Button>\n <Table<Group>\n data={groups}\n density='extra-condensed'\n columns={groupsColumns}\n emptyTableContent='No Groups available.'\n isSortable\n isSelectable\n onSelect={onSelect}\n isLoading={isLoading}\n isRowDisabled={() => isLoadingQuery}\n stateReducer={tableStateReducer}\n useControlledState={controlledState}\n />\n </div>\n <DeleteModal\n entityName={selectedGroup?.groupName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n await reportingClientApi.deleteGroup(\n iModelId,\n mapping.id ?? \"\",\n selectedGroup?.id ?? \"\",\n );\n }}\n refresh={refresh}\n />\n </>\n );\n }\n};\n"]}
|
|
@@ -93,7 +93,7 @@ const MappingAction = ({ iModelId, mapping, returnFn }) => {
|
|
|
93
93
|
utils_1.handleInputChange(event, values, setValues);
|
|
94
94
|
validator.showMessageFor("description");
|
|
95
95
|
} }))),
|
|
96
|
-
react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: returnFn,
|
|
96
|
+
react_1.default.createElement(ActionPanel_1.default, { onSave: onSave, onCancel: returnFn, isSavingDisabled: !(values.name && values.description), isLoading: isLoading })));
|
|
97
97
|
};
|
|
98
98
|
exports.default = MappingAction;
|
|
99
99
|
//# sourceMappingURL=MappingAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MappingAction.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingAction.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MappingAction.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingAction.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 { Fieldset, LabeledInput, Small } from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport type { MappingReportingAPI } from \"../../api/generated/api\";\nimport { reportingClientApi } from \"../../api/reportingClient\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, handleInputChange, WidgetHeader } from \"./utils\";\nimport \"./MappingAction.scss\";\n\ninterface MappingActionProps {\n iModelId: string;\n mapping?: MappingReportingAPI;\n returnFn: () => Promise<void>;\n}\n\nconst MappingAction = ({ iModelId, mapping, returnFn }: MappingActionProps) => {\n const [values, setValues] = useState({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n });\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n // TODO ERRORED STATE\n const onSave = async () => {\n try {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setIsLoading(true);\n mapping\n ? await reportingClientApi.updateMapping(iModelId, mapping.id ?? \"\", {\n mappingName: values.name,\n description: values.description,\n })\n : await reportingClientApi.createMapping(iModelId, {\n mappingName: values.name,\n description: values.description,\n });\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <WidgetHeader\n title={mapping ? \"Modify Mapping\" : \"Add Mapping\"}\n returnFn={returnFn}\n />\n <div className='details-form-container'>\n <Fieldset legend='Mapping Details' className='details-form'>\n <Small className='field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='name'\n name='name'\n label='Name'\n value={values.name}\n required\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", values.name, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", values.name, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledInput\n id='description'\n required\n name='description'\n label='Description'\n value={values.description}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"description\");\n }}\n message={validator.message(\n \"description\",\n values.description,\n \"required\",\n )}\n status={\n validator.message(\"description\", values.description, \"required\")\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"description\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"description\");\n }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={returnFn}\n isSavingDisabled={!(values.name && values.description)}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default MappingAction;\n"]}
|
|
@@ -138,7 +138,9 @@ const PropertyView = (props) => {
|
|
|
138
138
|
React.useEffect(() => {
|
|
139
139
|
if (props === null || props === void 0 ? void 0 : props.propertyRecord) {
|
|
140
140
|
if (isPropertySelected) {
|
|
141
|
-
|
|
141
|
+
if (context.isRendering) {
|
|
142
|
+
setIsCheckboxLoading(true);
|
|
143
|
+
}
|
|
142
144
|
_addNestedProperties(props.propertyRecord);
|
|
143
145
|
}
|
|
144
146
|
else {
|
|
@@ -150,6 +152,7 @@ const PropertyView = (props) => {
|
|
|
150
152
|
_removeNestedProperties,
|
|
151
153
|
isPropertySelected,
|
|
152
154
|
props.propertyRecord,
|
|
155
|
+
context.isRendering,
|
|
153
156
|
]);
|
|
154
157
|
React.useEffect(() => {
|
|
155
158
|
if (!context.isRendering)
|