Merge branch 'main' into avm99963-monorail

Merged commit 4137ed7879acadbf891e8c471108acb874dae886.

GitOrigin-RevId: b6100ffc5b1da355a35f37b13fcaaf746ee8b307
diff --git a/static_src/react/issue-wizard/IssueWizardFeedback.tsx b/static_src/react/issue-wizard/IssueWizardFeedback.tsx
new file mode 100644
index 0000000..0dff09b
--- /dev/null
+++ b/static_src/react/issue-wizard/IssueWizardFeedback.tsx
@@ -0,0 +1,98 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import * as React from 'react';
+import {makeStyles} from '@material-ui/styles';
+import Dialog from '@material-ui/core/Dialog';
+import DialogTitle from '@material-ui/core/DialogTitle';
+import DialogContent from '@material-ui/core/DialogContent';
+import DialogContentText from '@material-ui/core/DialogContentText';
+import DialogActions from '@material-ui/core/DialogActions';
+import Button from '@material-ui/core/Button';
+import Input from '@material-ui/core/Input';
+
+const userStyles = makeStyles({
+  title: {
+    backgroundColor: 'rgb(84, 110, 122)',
+    color: 'white',
+    font: '300 20px / 24px Roboto, RobotoDraft, Helvetica, Arial, sans-serif'
+  },
+  inputArea: {
+    padding: '10px',
+  },
+  content: {
+    backgroundColor: 'rgb(250, 250, 250)',
+    padding: '12px 16px',
+  },
+  contentText: {
+    fontSize: '12px',
+  },
+  actionsButton: {
+    backgroundColor: 'rgb(250, 250, 250)',
+    borderTop: '1px solid rgb(224, 224, 224)',
+  }
+});
+
+type Props = {
+  enable: boolean,
+  setEnable: Function,
+}
+
+export function IssueWizardFeedback(props: Props): React.ReactElement {
+  React.useEffect(() => {
+    const script = document.createElement("script");
+    script.src = 'https://support.google.com/inapp/api.js';
+    script.async = true;
+    document.body.appendChild(script);
+  }, []);
+
+  const classes = userStyles();
+  const {enable, setEnable} = props;
+  const [feedback, setFeedback] = React.useState('');
+
+  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
+    const textInput = e.target.value;
+    setFeedback(textInput);
+  };
+
+  const issueWizardFeedbackSend = () => {
+    window.userfeedback.api.startFeedback({
+      'productId': '5208992',  // Required.
+      'bucket': 'IssueWizard',  // Optional.
+      'report': {
+        'description': feedback
+      }
+    });
+    setEnable(false);
+  }
+
+  return (
+      <Dialog open={enable}>
+        <DialogTitle className={classes.title}>Send Feedback</DialogTitle>
+          <Input
+            placeholder="Have Feedback? We'd love to hear it, but please don't share sensitive informations. Have questions? Try help or support."
+            disableUnderline={true}
+            multiline={true}
+            rows={3}
+            className={classes.inputArea}
+            inputProps={{maxLength: 5000}}
+            onChange={handleInputChange}
+          />
+        <DialogContent className={classes.content}>
+          <DialogContentText className={classes.contentText}>
+          Some account and system information may be sent to Google. We will use it to fix problems and improve our services, subject to our
+           <a href="https://myaccount.google.com/privacypolicy?hl=en&amp;authuser=0" target="_blank"> Privacy Policy </a>
+           and <a href="https://www.google.com/intl/en/policies/terms?authuser=0" target="_blank"> Terms of Service </a>
+           . We may email you for more information or updates.
+          Go to <a href="https://support.google.com/legal/answer/3110420?hl=en&amp;authuser=0" target="_blank"> Legal Help </a>
+          to ask for content changes for legal reasons.
+          </DialogContentText>
+        </DialogContent>
+        <DialogActions className={classes.actionsButton}>
+          <Button onClick={()=>{setEnable(false);}}>Cancel</Button>
+          <Button onClick={issueWizardFeedbackSend}>Send</Button>
+        </DialogActions>
+    </Dialog>
+  );
+}