import { isString } from "lodash";
import React, { useState, useEffect } from "react";
import PropTypes from "prop-types";
import Modal from "antd/lib/modal";
import Input from "antd/lib/input";
import List from "antd/lib/list";
import Link from "@/components/Link";
import PlainButton from "@/components/PlainButton";
import CloseOutlinedIcon from "@ant-design/icons/CloseOutlined";
import { wrap as wrapDialog, DialogPropType } from "@/components/DialogWrapper";
import { QueryTagsControl } from "@/components/tags-control/TagsControl";
import { Dashboard } from "@/services/dashboard";
import notification from "@/services/notification";
import useSearchResults from "@/lib/hooks/useSearchResults";
import "./add-to-dashboard-dialog.less";
function AddToDashboardDialog({ dialog, visualization }) {
const [searchTerm, setSearchTerm] = useState("");
const [doSearch, dashboards, isLoading] = useSearchResults(
term => {
if (isString(term) && term !== "") {
return Dashboard.query({ q: term })
.then(results => results.results)
.catch(() => []);
}
return Promise.resolve([]);
},
{ initialResults: [] }
);
const [selectedDashboard, setSelectedDashboard] = useState(null);
const [saveInProgress, setSaveInProgress] = useState(false);
useEffect(() => {
doSearch(searchTerm);
}, [doSearch, searchTerm]);
function addWidgetToDashboard() {
// Load dashboard with all widgets
Dashboard.get(selectedDashboard)
.then(dashboard => {
dashboard.addWidget(visualization);
return dashboard;
})
.then(dashboard => {
dialog.close();
const key = `notification-${Math.random()
.toString(36)
.substr(2, 10)}`;
notification.success(
"Widget added to dashboard",
notification.close(key)}>
{dashboard.name}
,
{ key }
);
})
.catch(() => {
notification.error("Widget not added.");
})
.finally(() => {
setSaveInProgress(false);
});
}
const items = selectedDashboard ? [selectedDashboard] : dashboards;
return (
{!selectedDashboard && (
setSearchTerm(event.target.value)}
suffix={
setSearchTerm("")}>
}
/>
)}
{(items.length > 0 || isLoading) && (
(
setSelectedDashboard(null)}>
,
]
: []
}
onClick={selectedDashboard ? null : () => setSelectedDashboard(d)}>
{d.name}
)}
/>
)}
);
}
AddToDashboardDialog.propTypes = {
dialog: DialogPropType.isRequired,
visualization: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
};
export default wrapDialog(AddToDashboardDialog);