/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ import React, { useState } from "react"; import { useHistory, useParams } from "react-router-dom"; import { useForm } from "react-hook-form"; import TextField from "../components/TextField"; import NumberField from "../components/NumberField"; import Button from "../components/Button"; import Breadcrumbs from "../components/Breadcrumbs"; import { useDashboard, useSettings } from "../hooks"; import Spinner from "../components/Spinner"; import DateRangePicker from "../components/DateRangePicker"; import PrimaryActionBar from "../components/PrimaryActionBar"; import { useTranslation } from "react-i18next"; import Dropdown from "../components/Dropdown"; import { CurrencyDataType, LocationState, NumberDataType } from "../models"; import "./EditMetric.scss"; interface FormValues { title: string; value: number; changeOverTime: string; percentage: string; currency: string; showTimeChange: boolean; showDateRange: boolean; } interface PathParams { dashboardId: string; } function AddMetric() { const history = useHistory(); const { state } = history.location; const { t } = useTranslation(); const { settings, loadingSettings } = useSettings(); const { dashboardId } = useParams(); const { dashboard, loading } = useDashboard(dashboardId); const { register, errors, handleSubmit } = useForm(); const [startDate, setStartDate] = useState(null); const [endDate, setEndDate] = useState(null); const [symbolType, setsymbolType] = useState("Percentage"); const [showTimeChange, setShowTimeChange] = useState(false); const [showDateRange, setShowDateRange] = useState(false); const onSubmit = async (values: FormValues) => { const newMetrics = state && state.metrics ? [...state.metrics] : []; newMetrics.push({ title: values.title, value: values.value, changeOverTime: showTimeChange ? values.changeOverTime : "", percentage: values.percentage, currency: values.currency, startDate: showDateRange && startDate ? startDate.toISOString() : "", endDate: showDateRange && endDate ? endDate.toISOString() : "", }); history.push((state && state.origin) || `/admin/dashboard/${dashboardId}/add-metrics`, { alert: { type: "success", message: t("AddMetricScreen.MetricSuccessfullyAdded"), }, metrics: newMetrics, showTitle: state.showTitle !== false, oneMetricPerRow: state.oneMetricPerRow === true, metricTitle: state.metricTitle || "", datasetType: state.datasetType || undefined, }); }; const handlePercentage = (e: React.ChangeEvent) => { if (e.target.value === "Percentage") { setsymbolType("Percentage"); } else if (e.target.value === "Currency") { setsymbolType("Currency"); } else if (e.target.value === "") { setsymbolType("SelectAnOption"); } }; const onCancel = () => { history.push((state && state.origin) || `/admin/dashboard/${dashboardId}/add-metrics`, { metrics: state && state.metrics ? [...state.metrics] : [], showTitle: state && state.showTitle !== false, oneMetricPerRow: state && state.oneMetricPerRow === true, metricTitle: (state && state.metricTitle) || "", datasetType: state.datasetType || undefined, }); }; if (!state || !state.metrics) { setTimeout(onCancel, 1000); return null; } const crumbs = [ { label: t("Dashboards"), url: "/admin/dashboards", }, { label: dashboard?.name, url: `/admin/dashboard/edit/${dashboardId}`, }, ]; if (!loading) { crumbs.push({ label: t("AddMetricScreen.AddMetric"), url: "", }); } return ( <> {loading || loadingSettings ? ( ) : ( <>

{t("AddMetricScreen.AddMetric")}

{t("AddMetricScreen.Configure")}
{t("AddMetricScreen.MetricTitleHint")}
{symbolType !== "Percentage" && symbolType !== "SelectAnOption" && ( )}
setShowTimeChange(!showTimeChange)} onChange={() => setShowTimeChange(!showTimeChange)} />
{showTimeChange && ( <> { return ( !input || input[0] === "+" || input[0] === "-" ); }} aria-describedby="changeOverTime-hint" required />
{t("AddMetricScreen.ChangeOverTimeHint")}
)}
setShowDateRange(!showDateRange)} onChange={() => setShowDateRange(!showDateRange)} />
{showDateRange && ( )}


)} ); } export default AddMetric;