mirror of
https://github.com/grafana/grafana.git
synced 2025-02-09 23:16:16 -06:00
3b515e650c
* Update hook form * Update Form component * Update ChangePassword.tsx * Update custom types * Update SaveDashboardForm * Update form story * Update FieldArray.story.tsx * Bump hook form version * Update typescript to v4.2.4 * Update ForgottenPassword.tsx * Update LoginForm.tsx * Update SignupPage.tsx * Update VerifyEmail.tsx * Update AdminEditOrgPage.tsx * Update UserCreatePage.tsx * Update BasicSettings.tsx * Update NotificationChannelForm.tsx * Update NotificationChannelOptions.tsx * Update NotificationSettings.tsx * Update OptionElement.tsx * Update AlertRuleForm.tsx * Update AlertTypeStep.tsx * Update AnnotationsField.tsx * Update ConditionField.tsx * Update ConditionsStep.tsx * Update GroupAndNamespaceFields.tsx * Update LabelsField.tsx * Update QueryStep.tsx * Update RowOptionsForm.tsx * Update SaveDashboardAsForm.tsx * Update NewDashboardsFolder.tsx * Update ImportDashboardForm.tsx * Update DashboardImportPage.tsx * Update NewOrgPage.tsx * Update OrgProfile.tsx * Update UserInviteForm.tsx * Update PlaylistForm.tsx * Update ChangePasswordForm.tsx * Update UserProfileEditForm.tsx * Update TeamSettings.tsx * Update SignupInvited.tsx * Expose setValue from the Form * Update typescript to v4.2.4 * Remove ref from field props * Fix tests * Revert TS update * Use exact version * Update latest batch of changes * Reduce the number of strict TS errors * Fix defaults * more type error fixes * Update CreateTeam * fix folder picker in rule form * fixes for hook form 7 * Update docs Co-authored-by: Domas <domasx2@gmail.com>
80 lines
2.5 KiB
TypeScript
80 lines
2.5 KiB
TypeScript
import React, { FC } from 'react';
|
|
import { getBackendSrv } from '@grafana/runtime';
|
|
import Page from 'app/core/components/Page/Page';
|
|
import { Button, Input, Field, Form } from '@grafana/ui';
|
|
import { getConfig } from 'app/core/config';
|
|
import { StoreState } from 'app/types';
|
|
import { hot } from 'react-hot-loader';
|
|
import { connect } from 'react-redux';
|
|
import { NavModel } from '@grafana/data';
|
|
import { getNavModel } from '../../core/selectors/navModel';
|
|
|
|
const createOrg = async (newOrg: { name: string }) => {
|
|
const result = await getBackendSrv().post('/api/orgs/', newOrg);
|
|
|
|
await getBackendSrv().post('/api/user/using/' + result.orgId);
|
|
window.location.href = getConfig().appSubUrl + '/org';
|
|
};
|
|
|
|
const validateOrg = async (orgName: string) => {
|
|
try {
|
|
await getBackendSrv().get(`api/orgs/name/${encodeURI(orgName)}`);
|
|
} catch (error) {
|
|
if (error.status === 404) {
|
|
error.isHandled = true;
|
|
return true;
|
|
}
|
|
return 'Something went wrong';
|
|
}
|
|
return 'Organization already exists';
|
|
};
|
|
|
|
interface PropsWithState {
|
|
navModel: NavModel;
|
|
}
|
|
|
|
interface CreateOrgFormDTO {
|
|
name: string;
|
|
}
|
|
|
|
export const NewOrgPage: FC<PropsWithState> = ({ navModel }) => {
|
|
return (
|
|
<Page navModel={navModel}>
|
|
<Page.Contents>
|
|
<h3 className="page-sub-heading">New organization</h3>
|
|
|
|
<p className="playlist-description">
|
|
Each organization contains their own dashboards, data sources, and configuration, which cannot be shared
|
|
shared between organizations. While users might belong to more than one organization, multiple organizations
|
|
are most frequently used in multi-tenant deployments.{' '}
|
|
</p>
|
|
|
|
<Form<CreateOrgFormDTO> onSubmit={createOrg}>
|
|
{({ register, errors }) => {
|
|
return (
|
|
<>
|
|
<Field label="Organization name" invalid={!!errors.name} error={errors.name && errors.name.message}>
|
|
<Input
|
|
placeholder="Org name"
|
|
{...register('name', {
|
|
required: 'Organization name is required',
|
|
validate: async (orgName) => await validateOrg(orgName),
|
|
})}
|
|
/>
|
|
</Field>
|
|
<Button type="submit">Create</Button>
|
|
</>
|
|
);
|
|
}}
|
|
</Form>
|
|
</Page.Contents>
|
|
</Page>
|
|
);
|
|
};
|
|
|
|
const mapStateToProps = (state: StoreState) => {
|
|
return { navModel: getNavModel(state.navIndex, 'global-orgs') };
|
|
};
|
|
|
|
export default hot(module)(connect(mapStateToProps)(NewOrgPage));
|