@itwin/grouping-mapping-widget 0.34.0 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/Groups/Editing/GroupAction.js +1 -1
- package/lib/cjs/components/Groups/Editing/GroupAction.js.map +1 -1
- package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderActionPanel.d.ts +2 -1
- package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderActionPanel.js +2 -2
- package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderActionPanel.js.map +1 -1
- package/lib/esm/components/Groups/Editing/GroupAction.js +1 -1
- package/lib/esm/components/Groups/Editing/GroupAction.js.map +1 -1
- package/lib/esm/components/Groups/QueryBuilder/QueryBuilderActionPanel.d.ts +2 -1
- package/lib/esm/components/Groups/QueryBuilder/QueryBuilderActionPanel.js +2 -2
- package/lib/esm/components/Groups/QueryBuilder/QueryBuilderActionPanel.js.map +1 -1
- package/package.json +1 -1
|
@@ -154,7 +154,7 @@ const GroupAction = (props) => {
|
|
|
154
154
|
isGroupDetailsStep && react_1.default.createElement(GroupDetailsStep_1.GroupDetailsStep, { details: details, setDetails: setDetails, validator: validator, displayStrings: { ...displayStrings } })),
|
|
155
155
|
react_1.default.createElement("div", { className: "gmw-action-panel" },
|
|
156
156
|
isLoading && react_1.default.createElement(LoadingSpinner_1.LoadingSpinner, null),
|
|
157
|
-
isQueryBuilderStep && react_1.default.createElement(QueryBuilderActionPanel_1.QueryBuilderActionPanel, { onClickNext: onClickNext }),
|
|
157
|
+
isQueryBuilderStep && react_1.default.createElement(QueryBuilderActionPanel_1.QueryBuilderActionPanel, { onClickNext: onClickNext, isNextDisabled: !query }),
|
|
158
158
|
isGroupDetailsStep && react_1.default.createElement(GroupDetailsActionPanel_1.GroupDetailsActionPanel, { isSaveDisabled: isBlockingActions, onClickSave: onClickSave, onClickBack: onClickBack }),
|
|
159
159
|
props.onClickCancel && (react_1.default.createElement(itwinui_react_1.Button, { type: "button", id: "cancel", onClick: onClickCancel }, "Cancel")))));
|
|
160
160
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../../src/components/Groups/Editing/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 { SelectOption } from \"@itwin/itwinui-react\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { LoadingSpinner } from \"../../SharedComponents/LoadingSpinner\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../../Properties/hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { useGroupingMappingCustomUI } from \"../../context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"../../customUI/GroupingMappingCustomUI\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { QueryBuilderStep } from \"../QueryBuilder/QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"../QueryBuilder/QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\nimport { useVisualization } from \"../hooks/useVisualization\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useGroupsClient } from \"../../context/GroupsClientContext\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\n/**\n * Props for the {@link GroupAction} component.\n * @public\n */\nexport interface GroupActionProps {\n mappingId: string;\n shouldVisualize: boolean;\n group?: GroupMinimal;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupAction = (props: GroupActionProps) => {\n const { getAccessToken, iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const groupsClient = useGroupsClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping,\n ) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [queryRowCount, setQueryRowCount] = useState<number>(0);\n\n const [validator, setShowValidationMessage] = useValidator();\n const queryClient = useQueryClient();\n\n const [queryGenerationType, setQueryGenerationType] = useState(props.queryGenerationType);\n const { isRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView } = useVisualization(\n props.shouldVisualize,\n iModelConnection,\n query,\n queryGenerationType,\n );\n\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n const displayStrings = React.useMemo(() => ({ ...defaultDisplayStrings, ...props.displayStrings }), [props.displayStrings]);\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const fetchQueryRowCount = async (query: string) => {\n const rowCount = (await iModelConnection.createQueryReader(`SELECT count(*) FROM (${query})`).next()).value[0];\n return rowCount as number;\n };\n\n const { mutate, isLoading: isQueryLoading } = useMutation(fetchQueryRowCount, {\n onSuccess: (result) => {\n setQueryRowCount(result);\n },\n });\n\n useEffect(() => {\n if (query) {\n mutate(query);\n } else {\n setQueryRowCount(0);\n }\n }, [iModelConnection, query, mutate]);\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs],\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n clearPresentationSelection();\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [clearPresentationSelection, resetView, setSimpleSelectionQuery],\n );\n\n const saveGroup = async () => {\n const accessToken = await getAccessToken();\n const currentQuery = query || simpleSelectionQuery;\n\n return props.group\n ? groupsClient.updateGroup(accessToken, props.mappingId, props.group.id, { ...details, query: currentQuery })\n : groupsClient.createGroup(accessToken, props.mappingId, { ...details, query: currentQuery });\n };\n\n const { mutate: onSaveMutate, isLoading: isSaveLoading } = useMutation(saveGroup, {\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"groups\"] });\n clearPresentationSelection();\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n },\n });\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n\n const isLoading = isSaveLoading || isQueryLoading;\n\n const isUpdating = isLoading || isRendering;\n\n const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery)) || isRendering || isLoading;\n\n const onClickSave = useCallback(() => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n onSaveMutate();\n }, [onSaveMutate, setShowValidationMessage, validator]);\n\n const onClickBack = useCallback(() => {\n setCurrentStep(GroupActionStep.QueryBuilder);\n }, []);\n\n const onClickCancel = useCallback(() => {\n clearPresentationSelection();\n if (props.onClickCancel) {\n props.onClickCancel();\n }\n }, [clearPresentationSelection, props]);\n\n const onClickNext = useCallback(() => {\n setCurrentStep(GroupActionStep.GroupDetails);\n }, []);\n\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n queryRowCount={queryRowCount}\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep details={details} setDetails={setDetails} validator={validator} displayStrings={{ ...displayStrings }} />}\n </div>\n <div className=\"gmw-action-panel\">\n {isLoading && <LoadingSpinner />}\n {isQueryBuilderStep && <QueryBuilderActionPanel onClickNext={onClickNext} />}\n {isGroupDetailsStep && <GroupDetailsActionPanel isSaveDisabled={isBlockingActions} onClickSave={onClickSave} onClickBack={onClickBack} />}\n {props.onClickCancel && (\n <Button type=\"button\" id=\"cancel\" onClick={onClickCancel}>\n Cancel\n </Button>\n )}\n </div>\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../../src/components/Groups/Editing/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 { SelectOption } from \"@itwin/itwinui-react\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { LoadingSpinner } from \"../../SharedComponents/LoadingSpinner\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../../Properties/hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { useGroupingMappingCustomUI } from \"../../context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"../../customUI/GroupingMappingCustomUI\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { QueryBuilderStep } from \"../QueryBuilder/QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"../QueryBuilder/QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\nimport { useVisualization } from \"../hooks/useVisualization\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useGroupsClient } from \"../../context/GroupsClientContext\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\n/**\n * Props for the {@link GroupAction} component.\n * @public\n */\nexport interface GroupActionProps {\n mappingId: string;\n shouldVisualize: boolean;\n group?: GroupMinimal;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupAction = (props: GroupActionProps) => {\n const { getAccessToken, iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const groupsClient = useGroupsClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping,\n ) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [queryRowCount, setQueryRowCount] = useState<number>(0);\n\n const [validator, setShowValidationMessage] = useValidator();\n const queryClient = useQueryClient();\n\n const [queryGenerationType, setQueryGenerationType] = useState(props.queryGenerationType);\n const { isRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView } = useVisualization(\n props.shouldVisualize,\n iModelConnection,\n query,\n queryGenerationType,\n );\n\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n const displayStrings = React.useMemo(() => ({ ...defaultDisplayStrings, ...props.displayStrings }), [props.displayStrings]);\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const fetchQueryRowCount = async (query: string) => {\n const rowCount = (await iModelConnection.createQueryReader(`SELECT count(*) FROM (${query})`).next()).value[0];\n return rowCount as number;\n };\n\n const { mutate, isLoading: isQueryLoading } = useMutation(fetchQueryRowCount, {\n onSuccess: (result) => {\n setQueryRowCount(result);\n },\n });\n\n useEffect(() => {\n if (query) {\n mutate(query);\n } else {\n setQueryRowCount(0);\n }\n }, [iModelConnection, query, mutate]);\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs],\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n clearPresentationSelection();\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [clearPresentationSelection, resetView, setSimpleSelectionQuery],\n );\n\n const saveGroup = async () => {\n const accessToken = await getAccessToken();\n const currentQuery = query || simpleSelectionQuery;\n\n return props.group\n ? groupsClient.updateGroup(accessToken, props.mappingId, props.group.id, { ...details, query: currentQuery })\n : groupsClient.createGroup(accessToken, props.mappingId, { ...details, query: currentQuery });\n };\n\n const { mutate: onSaveMutate, isLoading: isSaveLoading } = useMutation(saveGroup, {\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"groups\"] });\n clearPresentationSelection();\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n },\n });\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n\n const isLoading = isSaveLoading || isQueryLoading;\n\n const isUpdating = isLoading || isRendering;\n\n const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery)) || isRendering || isLoading;\n\n const onClickSave = useCallback(() => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n onSaveMutate();\n }, [onSaveMutate, setShowValidationMessage, validator]);\n\n const onClickBack = useCallback(() => {\n setCurrentStep(GroupActionStep.QueryBuilder);\n }, []);\n\n const onClickCancel = useCallback(() => {\n clearPresentationSelection();\n if (props.onClickCancel) {\n props.onClickCancel();\n }\n }, [clearPresentationSelection, props]);\n\n const onClickNext = useCallback(() => {\n setCurrentStep(GroupActionStep.GroupDetails);\n }, []);\n\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n queryRowCount={queryRowCount}\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep details={details} setDetails={setDetails} validator={validator} displayStrings={{ ...displayStrings }} />}\n </div>\n <div className=\"gmw-action-panel\">\n {isLoading && <LoadingSpinner />}\n {isQueryBuilderStep && <QueryBuilderActionPanel onClickNext={onClickNext} isNextDisabled={!query} />}\n {isGroupDetailsStep && <GroupDetailsActionPanel isSaveDisabled={isBlockingActions} onClickSave={onClickSave} onClickBack={onClickBack} />}\n {props.onClickCancel && (\n <Button type=\"button\" id=\"cancel\" onClick={onClickCancel}>\n Cancel\n </Button>\n )}\n </div>\n </>\n );\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
export interface QueryBuilderActionPanelProps {
|
|
3
3
|
onClickNext: () => void;
|
|
4
|
+
isNextDisabled?: boolean;
|
|
4
5
|
}
|
|
5
|
-
export declare const QueryBuilderActionPanel: ({ onClickNext }: QueryBuilderActionPanelProps) => JSX.Element;
|
|
6
|
+
export declare const QueryBuilderActionPanel: ({ onClickNext, isNextDisabled }: QueryBuilderActionPanelProps) => JSX.Element;
|
|
6
7
|
//# sourceMappingURL=QueryBuilderActionPanel.d.ts.map
|
|
@@ -10,8 +10,8 @@ exports.QueryBuilderActionPanel = void 0;
|
|
|
10
10
|
*--------------------------------------------------------------------------------------------*/
|
|
11
11
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
12
12
|
const react_1 = __importDefault(require("react"));
|
|
13
|
-
const QueryBuilderActionPanel = ({ onClickNext }) => {
|
|
14
|
-
return (react_1.default.createElement(itwinui_react_1.Button, { styleType: "high-visibility", id: "save-app", onClick: onClickNext }, "Next"));
|
|
13
|
+
const QueryBuilderActionPanel = ({ onClickNext, isNextDisabled }) => {
|
|
14
|
+
return (react_1.default.createElement(itwinui_react_1.Button, { styleType: "high-visibility", id: "save-app", onClick: onClickNext, disabled: isNextDisabled }, "Next"));
|
|
15
15
|
};
|
|
16
16
|
exports.QueryBuilderActionPanel = QueryBuilderActionPanel;
|
|
17
17
|
//# sourceMappingURL=QueryBuilderActionPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderActionPanel.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderActionPanel.tsx"],"names":[],"mappings":";;;;;;AAAA;;;gGAGgG;AAChG,wDAA8C;AAC9C,kDAA0B;
|
|
1
|
+
{"version":3,"file":"QueryBuilderActionPanel.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderActionPanel.tsx"],"names":[],"mappings":";;;;;;AAAA;;;gGAGgG;AAChG,wDAA8C;AAC9C,kDAA0B;AAOnB,MAAM,uBAAuB,GAAG,CAAC,EAAE,WAAW,EAAE,cAAc,EAAgC,EAAE,EAAE;IACvG,OAAO,CACL,8BAAC,sBAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,EAAE,EAAC,UAAU,EAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,WAEvF,CACV,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,uBAAuB,2BAMlC","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 React from \"react\";\n\nexport interface QueryBuilderActionPanelProps {\n onClickNext: () => void;\n isNextDisabled?: boolean;\n}\n\nexport const QueryBuilderActionPanel = ({ onClickNext, isNextDisabled }: QueryBuilderActionPanelProps) => {\n return (\n <Button styleType=\"high-visibility\" id=\"save-app\" onClick={onClickNext} disabled={isNextDisabled}>\n Next\n </Button>\n );\n};\n"]}
|
|
@@ -125,7 +125,7 @@ export const GroupAction = (props) => {
|
|
|
125
125
|
isGroupDetailsStep && React.createElement(GroupDetailsStep, { details: details, setDetails: setDetails, validator: validator, displayStrings: { ...displayStrings } })),
|
|
126
126
|
React.createElement("div", { className: "gmw-action-panel" },
|
|
127
127
|
isLoading && React.createElement(LoadingSpinner, null),
|
|
128
|
-
isQueryBuilderStep && React.createElement(QueryBuilderActionPanel, { onClickNext: onClickNext }),
|
|
128
|
+
isQueryBuilderStep && React.createElement(QueryBuilderActionPanel, { onClickNext: onClickNext, isNextDisabled: !query }),
|
|
129
129
|
isGroupDetailsStep && React.createElement(GroupDetailsActionPanel, { isSaveDisabled: isBlockingActions, onClickSave: onClickSave, onClickBack: onClickBack }),
|
|
130
130
|
props.onClickCancel && (React.createElement(Button, { type: "button", id: "cancel", onClick: onClickCancel }, "Cancel")))));
|
|
131
131
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../../src/components/Groups/Editing/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 { SelectOption } from \"@itwin/itwinui-react\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { LoadingSpinner } from \"../../SharedComponents/LoadingSpinner\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../../Properties/hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { useGroupingMappingCustomUI } from \"../../context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"../../customUI/GroupingMappingCustomUI\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { QueryBuilderStep } from \"../QueryBuilder/QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"../QueryBuilder/QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\nimport { useVisualization } from \"../hooks/useVisualization\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useGroupsClient } from \"../../context/GroupsClientContext\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\n/**\n * Props for the {@link GroupAction} component.\n * @public\n */\nexport interface GroupActionProps {\n mappingId: string;\n shouldVisualize: boolean;\n group?: GroupMinimal;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupAction = (props: GroupActionProps) => {\n const { getAccessToken, iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const groupsClient = useGroupsClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping,\n ) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [queryRowCount, setQueryRowCount] = useState<number>(0);\n\n const [validator, setShowValidationMessage] = useValidator();\n const queryClient = useQueryClient();\n\n const [queryGenerationType, setQueryGenerationType] = useState(props.queryGenerationType);\n const { isRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView } = useVisualization(\n props.shouldVisualize,\n iModelConnection,\n query,\n queryGenerationType,\n );\n\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n const displayStrings = React.useMemo(() => ({ ...defaultDisplayStrings, ...props.displayStrings }), [props.displayStrings]);\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const fetchQueryRowCount = async (query: string) => {\n const rowCount = (await iModelConnection.createQueryReader(`SELECT count(*) FROM (${query})`).next()).value[0];\n return rowCount as number;\n };\n\n const { mutate, isLoading: isQueryLoading } = useMutation(fetchQueryRowCount, {\n onSuccess: (result) => {\n setQueryRowCount(result);\n },\n });\n\n useEffect(() => {\n if (query) {\n mutate(query);\n } else {\n setQueryRowCount(0);\n }\n }, [iModelConnection, query, mutate]);\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs],\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n clearPresentationSelection();\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [clearPresentationSelection, resetView, setSimpleSelectionQuery],\n );\n\n const saveGroup = async () => {\n const accessToken = await getAccessToken();\n const currentQuery = query || simpleSelectionQuery;\n\n return props.group\n ? groupsClient.updateGroup(accessToken, props.mappingId, props.group.id, { ...details, query: currentQuery })\n : groupsClient.createGroup(accessToken, props.mappingId, { ...details, query: currentQuery });\n };\n\n const { mutate: onSaveMutate, isLoading: isSaveLoading } = useMutation(saveGroup, {\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"groups\"] });\n clearPresentationSelection();\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n },\n });\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n\n const isLoading = isSaveLoading || isQueryLoading;\n\n const isUpdating = isLoading || isRendering;\n\n const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery)) || isRendering || isLoading;\n\n const onClickSave = useCallback(() => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n onSaveMutate();\n }, [onSaveMutate, setShowValidationMessage, validator]);\n\n const onClickBack = useCallback(() => {\n setCurrentStep(GroupActionStep.QueryBuilder);\n }, []);\n\n const onClickCancel = useCallback(() => {\n clearPresentationSelection();\n if (props.onClickCancel) {\n props.onClickCancel();\n }\n }, [clearPresentationSelection, props]);\n\n const onClickNext = useCallback(() => {\n setCurrentStep(GroupActionStep.GroupDetails);\n }, []);\n\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n queryRowCount={queryRowCount}\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep details={details} setDetails={setDetails} validator={validator} displayStrings={{ ...displayStrings }} />}\n </div>\n <div className=\"gmw-action-panel\">\n {isLoading && <LoadingSpinner />}\n {isQueryBuilderStep && <QueryBuilderActionPanel onClickNext={onClickNext} />}\n {isGroupDetailsStep && <GroupDetailsActionPanel isSaveDisabled={isBlockingActions} onClickSave={onClickSave} onClickBack={onClickBack} />}\n {props.onClickCancel && (\n <Button type=\"button\" id=\"cancel\" onClick={onClickCancel}>\n Cancel\n </Button>\n )}\n </div>\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"GroupAction.js","sourceRoot":"","sources":["../../../../../src/components/Groups/Editing/GroupAction.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,oBAAoB,CAAC;AAC5B,OAAO,YAAY,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAE1F,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,MAAM,qBAAqB,GAAG;IAC5B,YAAY,EAAE,eAAe;IAC7B,OAAO,EAAE,UAAU;CACpB,CAAC;AAEF,IAAK,eAGJ;AAHD,WAAK,eAAe;IAClB,qEAAY,CAAA;IACZ,qEAAY,CAAA;AACd,CAAC,EAHI,eAAe,KAAf,eAAe,QAGnB;AAgBD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;IACrD,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,2BAA2B,EAAE,CAAC;IAC3E,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IACD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAuB,0BAA0B,EAAE,CAAC,SAAS,CAAC,MAAM,CAChF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,2BAA2B,CAAC,QAAQ,CACjC,CAAC;IACxB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC;QACrC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE;QACvC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE;KAC5C,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC,GAAG,YAAY,EAAE,CAAC;IAC7D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC1F,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAC5H,KAAK,CAAC,eAAe,EACrB,gBAAgB,EAChB,KAAK,EACL,mBAAmB,CACpB,CAAC;IAEF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAEnF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAE5H,SAAS,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEhG,MAAM,kBAAkB,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,CAAC,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,yBAAyB,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/G,OAAO,QAAkB,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,WAAW,CAAC,kBAAkB,EAAE;QAC5E,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YACpB,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,KAAK,CAAC,CAAC;SACf;aAAM;YACL,gBAAgB,CAAC,CAAC,CAAC,CAAC;SACrB;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtC,MAAM,UAAU,GAAG,OAAO,CACxB,GAA2B,EAAE,CAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpB,KAAK,EAAE,EAAE,CAAC,YAAY;QACtB,KAAK,EAAE,EAAE,CAAC,IAAI;QACd,IAAI,EAAE,EAAE,CAAC,IAAI;KACd,CAAC,CAAC,EACL,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAC1B,KAAK,EAAE,KAAa,EAAE,EAAE;QACtB,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9B,0BAA0B,EAAE,CAAC;QAC7B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC,EACD,CAAC,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,CAAC,CACjE,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,KAAK,IAAI,oBAAoB,CAAC;QAEnD,OAAO,KAAK,CAAC,KAAK;YAChB,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC7G,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IAClG,CAAC,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,WAAW,CAAC,SAAS,EAAE;QAChF,SAAS,EAAE,KAAK,IAAI,EAAE;YACpB,MAAM,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9D,0BAA0B,EAAE,CAAC;YAC7B,UAAU,CAAC;gBACT,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE;gBACvC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE;aAC5C,CAAC,CAAC;YACH,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAC7C,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChC,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,WAAW,KAAK,eAAe,CAAC,YAAY,CAAC;IACxE,MAAM,kBAAkB,GAAG,WAAW,KAAK,eAAe,CAAC,YAAY,CAAC;IAExE,MAAM,SAAS,GAAG,aAAa,IAAI,cAAc,CAAC;IAElD,MAAM,UAAU,GAAG,SAAS,IAAI,WAAW,CAAC;IAE5C,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC,IAAI,WAAW,IAAI,SAAS,CAAC;IAE9G,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;YACzB,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;SACR;QACD,YAAY,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,YAAY,EAAE,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,0BAA0B,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,aAAa,EAAE;YACvB,KAAK,CAAC,aAAa,EAAE,CAAC;SACvB;IACH,CAAC,EAAE,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC;IAExC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL;QACE,6BAAK,SAAS,EAAC,gCAAgC;YAC7C,oBAAC,gBAAgB,IACf,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,CAAC,kBAAkB,EAC7B,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,EAAE,GAAG,cAAc,EAAE,EACrC,KAAK,EAAE,KAAK,CAAC,KAAK,GAClB;YACD,kBAAkB,IAAI,oBAAC,gBAAgB,IAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,GAAG,cAAc,EAAE,GAAI,CAC9I;QACN,6BAAK,SAAS,EAAC,kBAAkB;YAC9B,SAAS,IAAI,oBAAC,cAAc,OAAG;YAC/B,kBAAkB,IAAI,oBAAC,uBAAuB,IAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,KAAK,GAAI;YACnG,kBAAkB,IAAI,oBAAC,uBAAuB,IAAC,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAI;YACxI,KAAK,CAAC,aAAa,IAAI,CACtB,oBAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAC,QAAQ,EAAC,OAAO,EAAE,aAAa,aAE/C,CACV,CACG,CACL,CACJ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { Button } from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { LoadingSpinner } from \"../../SharedComponents/LoadingSpinner\";\nimport \"./GroupAction.scss\";\nimport useValidator from \"../../Properties/hooks/useValidator\";\nimport { useGroupingMappingApiConfig } from \"../../context/GroupingApiConfigContext\";\nimport { useGroupingMappingCustomUI } from \"../../context/GroupingMappingCustomUIContext\";\nimport type { GroupingCustomUI } from \"../../customUI/GroupingMappingCustomUI\";\nimport { GroupingMappingCustomUIType } from \"../../customUI/GroupingMappingCustomUI\";\nimport type { GroupMinimal } from \"@itwin/insights-client\";\nimport { QueryBuilderStep } from \"../QueryBuilder/QueryBuilderStep\";\nimport { GroupDetailsStep } from \"./GroupDetailsStep\";\nimport { QueryBuilderActionPanel } from \"../QueryBuilder/QueryBuilderActionPanel\";\nimport { GroupDetailsActionPanel } from \"./GroupDetailsActionPanel\";\nimport { useVisualization } from \"../hooks/useVisualization\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useGroupsClient } from \"../../context/GroupsClientContext\";\n\nconst defaultDisplayStrings = {\n groupDetails: \"Group Details\",\n groupBy: \"Group By\",\n};\n\nenum GroupActionStep {\n QueryBuilder,\n GroupDetails,\n}\n\n/**\n * Props for the {@link GroupAction} component.\n * @public\n */\nexport interface GroupActionProps {\n mappingId: string;\n shouldVisualize: boolean;\n group?: GroupMinimal;\n queryGenerationType: string;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\n/**\n * Component to create or update a group.\n * @public\n */\nexport const GroupAction = (props: GroupActionProps) => {\n const { getAccessToken, iModelConnection } = useGroupingMappingApiConfig();\n if (!iModelConnection) {\n throw new Error(\"This component requires an active iModelConnection.\");\n }\n const groupsClient = useGroupsClient();\n const groupUIs: GroupingCustomUI[] = useGroupingMappingCustomUI().customUIs.filter(\n (p) => p.type === GroupingMappingCustomUIType.Grouping,\n ) as GroupingCustomUI[];\n const [details, setDetails] = useState({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n const [query, setQuery] = useState<string>(\"\");\n const [queryRowCount, setQueryRowCount] = useState<number>(0);\n\n const [validator, setShowValidationMessage] = useValidator();\n const queryClient = useQueryClient();\n\n const [queryGenerationType, setQueryGenerationType] = useState(props.queryGenerationType);\n const { isRendering, simpleSelectionQuery, setSimpleSelectionQuery, clearPresentationSelection, resetView } = useVisualization(\n props.shouldVisualize,\n iModelConnection,\n query,\n queryGenerationType,\n );\n\n const [currentStep, setCurrentStep] = React.useState(GroupActionStep.QueryBuilder);\n\n const displayStrings = React.useMemo(() => ({ ...defaultDisplayStrings, ...props.displayStrings }), [props.displayStrings]);\n\n useEffect(() => setQueryGenerationType(props.queryGenerationType), [props.queryGenerationType]);\n\n const fetchQueryRowCount = async (query: string) => {\n const rowCount = (await iModelConnection.createQueryReader(`SELECT count(*) FROM (${query})`).next()).value[0];\n return rowCount as number;\n };\n\n const { mutate, isLoading: isQueryLoading } = useMutation(fetchQueryRowCount, {\n onSuccess: (result) => {\n setQueryRowCount(result);\n },\n });\n\n useEffect(() => {\n if (query) {\n mutate(query);\n } else {\n setQueryRowCount(0);\n }\n }, [iModelConnection, query, mutate]);\n\n const getOptions = useMemo(\n (): SelectOption<string>[] =>\n groupUIs.map((ui) => ({\n label: ui.displayLabel,\n value: ui.name,\n icon: ui.icon,\n })),\n [groupUIs],\n );\n\n const onChange = useCallback(\n async (value: string) => {\n setQueryGenerationType(value);\n clearPresentationSelection();\n setQuery(\"\");\n setSimpleSelectionQuery(\"\");\n await resetView();\n },\n [clearPresentationSelection, resetView, setSimpleSelectionQuery],\n );\n\n const saveGroup = async () => {\n const accessToken = await getAccessToken();\n const currentQuery = query || simpleSelectionQuery;\n\n return props.group\n ? groupsClient.updateGroup(accessToken, props.mappingId, props.group.id, { ...details, query: currentQuery })\n : groupsClient.createGroup(accessToken, props.mappingId, { ...details, query: currentQuery });\n };\n\n const { mutate: onSaveMutate, isLoading: isSaveLoading } = useMutation(saveGroup, {\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey: [\"groups\"] });\n clearPresentationSelection();\n setDetails({\n groupName: props.group?.groupName ?? \"\",\n description: props.group?.description ?? \"\",\n });\n setCurrentStep(GroupActionStep.QueryBuilder);\n setShowValidationMessage(false);\n props.onSaveSuccess();\n },\n });\n\n const isQueryBuilderStep = currentStep === GroupActionStep.QueryBuilder;\n const isGroupDetailsStep = currentStep === GroupActionStep.GroupDetails;\n\n const isLoading = isSaveLoading || isQueryLoading;\n\n const isUpdating = isLoading || isRendering;\n\n const isBlockingActions = !(details.groupName && (query || simpleSelectionQuery)) || isRendering || isLoading;\n\n const onClickSave = useCallback(() => {\n if (!validator.allValid()) {\n setShowValidationMessage(true);\n return;\n }\n onSaveMutate();\n }, [onSaveMutate, setShowValidationMessage, validator]);\n\n const onClickBack = useCallback(() => {\n setCurrentStep(GroupActionStep.QueryBuilder);\n }, []);\n\n const onClickCancel = useCallback(() => {\n clearPresentationSelection();\n if (props.onClickCancel) {\n props.onClickCancel();\n }\n }, [clearPresentationSelection, props]);\n\n const onClickNext = useCallback(() => {\n setCurrentStep(GroupActionStep.GroupDetails);\n }, []);\n\n return (\n <>\n <div className=\"gmw-group-add-modify-container\">\n <QueryBuilderStep\n queryRowCount={queryRowCount}\n isHidden={!isQueryBuilderStep}\n queryGenerationType={queryGenerationType}\n groupUIs={groupUIs}\n isUpdating={isUpdating}\n resetView={resetView}\n setQuery={setQuery}\n onChange={onChange}\n getOptions={getOptions}\n displayStrings={{ ...displayStrings }}\n group={props.group}\n />\n {isGroupDetailsStep && <GroupDetailsStep details={details} setDetails={setDetails} validator={validator} displayStrings={{ ...displayStrings }} />}\n </div>\n <div className=\"gmw-action-panel\">\n {isLoading && <LoadingSpinner />}\n {isQueryBuilderStep && <QueryBuilderActionPanel onClickNext={onClickNext} isNextDisabled={!query} />}\n {isGroupDetailsStep && <GroupDetailsActionPanel isSaveDisabled={isBlockingActions} onClickSave={onClickSave} onClickBack={onClickBack} />}\n {props.onClickCancel && (\n <Button type=\"button\" id=\"cancel\" onClick={onClickCancel}>\n Cancel\n </Button>\n )}\n </div>\n </>\n );\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
export interface QueryBuilderActionPanelProps {
|
|
3
3
|
onClickNext: () => void;
|
|
4
|
+
isNextDisabled?: boolean;
|
|
4
5
|
}
|
|
5
|
-
export declare const QueryBuilderActionPanel: ({ onClickNext }: QueryBuilderActionPanelProps) => JSX.Element;
|
|
6
|
+
export declare const QueryBuilderActionPanel: ({ onClickNext, isNextDisabled }: QueryBuilderActionPanelProps) => JSX.Element;
|
|
6
7
|
//# sourceMappingURL=QueryBuilderActionPanel.d.ts.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { Button } from "@itwin/itwinui-react";
|
|
6
6
|
import React from "react";
|
|
7
|
-
export const QueryBuilderActionPanel = ({ onClickNext }) => {
|
|
8
|
-
return (React.createElement(Button, { styleType: "high-visibility", id: "save-app", onClick: onClickNext }, "Next"));
|
|
7
|
+
export const QueryBuilderActionPanel = ({ onClickNext, isNextDisabled }) => {
|
|
8
|
+
return (React.createElement(Button, { styleType: "high-visibility", id: "save-app", onClick: onClickNext, disabled: isNextDisabled }, "Next"));
|
|
9
9
|
};
|
|
10
10
|
//# sourceMappingURL=QueryBuilderActionPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderActionPanel.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderActionPanel.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryBuilderActionPanel.js","sourceRoot":"","sources":["../../../../../src/components/Groups/QueryBuilder/QueryBuilderActionPanel.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EAAE,WAAW,EAAE,cAAc,EAAgC,EAAE,EAAE;IACvG,OAAO,CACL,oBAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,EAAE,EAAC,UAAU,EAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,WAEvF,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport { Button } from \"@itwin/itwinui-react\";\nimport React from \"react\";\n\nexport interface QueryBuilderActionPanelProps {\n onClickNext: () => void;\n isNextDisabled?: boolean;\n}\n\nexport const QueryBuilderActionPanel = ({ onClickNext, isNextDisabled }: QueryBuilderActionPanelProps) => {\n return (\n <Button styleType=\"high-visibility\" id=\"save-app\" onClick={onClickNext} disabled={isNextDisabled}>\n Next\n </Button>\n );\n};\n"]}
|