snapshot of https://github.com/makeplane/plane.git @ d868349a55de79979eb8b98701bf1702c67ad634 (2026-09-15)
Some checks failed
CodeQL / Analyze (javascript) (push) Failing after 16s
CodeQL / Analyze (python) (push) Failing after 3s
i18n sync check / check:sync (push) Failing after 3s
React Doctor / react-doctor (push) Failing after 16s
Branch Build CE / Build-Push Admin Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Admin Manifest (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Web Manifest (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Proxy Manifest (push) Has been cancelled
Branch Build CE / Merge Space Manifest (push) Has been cancelled
Branch Build CE / Prepare AIO Assets (push) Has been cancelled
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Live Collaboration Manifest (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge API Server Manifest (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge AIO Manifest (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
Some checks failed
CodeQL / Analyze (javascript) (push) Failing after 16s
CodeQL / Analyze (python) (push) Failing after 3s
i18n sync check / check:sync (push) Failing after 3s
React Doctor / react-doctor (push) Failing after 16s
Branch Build CE / Build-Push Admin Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Admin Manifest (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Web Manifest (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Proxy Manifest (push) Has been cancelled
Branch Build CE / Merge Space Manifest (push) Has been cancelled
Branch Build CE / Prepare AIO Assets (push) Has been cancelled
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Live Collaboration Manifest (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge API Server Manifest (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge AIO Manifest (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
This commit is contained in:
91
apps/web/core/hooks/use-workspace-invitation.tsx
Normal file
91
apps/web/core/hooks/use-workspace-invitation.tsx
Normal file
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* Copyright (c) 2023-present Plane Software, Inc. and contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
import { useEffect } from "react";
|
||||
import type { Control, FieldArrayWithId, FormState, UseFormWatch } from "react-hook-form";
|
||||
import { useFieldArray, useForm } from "react-hook-form";
|
||||
// plane imports
|
||||
import { EUserPermissions } from "@plane/constants";
|
||||
|
||||
type EmailRole = {
|
||||
email: string;
|
||||
role: EUserPermissions;
|
||||
};
|
||||
|
||||
export type InvitationFormValues = {
|
||||
emails: EmailRole[];
|
||||
};
|
||||
|
||||
const SEND_WORKSPACE_INVITATION_MODAL_DEFAULT_VALUES: InvitationFormValues = {
|
||||
emails: [
|
||||
{
|
||||
email: "",
|
||||
role: EUserPermissions.MEMBER,
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
type TUseWorkspaceInvitationProps = {
|
||||
onSubmit: (data: InvitationFormValues) => Promise<void> | undefined;
|
||||
onClose: () => void;
|
||||
};
|
||||
|
||||
type TUseWorkspaceInvitationReturn = {
|
||||
control: Control<InvitationFormValues>;
|
||||
fields: FieldArrayWithId<InvitationFormValues, "emails", "id">[];
|
||||
formState: FormState<InvitationFormValues>;
|
||||
watch: UseFormWatch<InvitationFormValues>;
|
||||
remove: (index: number) => void;
|
||||
onFormSubmit: () => void;
|
||||
handleClose: () => void;
|
||||
appendField: () => void;
|
||||
};
|
||||
|
||||
export const useWorkspaceInvitationActions = (props: TUseWorkspaceInvitationProps): TUseWorkspaceInvitationReturn => {
|
||||
const { onSubmit, onClose } = props;
|
||||
// form info
|
||||
const { control, reset, watch, handleSubmit, formState } = useForm<InvitationFormValues>({
|
||||
defaultValues: SEND_WORKSPACE_INVITATION_MODAL_DEFAULT_VALUES,
|
||||
});
|
||||
|
||||
const { fields, append, remove } = useFieldArray({
|
||||
control,
|
||||
name: "emails",
|
||||
});
|
||||
|
||||
const handleClose = () => {
|
||||
onClose();
|
||||
const timeout = setTimeout(() => {
|
||||
reset(SEND_WORKSPACE_INVITATION_MODAL_DEFAULT_VALUES);
|
||||
clearTimeout(timeout);
|
||||
}, 350);
|
||||
};
|
||||
|
||||
const appendField = () => {
|
||||
append({ email: "", role: EUserPermissions.MEMBER });
|
||||
};
|
||||
|
||||
const onSubmitForm = async (data: InvitationFormValues) => {
|
||||
await onSubmit(data)?.then(() => {
|
||||
reset(SEND_WORKSPACE_INVITATION_MODAL_DEFAULT_VALUES);
|
||||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (fields.length === 0) append([{ email: "", role: EUserPermissions.MEMBER }]);
|
||||
}, [fields, append]);
|
||||
|
||||
return {
|
||||
control,
|
||||
fields,
|
||||
formState,
|
||||
watch,
|
||||
remove,
|
||||
onFormSubmit: handleSubmit(onSubmitForm),
|
||||
handleClose,
|
||||
appendField,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user