{"version":3,"file":"init.mjs","sources":["../../../../src/lib/form/init.mts"],"sourcesContent":["import { createFieldExtract } from './extract.mjs';\nimport { createEnrichField } from './enrichment.mjs';\nimport type { FormElement } from '../shared/fields.mjs';\nimport type { FormulaStores, FieldValidity, EnrichFields } from '../shared/types.mjs';\n\ninterface InitOptions {\n  defaultValues?: Record<string, unknown>;\n  enrich?: EnrichFields;\n}\n\n/**\n * Initialise the stores with data from the form\n */\nfunction getInitialFormValues(\n  node: HTMLElement,\n  allGroups: [string, FormElement[]][],\n  stores: FormulaStores,\n  options?: InitOptions,\n): [Record<string, unknown>, Record<string, FieldValidity>, Record<string, Record<string, unknown>>] {\n  const formValues: Record<string, unknown> = {};\n  const validityValues: Record<string, FieldValidity> = {};\n  const enrichmentValues: Record<string, Record<string, unknown>> = {};\n\n  for (const [key, elements] of allGroups) {\n    const extract = createFieldExtract(key, elements, stores, options);\n    const { name, value, ...validity } = extract(elements[0], true, false);\n    formValues[name] = value;\n    validityValues[name] = validity;\n    if (options?.enrich?.[name]) {\n      const enrich = createEnrichField(name, options);\n      enrichmentValues[name] = enrich(value);\n    }\n  }\n\n  stores.formValues.set({ ...formValues });\n  stores.initialValues.set({ ...formValues });\n  stores.errors.set({ ...validityValues });\n  stores.formValid.set(Object.values(validityValues).every((v) => v.valid));\n  stores.enrichment.set({ ...enrichmentValues });\n\n  return [formValues, validityValues, enrichmentValues];\n}\n\n/**\n * Create the form reset method\n */\nexport function createReset(node: HTMLElement, allGroups: [string, FormElement[]][], stores: FormulaStores, options?: InitOptions): () => void {\n  const [formValues, validityValues, enrichmentValues] = getInitialFormValues(node, allGroups, stores, options);\n\n  /**\n   * Resets the form to the initial values\n   */\n  return () => {\n    stores.formValues.set(formValues);\n    stores.errors.set(validityValues);\n    stores.formValid.set(Object.values(validityValues).every((v) => v.valid));\n    stores.enrichment.set(enrichmentValues);\n    // Also override touched and dirty\n    stores.touched.set(Object.keys(formValues).reduce((val, key) => ({ ...val, [key]: false }), {}));\n    stores.dirty.set(Object.keys(formValues).reduce((val, key) => ({ ...val, [key]: false }), {}));\n\n    // Update the elements\n    for (const [key, elements] of allGroups) {\n      const extract = createFieldExtract(key, elements, stores, options);\n      extract(elements[0], false, true);\n    }\n  };\n}\n"],"names":["getInitialFormValues","node","allGroups","stores","options","formValues","validityValues","enrichmentValues","key","elements","extract","createFieldExtract","name","value","validity","enrich","createEnrichField","v","createReset","val"],"mappings":";;AAaA,SAASA,EACPC,GACAC,GACAC,GACAC,GACmG;AACnG,QAAMC,IAAsC,CAAA,GACtCC,IAAgD,CAAA,GAChDC,IAA4D,CAAA;AAElE,aAAW,CAACC,GAAKC,CAAQ,KAAKP,GAAW;AACvC,UAAMQ,IAAUC,EAAmBH,GAAKC,GAAUN,GAAQC,CAAO,GAC3D,EAAE,MAAAQ,GAAM,OAAAC,GAAO,GAAGC,EAAA,IAAaJ,EAAQD,EAAS,CAAC,GAAG,IAAM,EAAK;AAGrE,QAFAJ,EAAWO,CAAI,IAAIC,GACnBP,EAAeM,CAAI,IAAIE,GACnBV,GAAS,SAASQ,CAAI,GAAG;AAC3B,YAAMG,IAASC,EAAkBJ,GAAMR,CAAO;AAC9C,MAAAG,EAAiBK,CAAI,IAAIG,EAAOF,CAAK;AAAA,IACvC;AAAA,EACF;AAEA,SAAAV,EAAO,WAAW,IAAI,EAAE,GAAGE,GAAY,GACvCF,EAAO,cAAc,IAAI,EAAE,GAAGE,GAAY,GAC1CF,EAAO,OAAO,IAAI,EAAE,GAAGG,GAAgB,GACvCH,EAAO,UAAU,IAAI,OAAO,OAAOG,CAAc,EAAE,MAAM,CAACW,MAAMA,EAAE,KAAK,CAAC,GACxEd,EAAO,WAAW,IAAI,EAAE,GAAGI,GAAkB,GAEtC,CAACF,GAAYC,GAAgBC,CAAgB;AACtD;AAKO,SAASW,EAAYjB,GAAmBC,GAAsCC,GAAuBC,GAAmC;AAC7I,QAAM,CAACC,GAAYC,GAAgBC,CAAgB,IAAIP,EAAqBC,GAAMC,GAAWC,GAAQC,CAAO;AAK5G,SAAO,MAAM;AACX,IAAAD,EAAO,WAAW,IAAIE,CAAU,GAChCF,EAAO,OAAO,IAAIG,CAAc,GAChCH,EAAO,UAAU,IAAI,OAAO,OAAOG,CAAc,EAAE,MAAM,CAACW,MAAMA,EAAE,KAAK,CAAC,GACxEd,EAAO,WAAW,IAAII,CAAgB,GAEtCJ,EAAO,QAAQ,IAAI,OAAO,KAAKE,CAAU,EAAE,OAAO,CAACc,GAAKX,OAAS,EAAE,GAAGW,GAAK,CAACX,CAAG,GAAG,OAAU,CAAA,CAAE,CAAC,GAC/FL,EAAO,MAAM,IAAI,OAAO,KAAKE,CAAU,EAAE,OAAO,CAACc,GAAKX,OAAS,EAAE,GAAGW,GAAK,CAACX,CAAG,GAAG,OAAU,CAAA,CAAE,CAAC;AAG7F,eAAW,CAACA,GAAKC,CAAQ,KAAKP;AAE5B,MADgBS,EAAmBH,GAAKC,GAAUN,GAAQC,CAAO,EACzDK,EAAS,CAAC,GAAG,IAAO,EAAI;AAAA,EAEpC;AACF;"}