Skip to main content

Accept Invitation Block

AcceptInvitation is a controlled invitation acceptance form block built on MUI.

Installationโ€‹

npm install @nodeblocks/frontend-accept-invitation-block

What You Needโ€‹

ItemWhy it matters
dataSingle source of truth for form state (name, password, confirmPassword)
onDataChangeReceives updated state + metadata on field changes
email (optional)Read-only invited email shown above the form
errors (optional)Displays field-level error feedback
Controlled component

AcceptInvitation does not own form state. Keep state in your app and pass it through data.

Code Examplesโ€‹

Live Editor
function Example() {
  const defaultData = {
    name: '',
    password: '',
    confirmPassword: '',
  };

  const [data, setData] = React.useState(defaultData);
  const [errors, setErrors] = React.useState({});

  const handleDataChange = (nextData, meta) => {
    const {[meta.name]: _removed, ...restErrors} = errors;
    let nextErrors = restErrors;

    // Validate required fields on blur (same pattern as storybook)
    if (meta.cause === 'blur') {
      nextErrors = {...restErrors};
      if (meta.name === 'name' && !String(nextData.name || '').trim()) {
        nextErrors.name = 'Name is required.';
      }
      if (meta.name === 'password' && !nextData.password) {
        nextErrors.password = 'Password is required.';
      }
      if (meta.name === 'confirmPassword' && !nextData.confirmPassword) {
        nextErrors.confirmPassword = 'Please confirm your password.';
      }
    }

    setErrors(nextErrors);
    setData(nextData);
  };

  return (
    <AcceptInvitation
      data={data}
      email="invited@example.com"
      errors={Object.keys(errors).length ? errors : undefined}
      onDataChange={handleDataChange}
      onSubmit={e => {
        e.preventDefault();
        alert(`Submit:\n${JSON.stringify(data, null, 2)}`);
      }}
    />
  );
}
Result
Loading...

Important Propsโ€‹

Core Propsโ€‹

PropTypeRequiredDefaultDescription
dataAcceptInvitationFormData ({ name, password, confirmPassword } or extended Record<string, unknown>)Yes-Current form data object
onDataChange(data, meta) => voidYes-Called on updates; meta includes name, value, cause (input, change, blur, clear, reset, programmatic), optional event
errors{ [fieldName: string]: string | string[] }NoundefinedField errors keyed by data field name (name, password, confirmPassword)

Content Propsโ€‹

PropTypeRequiredDefaultDescription
emailstringNoundefinedRead-only invited email address
labels{ acceptInvitationTitle?, emailDisplay?, nameField?, passwordField?, confirmPasswordField?, acceptInvitationButton? }NoacceptInvitationTitle: 'ใ‚ขใ‚ซใ‚ฆใƒณใƒˆไฝœๆˆ', emailDisplay: 'ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚น', nameField: 'ๆฐๅ', passwordField: 'ใƒ‘ใ‚นใƒฏใƒผใƒ‰', confirmPasswordField: 'ใƒ‘ใ‚นใƒฏใƒผใƒ‰ๅ†ๅ…ฅๅŠ›', acceptInvitationButton: 'ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใ‚’ไฝœๆˆ'Override default text labels
placeholders{ nameField?, passwordField?, confirmPasswordField? }NonameField: 'ๆฐๅใ‚’ๅ…ฅๅŠ›', passwordField: 'ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›', confirmPasswordField: 'ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ†ๅ…ฅๅŠ›'Override field placeholders

Layout and Composition Propsโ€‹

PropTypeRequiredDefaultDescription
childrenBlocksOverride | ReactNodeNoundefinedOverride default blocks or provide custom JSX children
componentReact.ElementTypeNo'form'Root element type
classNamestringNoundefinedClass name for the root container
sxSxPropsNoundefinedMUI system styles for the root container

AcceptInvitation also inherits StackProps<'form'> (except children), so standard form props like onSubmit, id, and noValidate are supported. Default block order without overrides: acceptInvitationTitle, form (defaultBlockOrder).

Default UI Blocksโ€‹

BlockBuilt onNotes
AcceptInvitation (root)Stack (component="form")Controlled form container; default max width 496px
AcceptInvitation.AcceptInvitationTitleTypographyTitle text block; default ใ‚ขใ‚ซใ‚ฆใƒณใƒˆไฝœๆˆ
AcceptInvitation.FormStackForm fields container (submit handled by root form)
AcceptInvitation.Form.EmailDisplayTypography + StackRead-only invited email display; label default ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚น; uses root email prop
AcceptInvitation.Form.NameFieldTextFieldname="name"; required; autoComplete="name"; default ๆฐๅ / ๆฐๅใ‚’ๅ…ฅๅŠ›
AcceptInvitation.Form.PasswordFieldTextField + IconButtonname="password"; required; autoComplete="new-password"; default ใƒ‘ใ‚นใƒฏใƒผใƒ‰ / ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›; visibility toggle
AcceptInvitation.Form.ConfirmPasswordFieldTextField + IconButtonname="confirmPassword"; required; autoComplete="new-password"; default ใƒ‘ใ‚นใƒฏใƒผใƒ‰ๅ†ๅ…ฅๅŠ› / ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ†ๅ…ฅๅŠ›; visibility toggle
AcceptInvitation.Form.AcceptInvitationButtonButtonSubmit button (variant="contained", size="large", fullWidth, type="submit"); default ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใ‚’ไฝœๆˆ

TypeScriptโ€‹

import {AcceptInvitation, AcceptInvitationFormData} from '@nodeblocks/frontend-accept-invitation-block';

type MyAcceptInvitationData = AcceptInvitationFormData & {
inviteToken?: string;
};