grafana/public/app/features/folders/components/NewDashboardsFolder.tsx
Torkel Ödegaard 1e85a6f4fd
TopNav: New page layouts (#51510)
* First stab at new page layouts behind feature toggle

* Simplifying PageHeader

* Progress on a new model that can more easily support new and old page layouts

* Progress

* rename folder

* Progress

* Minor change

* fixes

* Fixing tests

* Make breadcrumbs work

* Add tests for old Page component

* Adding tests for new Page component and behavior

* fixing page header test

* Fixed test

* AppChrome outside route

* Renaming folder

* Minor fix

* Updated

* Fixing StoragePage

* Fix for banners

Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
2022-07-06 17:00:56 +02:00

80 lines
2.2 KiB
TypeScript

import React, { PureComponent } from 'react';
import { connect, ConnectedProps } from 'react-redux';
import { Button, Input, Form, Field } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page';
import { getNavModel } from 'app/core/selectors/navModel';
import { StoreState } from 'app/types';
import { validationSrv } from '../../manage-dashboards/services/ValidationSrv';
import { createNewFolder } from '../state/actions';
const mapStateToProps = (state: StoreState) => ({
navModel: getNavModel(state.navIndex, 'manage-dashboards'),
});
const mapDispatchToProps = {
createNewFolder,
};
const connector = connect(mapStateToProps, mapDispatchToProps);
interface OwnProps {}
interface FormModel {
folderName: string;
}
const initialFormModel: FormModel = { folderName: '' };
type Props = OwnProps & ConnectedProps<typeof connector>;
export class NewDashboardsFolder extends PureComponent<Props> {
onSubmit = (formData: FormModel) => {
this.props.createNewFolder(formData.folderName);
};
validateFolderName = (folderName: string) => {
return validationSrv
.validateNewFolderName(folderName)
.then(() => {
return true;
})
.catch((e) => {
return e.message;
});
};
render() {
return (
<Page navModel={this.props.navModel}>
<Page.Contents>
<h3>New dashboard folder</h3>
<Form defaultValues={initialFormModel} onSubmit={this.onSubmit}>
{({ register, errors }) => (
<>
<Field
label="Folder name"
invalid={!!errors.folderName}
error={errors.folderName && errors.folderName.message}
>
<Input
id="folder-name-input"
{...register('folderName', {
required: 'Folder name is required.',
validate: async (v) => await this.validateFolderName(v),
})}
/>
</Field>
<Button type="submit">Create</Button>
</>
)}
</Form>
</Page.Contents>
</Page>
);
}
}
export default connector(NewDashboardsFolder);