File

libs/sdk/src/node/journey/load/classic-journey/read-or-create-pfe-config.ts

Index

Properties

Properties

nextItem (Optional)
Type PageConfiguration
pageData
Type PageConfiguration
previousItem (Optional)
Type PageConfiguration
import { PageConfiguration } from '@allianz/taly-core/schemas';
import type { PagesJsonSchema, PfeJsonSchema } from '../../../../lib/model';

interface Page {
  pageData: PageConfiguration;
  previousItem?: PageConfiguration;
  nextItem?: PageConfiguration;
}

export function createDefaultPFEConfig(pagesConfig: PagesJsonSchema): PfeJsonSchema {
  const pfeConfig = {
    navConfiguration: createPagesNavConfiguration(pagesConfig.pages),
    appConfiguration: {
      pfeConfig: {
        validationErrorStateKey: 'validationErrorData',
        backButtonLabel: 'Back',
        nextButtonLabel: 'Next'
      }
    }
  };

  return pfeConfig;
}

export function createPagesNavConfiguration(pages: PageConfiguration[]) {
  const pageItemsWithPrevNext: Page[] = Array.from(pageWalker(pages));

  const pageConfigList = pageItemsWithPrevNext.map(({ pageData, nextItem }) => {
    return singleNavigationPageConfig(pageData, nextItem);
  });

  return {
    pages: pageConfigList
  };
}

/**
 * create a single pfe navigation config node, with minimal content to point to next page
 */
function singleNavigationPageConfig(
  pageData: PageConfiguration,
  nextPage: PageConfiguration | null = null
) {
  const nextOptionList = [];

  if (nextPage) {
    nextOptionList.push({
      nextPageId: nextPage.id
    });
  }

  return {
    pageId: pageData.id,
    nextOptionList
  };
}

/**
 * support utility to enrich a given page array with previous and next pages pointers
 */
function* pageWalker(pages: PageConfiguration[]) {
  for (const [index, pageData] of pages.entries()) {
    const previousItem = pages[index - 1];
    const nextItem = pages[index + 1];
    yield { pageData, previousItem, nextItem };
  }
}

results matching ""

    No results matching ""