All files / utils resolveEntityForms.js

95.12% Statements 39/41
89.18% Branches 33/37
100% Functions 10/10
94.28% Lines 33/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 1033x     66x 24x 24x       40x 3x     52x 37x 32x     5x             9x                         7x       14x 7x         7x   7x             7x                       43x   4x 6x   4x       43x   43x   4x 3x 1x     2x 2x       40x 40x   5x 5x     3x      
const { randomUUID } = require('crypto')
 
function getFieldId(field) {
  if (!field || typeof field.fieldId !== 'string') return null
  const trimmed = field.fieldId.trim()
  return trimmed || null
}
 
function createDefaultForm(fields) {
  if (!Array.isArray(fields) || fields.length === 0) {
    return undefined
  }
 
  const fieldIds = fields.map((field) => getFieldId(field)).filter(Boolean)
  if (fieldIds.length === 0) {
    return undefined
  }
 
  return [
    {
      id: randomUUID(),
      name: {
        en: 'Default display',
        fr: 'Affichage par defaut'
      },
      fields: fieldIds.map((fieldId, index) => ({
        fieldId,
        order: index,
        x: 0,
        y: index,
        w: 12,
        h: 1
      }))
    }
  ]
}
 
function createShortForm(fields) {
  Iif (!Array.isArray(fields) || fields.length === 0) {
    return undefined
  }
 
  const fieldIds = fields.map((field) => getFieldId(field)).filter(Boolean)
  Iif (fieldIds.length === 0) {
    return undefined
  }
 
  // Up to 2 fields shown side-by-side for compact FK display
  const shortFieldIds = fieldIds.slice(0, 2)
  const formFields =
    shortFieldIds.length === 1
      ? [{ fieldId: shortFieldIds[0], order: 0, x: 0, y: 0, w: 12, h: 1 }]
      : [
          { fieldId: shortFieldIds[0], order: 0, x: 0, y: 0, w: 6, h: 1 },
          { fieldId: shortFieldIds[1], order: 1, x: 6, y: 0, w: 6, h: 1 }
        ]
 
  return {
    id: randomUUID(),
    name: {
      en: 'Short display',
      fr: 'Affichage compact'
    },
    purpose: 'short',
    fields: formFields
  }
}
 
function getValidForms(forms) {
  if (!Array.isArray(forms)) return undefined
 
  const validForms = forms.filter(
    (form) => form?.id && Array.isArray(form.fields) && form.fields.length > 0
  )
  return validForms.length > 0 ? validForms : undefined
}
 
function resolveForms({ fields, forms }) {
  const validForms = getValidForms(forms)
 
  if (validForms) {
    // If a short form already exists, return forms as-is
    const hasShortForm = validForms.some((form) => form.purpose === 'short')
    if (hasShortForm) {
      return validForms
    }
    // Auto-append a short form when none is present
    const shortForm = createShortForm(fields)
    return shortForm ? [...validForms, shortForm] : validForms
  }
 
  // No valid forms: auto-create both the default form and the short form
  const defaultForms = createDefaultForm(fields)
  if (!defaultForms) return undefined
 
  const shortForm = createShortForm(fields)
  return shortForm ? [...defaultForms, shortForm] : defaultForms
}
 
module.exports = {
  resolveForms
}