Teams: Remove Form component usage (#82367)

* Teams: Remove Form usage

* Update team settings
This commit is contained in:
Alex Khomenko 2024-02-13 13:04:42 +01:00 committed by GitHub
parent 34fddfce10
commit 6c42bd31c6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 89 additions and 86 deletions

View File

@ -1,8 +1,9 @@
import React, { useState } from 'react'; import React, { JSX, useState } from 'react';
import { useForm } from 'react-hook-form';
import { NavModelItem } from '@grafana/data'; import { NavModelItem } from '@grafana/data';
import { getBackendSrv, locationService } from '@grafana/runtime'; import { getBackendSrv, locationService } from '@grafana/runtime';
import { Button, Form, Field, Input, FieldSet } from '@grafana/ui'; import { Button, Field, Input, FieldSet } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page'; import { Page } from 'app/core/components/Page/Page';
import { TeamRolePicker } from 'app/core/components/RolePicker/TeamRolePicker'; import { TeamRolePicker } from 'app/core/components/RolePicker/TeamRolePicker';
import { updateTeamRoles } from 'app/core/components/RolePicker/api'; import { updateTeamRoles } from 'app/core/components/RolePicker/api';
@ -21,7 +22,11 @@ export const CreateTeam = (): JSX.Element => {
const currentOrgId = contextSrv.user.orgId; const currentOrgId = contextSrv.user.orgId;
const [pendingRoles, setPendingRoles] = useState<Role[]>([]); const [pendingRoles, setPendingRoles] = useState<Role[]>([]);
const [{ roleOptions }] = useRoleOptions(currentOrgId); const [{ roleOptions }] = useRoleOptions(currentOrgId);
const {
handleSubmit,
register,
formState: { errors },
} = useForm<TeamDTO>();
const canUpdateRoles = const canUpdateRoles =
contextSrv.hasPermission(AccessControlAction.ActionUserRolesAdd) && contextSrv.hasPermission(AccessControlAction.ActionUserRolesAdd) &&
contextSrv.hasPermission(AccessControlAction.ActionUserRolesRemove); contextSrv.hasPermission(AccessControlAction.ActionUserRolesRemove);
@ -44,40 +49,36 @@ export const CreateTeam = (): JSX.Element => {
return ( return (
<Page navId="teams" pageNav={pageNav}> <Page navId="teams" pageNav={pageNav}>
<Page.Contents> <Page.Contents>
<Form onSubmit={createTeam}> <form onSubmit={handleSubmit(createTeam)} style={{ maxWidth: '600px' }}>
{({ register, errors }) => ( <FieldSet>
<> <Field label="Name" required invalid={!!errors.name} error="Team name is required">
<FieldSet> <Input {...register('name', { required: true })} id="team-name" />
<Field label="Name" required invalid={!!errors.name} error="Team name is required"> </Field>
<Input {...register('name', { required: true })} id="team-name" /> {contextSrv.licensedAccessControlEnabled() && (
</Field> <Field label="Role">
{contextSrv.licensedAccessControlEnabled() && ( <TeamRolePicker
<Field label="Role"> teamId={0}
<TeamRolePicker roleOptions={roleOptions}
teamId={0} disabled={false}
roleOptions={roleOptions} apply={true}
disabled={false} onApplyRoles={setPendingRoles}
apply={true} pendingRoles={pendingRoles}
onApplyRoles={setPendingRoles} maxWidth="100%"
pendingRoles={pendingRoles} />
maxWidth="100%" </Field>
/> )}
</Field> <Field
)} label={'Email'}
<Field description={'This is optional and is primarily used for allowing custom team avatars.'}
label={'Email'} >
description={'This is optional and is primarily used for allowing custom team avatars.'} <Input {...register('email')} type="email" id="team-email" placeholder="email@test.com" />
> </Field>
<Input {...register('email')} type="email" id="team-email" placeholder="email@test.com" /> </FieldSet>
</Field>
</FieldSet>
<Button type="submit" variant="primary"> <Button type="submit" variant="primary">
Create Create
</Button> </Button>
</> </form>
)}
</Form>
</Page.Contents> </Page.Contents>
</Page> </Page>
); );

View File

@ -1,7 +1,8 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import { useForm } from 'react-hook-form';
import { connect, ConnectedProps } from 'react-redux'; import { connect, ConnectedProps } from 'react-redux';
import { Input, Field, Form, Button, FieldSet, VerticalGroup } from '@grafana/ui'; import { Input, Field, Button, FieldSet, Stack } from '@grafana/ui';
import { TeamRolePicker } from 'app/core/components/RolePicker/TeamRolePicker'; import { TeamRolePicker } from 'app/core/components/RolePicker/TeamRolePicker';
import { updateTeamRoles } from 'app/core/components/RolePicker/api'; import { updateTeamRoles } from 'app/core/components/RolePicker/api';
import { useRoleOptions } from 'app/core/components/RolePicker/hooks'; import { useRoleOptions } from 'app/core/components/RolePicker/hooks';
@ -28,6 +29,11 @@ export const TeamSettings = ({ team, updateTeam }: Props) => {
const [{ roleOptions }] = useRoleOptions(currentOrgId); const [{ roleOptions }] = useRoleOptions(currentOrgId);
const [pendingRoles, setPendingRoles] = useState<Role[]>([]); const [pendingRoles, setPendingRoles] = useState<Role[]>([]);
const {
handleSubmit,
register,
formState: { errors },
} = useForm<Team>({ defaultValues: team });
const canUpdateRoles = const canUpdateRoles =
contextSrv.hasPermission(AccessControlAction.ActionTeamsRolesAdd) && contextSrv.hasPermission(AccessControlAction.ActionTeamsRolesAdd) &&
@ -37,59 +43,55 @@ export const TeamSettings = ({ team, updateTeam }: Props) => {
contextSrv.hasPermissionInMetadata(AccessControlAction.ActionTeamsRolesList, team) && contextSrv.hasPermissionInMetadata(AccessControlAction.ActionTeamsRolesList, team) &&
contextSrv.hasPermission(AccessControlAction.ActionRolesList); contextSrv.hasPermission(AccessControlAction.ActionRolesList);
const onSubmit = async (formTeam: Team) => {
if (contextSrv.licensedAccessControlEnabled() && canUpdateRoles) {
await updateTeamRoles(pendingRoles, team.id);
}
updateTeam(formTeam.name, formTeam.email || '');
};
return ( return (
<VerticalGroup spacing="lg"> <Stack direction={'column'} gap={3}>
<Form <form onSubmit={handleSubmit(onSubmit)} style={{ maxWidth: '600px' }}>
defaultValues={{ ...team }} <FieldSet label="Team details">
onSubmit={async (formTeam: Team) => { <Field
if (contextSrv.licensedAccessControlEnabled() && canUpdateRoles) { label="Name"
await updateTeamRoles(pendingRoles, team.id); disabled={!canWriteTeamSettings}
} required
updateTeam(formTeam.name, formTeam.email || ''); invalid={!!errors.name}
}} error="Name is required"
disabled={!canWriteTeamSettings} >
> <Input {...register('name', { required: true })} id="name-input" />
{({ register, errors }) => ( </Field>
<FieldSet label="Team details">
<Field
label="Name"
disabled={!canWriteTeamSettings}
required
invalid={!!errors.name}
error="Name is required"
>
<Input {...register('name', { required: true })} id="name-input" />
</Field>
{contextSrv.licensedAccessControlEnabled() && canListRoles && ( {contextSrv.licensedAccessControlEnabled() && canListRoles && (
<Field label="Role"> <Field label="Role">
<TeamRolePicker <TeamRolePicker
teamId={team.id} teamId={team.id}
roleOptions={roleOptions} roleOptions={roleOptions}
disabled={!canUpdateRoles} disabled={!canUpdateRoles}
apply={true} apply={true}
onApplyRoles={setPendingRoles} onApplyRoles={setPendingRoles}
pendingRoles={pendingRoles} pendingRoles={pendingRoles}
maxWidth="100%" maxWidth="100%"
/> />
</Field>
)}
<Field
label="Email"
description="This is optional and is primarily used to set the team profile avatar (via gravatar service)."
disabled={!canWriteTeamSettings}
>
<Input {...register('email')} placeholder="team@email.com" type="email" id="email-input" />
</Field> </Field>
<Button type="submit" disabled={!canWriteTeamSettings}> )}
Update
</Button> <Field
</FieldSet> label="Email"
)} description="This is optional and is primarily used to set the team profile avatar (via gravatar service)."
</Form> disabled={!canWriteTeamSettings}
>
<Input {...register('email')} placeholder="team@email.com" type="email" id="email-input" />
</Field>
<Button type="submit" disabled={!canWriteTeamSettings}>
Update
</Button>
</FieldSet>
</form>
<SharedPreferences resourceUri={`teams/${team.id}`} disabled={!canWriteTeamSettings} preferenceType="team" /> <SharedPreferences resourceUri={`teams/${team.id}`} disabled={!canWriteTeamSettings} preferenceType="team" />
</VerticalGroup> </Stack>
); );
}; };