resolve change requests

This commit is contained in:
Scott Wilson
2024-09-12 15:22:05 -07:00
parent d660168700
commit 02d54da74a
2 changed files with 32 additions and 9 deletions
@@ -5,7 +5,7 @@ import { Combobox, Transition } from "@headlessui/react";
import { ByComparator } from "@headlessui/react/dist/types"; import { ByComparator } from "@headlessui/react/dist/types";
import { twMerge } from "tailwind-merge"; import { twMerge } from "tailwind-merge";
type MyComboBoxProps<T extends object> = { type ComboBoxProps<T extends object> = {
value?: T; value?: T;
className?: string; className?: string;
items: { items: {
@@ -29,11 +29,11 @@ export const ComboBox = <T extends object>({
by, by,
items, items,
...props ...props
}: MyComboBoxProps<T>) => { }: ComboBoxProps<T>) => {
const [query, setQuery] = useState(""); const [query, setQuery] = useState("");
const filteredResult = const filteredResult =
query === "" ? items.slice(0, 20) : items.filter((el) => onFilter(el, query)); query === "" ? items.slice(0, 20) : items.filter((el) => onFilter(el, query)).slice(0, 20);
return ( return (
<Combobox by={by} {...props} onChange={onSelectChange}> <Combobox by={by} {...props} onChange={onSelectChange}>
@@ -1,4 +1,4 @@
import { useMemo } from "react"; import { useEffect, useMemo } from "react";
import { Controller, useForm } from "react-hook-form"; import { Controller, useForm } from "react-hook-form";
import Link from "next/link"; import Link from "next/link";
import { yupResolver } from "@hookform/resolvers/yup"; import { yupResolver } from "@hookform/resolvers/yup";
@@ -55,7 +55,11 @@ export const IdentityModal = ({ popUp, handlePopUpToggle }: Props) => {
}); });
const identityMemberships = identityMembershipsData?.identityMemberships; const identityMemberships = identityMembershipsData?.identityMemberships;
const { data: roles } = useGetProjectRoles(projectSlug); const {
data: roles,
isLoading: isRolesLoading,
isFetched: isRolesFetched
} = useGetProjectRoles(projectSlug);
const { mutateAsync: addIdentityToWorkspaceMutateAsync } = useAddIdentityToWorkspace(); const { mutateAsync: addIdentityToWorkspaceMutateAsync } = useAddIdentityToWorkspace();
@@ -73,11 +77,18 @@ export const IdentityModal = ({ popUp, handlePopUpToggle }: Props) => {
control, control,
handleSubmit, handleSubmit,
reset, reset,
setValue,
formState: { isSubmitting } formState: { isSubmitting }
} = useForm<FormData>({ } = useForm<FormData>({
resolver: yupResolver(schema) resolver: yupResolver(schema)
}); });
useEffect(() => {
if (!isRolesFetched || !roles) return;
setValue("role", { name: roles[0]?.name, slug: roles[0]?.slug });
}, [isRolesFetched, roles]);
const onFormSubmit = async ({ identity, role }: FormData) => { const onFormSubmit = async ({ identity, role }: FormData) => {
try { try {
await addIdentityToWorkspaceMutateAsync({ await addIdentityToWorkspaceMutateAsync({
@@ -91,7 +102,17 @@ export const IdentityModal = ({ popUp, handlePopUpToggle }: Props) => {
type: "success" type: "success"
}); });
reset(); const nextAvailableMembership = filteredIdentityMembershipOrgs.filter(
(membership) => membership.identity.id !== identity.id
)[0];
// prevents combobox from displaying previously added identity
reset({
identity: {
name: nextAvailableMembership?.identity.name,
id: nextAvailableMembership?.identity.id
}
});
handlePopUpToggle("identity", false); handlePopUpToggle("identity", false);
} catch (err) { } catch (err) {
console.error(err); console.error(err);
@@ -113,14 +134,14 @@ export const IdentityModal = ({ popUp, handlePopUpToggle }: Props) => {
reset(); reset();
}} }}
> >
<ModalContent title="Add Identity to Project" bodyClassName="overflow-hidden"> <ModalContent title="Add Identity to Project" bodyClassName="overflow-visible">
{filteredIdentityMembershipOrgs.length ? ( {filteredIdentityMembershipOrgs.length ? (
<form onSubmit={handleSubmit(onFormSubmit)}> <form onSubmit={handleSubmit(onFormSubmit)}>
<Controller <Controller
control={control} control={control}
name="identity" name="identity"
defaultValue={{ defaultValue={{
id: filteredIdentityMembershipOrgs?.[0]?.id, id: filteredIdentityMembershipOrgs?.[0]?.identity?.id,
name: filteredIdentityMembershipOrgs?.[0]?.identity?.name name: filteredIdentityMembershipOrgs?.[0]?.identity?.name
}} }}
render={({ field: { onChange, ...field }, fieldState: { error } }) => ( render={({ field: { onChange, ...field }, fieldState: { error } }) => (
@@ -197,7 +218,9 @@ export const IdentityModal = ({ popUp, handlePopUpToggle }: Props) => {
All identities in your organization have already been added to this project. All identities in your organization have already been added to this project.
</div> </div>
<Link href={`/org/${currentWorkspace?.orgId}/members`}> <Link href={`/org/${currentWorkspace?.orgId}/members`}>
<Button variant="outline_bg">Create a new identity</Button> <Button isDisabled={isRolesLoading} isLoading={isRolesLoading} variant="outline_bg">
Create a new identity
</Button>
</Link> </Link>
</div> </div>
)} )}