[Query Copilot] Pass user email to query feedback (#1516)

* Pass user email to query feedback AB#2501550

* Await page.frame

* Make contact no by default

* Add hook to check if it sohuld render the modal in the main component
This commit is contained in:
v-darkora 2023-07-10 10:59:05 +02:00 committed by GitHub
parent b6d576b7b6
commit e9ea887fe7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 4 deletions

View File

@ -13,6 +13,7 @@ import {
import { submitFeedback } from "Explorer/QueryCopilot/QueryCopilotUtilities"; import { submitFeedback } from "Explorer/QueryCopilot/QueryCopilotUtilities";
import { useQueryCopilot } from "hooks/useQueryCopilot"; import { useQueryCopilot } from "hooks/useQueryCopilot";
import React from "react"; import React from "react";
import { getUserEmail } from "../../Utils/UserUtils";
export const QueryCopilotFeedbackModal: React.FC = (): JSX.Element => { export const QueryCopilotFeedbackModal: React.FC = (): JSX.Element => {
const { const {
@ -26,6 +27,7 @@ export const QueryCopilotFeedbackModal: React.FC = (): JSX.Element => {
const [isContactAllowed, setIsContactAllowed] = React.useState<boolean>(true); const [isContactAllowed, setIsContactAllowed] = React.useState<boolean>(true);
const [description, setDescription] = React.useState<string>(""); const [description, setDescription] = React.useState<string>("");
const [doNotShowAgainChecked, setDoNotShowAgainChecked] = React.useState<boolean>(false); const [doNotShowAgainChecked, setDoNotShowAgainChecked] = React.useState<boolean>(false);
const [contact, setContact] = React.useState<string>(getUserEmail());
return ( return (
<Modal isOpen={showFeedbackModal}> <Modal isOpen={showFeedbackModal}>
<Stack style={{ padding: 24 }}> <Stack style={{ padding: 24 }}>
@ -69,7 +71,10 @@ export const QueryCopilotFeedbackModal: React.FC = (): JSX.Element => {
{ key: "no", text: "No, do not contact me." }, { key: "no", text: "No, do not contact me." },
]} ]}
selectedKey={isContactAllowed ? "yes" : "no"} selectedKey={isContactAllowed ? "yes" : "no"}
onChange={(_, option) => setIsContactAllowed(option.key === "yes")} onChange={(_, option) => {
setIsContactAllowed(option.key === "yes");
setContact(option.key === "yes" ? getUserEmail() : "");
}}
></ChoiceGroup> ></ChoiceGroup>
<Text style={{ fontSize: 12, marginBottom: 14 }}> <Text style={{ fontSize: 12, marginBottom: 14 }}>
By pressing submit, your feedback will be used to improve Microsoft products and services. IT admins for your By pressing submit, your feedback will be used to improve Microsoft products and services. IT admins for your
@ -92,7 +97,7 @@ export const QueryCopilotFeedbackModal: React.FC = (): JSX.Element => {
onClick={() => { onClick={() => {
closeFeedbackModal(); closeFeedbackModal();
setHideFeedbackModalForLikedQueries(doNotShowAgainChecked); setHideFeedbackModalForLikedQueries(doNotShowAgainChecked);
submitFeedback({ generatedQuery, likeQuery, description, userPrompt }); submitFeedback({ generatedQuery, likeQuery, description, userPrompt, contact });
}} }}
> >
Submit Submit

View File

@ -18,6 +18,7 @@ import "../externals/jquery.typeahead.min.js";
// Image Dependencies // Image Dependencies
import { QueryCopilotCarousel } from "Explorer/QueryCopilot/CopilotCarousel"; import { QueryCopilotCarousel } from "Explorer/QueryCopilot/CopilotCarousel";
import { QueryCopilotFeedbackModal } from "Explorer/QueryCopilot/QueryCopilotFeedbackModal"; import { QueryCopilotFeedbackModal } from "Explorer/QueryCopilot/QueryCopilotFeedbackModal";
import { useQueryCopilot } from "hooks/useQueryCopilot";
import "../images/CosmosDB_rgb_ui_lighttheme.ico"; import "../images/CosmosDB_rgb_ui_lighttheme.ico";
import hdeConnectImage from "../images/HdeConnectCosmosDB.svg"; import hdeConnectImage from "../images/HdeConnectCosmosDB.svg";
import "../images/favicon.ico"; import "../images/favicon.ico";
@ -63,6 +64,7 @@ const App: React.FunctionComponent = () => {
const [isLeftPaneExpanded, setIsLeftPaneExpanded] = useState<boolean>(true); const [isLeftPaneExpanded, setIsLeftPaneExpanded] = useState<boolean>(true);
const isCarouselOpen = useCarousel((state) => state.shouldOpen); const isCarouselOpen = useCarousel((state) => state.shouldOpen);
const isCopilotCarouselOpen = useCarousel((state) => state.showCopilotCarousel); const isCopilotCarouselOpen = useCarousel((state) => state.showCopilotCarousel);
const shouldShowModal = useQueryCopilot((state) => state.showFeedbackModal);
const config = useConfig(); const config = useConfig();
const explorer = useKnockoutExplorer(config?.platform); const explorer = useKnockoutExplorer(config?.platform);
@ -126,7 +128,7 @@ const App: React.FunctionComponent = () => {
{<SQLQuickstartTutorial />} {<SQLQuickstartTutorial />}
{<MongoQuickstartTutorial />} {<MongoQuickstartTutorial />}
{<QueryCopilotCarousel isOpen={isCopilotCarouselOpen} explorer={explorer} />} {<QueryCopilotCarousel isOpen={isCopilotCarouselOpen} explorer={explorer} />}
{<QueryCopilotFeedbackModal />} {shouldShowModal && <QueryCopilotFeedbackModal />}
</div> </div>
); );
}; };

View File

@ -6,3 +6,9 @@ export const getFullName = (): string => {
const { name } = decryptJWTToken(authorizationToken); const { name } = decryptJWTToken(authorizationToken);
return name; return name;
}; };
export const getUserEmail = (): string => {
const { authorizationToken } = userContext;
const { upn } = decryptJWTToken(authorizationToken);
return upn;
};

View File

@ -39,7 +39,7 @@ test("Resource token", async () => {
await page.type("input[class='inputToken']", resourceTokenConnectionString); await page.type("input[class='inputToken']", resourceTokenConnectionString);
await page.click("input[value='Connect']"); await page.click("input[value='Connect']");
await page.waitForSelector("iframe"); await page.waitForSelector("iframe");
const explorer = page.frame({ const explorer = await page.frame({
name: "explorer", name: "explorer",
}); });
await explorer.textContent(`css=.dataResourceTree >> "${collectionId}"`); await explorer.textContent(`css=.dataResourceTree >> "${collectionId}"`);