Kaizen
Browse modulesFormsforms/sharedFunctions

Function: buildCrossVersionPrefill()

function buildCrossVersionPrefill(
   previousData: FormDataRecord, 
   previousFields: {
  additionalInfo?: {
     body?: string;
     title?: string;
  };
  adoptionStatement?: string;
  allowedFonts?: string[];
  asset?: {
     alt?: string;
     fileId?: string;
     filename?: string;
     mimeType?: string;
     url?: string;
  };
  dataSource?: string;
  defaultValue?:   | string
     | {
     from: string;
     to: string | null;
   };
  description?: string;
  fields?: {
     additionalInfo?: {
        body?: string;
        title?: string;
     };
     adoptionStatement?: string;
     allowedFonts?: string[];
     asset?: {
        alt?: string;
        fileId?: string;
        filename?: string;
        mimeType?: string;
        url?: string;
     };
     dataSource?: string;
     defaultValue?:   | string
        | {
        from: string;
        to: string | null;
      };
     description?: string;
     format?: string;
     label: string;
     maxDate?: string;
     maxFiles?: number;
     maxLength?: number;
     minDate?: string;
     name: string;
     options?: (
        | string
        | {
        description?: string;
        value: string;
     })[];
     placeholder?: string;
     prefillFrom?: string;
     required: boolean;
     showRange?: boolean;
     showTime?: boolean;
     signatureMode?: "typed" | "drawn";
     timezone?: string;
     type:   | "number"
        | "date"
        | "file"
        | "email"
        | "url"
        | "select"
        | "text"
        | "checkbox"
        | "textarea"
        | "phone"
        | "radio-group"
        | "multiselect"
        | "field-array"
        | "image"
        | "file-download"
        | "section-header"
        | "section-unset"
        | "signature"
        | "signature-adopted";
  }[];
  format?: string;
  label: string;
  maxDate?: string;
  maxFiles?: number;
  maxLength?: number;
  maxRows?: number;
  minDate?: string;
  minRows?: number;
  name: string;
  options?: (
     | string
     | {
     description?: string;
     value: string;
  })[];
  placeholder?: string;
  prefillFrom?: string;
  required: boolean;
  showRange?: boolean;
  showTime?: boolean;
  signatureMode?: "typed" | "drawn";
  timezone?: string;
  type:   | "number"
     | "date"
     | "file"
     | "email"
     | "url"
     | "select"
     | "text"
     | "checkbox"
     | "textarea"
     | "phone"
     | "radio-group"
     | "multiselect"
     | "field-array"
     | "image"
     | "file-download"
     | "section-header"
     | "section-unset"
     | "signature"
     | "signature-adopted";
}[], 
   targetFields: {
  additionalInfo?: {
     body?: string;
     title?: string;
  };
  adoptionStatement?: string;
  allowedFonts?: string[];
  asset?: {
     alt?: string;
     fileId?: string;
     filename?: string;
     mimeType?: string;
     url?: string;
  };
  dataSource?: string;
  defaultValue?:   | string
     | {
     from: string;
     to: string | null;
   };
  description?: string;
  fields?: {
     additionalInfo?: {
        body?: string;
        title?: string;
     };
     adoptionStatement?: string;
     allowedFonts?: string[];
     asset?: {
        alt?: string;
        fileId?: string;
        filename?: string;
        mimeType?: string;
        url?: string;
     };
     dataSource?: string;
     defaultValue?:   | string
        | {
        from: string;
        to: string | null;
      };
     description?: string;
     format?: string;
     label: string;
     maxDate?: string;
     maxFiles?: number;
     maxLength?: number;
     minDate?: string;
     name: string;
     options?: (
        | string
        | {
        description?: string;
        value: string;
     })[];
     placeholder?: string;
     prefillFrom?: string;
     required: boolean;
     showRange?: boolean;
     showTime?: boolean;
     signatureMode?: "typed" | "drawn";
     timezone?: string;
     type:   | "number"
        | "date"
        | "file"
        | "email"
        | "url"
        | "select"
        | "text"
        | "checkbox"
        | "textarea"
        | "phone"
        | "radio-group"
        | "multiselect"
        | "field-array"
        | "image"
        | "file-download"
        | "section-header"
        | "section-unset"
        | "signature"
        | "signature-adopted";
  }[];
  format?: string;
  label: string;
  maxDate?: string;
  maxFiles?: number;
  maxLength?: number;
  maxRows?: number;
  minDate?: string;
  minRows?: number;
  name: string;
  options?: (
     | string
     | {
     description?: string;
     value: string;
  })[];
  placeholder?: string;
  prefillFrom?: string;
  required: boolean;
  showRange?: boolean;
  showTime?: boolean;
  signatureMode?: "typed" | "drawn";
  timezone?: string;
  type:   | "number"
     | "date"
     | "file"
     | "email"
     | "url"
     | "select"
     | "text"
     | "checkbox"
     | "textarea"
     | "phone"
     | "radio-group"
     | "multiselect"
     | "field-array"
     | "image"
     | "file-download"
     | "section-header"
     | "section-unset"
     | "signature"
     | "signature-adopted";
}[]
): CrossVersionPrefillResult;

