mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 10:28:00 +00:00
resolve change requests
This commit is contained in:
@@ -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}>
|
||||||
|
|||||||
+29
-6
@@ -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>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user