Files
redash/client/app/components/dashboards/CreateDashboardDialog.jsx
Levko Kravets cbc56264ea React migration cleanup (#4572)
* Revisit ANGULAR_REMOVE_ME things

* Remove styles related to 3rd-party Angular and jQuery libraries

* Remove some more unused styles

* Revisit error handling (app-wide)

* Remove unused file

* CR1
2020-01-22 17:15:25 +02:00

76 lines
2.2 KiB
JavaScript

import { trim } from "lodash";
import React, { useState } from "react";
import { axios } from "@/services/axios";
import Modal from "antd/lib/modal";
import Input from "antd/lib/input";
import DynamicComponent from "@/components/DynamicComponent";
import { wrap as wrapDialog, DialogPropType } from "@/components/DialogWrapper";
import navigateTo from "@/components/ApplicationArea/navigateTo";
import recordEvent from "@/services/recordEvent";
import { policy } from "@/services/policy";
function CreateDashboardDialog({ dialog }) {
const [name, setName] = useState("");
const [isValid, setIsValid] = useState(false);
const [saveInProgress, setSaveInProgress] = useState(false);
const isCreateDashboardEnabled = policy.isCreateDashboardEnabled();
function handleNameChange(event) {
const value = trim(event.target.value);
setName(value);
setIsValid(value !== "");
}
function save() {
if (name !== "") {
setSaveInProgress(true);
axios.post("api/dashboards", { name }).then(data => {
dialog.close();
navigateTo(`dashboard/${data.slug}?edit`);
});
recordEvent("create", "dashboard");
}
}
return (
<Modal
{...dialog.props}
{...(isCreateDashboardEnabled ? {} : { footer: null })}
title="New Dashboard"
okText="Save"
cancelText="Close"
okButtonProps={{
disabled: !isValid || saveInProgress,
loading: saveInProgress,
"data-test": "DashboardSaveButton",
}}
cancelButtonProps={{
disabled: saveInProgress,
}}
onOk={save}
closable={!saveInProgress}
maskClosable={!saveInProgress}
wrapProps={{
"data-test": "CreateDashboardDialog",
}}>
<DynamicComponent name="CreateDashboardDialogExtra" disabled={!isCreateDashboardEnabled}>
<Input
defaultValue={name}
onChange={handleNameChange}
onPressEnter={save}
placeholder="Dashboard Name"
disabled={saveInProgress}
autoFocus
/>
</DynamicComponent>
</Modal>
);
}
CreateDashboardDialog.propTypes = {
dialog: DialogPropType.isRequired,
};
export default wrapDialog(CreateDashboardDialog);