Defined in: shared/forms/cross-version-prefill.ts:29

Given a previous submission's data and both the old and new schema fields, return values that can be safely prefilled into the target schema version.

Shape validation is delegated to Zod via buildPermissiveZodSchema. This function handles the two things Zod can't: key matching across versions and option pruning for select/multiselect/radio fields whose option lists changed.

Parameters

ParameterType
previousDataFormDataRecord
previousFields{ additionalInfo?: { body?: string; title?: string; }; adoptionStatement?: string; allowedFonts?: string[]; asset?: { alt?: string; fileId?: string; filename?: string; mimeType?: string; url?: string; }; dataSource?: string; defaultValue?: | string | { from: string; to: string | null; }; description?: string; fields?: { additionalInfo?: { body?: string; title?: string; }; adoptionStatement?: string; allowedFonts?: string[]; asset?: { alt?: string; fileId?: string; filename?: string; mimeType?: string; url?: string; }; dataSource?: string; defaultValue?: | string | { from: string; to: string | null; }; description?: string; format?: string; label: string; maxDate?: string; maxFiles?: number; maxLength?: number; minDate?: string; name: string; options?: ( | string | { description?: string; value: string; })[]; placeholder?: string; prefillFrom?: string; required: boolean; showRange?: boolean; showTime?: boolean; signatureMode?: "typed" | "drawn"; timezone?: string; type: | "number" | "date" | "file" | "email" | "url" | "select" | "text" | "checkbox" | "textarea" | "phone" | "radio-group" | "multiselect" | "field-array" | "image" | "file-download" | "section-header" | "section-unset" | "signature" | "signature-adopted"; }[]; format?: string; label: string; maxDate?: string; maxFiles?: number; maxLength?: number; maxRows?: number; minDate?: string; minRows?: number; name: string; options?: ( | string | { description?: string; value: string; })[]; placeholder?: string; prefillFrom?: string; required: boolean; showRange?: boolean; showTime?: boolean; signatureMode?: "typed" | "drawn"; timezone?: string; type: | "number" | "date" | "file" | "email" | "url" | "select" | "text" | "checkbox" | "textarea" | "phone" | "radio-group" | "multiselect" | "field-array" | "image" | "file-download" | "section-header" | "section-unset" | "signature" | "signature-adopted"; }[]
targetFields{ additionalInfo?: { body?: string; title?: string; }; adoptionStatement?: string; allowedFonts?: string[]; asset?: { alt?: string; fileId?: string; filename?: string; mimeType?: string; url?: string; }; dataSource?: string; defaultValue?: | string | { from: string; to: string | null; }; description?: string; fields?: { additionalInfo?: { body?: string; title?: string; }; adoptionStatement?: string; allowedFonts?: string[]; asset?: { alt?: string; fileId?: string; filename?: string; mimeType?: string; url?: string; }; dataSource?: string; defaultValue?: | string | { from: string; to: string | null; }; description?: string; format?: string; label: string; maxDate?: string; maxFiles?: number; maxLength?: number; minDate?: string; name: string; options?: ( | string | { description?: string; value: string; })[]; placeholder?: string; prefillFrom?: string; required: boolean; showRange?: boolean; showTime?: boolean; signatureMode?: "typed" | "drawn"; timezone?: string; type: | "number" | "date" | "file" | "email" | "url" | "select" | "text" | "checkbox" | "textarea" | "phone" | "radio-group" | "multiselect" | "field-array" | "image" | "file-download" | "section-header" | "section-unset" | "signature" | "signature-adopted"; }[]; format?: string; label: string; maxDate?: string; maxFiles?: number; maxLength?: number; maxRows?: number; minDate?: string; minRows?: number; name: string; options?: ( | string | { description?: string; value: string; })[]; placeholder?: string; prefillFrom?: string; required: boolean; showRange?: boolean; showTime?: boolean; signatureMode?: "typed" | "drawn"; timezone?: string; type: | "number" | "date" | "file" | "email" | "url" | "select" | "text" | "checkbox" | "textarea" | "phone" | "radio-group" | "multiselect" | "field-array" | "image" | "file-download" | "section-header" | "section-unset" | "signature" | "signature-adopted"; }[]

Returns

CrossVersionPrefillResult

On this page