{"version":3,"file":"static/js/746ada0ca26380fa8161.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/helper-functions.ts?5715","webpack://Msdyn365.Commerce.Online/./src/components/breakpoints.ts?f4e7","webpack://Msdyn365.Commerce.Online/./src/components/enums.ts?ba3b","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/component/ecomm-form-price-component.tsx?0905","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/component/ecomm-form-add-to-cart-source.component.tsx?93f7","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/utilities/btrts-donations-error-utilities.ts?08f2","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/component/ecomm-form-add-to-cart.component.tsx?356d","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/amountDeceasedNameForm.component.tsx?ac48","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/categoryNamesAddressForm.component.tsx?993c","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/categoryNamesCollectionForm.component.tsx?c269","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/categoryNamesForm.component.tsx?2d96","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/ceremonyForm.component.tsx?e051","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/coursesForm.component.tsx?7152","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/deceasedCategoryNamesForm.component.tsx?dd58","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/deceasedDedicatedByForm.component.tsx?ada7","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/donationForm.component.tsx?7b1f","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventCategoryNamesForm.component.tsx?bee6","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventDeceasedDedicatedByForm.component.tsx?af5a","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventPassportUploadInsuranceForm.component.tsx?55fe","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventTaxDeductionForm.component.tsx?d9a4","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventsChineseNameForm.component.tsx?0d9c","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventsNextOfKinNameForm.component.tsx?4eed","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventsPassportUploadForm.component.tsx?7118","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/nameBirthDatetimeForm.component.tsx?8dcc","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/nameBirthdaySchoolForm.component.tsx?f7bc","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/nameDedicationStartDate.component.tsx?820b","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/namesAddressContactnoForm.component.tsx?cf85","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/namesOnlyForm.component.tsx?b690","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/namesRemarksForm.component.tsx?b498","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/noOfYearsCategoryNamesForm.component.tsx?3a5e","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/offeringForm.component.tsx?1ca2","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesBusinessForm.component.tsx?1156","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesDeceasedForm.component.tsx?c9cf","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesEducationForm.component.tsx?7b46","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesGeneralForm.component.tsx?a844","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesHealthSurgeryForm.component.tsx?8b27","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesInfantSpiritForm.component.tsx?2217","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesMarriageForm.component.tsx?9567","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/threeCategoryNamesConsecrationForm.component.tsx?9007","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/threeCategoryNamesForm.component.tsx?2117","webpack://Msdyn365.Commerce.Online/./node_modules/moment/locale/ sync ^\\.\\/.*$?b2df"],"sourcesContent":["import { ICoreContext, IActionContext } from '@msdyn365-commerce/core';\r\n\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\n\r\nimport { AsyncResult, Customer, Product, ProductSearchCriteria, ProductSearchResult, SimpleProduct, SalesOrder } from '@msdyn365-commerce/retail-proxy';\r\nimport { getOrderHistoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\r\nimport { searchAsync, searchByCategoryAsync, getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\nimport { v4 as uuidv4, validate as uuidValidate, version as uuidVersion } from 'uuid';\r\n\r\nimport { createOrUpdateBTGPCartLineAsync, createBTGPErrorLogAsync, getByCustomerAllBTGPTransactionAsync, getByCustomerAllBTGPTransactionFromHqAsync } from '../actions/DataActionExtension.g';\r\nimport { CategoryProducts, FormDetails, PastTransaction, CartItem, Transaction } from '../actions/ecomm-interfaces';\r\n\r\nimport DedicationPeriod from '../resources/dedicationPeriod.json';\r\nimport { ICartState} from '@msdyn365-commerce/global-state';\r\nimport { ReceiptItem } from './kioskv3-interfaces';\r\n\r\nexport async function getProductsByCategoryId(context: ICoreContext, categoryId: number): Promise {\r\n const searchResult = await searchByCategoryAsync({ callerContext: context.actionContext }, context.actionContext.requestContext.apiSettings.channelId, context.actionContext.requestContext.apiSettings.catalogId, categoryId).catch(error => console.log('[getProductsByCategoryId] searchByCategoryAsync error: ', error));\r\n\r\n if (searchResult && searchResult.length > 0) {\r\n searchResult.sort((a: ProductSearchResult, b: ProductSearchResult) => ((a.DisplayOrder!) < (b.DisplayOrder!) ? -1 : 1));\r\n\r\n const productIds: number[] = [];\r\n\r\n searchResult.map(item => productIds.push(item.RecordId));\r\n\r\n // const availability = await getEstimatedAvailabilityAsync(context, { ProductIds: productIds, DefaultWarehouseOnly: true }).\r\n // catch(error => console.log('[getProductsByCategoryId] getEstimatedAvailabilityAsync error: ', error));\r\n\r\n // if (availability && availability.ProductWarehouseInventoryAvailabilities) {\r\n // const warehouse = availability.ProductWarehouseInventoryAvailabilities;\r\n\r\n // if (warehouse.length > 0) {\r\n // const availableIds: number[] = [];\r\n\r\n // searchResult.map(item => {\r\n // const found = warehouse.find(stock => stock.ProductId === item.RecordId);\r\n\r\n // if (found && (found.PhysicalAvailableInventoryLevelCode && found.PhysicalAvailableInventoryLevelCode === InventoryLvls.AVAIL)) {\r\n // availableIds.push(item.RecordId);\r\n // }\r\n // });\r\n\r\n // const products = await getByIdsAsync(context, channelId, availableIds).catch(error => console.log('[getProductsByCategoryId] getByIdsAsync error: ', error));\r\n\r\n // return products;\r\n // }\r\n // }\r\n\r\n const products = await getByIdsAsync({ callerContext: context.actionContext }, context.actionContext.requestContext.apiSettings.channelId, productIds).catch(error => console.log('[getProductsByCategoryId] getByIdsAsync error: ', error));\r\n\r\n return products;\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport async function getProducts(context: ICoreContext, categoryIDs: number[]): Promise {\r\n if (categoryIDs.length > 0) {\r\n const projectDomain = { ChannelId: context.actionContext.requestContext.apiSettings.channelId, CatalogId: context.actionContext.requestContext.apiSettings.catalogId };\r\n\r\n const criterias: ProductSearchCriteria = { Context: projectDomain, CategoryIds: categoryIDs, IncludeAttributes: true };\r\n \r\n const products = await searchAsync({ callerContext: context.actionContext }, criterias);\r\n \r\n return products;\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport async function getCustomerOrderHistory(context: ICoreContext, hierarchy: AsyncResult, customer: Customer, organisation: string, isUat: boolean, limit: number, source: string) {\r\n const dictionary = await generateDictionary(context, hierarchy);\r\n const orderHistory: PastTransaction[] = [];\r\n let btgpTransactions;\r\n let orders : SalesOrder[]= []; \r\n\r\n\r\n if (source ==\"CH\")\r\n {\r\n orders = await getOrderHistoryAsync({ callerContext: context.actionContext }, customer.AccountNumber);\r\n\r\n btgpTransactions = await getByCustomerAllBTGPTransactionAsync({ callerContext: context.actionContext }, customer.AccountNumber, customer.Email!, organisation, isUat, limit); \r\n }\r\n else{\r\n btgpTransactions = await getByCustomerAllBTGPTransactionFromHqAsync({ callerContext: context.actionContext }, isUat, customer.AccountNumber, customer.Email!, (organisation==\"BT\"?\"BTRT\":\"GPBT\")); \r\n }\r\n\r\n\r\n if (btgpTransactions)\r\n {\r\n for (let i = 0; i < btgpTransactions.length; i++) {\r\n const transaction: Transaction = JSON.parse(btgpTransactions[`${i}`]);\r\n \r\n if (transaction['errorCode']) {\r\n console.log(transaction['errorMessage']);\r\n } else {\r\n const transactionNames: string[] = [];\r\n\r\n for (let j = 1; j <= 20; j++) {\r\n const nameID = 'Name_' + j;\r\n\r\n if (transaction[`${nameID}`]) {\r\n transactionNames.push(transaction[`${nameID}`]);\r\n }\r\n }\r\n\r\n let mainName = '';\r\n let mainID = 0;\r\n let price = 0;\r\n\r\n if (transaction.ProductCategoryID === '' || transaction.ProductCategoryID === null) {\r\n dictionary.forEach(record => {\r\n const found = record.Products.find(item => item.RecordId === parseInt(transaction.ProductID));\r\n\r\n if (found) { \r\n mainName = record.Main.Name!; \r\n mainID = record.Main.RecordId;\r\n price = found.Price ? found.Price : 0;\r\n }\r\n });\r\n } else {\r\n mainName = transaction.ProductCategory;\r\n mainID = Number(transaction.ProductCategoryID);\r\n price = transaction.ProductPrice;\r\n }\r\n\r\n if (transaction.DedicationPeriod !== '') {\r\n let found = DedicationPeriod.en.period.findIndex(item => item.label === transaction.DedicationPeriod);\r\n\r\n // Look through chinese version.\r\n if (found < 0) {\r\n found = DedicationPeriod.zh.period.findIndex(item => item.label === transaction.DedicationPeriod);\r\n }\r\n\r\n // Found matching dedication period.\r\n if (found >= 0) {\r\n price = price * DedicationPeriod.scale[`${found}`];\r\n }\r\n }\r\n\r\n const matchingOrder = orders.find(order => order.Id === transaction.SalesOrderID);\r\n const orderReceiptNo = transaction.ReceiptNo === '' ? matchingOrder && matchingOrder.SalesId ? matchingOrder.SalesId : 'Pending' : transaction.ReceiptNo;\r\n\r\n let order = transaction;\r\n order.ProductPrice = price;\r\n order.ProductCategory = mainName;\r\n order.ProductCategoryID = mainID.toString();\r\n\r\n orderHistory.push({ \r\n EventDates: [transaction.EventName],\r\n Names: transactionNames,\r\n OrderDate: transaction.DateOfTransaction ? new Date(transaction.DateOfTransaction) : new Date(),\r\n ReceiptNo: [orderReceiptNo],\r\n Record: order\r\n });\r\n }\r\n }\r\n }\r\n\r\n orderHistory.sort((a, b) => {\r\n return b.OrderDate.getTime() - a.OrderDate.getTime();\r\n }); \r\n\r\n return orderHistory;\r\n}\r\n\r\nexport async function generateErrorLog(context: ICoreContext, errorLogName: string, errorDetails: string, item: FormDetails) {\r\n await createBTGPErrorLogAsync({ callerContext: context.actionContext }, generateUUID(), errorLogName, errorDetails, new Date().toISOString(), item.CartLineID, item.CartID, item.ProductID, item.EventID, item.EventName, item.SerialID, item.SerialNumber, item.SerialName, item.Name_1, item.Name_2, item.Name_3, item.Name_4, item.Name_5, item.Name_6, item.Name_7, item.Name_8, item.Name_9, item.Name_10, item.Name_11, item.Name_12, item.Name_13, item.Name_14, item.Name_15, item.Name_16, item.Name_17, item.Name_18, item.Name_19, item.Name_20, item.Remarks, item.Message, item.Category, item.DedicatedBy, item.HasTaxDeduction, item.Nric, item.BuildingName, item.UnitNumber, item.PostalCode, item.BirthDate, item.PhoneNumber, item.SchoolName, item.DonationOption, item.BlessingOption, item.CartLineComment, item.BirthTime, item.LightOption, item.ValidFrom, item.ValidTo, item.ParentCartLineID, item.DedicationPeriod, item.Country, item.CompanyName, item.DeceasedRelationship, item.SurgeryDate, item.DeathDate, item.DeathTime, item.NameChange, item.OldName_1, item.OldName_2, item.BirthDate_2, item.BirthTime_2, item.StartDate, item.Gender, item.ChineseName, item.ContactNumber, item.NameNextKin, item.ContactNumberNextKin, item.PassportNumber, item.PassportExpiryDate, item.PassportIssuedDate);\r\n}\r\n\r\nexport async function createOrUpdateCartline(context: ICoreContext, item: CartItem): Promise {\r\n const result = await createOrUpdateBTGPCartLineAsync({ callerContext: context.actionContext }, item.Form.CartLineID, item.Form.CartID, item.Form.ProductID, item.Form.EventID, item.Form.EventName, item.Form.SerialID, item.Form.SerialNumber, item.Form.SerialName, item.Form.Name_1, item.Form.Name_2, item.Form.Name_3, item.Form.Name_4, item.Form.Name_5, item.Form.Name_6, item.Form.Name_7, item.Form.Name_8, item.Form.Name_9, item.Form.Name_10, item.Form.Name_11, item.Form.Name_12, item.Form.Name_13, item.Form.Name_14, item.Form.Name_15, item.Form.Name_16, item.Form.Name_17, item.Form.Name_18, item.Form.Name_19, item.Form.Name_20, item.Form.Remarks, item.Form.Message, item.Form.Category, item.Form.DedicatedBy, item.Form.HasTaxDeduction, item.Form.Nric, item.Form.BuildingName, item.Form.UnitNumber, item.Form.PostalCode, item.Form.BirthDate, item.Form.PhoneNumber, item.Form.SchoolName, item.Form.DonationOption, item.Form.BlessingOption, item.Form.CartLineComment, item.Form.BirthTime, item.Form.LightOption, item.Form.ValidFrom, item.Form.ValidTo, item.Form.ParentCartLineID, item.Form.DedicationPeriod, item.Form.Country, item.Form.CompanyName, item.Form.DeceasedRelationship, item.Form.SurgeryDate, item.Form.DeathDate, item.Form.DeathTime, item.Form.NameChange, item.Form.OldName_1, item.Form.OldName_2, item.Form.BirthDate_2, item.Form.BirthTime_2, item.IsValid, item.InvalidType, item.InCart, item.IsSubProduct, item.Form.StartDate, item.Form.Gender, item.Form.ChineseName, item.Form.NameNextKin, item.Form.ContactNumber, item.Form.ContactNumberNextKin, item.Form.PassportNumber, item.Form.PassportExpiryDate, item.Form.PassportIssuedDate, item.Form.Consent, item.Form.IsInsuranceIncluded);\r\n\r\n return result;\r\n}\r\n\r\nexport async function generateDictionary(context: ICoreContext, hierarchy: AsyncResult): Promise {\r\n const dictionary: CategoryProducts[] = [];\r\n\r\n if (hierarchy.result) {\r\n hierarchy.result.forEach(record => {\r\n if (record.Children && record.Children.length > 0) {\r\n dictionary.push({ Main: record, SubIDs: record.Children.map(item => item.RecordId), Products: [] });\r\n }\r\n });\r\n }\r\n\r\n for (let j = 0; j < dictionary.length; ++j) {\r\n dictionary[`${j}`].Products = await getProducts(context, dictionary[`${j}`].SubIDs);\r\n }\r\n\r\n return dictionary;\r\n}\r\n\r\nexport function generateUUID(): string {\r\n let uuid = uuidv4();\r\n\r\n while (!(uuidValidate(uuid) && uuidVersion(uuid) == 4)) {\r\n uuid = uuidv4();\r\n }\r\n\r\n return uuid;\r\n}\r\n\r\nexport function showNextOrPreviousPage(selectors: string, showClassName: string, hideClassName: string, showNextPage: boolean) {\r\n let showPageIndex;\r\n const elements = document.querySelectorAll(selectors);\r\n\r\n // to get show page index\r\n for (let i = 0 ; i < elements.length; i++){\r\n const htmlElement = elements[`${i}`] as HTMLElement;\r\n if (htmlElement.classList.contains(showClassName)) {\r\n showPageIndex = showNextPage ? i + 1 : i - 1;\r\n }\r\n htmlElement.classList.remove(showClassName);\r\n htmlElement.classList.add(hideClassName);\r\n }\r\n\r\n const elementToShow = elements[`${showPageIndex}`] as HTMLElement;\r\n elementToShow.classList.remove(hideClassName);\r\n elementToShow.classList.add(showClassName);\r\n}\r\n\r\nexport function loadingProductListInHomePageOrPrecheckoutPage(className: string){\r\n const productListEl = document.getElementsByClassName(className)[0];\r\n const overlayEl = document.getElementsByClassName(\"loading-overlay-parent\")[0] as HTMLElement;\r\n\r\n if (!productListEl.hasChildNodes()){\r\n overlayEl.style.display = \"block\";\r\n\r\n const intervalId = setInterval(()=>{\r\n if (document.getElementsByClassName(className)[0].hasChildNodes()) {\r\n overlayEl.style.display = \"none\";\r\n clearInterval(intervalId);\r\n }\r\n }, 200);\r\n }\r\n else{\r\n overlayEl.style.display = \"none\";\r\n }\r\n}\r\n\r\nexport function showLoadingScreen(show: boolean){\r\n const overlayEl = document.getElementsByClassName(\"loading-overlay-parent\")[0] as HTMLElement;\r\n // show ? overlayEl.style.display = \"block\" : overlayEl.style.display = \"none\";\r\n let overlayTimeout: any = \"\";\r\n\r\n if (show){\r\n overlayTimeout = setTimeout(()=>{\r\n overlayEl.style.display = \"block\";\r\n }, 1000);\r\n }\r\n else{\r\n overlayEl.style.display = \"none\";\r\n }\r\n\r\n\r\n return overlayTimeout;\r\n}\r\n\r\nexport function showLoadingScreenInstant(show: boolean){\r\n const overlayEl = document.getElementsByClassName(\"loading-overlay-parent\")[0] as HTMLElement;\r\n show ? overlayEl.style.display = \"block\" : overlayEl.style.display = \"none\";\r\n}\r\n\r\nexport function showTryAgainPrintReceiptPopUp(show: boolean){\r\n const overlayEl = document.getElementsByClassName(\"try-again-overlay-parent\")[0] as HTMLElement;\r\n show ? overlayEl.style.display = \"block\" : overlayEl.style.display = \"none\";\r\n}\r\n\r\nexport function clearOverlayTimeout(overlayTimeout: NodeJS.Timeout){\r\n clearTimeout(overlayTimeout);\r\n}\r\n\r\nexport function showStartOverBtnInHeader2(show: boolean){\r\n let elements: Element[] = Array.from(document.getElementsByClassName(\"start-over\"));\r\n elements.forEach(element =>{\r\n if (show){\r\n (element as HTMLElement).style.display = \"block\";\r\n }\r\n else{\r\n (element as HTMLElement).style.display = \"none\";\r\n }\r\n });\r\n}\r\n\r\n\r\nexport async function buildKioskv3ReceiptItems(cart: ICartState, actionContext: IActionContext, channelId: number): Promise{\r\n let productIds: number[] = [];\r\n cart.cart.CartLines?.map(cartLine => productIds.push(Number(cartLine.ProductId)));\r\n\r\n let simpleProductsResults = await searchAsync({ callerContext: actionContext }, { Ids: productIds });\r\n\r\n let receiptItems: ReceiptItem[] = [];\r\n\r\n cart.cart.CartLines?.map(cartLine => {\r\n if (cartLine.ProductId) {\r\n let receiptItem: ReceiptItem = {\r\n quantity: cartLine.Quantity!,\r\n productName: simpleProductsResults.find(product => product.RecordId == cartLine.ProductId)!.ProductName!,\r\n price: cartLine.Price!,\r\n totalAmount: cartLine.Quantity! * cartLine.Price!,\r\n comment: cartLine.Comment!\r\n };\r\n receiptItems.push(receiptItem);\r\n }\r\n })\r\n\r\n return receiptItems;\r\n}","// <= 999 = Mobile\r\n// >= 1000 = Tablet and Desktop\r\n\r\nexport const enum Breakpoints {\r\n small = 540,\r\n medium = 768,\r\n large = 992\r\n}\r\n\r\nexport function isMobile (width: number): boolean {\r\n return width < Breakpoints.large;\r\n}","export const enum FOMOOrderStatus {\r\n CREATED = 'CREATED',\r\n FAIL = 'FAIL',\r\n SUCCESS = 'SUCCESS',\r\n CLOSED = 'CLOSED',\r\n ERROR = 'ERROR'\r\n}\r\n\r\nexport const enum InventoryLvls {\r\n OOS = 'OOS',\r\n LIS = 'LIS',\r\n AVAIL = 'AVAIL'\r\n}\r\n\r\nexport const enum Response {\r\n SUCCESS = 'SUCCESS',\r\n FAILED = 'FAILED'\r\n}","import classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ProductPrice } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IProductDetailsPriceComponentProps extends IComponentProps<{price: ProductPrice}> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n}\r\n\r\nexport interface IProductDetailsPriceComponent extends IComponent {\r\n}\r\n\r\nconst PriceComponentActions = {\r\n};\r\n\r\nconst Price: React.FC = (props: IProductDetailsPriceComponentProps) => {\r\n // CustomerContextualPrice could be 0\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\nconst showStrikethroughPricing = (props: IProductDetailsPriceComponentProps) => {\r\n const originalPrice = getOriginalPrice(props);\r\n\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst getOriginalPrice = (props:IProductDetailsPriceComponentProps) => {\r\n return Math.max(props.data.price.BasePrice || 0, props.data.price.TradeAgreementPrice || 0, props.data.price.AdjustedPrice || 0);\r\n};\r\n\r\nconst renderCurrentPrice = (props: IProductDetailsPriceComponentProps): JSX.Element | undefined => {\r\n const initialPrice = formatCurrency(props, props.data.price.CustomerContextualPrice);\r\n return {initialPrice};\r\n};\r\n\r\nconst formatCurrency = (props: IProductDetailsPriceComponentProps, price: number | undefined): string | undefined => {\r\n if (price === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (price === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price);\r\n};\r\n\r\nconst renderCurrentPriceWithOriginalPrice = (props: IProductDetailsPriceComponentProps): JSX.Element | null => {\r\n const originalPrice = getOriginalPrice(props);\r\n const initialPrice = formatCurrency(props, originalPrice);\r\n\r\n return (\r\n <>\r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n \r\n {props.savingsText && {props.savingsText}}\r\n \r\n );\r\n};\r\n\r\n// @ts-ignore\r\nexport const ProductDetailsPriceComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'Price',\r\n { component: Price, ...PriceComponentActions }\r\n);","import classnames from 'classnames';\r\n\r\nimport React, { useState } from 'react';\r\n\r\nimport { v4 as uuidv4, validate as uuidValidate, version as uuidVersion } from 'uuid';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPopupProps, ITelemetryContent, Popup } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { IComponent, IComponentProps, IGridSettings, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\r\n\r\nimport { getCartState, ICartState, ICartActionResult } from '@msdyn365-commerce/global-state';\r\n\r\nimport { CartLine, ProductAvailableQuantity, ProductDimension, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\nimport { FormDetails,CartItem } from '../../../actions/ecomm-interfaces';\r\nimport { createOrUpdateCartline, generateErrorLog } from '../../../actions/helper-functions';\r\n\r\nimport { ProductDetailsPriceComponent } from './ecomm-form-price-component';\r\n\r\nexport interface IProductDetailsAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice, cart: ICartState }> {\r\n className?: string;\r\n addToCartText: string;\r\n outOfStockText: string;\r\n disabled?: boolean;\r\n quantity?: number;\r\n navigationUrl?: string;\r\n productAvailability?: ProductAvailableQuantity;\r\n getSelectedProduct?: SimpleProduct;\r\n\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n\r\n isLoading?: boolean;\r\n isUpdatingDimension?: boolean;\r\n isLoadingDeliveryOptions?: boolean;\r\n isUpdatingDeliveryOptions?: boolean;\r\n isAddServiceItemToCart?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n isOrderQuantityLimitsFeatureEnabled?: boolean;\r\n customPriceAmount?: number[];\r\n\r\n matchingCartItems?: [];\r\n\r\n events?: string[];\r\n eventIDs: string[];\r\n\r\n serialIds: string[];\r\n serialNumbers: string[];\r\n serialNames: string[];\r\n \r\n names: string[];\r\n dedicatedBy: string[];\r\n \r\n categories: string[];\r\n messages?: string[];\r\n remarks?: string[];\r\n \r\n hasTaxDeductions: boolean[];\r\n nrics: string[];\r\n \r\n buildingNames: string[];\r\n unitNumbers: string[];\r\n postalCodes: string[];\r\n phoneNumbers: number[];\r\n chineseNames: string[];\r\n countries: string[];\r\n\r\n nameNextKins: string[];\r\n contactNumbers: string[]\r\n contactNumbersNextKin: string[];\r\n passportNumbers: string[];\r\n passportExpiryDates: string[];\r\n passportIssuedDates: string[];\r\n consents: number[];\r\n isInsuranceIncluded: number[];\r\n\r\n birthDates: string[];\r\n birthTimes: string[];\r\n\r\n deathDates: string[];\r\n deathTimes: string[];\r\n\r\n surgeryDates: string[];\r\n \r\n schoolNames: string[];\r\n companyNames: string[];\r\n \r\n blessingOptions: string[];\r\n collectionOptions: string[];\r\n lightOptions: string[];\r\n \r\n validFroms: string[];\r\n validTos: string[];\r\n \r\n dedicationPeriods: string[];\r\n startDates: string[];\r\n\r\n genders: string[];\r\n\r\n deceasedRelationships: string[];\r\n \r\n nameChanges: string[];\r\n oldNames: string[];\r\n \r\n quantities: number[];\r\n \r\n subProduct: SimpleProduct;\r\n subProductQuantities: number[];\r\n\r\n dialogStrings?: {\r\n goToCartText: string;\r\n continueShoppingText: string;\r\n headerItemOneText: string;\r\n headerItemFormatText: string;\r\n headerMessageText: string;\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n };\r\n\r\n telemetryContent?: ITelemetryContent;\r\n\r\n isCustomPriceSelected?: boolean;\r\n maximumKeyInPrice?: number;\r\n minimumKeyInPrice?: number;\r\n defaultMaximumKeyInPrice?: number;\r\n defaultMinimumKeyInPrice?: number;\r\n\r\n onAdd?(): void;\r\n onError?(result: IProductDetailsAddToCartFailureResult): void;\r\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\r\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\r\n}\r\n\r\nexport declare type IProductDetailsCartActionFailureReason = 'EMPTYINPUT' | 'MISSINGDIMENSION' | 'OUTOFSTOCK' | 'CARTACTIONFAILED' | 'INVALIDCUSTOMAMOUNT';\r\n\r\nexport interface IProductDetailsAddToCartFailureResult {\r\n failureReason: IProductDetailsCartActionFailureReason;\r\n stockLeft?: number;\r\n cartActionResult?: ICartActionResult;\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\nexport interface IProductDetailsAddtoCartComponent extends IComponent {\r\n onClick(): (event: React.MouseEvent, props: IProductDetailsAddToCartComponentProps) => void;\r\n}\r\n\r\nconst onClick = async (_event: React.MouseEvent, props: IProductDetailsAddToCartComponentProps, setDisabled: (disabled: boolean) => void, openModal: (opened: boolean) => void): Promise => {\r\n const cartError = addToCartError(props);\r\n\r\n let productToAdd = props.data.product;\r\n\r\n if (cartError) {\r\n propagateError(props, cartError);\r\n \r\n return;\r\n }\r\n\r\n setDisabled(true);\r\n\r\n if (!(props.getSelectedProduct === undefined)) {\r\n productToAdd = (await props.getSelectedProduct) || props.data.product;\r\n }\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n\r\n if (props.matchingCartItems && props.matchingCartItems.length > 0) {\r\n const matchingCartLineIds: string[] = [];\r\n\r\n props.matchingCartItems.map((value: string, index: number) => {\r\n if (value['cartLineId'] !== '') {\r\n matchingCartLineIds.push(value['cartLineId']);\r\n }\r\n });\r\n\r\n if (matchingCartLineIds.length > 0) {\r\n const cartLinesResult = await getAllBTGPCartLineAsync({ callerContext: props.context.actionContext }, cartState.cart.Id);\r\n \r\n const cartLineData: any[] = [];\r\n\r\n if (cartLinesResult.length > 0) {\r\n cartLinesResult.forEach(record => cartLineData.push(JSON.parse(record)));\r\n }\r\n\r\n const cartIdToRemove: string[] = [matchingCartLineIds[0]];\r\n\r\n cartLineData.forEach(cl => {\r\n if (cl['ParentCartLineID'] === cartIdToRemove[0]) {\r\n cartIdToRemove.push(cl['CartLineID']);\r\n }\r\n });\r\n\r\n const removeCartResult = await cartState.removeCartLines({ cartLineIds: cartIdToRemove });\r\n\r\n if (removeCartResult.status !== 'SUCCESS') {\r\n const errorMessageId = removeCartResult.errorDetails ? removeCartResult.errorDetails.ErrorResourceId ? removeCartResult.errorDetails.ErrorResourceId : '' : '';\r\n const errorMessageDetail = removeCartResult.errorDetails ? removeCartResult.errorDetails.LocalizedMessage ? removeCartResult.errorDetails.LocalizedMessage : '' : '';\r\n\r\n const item: FormDetails = {\r\n CartLineID: '', CartID: cartState.cart.Id, CartLineComment: '', ParentCartLineID: '',\r\n ProductID: '', EventID: '', EventName: '',\r\n SerialID: '', SerialNumber: '', SerialName: '',\r\n Name_1: '', Name_2: '', Name_3: '', Name_4: '', Name_5: '', Name_6: '', Name_7: '', Name_8: '', Name_9: '', Name_10: '', \r\n Name_11: '', Name_12: '', Name_13: '', Name_14: '', Name_15: '', Name_16: '', Name_17: '', Name_18: '', Name_19: '', Name_20: '',\r\n Remarks: '', Message: '',\r\n Category: '', DedicatedBy: '',\r\n HasTaxDeduction: false, Nric: '',\r\n BuildingName: '', UnitNumber: '', PostalCode: '', PhoneNumber: '', ChineseName:'', Country: '',\r\n SchoolName: '', CompanyName: '',\r\n DonationOption: '', BlessingOption: '', LightOption: '',\r\n ValidFrom: '', ValidTo: '',\r\n DedicationPeriod: '',\r\n StartDate: '',\r\n Gender: '',\r\n SurgeryDate: '',\r\n BirthDate: '', BirthTime: '',\r\n BirthDate_2: '', BirthTime_2: '',\r\n DeathDate: '', DeathTime: '',\r\n DeceasedRelationship: '',\r\n NameChange: '', \r\n OldName_1: '', OldName_2: '',\r\n NameNextKin:'',\r\n ContactNumber:'',\r\n ContactNumberNextKin:'',\r\n PassportNumber:'',\r\n PassportExpiryDate:'',\r\n PassportIssuedDate:'',\r\n Consent:0,\r\n IsInsuranceIncluded:0\r\n };\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source cartState.removeCartLines', errorMessageId + ': ' + errorMessageDetail, item);\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: removeCartResult });\r\n\r\n setDisabled(false);\r\n }\r\n\r\n for (let i = 0; i < matchingCartLineIds.length; i++) {\r\n const result = await deleteBTGPCartLineAsync({ callerContext: props.context.actionContext }, matchingCartLineIds[`${i}`]);\r\n\r\n if (!result) {\r\n const found = cartLinesResult.find(record => {\r\n const item = JSON.parse(record);\r\n\r\n return item['CartLineID'] === matchingCartLineIds[`${i}`];\r\n });\r\n\r\n if (found) {\r\n const parsed = JSON.parse(found);\r\n\r\n const item: FormDetails = {\r\n CartLineID: parsed['CartLineID'],\r\n CartID: parsed['CartID'],\r\n CartLineComment: parsed['CartLineComment'],\r\n ParentCartLineID: parsed['ParentCartLineID'],\r\n ProductID: parsed['ProductID'],\r\n EventID: parsed['EventID'],\r\n EventName: parsed['EventName'],\r\n SerialID: parsed['SerialID'],\r\n SerialNumber: parsed['SerialNumber'],\r\n SerialName: parsed['SerialName'],\r\n Name_1: parsed['Name_1'],\r\n Name_2: parsed['Name_2'],\r\n Name_3: parsed['Name_3'],\r\n Name_4: parsed['Name_4'],\r\n Name_5: parsed['Name_5'],\r\n Name_6: parsed['Name_6'],\r\n Name_7: parsed['Name_7'],\r\n Name_8: parsed['Name_8'],\r\n Name_9: parsed['Name_9'],\r\n Name_10: parsed['Name_10'], \r\n Name_11: parsed['Name_11'],\r\n Name_12: parsed['Name_12'],\r\n Name_13: parsed['Name_13'],\r\n Name_14: parsed['Name_14'],\r\n Name_15: parsed['Name_15'],\r\n Name_16: parsed['Name_16'],\r\n Name_17: parsed['Name_17'],\r\n Name_18: parsed['Name_18'],\r\n Name_19: parsed['Name_19'],\r\n Name_20: parsed['Name_20'],\r\n Remarks: parsed['Remarks'],\r\n Message: parsed['Message'],\r\n Category: parsed['Category'],\r\n DedicatedBy: parsed['DedicatedBy'],\r\n HasTaxDeduction: parsed['HasTaxDeduction'],\r\n Nric: parsed['Nric'],\r\n BuildingName: parsed['BuildingName'],\r\n UnitNumber: parsed['UnitNumber'],\r\n PostalCode: parsed['PostalCode'],\r\n PhoneNumber: parsed['PhoneNumber'],\r\n ChineseName: parsed['ChineseName'],\r\n Country: parsed['Country'],\r\n SchoolName: parsed['SchoolName'],\r\n CompanyName: parsed['CompanyName'],\r\n DonationOption: parsed['DonationOption'],\r\n BlessingOption: parsed['BlessingOption'],\r\n LightOption: parsed['LightOption'],\r\n ValidFrom: parsed['ValidFrom'],\r\n ValidTo: parsed['ValidTo'],\r\n DedicationPeriod: parsed['DedicationPeriod'],\r\n StartDate: parsed['StartDate'],\r\n Gender: parsed['Gender'],\r\n SurgeryDate: parsed['SurgeryDate'],\r\n BirthDate: parsed['BirthDate'],\r\n BirthTime: parsed['BirthTime'],\r\n BirthDate_2: parsed['BirthDate_2'],\r\n BirthTime_2: parsed['BirthTime_2'],\r\n DeathDate: parsed['DeathDate'],\r\n DeathTime: parsed['DeathTime'],\r\n DeceasedRelationship: parsed['DeceasedRelationship'],\r\n NameChange: parsed['NameChange'],\r\n OldName_1: parsed['OldName_1'],\r\n OldName_2: parsed['OldName_2'],\r\n NameNextKin: parsed['NameNextKin'],\r\n ContactNumber: parsed['ContactNumber'],\r\n ContactNumberNextKin: parsed['ContactNumberNextKin'],\r\n PassportNumber: parsed[\"PassportNumber\"],\r\n PassportExpiryDate: parsed[\"PassportExpiryDate\"],\r\n PassportIssuedDate: parsed[\"PassportIssuedDate\"],\r\n Consent: parsed[\"Consent\"],\r\n IsInsuranceIncluded: parsed[\"IsInsuranceIncluded\"]\r\n };\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source deleteBTGPCartLineAsync', '', item);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ATTENTION: CORE LOGIC BEGINS HERE.\r\n for (let i = 0; i < props.names!.length; i++) {\r\n const cartEvent = typeof props.events![`${i}`] !== 'undefined' && props.events![`${i}`] !== '' ? props.events![`${i}`] : '';\r\n const cartEventArray = strSplit(cartEvent, ';');\r\n\r\n const cartEventID = typeof props.eventIDs![`${i}`] !== 'undefined' && props.eventIDs[`${i}`] !== '' ? props.eventIDs[`${i}`] : '';\r\n const cartEventIDArray = strSplit(cartEventID, ';');\r\n\r\n const cartSerialId = typeof props.serialIds![`${i}`] !== 'undefined' && props.serialIds[`${i}`] !== '' ? props.serialIds[`${i}`] : '';\r\n const cartSerialNumber = typeof props.serialNumbers![`${i}`] !== 'undefined' && props.serialNumbers[`${i}`] !== '' ? props.serialNumbers[`${i}`] : '';\r\n const cartSerialName = typeof props.serialNames![`${i}`] !== 'undefined' && props.serialNames[`${i}`] !== '' ? props.serialNames![`${i}`] : ''; \r\n\r\n const cartName = typeof props.names![`${i}`] !== 'undefined' ? props.names![`${i}`] + '' : '';\r\n const cartNameArray = strSplit(cartName, ';');\r\n\r\n for (let r = cartNameArray.length - 1; r < 20; r++) {\r\n cartNameArray.push('');\r\n }\r\n\r\n const cartMessage = typeof props.messages![`${i}`] !== 'undefined' ? props.messages![`${i}`] + ';' : ';';\r\n const cartMessageTemp = cartMessage.substring(0, cartMessage.length - 1);\r\n const cartRemark = typeof props.remarks![`${i}`] !== 'undefined' ? props.remarks![`${i}`] : '';\r\n\r\n const cartCategory = typeof props.categories[`${i}`] !== 'undefined' ? props.categories![`${i}`] : '';\r\n\r\n const cartDedicatedBy = typeof props.dedicatedBy[`${i}`] !== 'undefined' ? props.dedicatedBy[`${i}`] : '';\r\n\r\n const cartHasTaxDeduction = typeof props.hasTaxDeductions[`${i}`] !== 'undefined' ? props.hasTaxDeductions[`${i}`] : false;\r\n const cartNric = typeof props.nrics[`${i}`] !== 'undefined' ? props.nrics[`${i}`] : '';\r\n\r\n const cartBuildingName = typeof props.buildingNames[`${i}`] !== 'undefined' ? props.buildingNames![`${i}`] : '';\r\n const cartUnitNumber = typeof props.unitNumbers[`${i}`] !== 'undefined' ? props.unitNumbers![`${i}`] : '';\r\n const cartPostalCode = typeof props.postalCodes[`${i}`] !== 'undefined' ? props.postalCodes![`${i}`] : '';\r\n const cartPhoneNumber = typeof props.phoneNumbers[`${i}`] !== 'undefined' ? String(props.phoneNumbers![`${i}`]) : '';\r\n const cartChineseName = typeof props.chineseNames[`${i}`] !== 'undefined' ? String(props.chineseNames![`${i}`]) : '';\r\n const cartNameNextKin = typeof props.nameNextKins[`${i}`] !== 'undefined' ? String(props.nameNextKins![`${i}`]) : '';\r\n const cartContactNumber = typeof props.contactNumbers[`${i}`] !== 'undefined' ? String(props.contactNumbers![`${i}`]) : '';\r\n const cartContactNumbersNextKin = typeof props.contactNumbersNextKin[`${i}`] !== 'undefined' ? String(props.contactNumbersNextKin![`${i}`]) : '';\r\n\r\n const cartPassportNumber = typeof props.passportNumbers[`${i}`] !== 'undefined' ? String(props.passportNumbers![`${i}`]) : '';\r\n\r\n const cartPassportExpiryDate = typeof props.passportExpiryDates[`${i}`] === 'undefined' || props.passportExpiryDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.passportExpiryDates![`${i}`];\r\n\r\n const cartPassportIssuedDate = typeof props.passportIssuedDates[`${i}`] === 'undefined' || props.passportIssuedDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.passportIssuedDates![`${i}`];\r\n\r\n const cartConsent = typeof props.consents[`${i}`] !== 'undefined' ? Number(props.consents![`${i}`]) : 0;\r\n\r\n const cartIsInsuranceIncluded = typeof props.isInsuranceIncluded[`${i}`] !== 'undefined' ? Number(props.isInsuranceIncluded![`${i}`]) : 0;\r\n\r\n\r\n const cartCountry = typeof props.countries[`${i}`] !== 'undefined' ? props.countries![`${i}`] : '';\r\n\r\n const cartSchoolName = typeof props.schoolNames[`${i}`] !== 'undefined' ? props.schoolNames![`${i}`] : '';\r\n\r\n const cartBirthDate = typeof props.birthDates[`${i}`] === 'undefined' || props.birthDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.birthDates![`${i}`];\r\n\r\n const cartBirthDates = typeof props.birthDates[`${i}`] !== 'undefined' ? props.birthDates[`${i}`].split(';') : [];\r\n const cartBirthTimes = typeof props.birthTimes[`${i}`] !== 'undefined' ? props.birthTimes[`${i}`].split(';') : [];\r\n\r\n const cartCollectionOption = typeof props.collectionOptions[`${i}`] !== 'undefined' ? props.collectionOptions![`${i}`] : '';\r\n const cartBlessingOption = typeof props.blessingOptions[`${i}`] !== 'undefined' ? props.blessingOptions![`${i}`] : '';\r\n const cartLightOption = typeof props.lightOptions[`${i}`] !== 'undefined' ? props.lightOptions![`${i}`] : '';\r\n\r\n const cartValidFrom = typeof props.validFroms[`${i}`] !== 'undefined' ? props.validFroms![`${i}`] !== '' ? props.validFroms![`${i}`] : new Date().toISOString() : new Date().toISOString();\r\n const cartValidTo = typeof props.validTos[`${i}`] !== 'undefined' ? props.validTos![`${i}`] !== '' ? props.validTos![`${i}`] : new Date().toISOString() : new Date().toISOString();\r\n\r\n const cartDedicationPeriod = typeof props.dedicationPeriods[`${i}`] !== 'undefined' ? props.dedicationPeriods![`${i}`] : '';\r\n const cartStartDate = typeof props.startDates[`${i}`] === 'undefined' || props.startDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.startDates![`${i}`];\r\n\r\n const cartGender = typeof props.genders[`${i}`] !== 'undefined' ? props.genders[`${i}`] : '';\r\n\r\n const cartCompanyName = typeof props.companyNames[`${i}`] !== 'undefined' ? props.companyNames![`${i}`] : '';\r\n\r\n const cartDeceasedRelationship = typeof props.deceasedRelationships[`${i}`] !== 'undefined' ? props.deceasedRelationships![`${i}`] : '';\r\n\r\n const cartDeathDate = typeof props.deathDates[`${i}`] === 'undefined' || props.deathDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.deathDates![`${i}`];\r\n const cartDeathTime = typeof props.deathTimes[`${i}`] !== 'undefined' ? props.deathTimes![`${i}`] : '';\r\n\r\n const cartSurgeryDate = typeof props.surgeryDates[`${i}`] === 'undefined' || props.surgeryDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.surgeryDates![`${i}`];\r\n\r\n const cartNameChange = typeof props.nameChanges[`${i}`] !== 'undefined' ? props.nameChanges![`${i}`] : '';\r\n const cartOldName = typeof props.oldNames[`${i}`] !== 'undefined' ? props.oldNames![`${i}`] : '';\r\n const cartOldNameArray = strSplit(cartOldName, ';');\r\n\r\n // If this is an event product, it will not have any sub product and it cannot be a renewable lamp.\r\n const cartQuantity = typeof props.quantities[`${i}`] !== 'undefined' ? cartEventArray.length > 1 ? 1 : props.quantities![`${i}`] : 1;\r\n const cartSubProductQuantity = typeof props.subProductQuantities[`${i}`] !== 'undefined' ? props.subProductQuantities[`${i}`] : 0;\r\n const cartHasSubProduct = props.subProduct != null && cartSubProductQuantity > 0;\r\n\r\n for (let r = cartOldNameArray.length - 1; r < 2; r++) {\r\n cartOldNameArray.push('');\r\n }\r\n\r\n let cartParentCartLineID = '';\r\n let cartEventAddedIndex = 0;\r\n let cartSubParentAdded = false;\r\n let cartSubProductAdded = false;\r\n\r\n while (cartEventAddedIndex < cartEventArray.length || (cartHasSubProduct && cartSubParentAdded && !cartSubProductAdded)) {\r\n let cartComment = uuidv4();\r\n\r\n while (!uuidValidateV4(cartComment)) {\r\n cartComment = uuidv4();\r\n }\r\n\r\n const addToCartResult = await cartState.addProductToCart({\r\n product: cartHasSubProduct && cartSubParentAdded ? props.subProduct : productToAdd,\r\n count: cartHasSubProduct && cartSubParentAdded ? cartSubProductQuantity : cartQuantity,\r\n availableQuantity: props.productAvailability![0].AvailableQuantity,\r\n additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\r\n enableStockCheck: false,\r\n isPriceKeyedIn: props.isPriceKeyedIn,\r\n customPrice: typeof props.customPriceAmount![`${i}`] !== 'undefined' ? props.customPriceAmount![`${i}`] : 0,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart\r\n });\r\n\r\n const cartLineProductID: string = String(cartState.cart.CartLines![cartState.cart.CartLines!.length - 1].ProductId!);\r\n const cartLineID: string = cartState.cart.CartLines![cartState.cart.CartLines!.length - 1].LineId!;\r\n\r\n const item: FormDetails = {\r\n CartLineID: cartLineID, CartID: cartState.cart.Id, CartLineComment: cartComment, ParentCartLineID: cartEventAddedIndex > 0 ? cartParentCartLineID : '',\r\n ProductID: cartLineProductID, EventID: cartEventIDArray[`${cartEventAddedIndex}`],\r\n EventName: cartEventArray[`${cartEventAddedIndex}`],\r\n SerialID: cartSerialId, SerialNumber: cartSerialNumber, SerialName: cartSerialName,\r\n Name_1: cartNameArray[0], Name_2: cartNameArray[1], Name_3: cartNameArray[2], Name_4: cartNameArray[3], Name_5: cartNameArray[4],\r\n Name_6: cartNameArray[5], Name_7: cartNameArray[6], Name_8: cartNameArray[7], Name_9: cartNameArray[8], Name_10: cartNameArray[9],\r\n Name_11: cartNameArray[10], Name_12: cartNameArray[11], Name_13: cartNameArray[12], Name_14: cartNameArray[13], Name_15: cartNameArray[14], Name_16: cartNameArray[15], Name_17: cartNameArray[16], Name_18: cartNameArray[17], Name_19: cartNameArray[18], Name_20: cartNameArray[19],\r\n Remarks: cartRemark, Message: cartMessageTemp,\r\n Category: cartCategory, DedicatedBy: cartDedicatedBy,\r\n HasTaxDeduction: cartHasTaxDeduction, Nric: cartNric,\r\n BuildingName: cartBuildingName, UnitNumber: cartUnitNumber, PostalCode: cartPostalCode, PhoneNumber: cartPhoneNumber, ChineseName: cartChineseName, Country: cartCountry,\r\n SchoolName: cartSchoolName, CompanyName: cartCompanyName,\r\n DonationOption: cartCollectionOption, BlessingOption: cartBlessingOption, LightOption: cartLightOption,\r\n ValidFrom: cartValidFrom, ValidTo: cartValidTo,\r\n DedicationPeriod: cartDedicationPeriod,\r\n StartDate: cartStartDate,\r\n Gender: cartGender,\r\n SurgeryDate: cartSurgeryDate,\r\n BirthDate: cartBirthDate, BirthTime: cartBirthTimes[0] ? cartBirthTimes[0] : '',\r\n BirthDate_2: cartBirthDates[1] ? cartBirthDates[1] : '', BirthTime_2: cartBirthTimes[1] ? cartBirthTimes[1] : '',\r\n DeathDate: cartDeathDate, DeathTime: cartDeathTime,\r\n DeceasedRelationship: cartDeceasedRelationship,\r\n NameChange: cartNameChange, \r\n OldName_1: cartOldNameArray[0], OldName_2: cartOldNameArray[1],\r\n NameNextKin: cartNameNextKin,\r\n ContactNumber: cartContactNumber,\r\n ContactNumberNextKin: cartContactNumbersNextKin,\r\n PassportNumber: cartPassportNumber,\r\n PassportExpiryDate: cartPassportExpiryDate,\r\n PassportIssuedDate: cartPassportIssuedDate,\r\n Consent: cartConsent,\r\n IsInsuranceIncluded: cartIsInsuranceIncluded\r\n };\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n if (cartEventAddedIndex === 0) {\r\n cartParentCartLineID = cartLineID;\r\n }\r\n\r\n let updateCart = cartState.cart;\r\n let updateCartLines: CartLine[] = cartState.cart.CartLines ? cartState.cart.CartLines : [];\r\n\r\n if (updateCartLines.length > 0) {\r\n updateCartLines![updateCartLines.length - 1].Comment = cartComment;\r\n\r\n await updateCartLinesAsync({ callerContext: props.context.actionContext }, updateCart.Id, updateCartLines);\r\n }\r\n\r\n let formDetails: FormDetails = {\r\n CartLineID: cartLineID, CartID: cartState.cart.Id, \r\n CartLineComment: cartComment, ParentCartLineID: cartEventAddedIndex > 0 ? cartParentCartLineID : '', \r\n ProductID: cartLineProductID, \r\n EventID: cartEventIDArray[`${cartEventAddedIndex}`], EventName: cartEventArray[`${cartEventAddedIndex}`], \r\n SerialID: cartSerialId, SerialNumber: cartSerialNumber, SerialName: cartSerialName, \r\n Name_1: cartNameArray[0], Name_2: cartNameArray[1], Name_3: cartNameArray[2], Name_4: cartNameArray[3], \r\n Name_5: cartNameArray[4], Name_6: cartNameArray[5], Name_7: cartNameArray[6], Name_8: cartNameArray[7], \r\n Name_9: cartNameArray[8], Name_10: cartNameArray[9], Name_11: cartNameArray[10], Name_12: cartNameArray[11], \r\n Name_13: cartNameArray[12], Name_14: cartNameArray[13], Name_15: cartNameArray[14], Name_16: cartNameArray[15], \r\n Name_17: cartNameArray[16], Name_18: cartNameArray[17], Name_19: cartNameArray[18], Name_20: cartNameArray[19], \r\n Remarks: cartRemark, Message: cartMessageTemp, Category: cartCategory, DedicatedBy: cartDedicatedBy, \r\n HasTaxDeduction: cartHasTaxDeduction, Nric: cartNric, \r\n BuildingName: cartBuildingName, UnitNumber: cartUnitNumber, \r\n PostalCode: cartPostalCode, PhoneNumber: cartPhoneNumber, ChineseName: cartChineseName, Country: cartCountry, \r\n SchoolName: cartSchoolName, CompanyName: cartCompanyName, \r\n DonationOption: cartCollectionOption, BlessingOption: cartBlessingOption, LightOption: cartLightOption, \r\n ValidFrom: cartValidFrom, ValidTo: cartValidTo, \r\n DedicationPeriod: cartDedicationPeriod, \r\n StartDate: cartStartDate,\r\n Gender: cartGender,\r\n SurgeryDate: cartSurgeryDate, \r\n BirthDate: cartBirthDate, BirthTime: cartBirthTimes[0] ? cartBirthTimes[0] : '', \r\n BirthDate_2: cartBirthDates[1] ? cartBirthDates[1] : '', BirthTime_2: cartBirthTimes[1] ? cartBirthTimes[1] : '', \r\n DeathDate: cartDeathDate, DeathTime: cartDeathTime, \r\n DeceasedRelationship: cartDeceasedRelationship, \r\n NameChange: cartNameChange, \r\n OldName_1: cartOldNameArray[0], OldName_2: cartOldNameArray[1],\r\n NameNextKin: cartNameNextKin,\r\n ContactNumber: cartContactNumber,\r\n ContactNumberNextKin: cartContactNumbersNextKin,\r\n PassportNumber: cartPassportNumber,\r\n PassportExpiryDate: cartPassportExpiryDate,\r\n PassportIssuedDate: cartPassportIssuedDate,\r\n Consent: cartConsent,\r\n IsInsuranceIncluded: cartIsInsuranceIncluded\r\n };\r\n\r\n let cartItem: CartItem = {\r\n Form: formDetails,\r\n IsValid: true,\r\n InvalidType: '',\r\n InCart: true,\r\n IsSubProduct: false\r\n };\r\n\r\n // Special case for a particular GP product using consecration form.\r\n if (!(!cartHasSubProduct || (cartHasSubProduct && !cartSubParentAdded))) {\r\n cartItem.Form.ProductID = String(props.subProduct.RecordId);\r\n cartItem.Form.ParentCartLineID = cartParentCartLineID;\r\n cartItem.Form.EventID = '';\r\n cartItem.Form.EventName = '';\r\n cartItem.Form.SerialID = '';\r\n cartItem.Form.SerialNumber = '';\r\n cartItem.Form.SerialName = '';\r\n cartItem.Form.Name_1 = cartNameArray[0];\r\n cartItem.Form.Name_2 = cartNameArray[1];\r\n cartItem.Form.Name_3 = '';\r\n cartItem.Form.Name_4 = '';\r\n cartItem.Form.Name_5 = '';\r\n cartItem.Form.Name_6 = '';\r\n cartItem.Form.Name_7 = '';\r\n cartItem.Form.Name_8 = '';\r\n cartItem.Form.Name_9 = '';\r\n cartItem.Form.Name_10 = '';\r\n cartItem.Form.Name_11 = '';\r\n cartItem.Form.Name_12 = '';\r\n cartItem.Form.Name_13 = '';\r\n cartItem.Form.Name_14 = '';\r\n cartItem.Form.Name_15 = '';\r\n cartItem.Form.Name_16 = '';\r\n cartItem.Form.Name_17 = '';\r\n cartItem.Form.Name_18 = '';\r\n cartItem.Form.Name_19 = '';\r\n cartItem.Form.Name_20 = '';\r\n cartItem.Form.Remarks = '';\r\n cartItem.Form.Message = '';\r\n cartItem.Form.Category = '';\r\n cartItem.Form.DedicatedBy = '';\r\n cartItem.Form.HasTaxDeduction = false;\r\n cartItem.Form.Nric = '';\r\n cartItem.Form.BuildingName = '';\r\n cartItem.Form.UnitNumber = '';\r\n cartItem.Form.PostalCode = '';\r\n cartItem.Form.PhoneNumber = '';\r\n cartItem.Form.Country = '';\r\n cartItem.Form.SchoolName = '';\r\n cartItem.Form.CompanyName = '';\r\n cartItem.Form.DonationOption = '';\r\n cartItem.Form.BlessingOption = '';\r\n cartItem.Form.LightOption = '';\r\n cartItem.Form.DedicationPeriod = '';\r\n cartItem.Form.DeathTime = '';\r\n cartItem.Form.NameChange = '';\r\n cartItem.Form.OldName_1 = '';\r\n cartItem.Form.OldName_2 = '';\r\n cartItem.Form.BirthDate_2 = '';\r\n cartItem.Form.BirthTime_2 = '';\r\n\r\n cartItem.IsSubProduct = true;\r\n\r\n cartSubProductAdded = true;\r\n }\r\n\r\n const result = await createOrUpdateCartline(props.context, cartItem);\r\n\r\n if (!result) {\r\n const errorMessageId = addToCartResult.errorDetails ? addToCartResult.errorDetails.ErrorResourceId ? addToCartResult.errorDetails.ErrorResourceId : '' : '';\r\n const errorMessageDetail = addToCartResult.errorDetails ? addToCartResult.errorDetails.LocalizedMessage ? addToCartResult.errorDetails.LocalizedMessage : '' : '';\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source createOrUpdateBTGPCartLineAsync', errorMessageId + ':' + errorMessageDetail, item);\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n \r\n setDisabled(false);\r\n }\r\n } else {\r\n const errorMessageId = addToCartResult.errorDetails ? addToCartResult.errorDetails.ErrorResourceId ? addToCartResult.errorDetails.ErrorResourceId : '' : '';\r\n const errorMessageDetail = addToCartResult.errorDetails ? addToCartResult.errorDetails.LocalizedMessage ? addToCartResult.errorDetails.LocalizedMessage : '' : '';\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source cartState.addProductToCart', errorMessageId + ':' + errorMessageDetail, item);\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n \r\n setDisabled(false);\r\n }\r\n\r\n if (cartEventAddedIndex < cartEventArray.length) {\r\n cartEventAddedIndex++;\r\n }\r\n\r\n if (cartHasSubProduct && !cartSubParentAdded) {\r\n cartSubParentAdded = true;\r\n }\r\n }\r\n }\r\n\r\n propagateResult(props);\r\n};\r\n\r\nconst uuidValidateV4 = (uuid: string): boolean => {\r\n return uuidValidate(uuid) && uuidVersion(uuid) == 4;\r\n};\r\n\r\nconst strSplit = (sentence: string, splitChar: string): string[] => {\r\n // let arrayPosition = 0;\r\n let oneWord = \"\";\r\n let newSentence = sentence + splitChar;\r\n let split = [];\r\n for (let j = 0; j < newSentence.length; j++) {\r\n if (newSentence[`${j}`] === splitChar) {\r\n split.push(oneWord);\r\n // arrayPosition++;\r\n oneWord = \"\";\r\n } else {\r\n oneWord += newSentence[`${j}`];\r\n }\r\n }\r\n return split;\r\n};\r\n\r\nconst AddToCartComponentActions = {\r\n onClick: onClick\r\n};\r\n\r\nconst AddToCart: React.FC = (props: IProductDetailsAddToCartComponentProps) => {\r\n const [disabled, setDisabled] = useState(false);\r\n const [modalOpen, setModalOpen] = useState(false);\r\n\r\n const onClickHandler = async (event: React.MouseEvent) => {\r\n await AddToCartComponentActions.onClick(event, props, setDisabled, setModalOpen);\r\n };\r\n\r\n const priceComponent = props.data.price ? (\r\n ) : '';\r\n\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'msc-add-to-cart',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: { product: props.data.product, price: props.data.price },\r\n dialogStrings: props.dialogStrings,\r\n imageSettings: props.imageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: props.quantity !== undefined ? props.quantity : 1,\r\n priceComponent: priceComponent,\r\n navigationUrl: props.navigationUrl,\r\n modalOpen: modalOpen,\r\n setModalOpen: setModalOpen,\r\n telemetryContent: props.telemetryContent\r\n };\r\n\r\n const renderModalPopup = ;\r\n const label = getLinkText(props);\r\n const payload = getPayloadObject(TelemetryEvent.AddToCart, props.telemetryContent!, label, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n \r\n \r\n );\r\n};\r\n\r\n// Set default props.\r\nAddToCart.defaultProps = { quantity: 1 };\r\n\r\nconst getLinkText = (props: IProductDetailsAddToCartComponentProps): string => {\r\n return shouldShowOutOfStock(props, false) ? props.outOfStockText : props.addToCartText;\r\n};\r\n\r\nconst addToCartError = (props: IProductDetailsAddToCartComponentProps): IProductDetailsAddToCartFailureResult | undefined => {\r\n const { data, productAvailability, isCustomPriceSelected, customPriceAmount, maximumKeyInPrice, minimumKeyInPrice, defaultMaximumKeyInPrice = 1000, defaultMinimumKeyInPrice = 1 } = props;\r\n\r\n if (!data || !data.product.RecordId) {\r\n // No product exists, won't be able to add to cart\r\n return { failureReason: 'EMPTYINPUT' };\r\n }\r\n\r\n if (data.product.Dimensions) {\r\n const missingDimensions = data.product.Dimensions.filter(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value));\r\n\r\n if (missingDimensions.length > 0) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n return { failureReason: 'MISSINGDIMENSION', missingDimensions: missingDimensions };\r\n }\r\n }\r\n\r\n if (shouldShowOutOfStock(props, true)) {\r\n const availableQuantity = (productAvailability && productAvailability.AvailableQuantity) || 0;\r\n const stockLeft = Math.max(availableQuantity, 0);\r\n\r\n return { failureReason: 'OUTOFSTOCK', stockLeft: stockLeft };\r\n }\r\n\r\n // When Custom price is selected, if there is no keyed-in price or keyed-in price is out of limit, should return error.\r\n if (isCustomPriceSelected && (\r\n !customPriceAmount || customPriceAmount[0] > (maximumKeyInPrice || defaultMaximumKeyInPrice) || customPriceAmount[0] < (minimumKeyInPrice || defaultMinimumKeyInPrice))) {\r\n return { failureReason: 'INVALIDCUSTOMAMOUNT' };\r\n }\r\n\r\n // Only allow adding to cart if not showing out of stock\r\n return undefined;\r\n};\r\n\r\nconst shouldShowOutOfStock = (props: IProductDetailsAddToCartComponentProps, includeCurrentQuantity: boolean): boolean => {\r\n if (props.context.app.config.enableStockCheck === undefined || props.context.app.config.enableStockCheck === false\r\n || props.isLoading || props.isUpdatingDimension || props.isLoadingDeliveryOptions || props.isUpdatingDeliveryOptions || props.isAddServiceItemToCart) {\r\n // Out of stock turn off, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (!props.data || !props.data.product.RecordId) {\r\n // No product exists, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also don't show out of stock\r\n return false;\r\n }\r\n }\r\n const includedQuantityNumber = includeCurrentQuantity && props.quantity ? props.quantity : 1;\r\n\r\n return (props.productAvailability\r\n && props.productAvailability.AvailableQuantity !== undefined\r\n && props.productAvailability.AvailableQuantity >= includedQuantityNumber)\r\n ? false : true;\r\n};\r\n\r\nconst isIntermediateState = (props: IProductDetailsAddToCartComponentProps): boolean => {\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n return false;\r\n }\r\n }\r\n\r\n if (!props.isLoading && !props.isUpdatingDimension && !props.isLoadingDeliveryOptions && !props.isUpdatingDeliveryOptions) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst propagateResult = (props: IProductDetailsAddToCartComponentProps): void => {\r\n if (props.onAdd) {\r\n props.onAdd();\r\n }\r\n};\r\n\r\nconst propagateError = (props: IProductDetailsAddToCartComponentProps, result: IProductDetailsAddToCartFailureResult): void => {\r\n if (props.onError) {\r\n props.onError(result);\r\n }\r\n};\r\n\r\n// @ts-ignore\r\nexport const ProductDetailsAddToCartComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'AddToCart',\r\n { component: AddToCart, ...AddToCartComponentActions }\r\n);","/* tslint:disable: no-duplicate-imports */\r\nimport { IAddToCartFailureResult } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { OrgUnitLocation, ProductAvailableQuantity , ProductDimension, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductDetailsBtrtsBuyboxResources } from '../component/components-interfaces-definition';\r\n\r\nexport function getQuantityError(stockLeft: number | undefined, resources: IProductDetailsBtrtsBuyboxResources): string | undefined {\r\n if (!stockLeft || stockLeft <= 0) {\r\n return resources.errorMessageOutOfStock;\r\n } else if (stockLeft === 1) {\r\n return resources.errorMessageOutOfRangeOneLeft;\r\n } else {\r\n return resources.errorMessageOutOfRangeFormat.replace('{numLeft}', stockLeft.toString());\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:cyclomatic-complexity\r\nexport function getGenericDonationsError(\r\n result: IAddToCartFailureResult,\r\n cart: ICartState | undefined,\r\n resources: IProductDetailsBtrtsBuyboxResources,\r\n context: ICoreContext>,\r\n product: SimpleProduct | undefined,\r\n productAvailability: ProductAvailableQuantity | undefined,\r\n location: OrgUnitLocation | undefined)\r\n : string | undefined {\r\n if (result.failureReason === 'EMPTYINPUT') {\r\n return resources.addedToCartFailureMessage;\r\n } else if (result.failureReason === 'CARTACTIONFAILED') {\r\n if (result.cartActionResult && result.cartActionResult.substatus === 'MAXQUANTITY') {\r\n // get the quantity of the product in cart\r\n let elementFoundAt:number = -1;\r\n const productIdToFind = product?.RecordId;\r\n\r\n for (let i = 0; i < cart!.cart.CartLines!.length; i++) {\r\n if (cart!.cart.CartLines![`${i}`].ProductId === productIdToFind &&\r\n (cart!.cart.CartLines![`${i}`].DeliveryMode || '') === (location && context.actionContext.requestContext.channel?.PickupDeliveryModeCode || '') &&\r\n (cart!.cart.CartLines![`${i}`].FulfillmentStoreId || '') === (location?.OrgUnitNumber || '')) {\r\n elementFoundAt = i;\r\n\r\n break;\r\n }\r\n }\r\n\r\n let curQuantity: number = 0;\r\n\r\n if (elementFoundAt !== -1) {\r\n const cartLineToUpdate = {...cart!.cart.CartLines![`${elementFoundAt}`]};\r\n curQuantity = cartLineToUpdate.Quantity || 0;\r\n }\r\n\r\n // get the quantity limit for the product\r\n const maxQuantityForCartLineItem = context.app.config.maxQuantityForCartLineItem;\r\n const availableQty = productAvailability?.AvailableQuantity;\r\n\r\n let quantityLimit: number;\r\n\r\n if (maxQuantityForCartLineItem === undefined && availableQty === undefined) {\r\n quantityLimit = 10;\r\n } else if (availableQty === undefined) {\r\n quantityLimit = maxQuantityForCartLineItem;\r\n } else if (maxQuantityForCartLineItem === undefined) {\r\n quantityLimit = availableQty;\r\n } else {\r\n quantityLimit = Math.min(maxQuantityForCartLineItem, availableQty);\r\n }\r\n\r\n return resources.maxQuantityLimitText.replace('{curQuantity}', curQuantity.toString()).replace('{maxQuantity}', quantityLimit.toString());\r\n } else if (result.cartActionResult && result.cartActionResult.substatus === 'QUANTITYLIMITS') {\r\n return result.cartActionResult?.errorDetails?.LocalizedMessage;\r\n }\r\n\r\n return resources.addedToCartFailureMessage;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function getConfigureDonationsErrors(result: ProductDimension[] | undefined, resources: IProductDetailsBtrtsBuyboxResources, isGiftCard?: Boolean): { [configureId: string]: string | undefined } {\r\n if (!result) {\r\n return {};\r\n }\r\n\r\n const dimensions: { [configureId: string]: string | undefined } = {};\r\n\r\n result.forEach(dimension => {\r\n dimensions[dimension.DimensionTypeValue] = getDimensionDonationsErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\r\n });\r\n\r\n return dimensions;\r\n}\r\n\r\nexport function getDimensionDonationsErrorString(dimensionTypeValue: number, resources: IProductDetailsBtrtsBuyboxResources, isGiftCard?: Boolean): string {\r\n switch (dimensionTypeValue) {\r\n case 1: // ProductDimensionType.Color\r\n return resources.productDimensionTypeColorErrorMessage;\r\n case 2: // ProductDimensionType.Configuration\r\n return resources.productDimensionTypeConfigurationErrorMessage;\r\n case 3: // ProductDimensionType.Size\r\n return resources.productDimensionTypeSizeErrorMessage;\r\n case 4: // ProductDimensionType.Style\r\n return isGiftCard ? resources.productDimensionTypeAmountErrorMessage : resources.productDimensionTypeStyleErrorMessage;\r\n default:\r\n return '';\r\n }\r\n}","import React, { useState, useEffect } from 'react';\r\n\r\nimport { Alert } from '@msdyn365-commerce-modules/utilities';\r\nimport { IAddToCartFailureResult } from '@msdyn365-commerce/components';\r\nimport { IImageSettings } from '@msdyn365-commerce/core';\r\n\r\nimport { getConfigureDonationsErrors, getGenericDonationsError, getQuantityError } from '../utilities/btrts-donations-error-utilities';\r\nimport { SimpleProduct, ProductPrice, ProductAvailableQuantity, ProductDeliveryOptions, ProductWarehouseInventoryAvailability } from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductInventoryInformation, FinitePromiseQueue, FinitePromiseQueueError, IPromiseQueue } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { ProductDetailsAddToCartComponent } from './ecomm-form-add-to-cart-source.component';\r\n\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\n\r\nimport {\r\n IProductDetailsAddtoCartCallbacks,\r\n IProductDetailsAddToCartButtonProps,\r\n IProductDetailsBtrtsBuyboxResources,\r\n IProductDetailsErrorState,\r\n IProductDetailsErrorBlockProps,\r\n IProductDetailsProductListState,\r\n} from './components-interfaces-definition';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nexport const ProductDetailsAddtoCartButton: React.FC = ({\r\n product, simpleProductList, productsAvailability, productPriceList, cart, resources, context, config, localeCode, telemetryContent, isCustomPriceSelected, keyInPriceAmount, isPriceKeyedIn, cartAdded, matchingCartItems, events, eventIDs, serialIds, serialNumbers, serialNames, names, dedicatedBy, categories, messages, remarks, collectionOptions, hasTaxDeductions, nrics, buildingNames, unitNumbers, postalCodes, phoneNumbers,chineseNames, birthDates, birthTimes, schoolNames, blessingOptions, lightOptions, validFroms, validTos, dedicationPeriods, startDates, genders, countries, companyNames, deceasedRelationships, surgeryDates, deathDates, deathTimes, nameChanges, oldNames, quantities, subProduct, subProductQuantities, disabled, isEditMode, nameNextKins, contactNumbers, contactNumbersNextKin, passportNumbers, passportExpiryDates, passportIssuedDates,consents, isInsuranceIncluded }: any) => {\r\n const [callbackState, setCallBackState] = useState({\r\n quantity: 1,\r\n min: undefined,\r\n max: undefined,\r\n errorState: {\r\n configureErrors: {},\r\n quantityError: '',\r\n customAmountError: '',\r\n otherError: '',\r\n errorHost: 'ADDTOCART'\r\n },\r\n selectedProduct: undefined,\r\n productAvailableQuantity: undefined,\r\n productPrice: undefined,\r\n productDeliveryOptions: undefined,\r\n modalOpen: undefined,\r\n isUpdatingDimension: undefined,\r\n isUpdatingDeliveryOptions: undefined,\r\n isServiceItem: undefined,\r\n isPriceKeyedIn: undefined,\r\n keyInPriceAmount: undefined,\r\n isCustomPriceSelected: undefined\r\n });\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=240&h=240&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const defaultMinimumKeyInPrice = config.minimumKeyInPrice;\r\n const defaultMaximumKeyInPrice = config.maximumKeyInPrice;\r\n\r\n let dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(2);\r\n let simpleProductValue: SimpleProduct = (simpleProductList.length > 0 ? simpleProductList[0] : []);\r\n let productPrice: ProductPrice = productPriceList.filter((record: ProductPrice) => product.RecordId === record.ProductId);\r\n let cartValue: ICartState = cart;\r\n let dimensions: { [id: number]: string } = {};\r\n let id = product['RecordId'];\r\n let typeName = 'ecomm-product-details-form';\r\n let isLoadingDeliveryOptions = false;\r\n let isUpdatingDeliveryOptions = false;\r\n let isUpdatingDimension = false;\r\n let maximumKeyInPrice: number | undefined;\r\n let minimumKeyInPrice: number | undefined;\r\n let isEmailDelivery = false;\r\n let isServiceItem = Number(callbackState.keyInPriceAmount) == 0 ? true : false;\r\n let isOrderQuantityLimitsFeatureEnabled = false;\r\n let productAvailability: ProductAvailableQuantity = productsAvailability?.filter((record: ProductWarehouseInventoryAvailability) => product.RecordId === record.ProductId).map((elem: ProductWarehouseInventoryAvailability) => {\r\n return {\r\n ProductId: elem.ProductId,\r\n AvailableQuantity: elem.TotalAvailable,\r\n UnitOfMeasure: 'Unit',\r\n ExtensionProperties: []\r\n };\r\n });\r\n\r\n const dialogStrings = {\r\n goToCartText: resources.buyBoxGoToCartText,\r\n continueShoppingText: resources.buyBoxContinueShoppingText,\r\n headerItemOneText: resources.buyBoxSingleItemText,\r\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\r\n headerMessageText: resources.buyBoxHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n\r\n let addToCartCallbacks: IProductDetailsAddtoCartCallbacks = {\r\n updateQuantity: (newQuantity: number): boolean => {\r\n const errorStateVal = { ...callbackState.errorState };\r\n errorStateVal.quantityError = undefined;\r\n errorStateVal.otherError = undefined;\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n quantity: newQuantity,\r\n errorState: errorStateVal\r\n })\r\n );\r\n return true;\r\n },\r\n updateErrorState: (newErrorState: IProductDetailsErrorState): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n errorState: newErrorState\r\n })\r\n );\r\n },\r\n updateSelectedProduct: (\r\n newSelectedProduct: SimpleProduct,\r\n newInventory: IProductInventoryInformation | undefined,\r\n newPrice: ProductPrice | undefined,\r\n newDeliveryOptions: ProductDeliveryOptions | undefined\r\n ): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n selectedProduct: newSelectedProduct,\r\n productAvailableQuantity: newInventory,\r\n productDeliveryOptions: newDeliveryOptions\r\n }));\r\n // _updatePrice(newPrice);\r\n },\r\n dimensionSelectedAsync: (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\r\n dimensions[`${selectedDimensionId}`] = selectedDimensionValueId;\r\n return dimensionUpdateQueue.enqueue(() => {\r\n // Return Promise, just temporary.\r\n return new Promise(r => r());// _updateDimensions();\r\n }).catch((reason: any) => { // tslint:disable-line:no-any\r\n // Ignore discarded processes.\r\n if (reason !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\r\n throw reason;\r\n }\r\n });\r\n },\r\n getDropdownName: (dimensionType: number, resource: IProductDetailsBtrtsBuyboxResources): string => {\r\n return 'getDropDownName';\r\n // return this._getDropdownName(dimensionType, resources);\r\n },\r\n changeModalOpen: (isModalOpen: boolean): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n modalOpen: isModalOpen\r\n }));\r\n },\r\n changeUpdatingDimension: (isUpdDimension: boolean): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n isUpdatingDimension: isUpdDimension\r\n }));\r\n },\r\n /**\r\n * Update isUpdatingDeliveryOptions state.\r\n *\r\n * @param isUpdatingDeliveryOptions - The status of updating delivery options.\r\n */\r\n changeUpdatingDeliveryOptions: (isUpdDeliveryOptions: boolean): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n isUpdatingDeliveryOptions: isUpdDeliveryOptions\r\n }));\r\n },\r\n updateKeyInPrice: (customPrice: number): void => {\r\n const errorStateVal = { ...callbackState.errorState };\r\n errorStateVal.customAmountError = undefined;\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n isPriceKeyedIn: true,\r\n keyInPriceAmount: customPrice,\r\n errorState: errorStateVal\r\n }));\r\n // this._updatePrice(this.state.productPrice, customPrice);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n let simpleProduct: SimpleProduct = simpleProductValue;\r\n let productPriceVal: ProductPrice = productPriceList.filter((record: ProductPrice) => product.RecordId === record.ProductId);\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n selectedProduct: simpleProduct,\r\n productPrice: productPriceVal[0]\r\n }));\r\n }, []);\r\n\r\n const onAddToCartFailed = async (result: IAddToCartFailureResult) => {\r\n let quantityErrorForState: string | undefined;\r\n let customAmountErrorForState: string | undefined;\r\n let cartObj: ICartState = (await cart);\r\n let otherErrorForState: string | undefined = getGenericDonationsError(result, cartObj, resources, context, simpleProductValue, productAvailability[0], undefined);\r\n\r\n if (result.failureReason === 'OUTOFSTOCK') {\r\n quantityErrorForState = result.failureReason === 'OUTOFSTOCK' ? getQuantityError(result.stockLeft, resources) : undefined;\r\n } else if (result.failureReason === 'CARTACTIONFAILED' && result.cartActionResult && (result.cartActionResult.substatus === 'MAXQUANTITY' || result.cartActionResult.substatus === 'QUANTITYLIMITS')) {\r\n quantityErrorForState = getGenericDonationsError(result, cartObj, resources, context, product, productsAvailability, undefined);\r\n\r\n // Prevent error duplication in otherError and quantityError.\r\n otherErrorForState = undefined;\r\n }\r\n\r\n if (result.failureReason === 'INVALIDCUSTOMAMOUNT') {\r\n if (callbackState.keyInPriceAmount === undefined || callbackState.keyInPriceAmount[0] < (minimumKeyInPrice || defaultMinimumKeyInPrice)) {\r\n const formatedAmountLimit = context.cultureFormatter.formatCurrency(minimumKeyInPrice || defaultMinimumKeyInPrice);\r\n\r\n customAmountErrorForState = resources.invalidSmallCustomAmountText.replace('{minAmount}', formatedAmountLimit);\r\n } else if (callbackState.keyInPriceAmount[0] > (maximumKeyInPrice || defaultMaximumKeyInPrice)) {\r\n const formatedAmountLimit = context.cultureFormatter.formatCurrency(maximumKeyInPrice || defaultMaximumKeyInPrice);\r\n\r\n customAmountErrorForState = resources.invalidLargeCustomAmountText.replace('{maxAmount}', formatedAmountLimit);\r\n }\r\n }\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n errorState: {\r\n errorHost: 'ADDTOCART',\r\n quantityError: quantityErrorForState,\r\n configureErrors: result.failureReason === 'MISSINGDIMENSION' ? getConfigureDonationsErrors(result.missingDimensions, resources, product?.IsGiftCard) : {},\r\n customAmountError: customAmountErrorForState,\r\n otherError: otherErrorForState\r\n }\r\n })\r\n );\r\n };\r\n\r\n const onAddToCartSuccess = () => {\r\n if (callbackState.errorState?.quantityError !== '' || callbackState.errorState?.customAmountError !== '' || callbackState.errorState?.otherError !== '') {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n errorState: {\r\n configureErrors: {},\r\n quantityError: '',\r\n customAmountError: '',\r\n otherError: '',\r\n errorHost: 'ADDTOCART'\r\n }\r\n }));\r\n }\r\n\r\n // Updating state variable.\r\n cartAdded();\r\n };\r\n\r\n return (\r\n
\r\n {product && (\r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport const PrductDetailsAddtoCartErrorBlock: React.FC = ({ showError, configureErrors, quantityError, customAmountError, otherError, resources }) => {\r\n let errorMessages: (string | undefined)[] = [];\r\n\r\n errorMessages = Object.values(configureErrors).filter(message => message !== undefined);\r\n\r\n if (quantityError) {\r\n errorMessages.push(quantityError);\r\n }\r\n\r\n if (customAmountError) {\r\n errorMessages.push(customAmountError);\r\n }\r\n\r\n if (otherError) {\r\n errorMessages.push(otherError);\r\n }\r\n\r\n return (\r\n 0} color='danger' assertive={true} aria-label={resources.buyboxErrorMessageHeader} >\r\n \r\n {errorMessages.map((message, index) => {\r\n return
{message}
;\r\n })}\r\n
\r\n );\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { AsyncResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst AmountDeceasedNameForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackPrice, callbackName, callbackCategory, callbackDedicatedBy,\r\n callbackNamesEntered, callbackPricesEntered,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n var minDonationNumberOption = Number(formScheme[0].field_options![0]);\r\n var minDonationstringOption = formScheme[0].field_options![0];\r\n\r\n const [customPrice, setCustomPrice] = useState([minDonationNumberOption]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [donationValue, setDonationValue] = useState([minDonationstringOption]);\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.amountDeceasedNameForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n const deceasedNames = formScheme.find(form => form.field_name === 'name')!.field_number3!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangePriceValue = (event: any, index: number) => {\r\n _setDonationValueArray(event.target.value, index);\r\n\r\n if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n _setInputValueArray('0', index);\r\n _setCustomPriceArray(0, index);\r\n } else {\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n _setInputValueArray('', index);\r\n }\r\n };\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n\r\n dedicatedNameArray[`${index}`] = '';\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n };\r\n\r\n const _setCustomPriceArray = (price: number, index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n\r\n while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n customPriceArray.push(minDonationNumberOption);\r\n }\r\n\r\n customPriceArray[`${index}`] = price;\r\n\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackPrice(customPriceArray);\r\n };\r\n\r\n const _setDonationValueArray = (value: string, index: number) => {\r\n const donationValueArray = donationValue.slice();\r\n\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n while (typeof donationValueArray[`${index}`] === 'undefined' || donationValueArray[`${index}`] === \"0\") {\r\n donationValueArray.push(element!.field_options![0]);\r\n }\r\n\r\n donationValueArray[`${index}`] = value !== '' ? value : element!.field_options![0];\r\n\r\n setDonationValue(donationValueArray);\r\n };\r\n\r\n const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _setInputValue = (event: any, index: number) => {\r\n if (isNumeric(event.target.value)) {\r\n _setInputValueArray(event.target.value, index);\r\n _setDonationValueArray(resource.otherLabel[`${localeCode}`], index);\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n }\r\n };\r\n\r\n const _setInputValueArray = (value: string, index: number) => {\r\n let inputValueArray = inputValue.slice();\r\n\r\n while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n inputValueArray.push('');\r\n }\r\n\r\n inputValueArray[`${index}`] = value;\r\n\r\n setInputValue(inputValueArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n // _setCustomPriceArray(0, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n let dedicatedByArray = dedicatedBy.slice();\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n dedicatedByArray[`${index}`] = name;\r\n setDedicatedBy(dedicatedByArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const donationValueArray = donationValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n customPriceArray.push(parseInt(element!.field_options![0]));\r\n donationValueArray.push(element!.field_options![0]);\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setCustomPrice(customPriceArray);\r\n setDonationValue(donationValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const donationValueArray = donationValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof donationValueArray[`${index}`] !== 'undefined') {\r\n if (donationValueArray.length > 1) {\r\n donationValueArray.splice(index, 1);\r\n } else {\r\n donationValueArray[0] = element!.field_options![0];\r\n customPriceArray[0] = minDonationNumberOption;\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setDonationValue(donationValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingDonationValue: string[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n switch (customPriceAmount) {\r\n case 0:\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationValue.push(minDonationString);\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 2:\r\n existingDonationValue.push('2');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 5:\r\n existingDonationValue.push('5');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 10:\r\n existingDonationValue.push('10');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 50:\r\n existingDonationValue.push('50');\r\n existingInputValue.push('');\r\n break;\r\n\r\n default:\r\n if (customPriceAmount) {\r\n existingDonationValue.push(resource.otherLabel[`${localeCode}`]);\r\n existingInputValue.push(customPriceAmount.toString());\r\n } else {\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationValue.push(minDonationString);\r\n existingInputValue.push('');\r\n }\r\n break;\r\n }\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCustomPriceAmount.push(customPriceAmount);\r\n existingRadioValue.push(itemCategory);\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(formItems[`${i}`]['dedicatedBy']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n existingDonationValue.push(minDonationString); \r\n existingCustomPriceAmount.push(minDonationvalue); \r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n existingInputValue.push('');\r\n }\r\n\r\n setDonationValue(existingDonationValue);\r\n setInputValue(existingInputValue);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setRadioValue(existingRadioValue);\r\n \r\n callbackPrice(existingCustomPriceAmount);\r\n callbackCategory(existingRadioValue);\r\n\r\n callbackPricesEntered(true);\r\n }, [formItems]);\r\n\r\n const _buildAmountField = (element: IField, idx: number): JSX.Element | null => {\r\n if (element.field_options) {\r\n return (\r\n
\r\n
\r\n

{formLabels.amount}

\r\n {element.field_options.map((option: string) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number, isDeceased: boolean): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n {isDeceased &&

{formLabels.deceasedName}

}\r\n {!isDeceased &&

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

}\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildDedicatedBy = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'amount') {\r\n return (\r\n
\r\n {_buildAmountField(element, idx)}\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames, radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]))}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames, radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]))}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildDedicatedBy(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default AmountDeceasedNameForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackPhoneNumber: any;\r\n callbackNamesEntered?: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CategoryNamesAddressForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackEvent, callbackEventID, callbackName, callbackCategory, callbackBuilding, callbackUnitNumber,\r\n callbackPostalCode, callbackPhoneNumber, callbackNamesEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [eventNames, setEventNames] = useState(['']);\r\n const [eventIDs, setEventIDs] = useState(['']);\r\n const [categories, setCategories] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [names, setNames] = useState(['']);\r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n\r\n const formLabels = resource.categoryNamesAddressForm[`${localeCode}`];\r\n\r\n const namesCount = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n const companyCount = formScheme.find(form => form.field_name === 'name')!.field_number2!;\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeCategory = (event: any, index: number) => {\r\n _setCategory(event.target.value, index);\r\n\r\n const namesArray = names.slice();\r\n\r\n let value = namesArray[`${index}`];\r\n\r\n if (value) {\r\n const count = event.target.value === resource.categoryFamilyLabel[`${localeCode}`] ? namesCount : companyCount;\r\n\r\n let valueArray = value.split(';');\r\n\r\n if (valueArray.length < count) {\r\n value += ';'.repeat(count - valueArray.length - 1);\r\n } else { \r\n while (valueArray.length > count) {\r\n valueArray.pop();\r\n }\r\n\r\n value = valueArray.join(';');\r\n }\r\n\r\n namesArray[`${index}`] = value;\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n }\r\n\r\n const _setCategory = (value: string, index: number) => {\r\n const valueArray = categories.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setCategories(valueArray);\r\n\r\n callbackCategory(valueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _formatNameInput = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleNames = names[`${index}`];\r\n\r\n if (inputMultipleNames) {\r\n if (!inputMultipleNames.includes(';')) {\r\n inputMultipleNames += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const newValues = inputMultipleNames.split(';');\r\n\r\n newValues[`${nameIndex}`] = inputName;\r\n inputName = newValues.join(';');\r\n }\r\n \r\n _setName(inputName, index);\r\n }\r\n\r\n const _setName = (name: string, index: number) => {\r\n const ceremonyNameArray = names.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setNames(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(valueArray, postalCodes);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, valueArray);\r\n }\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n if (!valueArray || valueArray.length === 0) {\r\n checked = false;\r\n }\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingNamesArray: string[], postalCodesArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingNamesArray.length; ++i) {\r\n result = result && buildingNamesArray[`${i}`] !== '' && postalCodesArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n const categoriesArray = categories.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n\r\n eventNamesArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n eventIDsArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n namesArray.push('');\r\n categoriesArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n } else {\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setNames(namesArray);\r\n setCategories(categoriesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackName(namesArray);\r\n callbackCategory(categoriesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n callbackNamesEntered(false);\r\n \r\n _checkAddressEntered(buildingNamesArray, postalCodesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n \r\n formItems.splice(index, 1);\r\n \r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n const categoriesArray = categories.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n\r\n if (typeof eventNamesArray[`${index}`] !== 'undefined') {\r\n if (eventNamesArray.length > 1) {\r\n eventNamesArray.splice(index, 1);\r\n } else {\r\n eventNamesArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof eventIDsArray[`${index}`] !== 'undefined') {\r\n if (eventIDsArray.length > 1) {\r\n eventIDsArray.splice(index, 1);\r\n } else {\r\n eventIDsArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof categoriesArray[`${index}`] !== 'undefined') {\r\n if (categoriesArray.length > 1) {\r\n categoriesArray.splice(index, 1);\r\n } else {\r\n categoriesArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setNames(namesArray);\r\n setCategories(categoriesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackName(namesArray);\r\n callbackCategory(categoriesArray);\r\n callbackAddressEntered(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n\r\n _checkNameEntered(namesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const namesArray: string[] = [];\r\n const categoriesArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const phoneNumbersArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n const itemNameCount = itemCategory === resource.categoryFamilyLabel[`${localeCode}`] ? namesCount : companyCount;\r\n\r\n let itemName = '';\r\n\r\n itemNames.forEach((name, index) => itemName += index != 0 && index < itemNameCount ? ';' + name : name);\r\n\r\n eventNamesArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n eventIDsArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n namesArray.push(itemName);\r\n categoriesArray.push(itemCategory);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n phoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n\r\n _checkNameEntered(namesArray);\r\n } else {\r\n eventNamesArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n eventIDsArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n categoriesArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n buildingNamesArray.push(_initBuildingField());\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n } else {\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n }\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setCategories(categoriesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackCategory(categoriesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray);\r\n }, [formItems]);\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof categories[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _formatNameInput(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildAddressField = (formScheme: IField[], idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n

{formLabels.addressCountryPrompt}

\r\n
\r\n
\r\n\r\n
\r\n

{formLabels.addressPhone}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {categories[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && namesCount > 0 && _buildNameGroup(idx, namesCount)}\r\n {categories[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyCount > 0 && _buildNameGroup(idx, companyCount)}\r\n {_buildAddressField(formScheme, idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CategoryNamesAddressForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackNamesEntered?: any;\r\n callbackCollection: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CategoryNamesCollectionForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackCategory, callbackNamesEntered, callbackCollection, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [optionValue, setOptionValue] = useState([resource.optionCollectionLabel[`${localeCode}`]]);\r\n\r\n const formLabels = resource.categoryNamesCollectionForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n\r\n if (existingCeremonyName) {\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n \r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n const _onChangeOptionValue = (event: any, index: number) => {\r\n _setOptionValueArray(event.target.value, index);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n \r\n callbackCategory(radioValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (inputMultipleName) {\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n }\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n let valueArray = ceremonyName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkInputEntered(valueArray);\r\n }\r\n\r\n const _setOptionValueArray = (value: string, index: number) => {\r\n const valueArray = optionValue.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.optionCollectionLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setOptionValue(valueArray);\r\n\r\n callbackCollection(valueArray);\r\n }\r\n\r\n const _checkInputEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n if (!valueArray || valueArray.length === 0) {\r\n checked = false;\r\n }\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const optionValueArray = optionValue.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n optionValueArray.push(resource.optionCollectionLabel[`${localeCode}`]);\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setRadioValue(categoryValueArray);\r\n setOptionValue(optionValueArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackCategory(categoryValueArray);\r\n callbackCollection(optionValueArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const categoryValueArray = radioValue.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkInputEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingOptionValue: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = companyNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingCeremonyName.push(itemName);\r\n existingRadioValue.push(itemCategory);\r\n existingOptionValue.push(formItems[`${i}`]['donationOption']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n\r\n callbackName(existingCeremonyName);\r\n\r\n _checkInputEntered(existingCeremonyName);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n existingOptionValue.push(resource.optionCollectionLabel[`${localeCode}`]);\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n setRadioValue(existingRadioValue);\r\n setOptionValue(existingOptionValue);\r\n\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n callbackCategory(existingRadioValue);\r\n callbackCollection(existingOptionValue);\r\n }, [formItems])\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildOptionField = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.option}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n {_buildOptionField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CategoryNamesCollectionForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackCategory, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n\r\n const formLabels = resource.categoryNamesForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n if (existingCeremonyName) {\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n }\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n \r\n if (inputMultipleName) {\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n }\r\n \r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingRadioValue: string[] = [];\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = noOfNames;\r\n\r\n if (itemCategory !== resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = companyNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingRadioValue.push(itemCategory);\r\n existingCeremonyName.push(itemName);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n\r\n callbackName(existingCeremonyName);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n setRadioValue(existingRadioValue);\r\n\r\n callbackCategory(existingRadioValue);\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n }, [formItems]);\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map(nameIndex => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CategoryNamesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport Select from 'react-select'\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent: any;\r\n callbackEventID: any;\r\n callbackName: any;\r\n callbackEventsSelected: any;\r\n callbackNamesEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CeremonyForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackEventsSelected, callbackNamesEntered,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [eventNames, setEventNames] = useState(['']);\r\n const [eventIDs, setEventIDs] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.ceremonyForm[`${localeCode}`];\r\n const namesCount = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = names[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(namesCount - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = names.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setNames(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const selectValueArray = eventNames.slice();\r\n const eventIDArray = eventIDs.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setEventNames(selectValueArray);\r\n setEventIDs(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (eventNames.length > 0) {\r\n const selectValueArray = eventNames.slice();\r\n const eventIDArray = eventIDs.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (ceremonyEventArray: string[]) => {\r\n let eventsSelected = ceremonyEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyEventArray.length; i++) {\r\n if (ceremonyEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false; break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = ceremonyNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkNumberOfSelectedEvent = (index: number): number => {\r\n const count = eventNames.length > 0 && typeof eventNames[`${index}`] !== 'undefined' ? eventNames[`${index}`].split(';').length : 1;\r\n\r\n return count;\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n namesArray.push('');\r\n\r\n setMultiplers(multipliersArray);\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setNames(namesArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackName(namesArray);\r\n\r\n callbackEventsSelected(false);\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n\r\n formItems.splice(index, 1);\r\n \r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof eventNamesArray[`${index}`] !== 'undefined') {\r\n if (eventNamesArray.length > 1) {\r\n eventNamesArray.splice(index, 1);\r\n } else {\r\n eventNamesArray[0] = '';\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n }\r\n\r\n if (typeof eventIDsArray[`${index}`] !== 'undefined') {\r\n if (eventIDsArray.length > 1) {\r\n eventIDsArray.splice(index, 1);\r\n } else {\r\n eventIDsArray[0] = '';\r\n }\r\n\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackEventID(eventIDsArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n _checkNamesEntered(namesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const namesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < namesCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(itemName);\r\n }\r\n \r\n setNames(namesArray);\r\n \r\n callbackName(namesArray);\r\n\r\n _checkNamesEntered(namesArray);\r\n } else {\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n }, [formItems])\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, namesCount: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(namesCount)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map(nameIndex => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? (nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1))) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_type === 'dropdown') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {namesCount > 0 && _buildNameGroup(idx, namesCount)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! * _checkNumberOfSelectedEvent(idx)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default CeremonyForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?:any;\r\n callbackContactNumber?:any;\r\n callbackEventID?:any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n}\r\n\r\nconst CoursesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo,productEvents,callbackEventID,callbackEvent , callbackMultiplier, callbackEventsSelected}) => {\r\n\r\n const [customPrice, setCustomPrice] = useState([0]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n \r\n\r\n\r\n const formLabels = resource.coursesForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n// const _onChangePriceValue = (event: any, index: number) => {\r\n// // _setRadioValueArray(event.target.value, index);\r\n\r\n// if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n// _setInputValueArray('0', index);\r\n// _setCustomPriceArray(0, index);\r\n// } else {\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// _setInputValueArray('', index);\r\n// }\r\n// };\r\n\r\n// const _setCustomPriceArray = (price: number, index: number) => {\r\n// const customPriceArray = customPrice.slice();\r\n\r\n// while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n// customPriceArray.push(0);\r\n// }\r\n\r\n// customPriceArray[`${index}`] = price;\r\n\r\n// setCustomPrice(customPriceArray);\r\n\r\n// callbackPrice(customPriceArray);\r\n\r\n// _checkPricesEntered(customPriceArray);\r\n// };\r\n\r\n// const _setRadioValueArray = (value: string, index: number) => {\r\n// const donationValueArray = donationAmount.slice();\r\n\r\n// while (typeof donationValueArray[`${index}`] === 'undefined') {\r\n// donationValueArray.push('');\r\n// }\r\n\r\n// donationValueArray[`${index}`] = value;\r\n\r\n// setDonationAmount(donationValueArray);\r\n// };\r\n\r\n// const _setInputValue = (event: any, index: number) => {\r\n// if (isNumeric(event.target.value)) {\r\n// _setInputValueArray(event.target.value, index);\r\n// // _setRadioValueArray(resource.otherLabel[`${localeCode}`], index);\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// }\r\n// };\r\n\r\n// const _setInputValueArray = (value: string, index: number) => {\r\n// const inputValueArray = inputValue.slice();\r\n\r\n// while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n// inputValueArray.push('');\r\n// }\r\n\r\n// inputValueArray[`${index}`] = value;\r\n\r\n// inputValueArray[`${index}`].trim();\r\n\r\n// setInputValue(inputValueArray);\r\n// };\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n //let eventObj = productEvents[0];\r\n \r\n // _setEventIdArray(eventObj['id'], 0);\r\n \r\n };\r\n\r\n // const _setEventIdArray = (eventId: string, index: number) => {\r\n // const coursesEventIDArray = coursesEventId.slice();\r\n\r\n // while (typeof coursesEventIDArray[`${index}`] === 'undefined') {\r\n // coursesEventIDArray.push('');\r\n // }\r\n\r\n // coursesEventIDArray[`${index}`] = eventId;\r\n\r\n // coursesEventIDArray[`${index}`].trim();\r\n\r\n // setCoursesEventId(coursesEventIDArray);\r\n\r\n \r\n\r\n // callbackEventID(coursesEventIDArray);\r\n // };\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n \r\n //const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n \r\n \r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n \r\n\r\n \r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n\r\n switch (customPriceAmount) {\r\n case 0:\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 2:\r\n existingDonationAmount.push('2');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 5:\r\n existingDonationAmount.push('5');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 10:\r\n existingDonationAmount.push('10');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 50:\r\n existingDonationAmount.push('50');\r\n existingInputValue.push('');\r\n break;\r\n\r\n default:\r\n if (customPriceAmount) {\r\n existingDonationAmount.push(resource.otherLabel[`${localeCode}`]);\r\n existingInputValue.push(customPriceAmount.toString());\r\n } else {\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n }\r\n break;\r\n }\r\n\r\n \r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n \r\n existingCustomPriceAmount.push(customPriceAmount);\r\n }\r\n \r\n\r\n setAttendeeName(existingAttendeeName);\r\n \r\n\r\n callbackName(existingAttendeeName);\r\n \r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n //setDonationAmount(existingDonationAmount);\r\n if(userValid && existingAttendeeName.length <=0)\r\n {\r\n \r\n existingAttendeeName.push(userInfo.firstname+' '+userInfo.lastname);\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n\r\n callbackPrice(existingCustomPriceAmount);\r\n callbackName(existingAttendeeName);\r\n\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n _checkNamesEntered(existingAttendeeName);\r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n\r\n {/* {_buildAmountField(element, idx)} */}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {/* {!isEditMode &&
\r\n \r\n
} */}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {/* {!isMobile && !isEditMode &&\r\n
\r\n \r\n
} */}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CoursesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst DeceasedCategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackName, callbackCategory, callbackDedicatedBy, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.deceasedCategoryNamesForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const deceasedNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n dedicatedNameArray[`${index}`] = '';\r\n if (existingCeremonyName) {\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n }\r\n\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n _checkNamesEntered(ceremonyName, dedicatedBy, radioValueArray)\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n if (inputMultipleName) {\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n }\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray[`${index}`] = '';\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n let dedicatedByArray = dedicatedBy.slice();\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n dedicatedByArray[`${index}`] = name;\r\n setDedicatedBy(dedicatedByArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n if (!ceremonyNameArray || ceremonyNameArray.length === 0) {\r\n namesEntered = false;\r\n }\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (!ceremonyNameArray[`${i}`] || ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (!categoryArray[`${i}`] || categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n }\r\n\r\n useEffect(() => {\r\n const existingRadioValue: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingRadioValue.push(itemCategory);\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(formItems[`${i}`]['dedicatedBy']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n setRadioValue(existingRadioValue);\r\n\r\n callbackCategory(existingRadioValue);\r\n }, [formItems]);\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 &&\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DeceasedCategoryNamesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst DeceasedDedicatedByForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackDedicatedBy, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.deceasedDedicatedByForm[`${localeCode}`];\r\n const deceasedNames = formScheme.find(form => form.field_name === 'deceasedName')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm(); \r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index); \r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n let dedicatedByArray = dedicatedBy.slice();\r\n \r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n dedicatedByArray[`${index}`] = name;\r\n setDedicatedBy(dedicatedByArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (!ceremonyNameArray[`${i}`] || ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n //Check if the first element in the series of names is empty\r\n const ceremonyNameArraysplit = ceremonyNameArray[`${i}`].split(';');\r\n if (ceremonyNameArraysplit.length>0&&ceremonyNameArraysplit[0].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (dedicatedByArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`][`${'cartLineId'}`]] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`][`${'cartLineId'}`]);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } \r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n }\r\n\r\n \r\n useEffect(() => {\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingDedicatedBy.push(formItems[`${i}`][`${'dedicatedBy'}`]);\r\n const itemNames: string[] = formItems[`${i}`][`${'names'}`];\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < deceasedNames) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n \r\n existingCeremonyName.push(itemName);\r\n } \r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n }, [formItems])\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _buildDeceasedNameGroup = (idx: number, noOfNames: number,): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.deceasedName}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildDedicatedName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'deceasedName') {\r\n return (\r\n
\r\n {_buildDeceasedNameGroup(idx, deceasedNames)}\r\n {_buildDedicatedName(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n } \r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DeceasedDedicatedByForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst DonationForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n var minDonationNumberOption = Number(formScheme[1].field_options![0]);\r\n var minDonationstringOption = formScheme[1].field_options![0];\r\n const [customPrice, setCustomPrice] = useState([minDonationNumberOption]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [donationName, setDonationName] = useState(['']);\r\n const [donationAmount, setDonationAmount] = useState([minDonationstringOption]);\r\n\r\n const formLabels = resource.donationForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangePriceValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n _setInputValueArray('0', index);\r\n _setCustomPriceArray(0, index);\r\n } else {\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n _setInputValueArray('', index);\r\n }\r\n };\r\n\r\n const _setCustomPriceArray = (price: number, index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n\r\n while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n customPriceArray.push(0);\r\n }\r\n\r\n customPriceArray[`${index}`] = price;\r\n\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackPrice(customPriceArray);\r\n\r\n _checkPricesEntered(customPriceArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n const donationValueArray = donationAmount.slice();\r\n\r\n while (typeof donationValueArray[`${index}`] === 'undefined') {\r\n donationValueArray.push('');\r\n }\r\n\r\n donationValueArray[`${index}`] = value;\r\n\r\n setDonationAmount(donationValueArray);\r\n };\r\n\r\n const _setInputValue = (event: any, index: number) => {\r\n if (isNumeric(event.target.value)) {\r\n _setInputValueArray(event.target.value, index);\r\n _setRadioValueArray(resource.otherLabel[`${localeCode}`], index);\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n }\r\n };\r\n\r\n const _setInputValueArray = (value: string, index: number) => {\r\n const inputValueArray = inputValue.slice();\r\n\r\n while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n inputValueArray.push('');\r\n }\r\n\r\n inputValueArray[`${index}`] = value;\r\n\r\n inputValueArray[`${index}`].trim();\r\n\r\n setInputValue(inputValueArray);\r\n };\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDonationNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDonationNameArray = (name: string, index: number) => {\r\n const donationNameArray = donationName.slice();\r\n\r\n while (typeof donationNameArray[`${index}`] === 'undefined') {\r\n donationNameArray.push('');\r\n }\r\n\r\n donationNameArray[`${index}`] = name;\r\n\r\n donationNameArray[`${index}`].trim();\r\n\r\n setDonationName(donationNameArray);\r\n\r\n callbackName(donationNameArray);\r\n\r\n _checkNamesEntered(donationNameArray);\r\n };\r\n\r\n const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (donationNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < donationNameArray.length; i++) {\r\n if (donationNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const donationValueArray = donationAmount.slice();\r\n const donationNameArray = donationName.slice();\r\n\r\n customPriceArray.push(parseInt(element!.field_options![0]));\r\n donationNameArray.push('');\r\n donationValueArray.push(element!.field_options![0]);\r\n\r\n setCustomPrice(customPriceArray);\r\n setDonationName(donationNameArray);\r\n setDonationAmount(donationValueArray);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackName(donationNameArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackPricesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const donationNameArray = donationName.slice();\r\n const donationValueArray = donationAmount.slice();\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof donationNameArray[`${index}`] !== 'undefined') {\r\n if (donationNameArray.length > 1) {\r\n donationNameArray.splice(index, 1);\r\n } else {\r\n donationNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof donationValueArray[`${index}`] !== 'undefined') {\r\n if (donationValueArray.length > 1) {\r\n donationValueArray.splice(index, 1);\r\n } else {\r\n donationValueArray[0] = element!.field_options![0];\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setDonationName(donationNameArray);\r\n setDonationAmount(donationValueArray);\r\n\r\n callbackName(donationNameArray);\r\n callbackPrice(customPriceArray);\r\n\r\n _checkNamesEntered(donationNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingDonationName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n switch (customPriceAmount) {\r\n case 0:\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 2:\r\n existingDonationAmount.push('2');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 5:\r\n existingDonationAmount.push('5');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 10:\r\n existingDonationAmount.push('10');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 50:\r\n existingDonationAmount.push('50');\r\n existingInputValue.push('');\r\n break;\r\n\r\n default:\r\n if (customPriceAmount) {\r\n existingDonationAmount.push(resource.otherLabel[`${localeCode}`]);\r\n existingInputValue.push(customPriceAmount.toString());\r\n } else {\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n }\r\n break;\r\n }\r\n\r\n existingDonationName.push(formItems[`${i}`]['names'][0]);\r\n existingCustomPriceAmount.push(customPriceAmount);\r\n }\r\n\r\n\r\n setDonationName(existingDonationName);\r\n\r\n callbackName(existingDonationName);\r\n\r\n _checkNamesEntered(existingDonationName);\r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n }\r\n\r\n setDonationAmount(existingDonationAmount);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n\r\n callbackPrice(existingCustomPriceAmount);\r\n\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n }, [formItems])\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAmountField = (element: IField, idx: number): JSX.Element | null => {\r\n if (element.field_options) {\r\n return (\r\n
\r\n
\r\n

{formLabels.amount}

\r\n {element.field_options.map((option: string) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'amount') {\r\n return (\r\n
\r\n {_buildName(idx)}\r\n {_buildAmountField(element, idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DonationForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport Select from 'react-select'\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackEventsSelected?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst EventCategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackCategory, callbackEventsSelected, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents,allowMultipleRegistrations }) => {\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [ceremonyEventID, setEventID] = useState(['']);\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.eventCategoryNamesForm[`${localeCode}`];\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n const radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setSelectValue(selectValueArray);\r\n setEventID(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (ceremonyEventArray: string[]) => {\r\n let eventsSelected = ceremonyEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyEventArray.length; i++) {\r\n if (ceremonyEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false; break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = ceremonyNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkNumberOfSelectedEvent = (index: number): number => {\r\n const count = selectValue.length > 0 && typeof selectValue[`${index}`] !== 'undefined' ? selectValue[`${index}`].split(';').length : 1;\r\n\r\n return count;\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const eventNamesArray = selectValue.slice();\r\n const eventIDsArray = ceremonyEventID.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n multiplierArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n\r\n setMultiplers(multiplierArray);\r\n setSelectValue(eventNamesArray);\r\n setEventID(eventIDsArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackEventsSelected(false);\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const ceremonyEventArray = selectValue.slice();\r\n const ceremonyEventIDArray = ceremonyEventID.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof ceremonyEventArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventArray.length > 1) {\r\n ceremonyEventArray.splice(index, 1);\r\n } else {\r\n ceremonyEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyEventIDArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventIDArray.length > 1) {\r\n ceremonyEventIDArray.splice(index, 1);\r\n } else {\r\n ceremonyEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n setSelectValue(ceremonyEventArray);\r\n setEventID(ceremonyEventIDArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackEvent(ceremonyEventArray);\r\n callbackEventID(ceremonyEventIDArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkEventsEntered(ceremonyEventArray);\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const eventIDsArray: string[] = [];\r\n const eventNamesArray: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const namesArray: string[] = [];\r\n const categoriesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n const itemNameCount = itemCategory === resource.categoryFamilyLabel[`${localeCode}`] ? noOfNames : companyNames;\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(itemName);\r\n categoriesArray.push(itemCategory);\r\n }\r\n\r\n setCeremonyName(namesArray);\r\n\r\n callbackName(namesArray);\r\n\r\n _checkNamesEntered(namesArray);\r\n } else {\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n multipliersArray.push(1);\r\n categoriesArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n setEventID(eventIDsArray);\r\n setSelectValue(eventNamesArray);\r\n setMultiplers(multipliersArray);\r\n setRadioValue(categoriesArray);\r\n\r\n callbackEventID(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackMultiplier(multipliersArray);\r\n callbackCategory(categoriesArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n }, [formItems])\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_type === 'dropdown') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! * _checkNumberOfSelectedEvent(idx)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventCategoryNamesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport Select from 'react-select'\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackDedicatedBy?: any;\r\n callbackEventsSelected?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst EventDeceasedDedicatedByForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackDedicatedBy, callbackEventsSelected, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents,allowMultipleRegistrations }) => {\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyEventID, setEventID] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.eventDeceasedDedicatedByForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setSelectValue(selectValueArray);\r\n setEventID(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n }\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n\r\n dedicatedByArray[`${index}`] = name;\r\n\r\n dedicatedByArray[`${index}`].trim();\r\n\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyName, dedicatedByArray);\r\n }\r\n\r\n const _checkEventsEntered = (ceremonyEventArray: string[]) => {\r\n let eventsSelected = ceremonyEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyEventArray.length; i++) {\r\n if (ceremonyEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[]) => {\r\n let namesEntered = ceremonyNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`] && ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (dedicatedByArray[`${i}`] && dedicatedByArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkNumberOfSelectedEvent = (index: number): number => {\r\n const count = selectValue.length > 0 && typeof selectValue[`${index}`] !== 'undefined' ? selectValue[`${index}`].split(';').length : 1;\r\n\r\n return count;\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const ceremonyEventArray = selectValue.slice();\r\n const ceremonyEventIDArray = ceremonyEventID.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n multiplierArray.push(1);\r\n ceremonyEventArray.push('');\r\n ceremonyEventIDArray.push('');\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setMultiplers(multiplierArray);\r\n setSelectValue(ceremonyEventArray);\r\n setEventID(ceremonyEventIDArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackEvent(ceremonyEventArray);\r\n callbackEventID(ceremonyEventIDArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackEventsSelected(false);\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const ceremonyEventArray = selectValue.slice();\r\n const ceremonyEventIDArray = ceremonyEventID.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof ceremonyEventArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventArray.length > 1) {\r\n ceremonyEventArray.splice(index, 1);\r\n } else {\r\n ceremonyEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyEventIDArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventIDArray.length > 1) {\r\n ceremonyEventIDArray.splice(index, 1);\r\n } else {\r\n ceremonyEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setSelectValue(ceremonyEventArray);\r\n setEventID(ceremonyEventIDArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackEvent(ceremonyEventArray);\r\n callbackEventID(ceremonyEventIDArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkEventsEntered(ceremonyEventArray);\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n const namesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(formItems[`${i}`]['names'][0]);\r\n existingDedicatedBy.push(formItems[`${i}`]['dedicatedBy']);\r\n }\r\n\r\n setCeremonyName(namesArray);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(namesArray);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(namesArray, existingDedicatedBy);\r\n } else {\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setSelectValue(eventNamesArray);\r\n setEventID(eventIDsArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n }, [formItems])\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDeceasedName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.deceasedName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDedicatedName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_type === 'dropdown') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildDeceasedName(idx)}\r\n {_buildDedicatedName(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! * _checkNumberOfSelectedEvent(idx)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default EventDeceasedDedicatedByForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport DatePicker from 'react-date-picker';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync, uploadImageFileToAzure } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport { Response } from '../../../components/enums';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?: any;\r\n callbackContactNumber?: any;\r\n callbackEventID?: any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackNextOfKinName: any;\r\n callbackNextOfKinPhoneNumber: any;\r\n callbackBirthDate: any;\r\n callbackPassportNumber: any;\r\n callbackPassportExpiryDate: any;\r\n callbackPassportIssuedDate: any;\r\n callbackConsent: any;\r\n callbackDateEntered: any;\r\n callbackPassportExpiryDateEntered: any;\r\n callbackPassportIssueDateEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n isUat: boolean;\r\n organisation: string;\r\n azureContainerName: string;\r\n callbackPhoneNumbersEntered: any;\r\n callbackPassportNumberEntered: any;\r\n callbackInsuranceIncluded: any;\r\n callbackFileUploaded: any;\r\n isFileUploaded: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n insuranceAmount: string;\r\n callbackInsuranceIncludedNum: any;\r\n}\r\n\r\nconst EventPassportUploadInsuranceForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo, productEvents, callbackEventID, callbackEvent, callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackNextOfKinName, callbackPhoneNumbersEntered, callbackNextOfKinPhoneNumber, callbackBirthDate, callbackDateEntered, isUat, organisation, azureContainerName, callbackPassportNumberEntered, callbackPassportExpiryDateEntered, callbackPassportIssueDateEntered, callbackFileUploaded, isFileUploaded, allowMultipleRegistrations,\r\n callbackPassportNumber, callbackPassportExpiryDate, callbackPassportIssuedDate, callbackConsent, callbackRemarks, showRemarksField, insuranceAmount, callbackInsuranceIncluded, callbackInsuranceIncludedNum }) => {\r\n\r\n var insuranceAmountValue = Number(insuranceAmount);\r\n\r\n const [customPrice, setCustomPrice] = useState([insuranceAmountValue]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [chineseName, setChineseName] = useState(['']);\r\n const [nextOfKinName, setNextOfKinName] = useState(['']);\r\n const [nextOfKinPhoneNumbers, setNextOfKinPhoneNumbers] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [passportNumber, setPassportNumber] = useState(['']);\r\n const [passportExpiryDate, setPassportExpiryDate] = useState(['']);\r\n const [passportIssueDate, setPassportIssueDate] = useState(['']);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n const [remainingSlots, setRemainingSlots] = useState(0);\r\n const [file, setFile] = useState('');\r\n const [imageFiles, setImageFiles] = useState(['']);\r\n const [isValidFileSize, setIsValidFileSize] = useState(false);\r\n const [consent, setConsent] = useState([1]);\r\n const [remark, setRemark] = useState(['']);\r\n const [isInsuranceIncluded, setIsInsuranceIncluded] = useState([false]);\r\n const [isInsuranceIncludedNum, setIsInsuranceIncludedNum] = useState([0]);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n\r\n\r\n const formLabels = resource.eventsPassportUploadWithInsuranceForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const _setNextOfKinNameArray = (name: string, index: number) => {\r\n const nextOfKinNameArray = nextOfKinName.slice();\r\n\r\n while (typeof nextOfKinNameArray[`${index}`] === 'undefined') {\r\n nextOfKinNameArray.push('');\r\n }\r\n\r\n nextOfKinNameArray[`${index}`] = name;\r\n\r\n nextOfKinNameArray[`${index}`].trim();\r\n\r\n setNextOfKinName(nextOfKinNameArray);\r\n\r\n callbackNextOfKinName(nextOfKinNameArray);\r\n\r\n };\r\n\r\n const _setNextOfKinPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = nextOfKinPhoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setNextOfKinPhoneNumbers(valueArray);\r\n\r\n callbackNextOfKinPhoneNumber(valueArray);\r\n }\r\n\r\n const _setPassportNumber = (value: string, index: number) => {\r\n const valueArray = passportNumber.slice();\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if (alphanumericRegex.test(value) && value.length <= 50) {\r\n valueArray[`${index}`] = value;\r\n\r\n setPassportNumber(valueArray);\r\n _checkPassportNumberEntered(valueArray);\r\n callbackPassportNumber(valueArray);\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n }\r\n\r\n const _setPassportExpiryDate = (value: Date, index: number) => {\r\n const valueArray = passportExpiryDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportExpiryDate(valueArray);\r\n _checkPassportExpiryDateEntered(valueArray);\r\n callbackPassportExpiryDate(valueArray);\r\n }\r\n\r\n const _setPassportIssueDate = (value: Date, index: number) => {\r\n const valueArray = passportIssueDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportIssueDate(valueArray);\r\n _checkPassportIssueDateEntered(valueArray);\r\n callbackPassportIssuedDate(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkPassportExpiryDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportExpiryDateEntered(checked);\r\n }\r\n\r\n const _checkPassportIssueDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportIssueDateEntered(checked);\r\n }\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setNextOfKinNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setNextOfKinNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const convertToBase64 = (file: any) => {\r\n return new Promise((resolve, reject) => {\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file);\r\n fileReader.onload = () => {\r\n resolve(fileReader.result);\r\n };\r\n fileReader.onerror = (error) => {\r\n reject(error);\r\n };\r\n });\r\n };\r\n\r\n const _validateFileSize = (file: any) => {\r\n const MAX_FILE_SIZE = 2e+7 // 20MB\r\n const fileSizeKiloBytes = file.size;\r\n\r\n if (fileSizeKiloBytes > MAX_FILE_SIZE) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n const _setFileInputValue = async (event: any, index: number) => {\r\n const imageFile = event.target.files[0];\r\n if (_validateFileSize(imageFile)) {\r\n const base64 = await convertToBase64(imageFile) as string;\r\n const base64String = base64.toString().replace(/^data:image\\/\\w+;base64,/, \"\");\r\n setFile(base64String);\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n while (typeof imageFileArray[`${index}`] === 'undefined') {\r\n imageFileArray.push('');\r\n }\r\n\r\n imageFileArray[`${index}`] = imageFile.name;\r\n\r\n imageFileArray[`${index}`].trim();\r\n\r\n setImageFiles(imageFileArray);\r\n setIsValidFileSize(true);\r\n }\r\n else {\r\n setIsValidFileSize(false);\r\n toast.error(formLabels.fileSizeErrorMsg);\r\n }\r\n };\r\n\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkFileUploaded = (imageFileArray: string[]) => {\r\n let imageFileUploaded = imageFileArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < imageFileArray.length; i++) {\r\n if (imageFileArray[`${i}`].trim() === '') {\r\n imageFileUploaded = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackFileUploaded(imageFileUploaded);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPassportNumberEntered = (passportNumbersArray: string[]) => {\r\n let passportNumbersEntered = passportNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < passportNumbersArray.length; i++) {\r\n if (passportNumbersArray[`${i}`].trim() === '') {\r\n passportNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPassportNumberEntered(passportNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _uploadFileToAzure = async (index: number) => {\r\n const env = isUat ? \"uat\" : \"prod\";\r\n const entity = organisation == \"BT\" ? \"btrts\" : \"gpbt\";\r\n const fileName = passportNumber[`${index}`] + \".jpeg\";\r\n const base64Image = file;\r\n const containerName = azureContainerName;\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n if (alphanumericRegex.test(passportNumber[`${index}`])) {\r\n\r\n const uploadFileResult = await uploadImageFileToAzure({ callerContext: actionContext }, env, entity, fileName, base64Image, containerName);\r\n\r\n if (uploadFileResult.toUpperCase() !== Response.SUCCESS) {\r\n toast.error(formLabels.fileUploadFailedMsg);\r\n }\r\n else {\r\n\r\n setImageFiles(imageFileArray);\r\n _checkFileUploaded(imageFileArray);\r\n // setIsFileUploaded(true);\r\n toast(formLabels.fileUploadSuccessMsg);\r\n }\r\n\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n const customPriceArray = customPrice.slice();\r\n\r\n\r\n birthdayArray.push('');\r\n passportIssueDateArray.push('');\r\n passportExpiryDateArray.push('');\r\n imageFileArray.push('');\r\n passportNumberArray.push('');\r\n consentArray.push(1);\r\n remarkArray.push('');\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n\r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setBirthDate(birthdayArray);\r\n setImageFiles(imageFileArray)\r\n setConsent(consentArray);\r\n setCustomPrice(customPriceArray);\r\n setRemark(remarkArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n callbackPrice(customPriceArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n callbackDateEntered(false);\r\n\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPricesEntered(customPriceArray);\r\n\r\n if (productEvents.length === 1) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n _setEventDates(eventObj, coursesEventArray.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n const isInsuranceIncludedArray = isInsuranceIncluded.slice();\r\n const isInsuranceIncludedNumArray = isInsuranceIncludedNum.slice();\r\n\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = insuranceAmountValue;\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof chineseNamesArray[`${index}`] !== 'undefined') {\r\n if (chineseNamesArray.length > 1) {\r\n chineseNamesArray.splice(index, 1);\r\n } else {\r\n chineseNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinNamesArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinNamesArray.length > 1) {\r\n nextOfKinNamesArray.splice(index, 1);\r\n } else {\r\n nextOfKinNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinPhoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinPhoneNumbersArray.length > 1) {\r\n nextOfKinPhoneNumbersArray.splice(index, 1);\r\n } else {\r\n nextOfKinPhoneNumbersArray[0] = '';\r\n }\r\n }\r\n if (typeof birthdayArray[`${index}`] !== 'undefined') {\r\n if (birthdayArray.length > 1) {\r\n birthdayArray.splice(index, 1);\r\n } else {\r\n birthdayArray[0] = '';\r\n }\r\n }\r\n if (typeof passportNumberArray[`${index}`] !== 'undefined') {\r\n if (passportNumberArray.length > 1) {\r\n passportNumberArray.splice(index, 1);\r\n } else {\r\n passportNumberArray[0] = '';\r\n }\r\n }\r\n if (typeof passportExpiryDateArray[`${index}`] !== 'undefined') {\r\n if (passportExpiryDateArray.length > 1) {\r\n passportExpiryDateArray.splice(index, 1);\r\n } else {\r\n passportExpiryDateArray[0] = '';\r\n }\r\n }\r\n if (typeof passportIssueDateArray[`${index}`] !== 'undefined') {\r\n if (passportIssueDateArray.length > 1) {\r\n passportIssueDateArray.splice(index, 1);\r\n } else {\r\n passportIssueDateArray[0] = '';\r\n }\r\n }\r\n if (typeof imageFileArray[`${index}`] !== 'undefined') {\r\n if (imageFileArray.length > 1) {\r\n imageFileArray.splice(index, 1);\r\n } else {\r\n imageFileArray[0] = '';\r\n }\r\n }\r\n if (typeof consentArray[`${index}`] !== 'undefined') {\r\n if (consentArray.length > 1) {\r\n consentArray.splice(index, 1);\r\n } else {\r\n consentArray[0] = 1;\r\n }\r\n }\r\n if (typeof remarkArray[`${index}`] !== 'undefined') {\r\n if (remarkArray.length > 1) {\r\n remarkArray.splice(index, 1);\r\n } else {\r\n remarkArray[0] = '';\r\n }\r\n }\r\n if (typeof isInsuranceIncludedArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedArray.length > 1) {\r\n isInsuranceIncludedArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedArray[0] = false;\r\n }\r\n }\r\n if (typeof isInsuranceIncludedNumArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedNumArray.length > 1) {\r\n isInsuranceIncludedNumArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedNumArray[0] = 0;\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setBirthDate(birthdayArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setImageFiles(imageFileArray);\r\n setConsent(consentArray);\r\n setIsInsuranceIncluded(isInsuranceIncludedArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setRemark(remarkArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n callbackInsuranceIncluded(isInsuranceIncludedArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkDateEntered(birthdayArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingChineseNamesArray: string[] = [];\r\n const existingNextOfKinNamesArray: string[] = [];\r\n const existingNextOfKinPhoneNumbersArray: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingPassportNumber: string[] = [];\r\n const existingPassportIssueDate: string[] = [];\r\n const existingPassportExpiryDate: string[] = [];\r\n const imageFileArray: string[] = [];\r\n const existingConsent: number[] = [];\r\n const existingRemark: string[] = [];\r\n const insuranceIncludeArray: boolean[] = [];\r\n const customPriceArray: number[] = [];\r\n const isInsuranceIncludedNumArray: number[]=[];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : null;\r\n const passportExpiryDate = formItems[`${i}`]['passportExpiryDate'] !== '' ? new Date(formItems[`${i}`]['passportExpiryDate']) : null;\r\n const passportIssueDate = formItems[`${i}`]['passportIssuedDate'] !== '' ? new Date(formItems[`${i}`]['passportIssuedDate']) : null;\r\n const hasInsurance = formItems[`${i}`]['isInsuranceIncluded'] ? formItems[`${i}`]['isInsuranceIncluded'] : 0;\r\n\r\n const checkbox = document.getElementById('insurance_' + i) as HTMLInputElement | null;\r\n\r\n if (checkbox) {\r\n if(hasInsurance === 0)\r\n {\r\n checkbox.checked = false;\r\n }\r\n else\r\n {\r\n checkbox.checked = true;\r\n }\r\n }\r\n\r\n if (hasInsurance === 0) {\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n }\r\n else {\r\n customPriceArray.push(selectedProduct.result?.Price! + insuranceAmountValue);\r\n }\r\n\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingChineseNamesArray.push(formItems[`${i}`]['chineseName']);\r\n existingNextOfKinNamesArray.push(formItems[`${i}`]['nameNextKin']);\r\n existingNextOfKinPhoneNumbersArray.push(formItems[`${i}`]['contactNumberNextKin']);\r\n existingBirthDate.push(birthDate ? birthDate.toISOString() : '');\r\n existingPassportNumber.push(formItems[`${i}`]['passportNumber']);\r\n existingPassportIssueDate.push(passportIssueDate ? passportIssueDate.toISOString() : '');\r\n existingPassportExpiryDate.push(passportExpiryDate ? passportExpiryDate.toISOString() : '');\r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n existingConsent.push(1);\r\n existingRemark.push(formItems[`${i}`]['remarks']);\r\n insuranceIncludeArray.push(hasInsurance === 0 ? false: true);\r\n isInsuranceIncludedNumArray.push(hasInsurance);\r\n imageFileArray.push('');\r\n\r\n }\r\n\r\n if (productEvents.length === 1) {\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDatesOnLoad(eventObj, formItems.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setIsInsuranceIncluded(insuranceIncludeArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setCustomPrice(customPriceArray);\r\n setRemark(existingRemark);\r\n\r\n\r\n callbackName(existingAttendeeName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n callbackConsent(existingConsent);\r\n callbackRemarks(existingRemark);\r\n callbackInsuranceIncluded(insuranceIncludeArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkDateEntered(existingBirthDate);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n } else {\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n existingBirthDate.push('');\r\n existingPassportNumber.push('');\r\n existingPassportExpiryDate.push('');\r\n existingPassportIssueDate.push('');\r\n imageFileArray.push('');\r\n existingConsent.push(1);\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n existingRemark.push('');\r\n\r\n }\r\n\r\n if (userValid && existingAttendeeName.length <= 0) {\r\n\r\n existingAttendeeName.push(userInfo.firstname + ' ' + userInfo.lastname);\r\n existingChineseNamesArray.push(userInfo.gmb_fullnamechinese);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setIsInsuranceIncluded(insuranceIncludeArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setCustomPrice(customPriceArray);\r\n setRemark(existingRemark);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackBirthDate(existingBirthDate);\r\n callbackConsent(existingConsent);\r\n callbackInsuranceIncluded(insuranceIncludeArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n callbackRemarks(existingRemark);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n\r\n _checkDateEntered(existingBirthDate);\r\n _checkPricesEntered(customPriceArray);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n\r\n if (productEvents.length === 1 && formItems.length <= 0) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDates(eventObj, 0);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n else if(productEvents.length > 1){\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n _checkEventsEntered(eventNamesArray);\r\n }\r\n\r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remark.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemark(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _setEventDatesOnLoad = (event: any, formLength: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n for(let i=0; i< formLength; i++)\r\n {\r\n \r\n while (typeof selectValueArray[`${i}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${i}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n selectValueArray[`${i}`] = inputEventDates;\r\n eventIDArray[`${i}`] = inputEventIDs;\r\n\r\n }\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n }\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setInsuranceAmount = (value: boolean, index: number) => {\r\n const valueArray = isInsuranceIncluded.slice();\r\n const insuranceArray = customPrice.slice();\r\n const insuranceNumArray = isInsuranceIncludedNum.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(false);\r\n }\r\n\r\n while (typeof insuranceArray[`${index}`] === 'undefined') {\r\n insuranceArray.push(0);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n insuranceNumArray[`${index}`] = value === true? 1: 0;\r\n\r\n if (value === true) {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price! + insuranceAmountValue;\r\n\r\n }\r\n else {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price!;\r\n\r\n }\r\n\r\n\r\n setIsInsuranceIncluded(valueArray);\r\n setIsInsuranceIncludedNum(insuranceNumArray);\r\n setCustomPrice(insuranceArray);\r\n callbackPrice(insuranceArray);\r\n callbackInsuranceIncluded(valueArray);\r\n callbackInsuranceIncludedNum(insuranceNumArray);\r\n };\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportExpiryDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportExpiryDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportExpiryDate}

\r\n _setPassportExpiryDate(date, idx)}\r\n value={passportExpiryDate[`${idx}`] === '' || passportExpiryDate[`${idx}`]?.includes('1900') ? null : new Date(passportExpiryDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportIssueDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportIssueDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportIssueDate}

\r\n _setPassportIssueDate(date, idx)}\r\n value={passportIssueDate[`${idx}`] === '' || passportIssueDate[`${idx}`]?.includes('1900') ? null : new Date(passportIssueDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n if (productEvents.length > 1) {\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n const event = productEvents[0];\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n\r\n const _buildUploadPassport = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.passportUpload}

\r\n
\r\n
\r\n _setFileInputValue(event, idx)}\r\n className='form-control'\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameNextOfKin}

\r\n _setNextOfKinNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumberNextOfKin}

\r\n _setNextOfKinPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.passportNumber}

\r\n _setPassportNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildInsuranceField = (idx: number): JSX.Element | null => {\r\n if (typeof customPrice[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.tax}

\r\n

{formLabels.taxPrompt}

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {remainingSlots !== 0 &&

{formLabels.availableSlots}{remainingSlots}

}\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildContactNumber(idx)}\r\n {_buildNextOfKinName(idx)}\r\n {_buildNextOfKinContactNumber(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildPassportNumber(idx)}\r\n {_buildPassportExpiryDate(idx)}\r\n {_buildPassportIssueDate(idx)}\r\n {_buildUploadPassport(idx)}\r\n {_buildInsuranceField(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${isInsuranceIncluded[`${idx}`] ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventPassportUploadInsuranceForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport Select from 'react-select';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent: any;\r\n callbackEventID: any;\r\n callbackName: any;\r\n callbackHasTaxDeduction: any;\r\n callbackNRIC: any;\r\n callbackPhoneNumber: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackEnableSaveDraft: any;\r\n callbackFormsValidation: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst EventTaxDeductionForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackHasTaxDeduction, callbackNRIC,\r\n callbackPhoneNumber, callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry, callbackEnableSaveDraft, callbackFormsValidation,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents,allowMultipleRegistrations }) => {\r\n const [eventNames, setEventNames] = useState(['']);\r\n const [eventIDs, setEventIDs] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n const [taxDeductions, setTaxDeductions] = useState([false]);\r\n const [nrics, setNRICs] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [countryNames, setCountryNames] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const minIdentitySize = 9;\r\n const maxIdentitySize = 10;\r\n const formLabels = resource.eventTaxDeductionForm[`${localeCode}`];\r\n const namesCount = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n };\r\n\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n\r\n while (typeof eventNamesArray[`${index}`] === 'undefined') {\r\n eventNamesArray.push('');\r\n }\r\n\r\n while (typeof eventIDsArray[`${index}`] === 'undefined') {\r\n eventIDsArray.push('');\r\n }\r\n\r\n eventNamesArray[`${index}`] = inputEventDates;\r\n eventIDsArray[`${index}`] = inputEventIDs;\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, names, taxDeductions, nrics);\r\n };\r\n\r\n const _formatNameInput = (event: any, index: number, nameIndex: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleNames = names[`${index}`];\r\n\r\n if (!inputMultipleNames.includes(';')) {\r\n inputMultipleNames += ';'.repeat(namesCount - 1);\r\n }\r\n\r\n const newValues = inputMultipleNames.split(';');\r\n\r\n newValues[`${nameIndex}`] = inputName;\r\n inputName = newValues.join(';');\r\n\r\n _setNames(inputName, index);\r\n };\r\n\r\n const _setNames = (name: string, index: number) => {\r\n const valueArray = names.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _validateForms(eventNames, eventIDs, valueArray, taxDeductions, nrics);\r\n };\r\n\r\n const _setTaxDeduction = (value: boolean, index: number) => {\r\n const valueArray = taxDeductions.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(false);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setTaxDeductions(valueArray);\r\n\r\n callbackHasTaxDeduction(valueArray);\r\n\r\n // Clear NRIC/ FIN/ UEN and address fields if value is false.\r\n if (!value) {\r\n _resetFields(index);\r\n }\r\n\r\n _validateForms(eventNames, eventIDs, names, valueArray, nrics);\r\n };\r\n\r\n const _setNric = (value: string, index: number) => {\r\n const valueArray = nrics.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value.trim();\r\n\r\n setNRICs(valueArray);\r\n\r\n callbackNRIC(valueArray);\r\n\r\n const result = _validateIdentity(value);\r\n\r\n if ((value.length === minIdentitySize || value.length === maxIdentitySize) && !result) {\r\n toast.warning(resource.invalidNricFinUenMsg[`${localeCode}`]);\r\n }\r\n\r\n _validateForms(eventNames, eventIDs, names, taxDeductions, valueArray);\r\n };\r\n\r\n const _setPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n };\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value.trim();\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n };\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value.trim();\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n };\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value.trim();\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n };\r\n\r\n const _setCountryName = (event: any, index: number) => {\r\n const valueArray = countryNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountryNames(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n };\r\n\r\n const _resetFields = (index: number) => {\r\n const nricsArray = nrics.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countryNamesArray = countryNames.slice();\r\n\r\n nricsArray[`${index}`] = '';\r\n phoneNumbersArray[`${index}`] = '';\r\n buildingNamesArray[`${index}`] = '';\r\n unitNumbersArray[`${index}`] = '';\r\n postalCodesArray[`${index}`] = '';\r\n countryNamesArray[`${index}`] = '';\r\n\r\n setNRICs(nricsArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountryNames(countryNamesArray);\r\n\r\n callbackNRIC(nricsArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countryNamesArray);\r\n };\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (eventNames.length > 0) {\r\n const selectValueArray = eventNames.slice();\r\n const eventIDArray = eventIDs.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n };\r\n\r\n const _displayNames = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const _checkTaxDeductions = (taxDeductionsArray: boolean[], nricsArray: string[]): boolean => {\r\n let result = taxDeductionsArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < taxDeductionsArray.length; ++i) {\r\n if (taxDeductionsArray[`${i}`]) {\r\n result = nricsArray[`${i}`] === '' ? false : _validateIdentity(nricsArray[`${i}`]);\r\n }\r\n\r\n if (!result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const _checkStringArray = (valueArray: string[]): boolean => {\r\n let result = valueArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n result = false; break;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const _validateIdentity = (value: string): boolean => {\r\n return value.length === minIdentitySize || value.length === maxIdentitySize ? (_validateNricFin(value) ? true : _validateUen(value)) : false;\r\n };\r\n\r\n const _validateNricFin = (value: string): boolean => {\r\n // Validation rules.\r\n const nricRegex = /(\\D)(\\d{7})(\\D)/;\r\n const nricTypeRegex = /S|T|F|G/;\r\n const weightArr = [2, 7, 6, 5, 4, 3, 2];\r\n const nricLetterST = ['J', 'Z', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A'];\r\n const nricLetterFG = ['X', 'W', 'U', 'T', 'R', 'Q', 'P', 'N', 'M', 'L', 'K'];\r\n\r\n // Set nric to all uppercase to remove case sensitivity.\r\n const nric = value.toUpperCase();\r\n\r\n // Return false if it fails basic validation.\r\n if (!nricRegex.exec(nric)) {\r\n return false;\r\n }\r\n\r\n // Get nric type.\r\n const nricArr = nric.match(nricRegex);\r\n\r\n if (nricArr) {\r\n const nricType = nricArr[1];\r\n\r\n // Return false if it fails basic validation.\r\n if (!nricTypeRegex.exec(nricType)) {\r\n return false;\r\n }\r\n\r\n // Multiply each digit in the nric number by it's weight in order.\r\n const nricDigitsArr = nricArr[2].split('');\r\n\r\n let total = 0;\r\n\r\n for (let i = 0; i < nricDigitsArr.length; ++i) {\r\n total += parseInt(nricDigitsArr[`${i}`]) * weightArr[`${i}`];\r\n }\r\n\r\n // If the nric type is T or G, add 4 to the total.\r\n if (['T', 'G'].indexOf(nricType) >= 0) {\r\n total += 4;\r\n }\r\n\r\n const letterIndex = total % 11;\r\n const nricLetter = nricArr[3];\r\n\r\n // Check last letter of nric for Singaporeans: nricLetterST.\r\n // Check last letter of nric for foreigners : nricLetterFG.\r\n const result = ['S', 'T'].indexOf(nricType) >= 0 ? nricLetterST[`${letterIndex}`] === nricLetter : nricLetterFG[`${letterIndex}`] === nricLetter;\r\n\r\n return result;\r\n } \r\n\r\n return false;\r\n };\r\n\r\n const _validateUen = (value: string): boolean => {\r\n const checkAlphabet = /^[a-zA-Z]+$/;\r\n const entityTypeIndicator = [\r\n 'LP', 'LL', 'FC', 'PF', 'RF', 'MQ', 'MM', 'NB', 'CC', 'CS', 'MB', 'FM', 'GS', 'GA',\r\n 'GB', 'DP', 'CP', 'NR', 'CM', 'CD', 'MD', 'HS', 'VH', 'CH', 'MH', 'CL', 'XL', 'CX',\r\n 'RP', 'TU', 'TC', 'FB', 'FN', 'PA', 'PB', 'SS', 'MC', 'SM'\r\n ];\r\n\r\n const uen = value.toUpperCase();\r\n \r\n const uenStrArray = uen.split('');\r\n\r\n // Businesses registered with ACRA.\r\n if (uenStrArray.length === minIdentitySize) {\r\n // Check that last character is a letter.\r\n if (!checkAlphabet.test(uenStrArray[`${uenStrArray.length - 1}`])) { \r\n return false;\r\n }\r\n\r\n for (let i = 0; i < uenStrArray.length - 1; ++i) {\r\n // Check that first 8 letters are all numbers.\r\n if (checkAlphabet.test(uenStrArray[`${i}`])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } else if (uenStrArray.length === maxIdentitySize) {\r\n // Check that last character is a letter.\r\n if (!checkAlphabet.test(uenStrArray[uenStrArray.length - 1])) {\r\n return false;\r\n }\r\n\r\n // Local companies registered with ACRA: if.\r\n // All other entities which will be issued new UEN: else.\r\n if (!checkAlphabet.test(uenStrArray[0]) && !checkAlphabet.test(uenStrArray[1]) && !checkAlphabet.test(uenStrArray[2]) && !checkAlphabet.test(uenStrArray[3])) {\r\n // Check that 5th to 9th letters are all numbers.\r\n return !checkAlphabet.test(uenStrArray[4]) && !checkAlphabet.test(uenStrArray[5]) && !checkAlphabet.test(uenStrArray[6]) && !checkAlphabet.test(uenStrArray[7]) && !checkAlphabet.test(uenStrArray[8]);\r\n } else {\r\n // Check that 1st letter is either T or S or R.\r\n if (uenStrArray[0] !== 'T' && uenStrArray[0] !== 'S' && uenStrArray[0] !== 'R') {\r\n return false;\r\n }\r\n\r\n // Check that 2nd and 3rd letters are numbers only.\r\n if (checkAlphabet.test(uenStrArray[1]) || checkAlphabet.test(uenStrArray[2])) {\r\n return false;\r\n }\r\n\r\n // Check that 4th letter is an alphabet.\r\n if (!checkAlphabet.test(uenStrArray[3])) {\r\n return false;\r\n }\r\n\r\n // Check entity-type indicator.\r\n const entityType = uenStrArray[3] + uenStrArray[4];\r\n\r\n let entityTypeMatch = false;\r\n\r\n for (let i = 0; i < entityTypeIndicator.length; ++i) {\r\n if (entityTypeIndicator[`${i}`] === entityType) {\r\n entityTypeMatch = true;\r\n }\r\n }\r\n\r\n if (!entityTypeMatch) {\r\n return false;\r\n }\r\n\r\n // Check that 6th to 9th letters are numbers only.\r\n if (checkAlphabet.test(uenStrArray[5]) || checkAlphabet.test(uenStrArray[6]) || checkAlphabet.test(uenStrArray[7]) || checkAlphabet.test(uenStrArray[8])) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const _validateForms = (eventNamesArray: string[], eventIDsArray: string[], namesArray: string[], taxDeductionsArray: boolean[], nricsArray: string[]) => {\r\n const hasNames = _checkStringArray(namesArray);\r\n\r\n const result = hasNames && _checkStringArray(eventNamesArray) && _checkStringArray(eventIDsArray) && _checkTaxDeductions(taxDeductionsArray, nricsArray);\r\n\r\n callbackEnableSaveDraft(hasNames);\r\n\r\n callbackFormsValidation(result);\r\n };\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const multipliersArray = multipliers.slice();\r\n const namesArray = names.slice();\r\n const taxDeductionsArray = taxDeductions.slice();\r\n const nricsArray = nrics.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countryNamesArray = countryNames.slice();\r\n\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n multipliersArray.push(1);\r\n namesArray.push('');\r\n taxDeductionsArray.push(false);\r\n nricsArray.push('');\r\n phoneNumbersArray.push('');\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countryNamesArray.push('');\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setMultiplers(multipliersArray);\r\n setNames(namesArray);\r\n setTaxDeductions(taxDeductionsArray);\r\n setNRICs(nricsArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountryNames(countryNamesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackMultiplier(multipliersArray);\r\n callbackName(namesArray);\r\n callbackHasTaxDeduction(taxDeductionsArray);\r\n callbackNRIC(nricsArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countryNamesArray);\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, namesArray, taxDeductionsArray, nricsArray);\r\n };\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n\r\n formItems.splice(index, 1);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n };\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n const taxDeductionsArray = taxDeductions.slice(); \r\n const nricsArray = nrics.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countryNamesArray = countryNames.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof eventNamesArray[`${index}`] !== 'undefined') {\r\n if (eventNamesArray.length > 1) {\r\n eventNamesArray.splice(index, 1);\r\n } else {\r\n eventNamesArray[0] = '';\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n }\r\n\r\n if (typeof eventIDsArray[`${index}`] !== 'undefined') {\r\n if (eventIDsArray.length > 1) {\r\n eventIDsArray.splice(index, 1);\r\n } else {\r\n eventIDsArray[0] = '';\r\n }\r\n\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackEventID(eventIDsArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n if (typeof taxDeductionsArray[`${index}`] !== 'undefined') {\r\n if (taxDeductionsArray.length > 1) {\r\n taxDeductionsArray.splice(index, 1);\r\n } else {\r\n taxDeductionsArray[0] = false;\r\n\r\n const checkbox = document.getElementById('tax_0') as HTMLInputElement | null; \r\n\r\n if (checkbox) {\r\n checkbox.checked = false;\r\n }\r\n }\r\n\r\n setTaxDeductions(taxDeductionsArray);\r\n\r\n callbackHasTaxDeduction(taxDeductionsArray);\r\n }\r\n\r\n if (typeof nricsArray[`${index}`] !== 'undefined') {\r\n if (nricsArray.length > 1) {\r\n nricsArray.splice(index, 1);\r\n } else {\r\n nricsArray[0] = '';\r\n }\r\n\r\n setNRICs(nricsArray);\r\n\r\n callbackNRIC(nricsArray);\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackPhoneNumber(phoneNumbersArray);\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n\r\n setBuildingNames(buildingNamesArray);\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n\r\n setUnitNumbers(unitNumbersArray);\r\n\r\n callbackUnitNumber(unitNumbersArray);\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackPostalCode(postalCodesArray);\r\n }\r\n\r\n if (typeof countryNamesArray[`${index}`] !== 'undefined') {\r\n if (countryNamesArray.length > 1) {\r\n countryNamesArray.splice(index, 1);\r\n } else {\r\n countryNamesArray[0] = '';\r\n }\r\n\r\n setCountryNames(countryNamesArray);\r\n\r\n callbackCountry(countryNamesArray);\r\n }\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, namesArray, taxDeductionsArray, nricsArray);\r\n };\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const namesArray: string[] = [];\r\n const taxDeductionsArray: boolean[] = [];\r\n const nricsArray: string[] = [];\r\n const phoneNumbersArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const countriesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const hasTax = formItems[`${i}`]['hasTaxDeduction'] ? formItems[`${i}`]['hasTaxDeduction'] : false;\r\n\r\n const checkbox = document.getElementById('tax_' + i) as HTMLInputElement | null; \r\n\r\n if (checkbox) {\r\n checkbox.checked = hasTax;\r\n }\r\n\r\n const names: string[] = formItems[`${i}`][`${'names'}`];\r\n\r\n let name = '';\r\n\r\n names.forEach((item, index) => name += index != 0 && index < namesCount ? ';' + item : item);\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(name);\r\n taxDeductionsArray.push(hasTax);\r\n nricsArray.push(formItems[`${i}`]['nric'] ? formItems[`${i}`]['nric'] : '');\r\n phoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n countriesArray.push(formItems[`${i}`]['country']);\r\n }\r\n\r\n setNames(namesArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackName(namesArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n } else {\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n namesArray.push('');\r\n taxDeductionsArray.push(false);\r\n nricsArray.push('');\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countriesArray.push('');\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setMultiplers(multipliersArray);\r\n setTaxDeductions(taxDeductionsArray);\r\n setNRICs(nricsArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountryNames(countriesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackMultiplier(multipliersArray);\r\n callbackHasTaxDeduction(taxDeductionsArray);\r\n callbackNRIC(nricsArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, namesArray, taxDeductionsArray, nricsArray);\r\n }, [formItems]);\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildName = (idx: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(namesCount)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map(nameIndex => {\r\n return (\r\n
\r\n
\r\n

{namesCount > 1 ? (nameLabel + ' ' + (nameIndex + 1)) : nameLabel}

\r\n _formatNameInput(event, idx, nameIndex)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n });\r\n };\r\n\r\n const _buildTaxDeductionField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.tax}

\r\n

{formLabels.taxPrompt}

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildNRIC = (idx: number): JSX.Element => {\r\n const result = _validateIdentity(nrics[`${idx}`]);\r\n \r\n return (\r\n
\r\n
\r\n

{formLabels.nric}

\r\n
\r\n _setNric(event.target.value.toUpperCase(), idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n value={nrics[`${idx}`]}\r\n type='text'\r\n maxLength={10}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildPhone = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.addressPhonePrompt}

\r\n
\r\n

{formLabels.addressPhone}

\r\n _setPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildAddress = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressOptional}

\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingNames[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumbers[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountryName(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'event') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildTaxDeductionField(idx)}\r\n {taxDeductions[`${idx}`] && _buildNRIC(idx)}\r\n {taxDeductions[`${idx}`] && _buildPhone(idx)}\r\n {taxDeductions[`${idx}`] && _buildAddress(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventTaxDeductionForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?:any;\r\n callbackContactNumber?:any;\r\n callbackEventID?:any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackChineseNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackChineseName: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n callbackPhoneNumbersEntered: any;\r\n allowMultipleRegistrations: boolean;\r\n makeChinesNameMandatory: boolean;\r\n}\r\n\r\nconst EventChineseNameForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo,productEvents,callbackEventID,callbackEvent , callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackChineseName, callbackPhoneNumbersEntered,allowMultipleRegistrations,callbackChineseNamesEntered, makeChinesNameMandatory}) => {\r\n\r\n const [customPrice, setCustomPrice] = useState([0]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [chineseName, setChineseName] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n const[remainingSlots, setRemainingSlots] = useState(0);\r\n\r\n \r\n\r\n\r\n const formLabels = resource.coursesForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n \r\n };\r\n\r\n const _setChineseNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setChineseNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n \r\n \r\n };\r\n\r\n\r\n // const coursesEventIDArray = coursesEventId.slice();\r\n\r\n // while (typeof coursesEventIDArray[`${index}`] === 'undefined') {\r\n // coursesEventIDArray.push('');\r\n // }\r\n\r\n // coursesEventIDArray[`${index}`] = eventId;\r\n\r\n // coursesEventIDArray[`${index}`].trim();\r\n\r\n // setCoursesEventId(coursesEventIDArray);\r\n\r\n \r\n\r\n // callbackEventID(coursesEventIDArray);\r\n // };\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setChineseNameArray = (name: string, index: number) => {\r\n const chineseNameArray = chineseName.slice();\r\n\r\n while (typeof chineseNameArray[`${index}`] === 'undefined') {\r\n chineseNameArray.push('');\r\n }\r\n\r\n chineseNameArray[`${index}`] = name;\r\n\r\n chineseNameArray[`${index}`].trim();\r\n\r\n setChineseName(chineseNameArray);\r\n\r\n callbackChineseName(chineseNameArray);\r\n\r\n _checkChineseNamesEntered(chineseNameArray);\r\n\r\n };\r\n\r\n \r\n //const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkChineseNamesEntered = (chineseNameArray: string[]) => {\r\n let chineseNamesEntered = chineseNameArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < chineseNameArray.length; i++) {\r\n if (chineseNameArray[`${i}`].trim() === '') {\r\n chineseNamesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackChineseNamesEntered(chineseNamesEntered);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n\r\n \r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackChineseName(chineseNamesArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n callbackChineseNamesEntered(false);\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n \r\n \r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof chineseNamesArray[`${index}`] !== 'undefined') {\r\n if (chineseNamesArray.length > 1) {\r\n chineseNamesArray.splice(index, 1);\r\n } else {\r\n chineseNamesArray[0] = '';\r\n }\r\n } \r\n \r\n \r\n\r\n \r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackChineseName(chineseNamesArray);\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n _checkChineseNamesEntered(chineseNamesArray);\r\n\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingChineseNamesArray : string[]=[];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingChineseNamesArray.push(formItems[`${i}`]['chineseName']);\r\n\r\n \r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n \r\n existingCustomPriceAmount.push(customPriceAmount);\r\n }\r\n \r\n\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n \r\n\r\n callbackName(existingAttendeeName);\r\n \r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkChineseNamesEntered(existingChineseNamesArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n //setDonationAmount(existingDonationAmount);\r\n if(userValid && existingAttendeeName.length <=0)\r\n {\r\n \r\n existingAttendeeName.push(userInfo.firstname+' '+userInfo.lastname);\r\n existingChineseNamesArray.push(userInfo.gmb_fullnamechinese);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n\r\n callbackPrice(existingCustomPriceAmount);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackChineseName(existingChineseNamesArray);\r\n\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkChineseNamesEntered(existingChineseNamesArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n \r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n \r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n \r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildChineseName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{makeChinesNameMandatory?formLabels.chineseName:formLabels.chineseNameNotMandatory}

\r\n _setChineseNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = ( idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {remainingSlots !== 0 &&

{formLabels.availableSlots}{remainingSlots}

}\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildChineseName(idx)}\r\n {_buildContactNumber(idx)}\r\n\r\n {/* {_buildAmountField(element, idx)} */}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && showAddMoreButton &&\r\n
\r\n \r\n
} \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventChineseNameForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?:any;\r\n callbackContactNumber?:any;\r\n callbackEventID?:any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackNextOfKinName: any;\r\n callbackNextOfKinPhoneNumber: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n callbackPhoneNumbersEntered: any;\r\n allowMultipleRegistrations: boolean;\r\n insuranceAmount: string;\r\n insuranceFeeLabel: string;\r\n callbackInsuranceIncluded: any;\r\n callbackInsuranceIncludedNum: any;\r\n}\r\n\r\nconst EventNextOfKinNameForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo,productEvents,callbackEventID,callbackEvent , callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackNextOfKinName, callbackNextOfKinPhoneNumber, callbackPhoneNumbersEntered, allowMultipleRegistrations, insuranceAmount, insuranceFeeLabel, callbackInsuranceIncluded, callbackInsuranceIncludedNum}) => {\r\n\r\n var insuranceAmountValue = Number(insuranceAmount);\r\n const [customPrice, setCustomPrice] = useState([insuranceAmountValue]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [nextOfKinName, setNextOfKinName] = useState(['']);\r\n const [nextOfKinPhoneNumbers, setNextOfKinPhoneNumbers] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n const[remainingSlots, setRemainingSlots] = useState(0);\r\n\r\n const [isInsuranceIncluded, setIsInsuranceIncluded] = useState([false]);\r\n const [isInsuranceIncludedNum, setIsInsuranceIncludedNum] = useState([0]);\r\n \r\n\r\n\r\n const formLabels = resource.eventsNextOfKinNameForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n// const _onChangePriceValue = (event: any, index: number) => {\r\n// // _setRadioValueArray(event.target.value, index);\r\n\r\n// if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n// _setInputValueArray('0', index);\r\n// _setCustomPriceArray(0, index);\r\n// } else {\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// _setInputValueArray('', index);\r\n// }\r\n// };\r\n\r\n// const _setCustomPriceArray = (price: number, index: number) => {\r\n// const customPriceArray = customPrice.slice();\r\n\r\n// while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n// customPriceArray.push(0);\r\n// }\r\n\r\n// customPriceArray[`${index}`] = price;\r\n\r\n// setCustomPrice(customPriceArray);\r\n\r\n// callbackPrice(customPriceArray);\r\n\r\n// _checkPricesEntered(customPriceArray);\r\n// };\r\n\r\n// const _setRadioValueArray = (value: string, index: number) => {\r\n// const donationValueArray = donationAmount.slice();\r\n\r\n// while (typeof donationValueArray[`${index}`] === 'undefined') {\r\n// donationValueArray.push('');\r\n// }\r\n\r\n// donationValueArray[`${index}`] = value;\r\n\r\n// setDonationAmount(donationValueArray);\r\n// };\r\n\r\n// const _setInputValue = (event: any, index: number) => {\r\n// if (isNumeric(event.target.value)) {\r\n// _setInputValueArray(event.target.value, index);\r\n// // _setRadioValueArray(resource.otherLabel[`${localeCode}`], index);\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// }\r\n// };\r\n\r\n// const _setInputValueArray = (value: string, index: number) => {\r\n// const inputValueArray = inputValue.slice();\r\n\r\n// while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n// inputValueArray.push('');\r\n// }\r\n\r\n// inputValueArray[`${index}`] = value;\r\n\r\n// inputValueArray[`${index}`].trim();\r\n\r\n// setInputValue(inputValueArray);\r\n// };\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n //let eventObj = productEvents[0];\r\n \r\n // _setEventIdArray(eventObj['id'], 0);\r\n \r\n };\r\n\r\n const _setNextOfKinNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setNextOfKinNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n //let eventObj = productEvents[0];\r\n \r\n // _setEventIdArray(eventObj['id'], 0);\r\n \r\n };\r\n\r\n\r\n // const _setEventIdArray = (eventId: string, index: number) => {\r\n // const coursesEventIDArray = coursesEventId.slice();\r\n\r\n // while (typeof coursesEventIDArray[`${index}`] === 'undefined') {\r\n // coursesEventIDArray.push('');\r\n // }\r\n\r\n // coursesEventIDArray[`${index}`] = eventId;\r\n\r\n // coursesEventIDArray[`${index}`].trim();\r\n\r\n // setCoursesEventId(coursesEventIDArray);\r\n\r\n \r\n\r\n // callbackEventID(coursesEventIDArray);\r\n // };\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setNextOfKinNameArray = (name: string, index: number) => {\r\n const nextOfKinNameArray = nextOfKinName.slice();\r\n\r\n while (typeof nextOfKinNameArray[`${index}`] === 'undefined') {\r\n nextOfKinNameArray.push('');\r\n }\r\n\r\n nextOfKinNameArray[`${index}`] = name;\r\n\r\n nextOfKinNameArray[`${index}`].trim();\r\n\r\n setNextOfKinName(nextOfKinNameArray);\r\n\r\n callbackNextOfKinName(nextOfKinNameArray);\r\n\r\n };\r\n\r\n const _setNextOfKinPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = nextOfKinPhoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setNextOfKinPhoneNumbers(valueArray);\r\n\r\n callbackNextOfKinPhoneNumber(valueArray);\r\n }\r\n\r\n \r\n //const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const customPriceArray = customPrice.slice();\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n \r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackPrice(customPriceArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n\r\n _checkPricesEntered(customPriceArray);\r\n\r\n if (productEvents.length === 1) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n _setEventDates(eventObj, coursesEventArray.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const isInsuranceIncludedArray = isInsuranceIncluded.slice();\r\n const isInsuranceIncludedNumArray = isInsuranceIncludedNum.slice();\r\n \r\n \r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = insuranceAmountValue;\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinNamesArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinNamesArray.length > 1) {\r\n nextOfKinNamesArray.splice(index, 1);\r\n } else {\r\n nextOfKinNamesArray[0] = '';\r\n }\r\n } \r\n\r\n if (typeof nextOfKinPhoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinPhoneNumbersArray.length > 1) {\r\n nextOfKinPhoneNumbersArray.splice(index, 1);\r\n } else {\r\n nextOfKinPhoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof isInsuranceIncludedArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedArray.length > 1) {\r\n isInsuranceIncludedArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedArray[0] = false;\r\n }\r\n }\r\n\r\n if (typeof isInsuranceIncludedNumArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedNumArray.length > 1) {\r\n isInsuranceIncludedNumArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedNumArray[0] = 0;\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setIsInsuranceIncluded(isInsuranceIncludedArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackInsuranceIncluded(isInsuranceIncludedArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingNextOfKinNamesArray : string[]=[];\r\n const existingNextOfKinPhoneNumbersArray : string[]=[];\r\n const customPriceArray: number[] = [];\r\n const insuranceIncludeArray: boolean[] = [];\r\n const isInsuranceIncludedNumArray: number[]=[];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n const hasInsurance = formItems[`${i}`]['isInsuranceIncluded'] ? formItems[`${i}`]['isInsuranceIncluded'] : 0;\r\n\r\n const checkbox = document.getElementById('insurance_' + i) as HTMLInputElement | null;\r\n\r\n if (checkbox) {\r\n if(hasInsurance === 0)\r\n {\r\n checkbox.checked = false;\r\n }\r\n else\r\n {\r\n checkbox.checked = true;\r\n }\r\n }\r\n\r\n if (hasInsurance === 0) {\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n }\r\n else {\r\n customPriceArray.push(selectedProduct.result?.Price! + insuranceAmountValue);\r\n }\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingNextOfKinNamesArray.push(formItems[`${i}`]['nameNextKin']);\r\n existingNextOfKinPhoneNumbersArray.push(formItems[`${i}`]['contactNumberNextKin']);\r\n insuranceIncludeArray.push(hasInsurance === 0 ? false: true);\r\n isInsuranceIncludedNumArray.push(hasInsurance);\r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n }\r\n\r\n if (productEvents.length === 1) {\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDatesOnLoad(eventObj, formItems.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n \r\n\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n \r\n\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n \r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n } else {\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n existingNextOfKinNamesArray.push('');\r\n existingNextOfKinPhoneNumbersArray.push('');\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n }\r\n\r\n if(userValid && existingAttendeeName.length <=0)\r\n {\r\n existingAttendeeName.push(userInfo.firstname + ' ' + userInfo.lastname);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setIsInsuranceIncluded(insuranceIncludeArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackPrice(customPriceArray);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n\r\n _checkPricesEntered(customPriceArray);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n\r\n callbackInsuranceIncluded(insuranceIncludeArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n if (productEvents.length === 1 && formItems.length <= 0) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDates(eventObj, 0);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n else if(productEvents.length > 1){\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n _checkEventsEntered(eventNamesArray);\r\n }\r\n\r\n \r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n \r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n \r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _setEventDatesOnLoad = (event: any, formLength: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n for(let i=0; i< formLength; i++)\r\n {\r\n \r\n while (typeof selectValueArray[`${i}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${i}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n selectValueArray[`${i}`] = inputEventDates;\r\n eventIDArray[`${i}`] = inputEventIDs;\r\n\r\n }\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setInsuranceAmount = (value: boolean, index: number) => {\r\n const valueArray = isInsuranceIncluded.slice();\r\n const insuranceArray = customPrice.slice();\r\n const insuranceNumArray = isInsuranceIncludedNum.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(false);\r\n }\r\n\r\n while (typeof insuranceArray[`${index}`] === 'undefined') {\r\n insuranceArray.push(0);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n insuranceNumArray[`${index}`] = value === true? 1: 0;\r\n\r\n if (value === true) {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price! + insuranceAmountValue;\r\n\r\n }\r\n else {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price!;\r\n\r\n }\r\n\r\n\r\n setIsInsuranceIncluded(valueArray);\r\n setIsInsuranceIncludedNum(insuranceNumArray);\r\n setCustomPrice(insuranceArray);\r\n callbackPrice(insuranceArray);\r\n callbackInsuranceIncluded(valueArray);\r\n callbackInsuranceIncludedNum(insuranceNumArray);\r\n };\r\n\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n if (productEvents.length > 1) {\r\n return (\r\n
\r\n
\r\n

{formLabels.events}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n\r\n const event = productEvents[0];\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.events}

\r\n _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameNextOfKin}

\r\n _setNextOfKinNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = ( idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinContactNumber = ( idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumberNextOfKin}

\r\n _setNextOfKinPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildInsuranceField = (idx: number): JSX.Element | null => {\r\n if (typeof customPrice[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.tax}

\r\n

{formLabels.taxPrompt}

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n

{formLabels.availableSlots}{remainingSlots}

\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildContactNumber(idx)}\r\n {_buildNextOfKinName(idx)}\r\n {_buildNextOfKinContactNumber(idx)}\r\n {insuranceAmountValue !== 0 && _buildInsuranceField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${isInsuranceIncluded[`${idx}`] ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && showAddMoreButton &&\r\n
\r\n \r\n
} \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventNextOfKinNameForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport DatePicker from 'react-date-picker';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync, uploadImageFileToAzure } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport { Response } from '../../../components/enums';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?: any;\r\n callbackContactNumber?: any;\r\n callbackEventID?: any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackNextOfKinName: any;\r\n callbackNextOfKinPhoneNumber: any;\r\n callbackBirthDate: any;\r\n callbackPassportNumber: any;\r\n callbackPassportExpiryDate:any;\r\n callbackPassportIssuedDate: any;\r\n callbackConsent: any;\r\n callbackDateEntered: any;\r\n callbackPassportExpiryDateEntered: any;\r\n callbackPassportIssueDateEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n isUat: boolean;\r\n organisation: string;\r\n azureContainerName: string;\r\n callbackPhoneNumbersEntered: any;\r\n callbackPassportNumberEntered: any;\r\n callbackFileUploaded: any;\r\n isFileUploaded: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst EventPassportUploadForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo, productEvents, callbackEventID, callbackEvent, callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackNextOfKinName, callbackPhoneNumbersEntered, callbackNextOfKinPhoneNumber, callbackBirthDate, callbackDateEntered, isUat, organisation, azureContainerName,callbackPassportNumberEntered,callbackPassportExpiryDateEntered,callbackPassportIssueDateEntered, callbackFileUploaded,isFileUploaded,allowMultipleRegistrations,\r\ncallbackPassportNumber, callbackPassportExpiryDate, callbackPassportIssuedDate,callbackConsent,callbackRemarks, showRemarksField }) => {\r\n\r\n const [customPrice, setCustomPrice] = useState([0]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [chineseName, setChineseName] = useState(['']);\r\n const [nextOfKinName, setNextOfKinName] = useState(['']);\r\n const [nextOfKinPhoneNumbers, setNextOfKinPhoneNumbers] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [passportNumber, setPassportNumber] = useState(['']);\r\n const [passportExpiryDate, setPassportExpiryDate] = useState(['']);\r\n const [passportIssueDate, setPassportIssueDate] = useState(['']);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n const [remainingSlots, setRemainingSlots] = useState(0);\r\n const [file, setFile] = useState('');\r\n const [imageFiles, setImageFiles ] = useState(['']);\r\n const [isValidFileSize, setIsValidFileSize] = useState(false);\r\n const [consent, setConsent] = useState([1]);\r\n const [remark, setRemark] = useState(['']);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n\r\n const formLabels = resource.eventsPassportUploadForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const _setNextOfKinNameArray = (name: string, index: number) => {\r\n const nextOfKinNameArray = nextOfKinName.slice();\r\n\r\n while (typeof nextOfKinNameArray[`${index}`] === 'undefined') {\r\n nextOfKinNameArray.push('');\r\n }\r\n\r\n nextOfKinNameArray[`${index}`] = name;\r\n\r\n nextOfKinNameArray[`${index}`].trim();\r\n\r\n setNextOfKinName(nextOfKinNameArray);\r\n\r\n callbackNextOfKinName(nextOfKinNameArray);\r\n\r\n };\r\n\r\n const _setNextOfKinPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = nextOfKinPhoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setNextOfKinPhoneNumbers(valueArray);\r\n\r\n callbackNextOfKinPhoneNumber(valueArray);\r\n }\r\n\r\n const _setPassportNumber = (value: string, index: number) => {\r\n const valueArray = passportNumber.slice();\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n \r\n if (alphanumericRegex.test(value) && value.length <= 50) {\r\n valueArray[`${index}`] = value;\r\n\r\n setPassportNumber(valueArray);\r\n _checkPassportNumberEntered(valueArray);\r\n callbackPassportNumber(valueArray);\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n }\r\n\r\n const _setPassportExpiryDate = (value: Date, index: number) => {\r\n const valueArray = passportExpiryDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportExpiryDate(valueArray);\r\n _checkPassportExpiryDateEntered(valueArray);\r\n callbackPassportExpiryDate(valueArray);\r\n }\r\n\r\n const _setPassportIssueDate = (value: Date, index: number) => {\r\n const valueArray = passportIssueDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportIssueDate(valueArray);\r\n _checkPassportIssueDateEntered(valueArray);\r\n callbackPassportIssuedDate(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkPassportExpiryDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportExpiryDateEntered(checked);\r\n }\r\n\r\n const _checkPassportIssueDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportIssueDateEntered(checked);\r\n }\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setNextOfKinNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setNextOfKinNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const convertToBase64 = (file: any) => {\r\n return new Promise((resolve, reject) => {\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file);\r\n fileReader.onload = () => {\r\n resolve(fileReader.result);\r\n };\r\n fileReader.onerror = (error) => {\r\n reject(error);\r\n };\r\n });\r\n };\r\n\r\n const _validateFileSize = (file: any) => {\r\n const MAX_FILE_SIZE = 2e+7 // 20MB\r\n const fileSizeKiloBytes = file.size;\r\n\r\n if (fileSizeKiloBytes > MAX_FILE_SIZE) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n const _setFileInputValue = async (event: any, index: number) => {\r\n const imageFile = event.target.files[0];\r\n if (_validateFileSize(imageFile)) {\r\n const base64 = await convertToBase64(imageFile) as string;\r\n const base64String = base64.toString().replace(/^data:image\\/\\w+;base64,/, \"\");\r\n setFile(base64String);\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n while (typeof imageFileArray[`${index}`] === 'undefined') {\r\n imageFileArray.push('');\r\n }\r\n \r\n imageFileArray[`${index}`] = imageFile.name;\r\n \r\n imageFileArray[`${index}`].trim();\r\n\r\n setImageFiles(imageFileArray);\r\n setIsValidFileSize(true);\r\n }\r\n else {\r\n setIsValidFileSize(false);\r\n toast.error(formLabels.fileSizeErrorMsg);\r\n }\r\n };\r\n\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkFileUploaded = (imageFileArray: string[]) => {\r\n let imageFileUploaded = imageFileArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < imageFileArray.length; i++) {\r\n if (imageFileArray[`${i}`].trim() === '') {\r\n imageFileUploaded = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackFileUploaded(imageFileUploaded);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPassportNumberEntered = (passportNumbersArray: string[]) => {\r\n let passportNumbersEntered = passportNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < passportNumbersArray.length; i++) {\r\n if (passportNumbersArray[`${i}`].trim() === '') {\r\n passportNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPassportNumberEntered(passportNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n\r\n\r\n birthdayArray.push('');\r\n passportIssueDateArray.push('');\r\n passportExpiryDateArray.push('');\r\n imageFileArray.push('');\r\n passportNumberArray.push('');\r\n consentArray.push(1);\r\n remarkArray.push('');\r\n \r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setBirthDate(birthdayArray);\r\n setImageFiles(imageFileArray)\r\n setConsent(consentArray);\r\n setRemark(remarkArray);\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n callbackDateEntered(false);\r\n\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n _checkFileUploaded(imageFileArray);\r\n\r\n if(productEvents.length === 1)\r\n {\r\n \r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n \r\n _setEventDates(eventObj, coursesEventArray.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n\r\n }\r\n\r\n const _uploadFileToAzure = async (index: number) => {\r\n const env = isUat ? \"uat\" : \"prod\";\r\n const entity = organisation == \"BT\" ? \"btrts\" : \"gpbt\";\r\n const fileName = passportNumber[`${index}`] + \".jpeg\";\r\n const base64Image = file;\r\n const containerName = azureContainerName;\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n if (alphanumericRegex.test(passportNumber[`${index}`])) {\r\n\r\n const uploadFileResult = await uploadImageFileToAzure({ callerContext: actionContext }, env, entity, fileName, base64Image, containerName);\r\n\r\n if (uploadFileResult.toUpperCase() !== Response.SUCCESS) {\r\n toast.error(formLabels.fileUploadFailedMsg);\r\n }\r\n else {\r\n\r\n setImageFiles(imageFileArray);\r\n _checkFileUploaded(imageFileArray);\r\n // setIsFileUploaded(true);\r\n toast(formLabels.fileUploadSuccessMsg);\r\n }\r\n\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof chineseNamesArray[`${index}`] !== 'undefined') {\r\n if (chineseNamesArray.length > 1) {\r\n chineseNamesArray.splice(index, 1);\r\n } else {\r\n chineseNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinNamesArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinNamesArray.length > 1) {\r\n nextOfKinNamesArray.splice(index, 1);\r\n } else {\r\n nextOfKinNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinPhoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinPhoneNumbersArray.length > 1) {\r\n nextOfKinPhoneNumbersArray.splice(index, 1);\r\n } else {\r\n nextOfKinPhoneNumbersArray[0] = '';\r\n }\r\n }\r\n if (typeof birthdayArray[`${index}`] !== 'undefined') {\r\n if (birthdayArray.length > 1) {\r\n birthdayArray.splice(index, 1);\r\n } else {\r\n birthdayArray[0] = '';\r\n }\r\n }\r\n if (typeof passportNumberArray[`${index}`] !== 'undefined') {\r\n if (passportNumberArray.length > 1) {\r\n passportNumberArray.splice(index, 1);\r\n } else {\r\n passportNumberArray[0] = '';\r\n }\r\n }\r\n if (typeof passportExpiryDateArray[`${index}`] !== 'undefined') {\r\n if (passportExpiryDateArray.length > 1) {\r\n passportExpiryDateArray.splice(index, 1);\r\n } else {\r\n passportExpiryDateArray[0] = '';\r\n }\r\n }\r\n if (typeof passportIssueDateArray[`${index}`] !== 'undefined') {\r\n if (passportIssueDateArray.length > 1) {\r\n passportIssueDateArray.splice(index, 1);\r\n } else {\r\n passportIssueDateArray[0] = '';\r\n }\r\n }\r\n if (typeof imageFileArray[`${index}`] !== 'undefined') {\r\n if (imageFileArray.length > 1) {\r\n imageFileArray.splice(index, 1);\r\n } else {\r\n imageFileArray[0] = '';\r\n }\r\n }\r\n if (typeof consentArray[`${index}`] !== 'undefined') {\r\n if (consentArray.length > 1) {\r\n consentArray.splice(index, 1);\r\n } else {\r\n consentArray[0] = 1;\r\n }\r\n }\r\n if (typeof remarkArray[`${index}`] !== 'undefined') {\r\n if (remarkArray.length > 1) {\r\n remarkArray.splice(index, 1);\r\n } else {\r\n remarkArray[0] = '';\r\n }\r\n }\r\n\r\n\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setBirthDate(birthdayArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setImageFiles(imageFileArray);\r\n setConsent(consentArray);\r\n setRemark(remarkArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n \r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkDateEntered(birthdayArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingChineseNamesArray: string[] = [];\r\n const existingNextOfKinNamesArray: string[] = [];\r\n const existingNextOfKinPhoneNumbersArray: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingPassportNumber: string[] = [];\r\n const existingPassportIssueDate: string[] = [];\r\n const existingPassportExpiryDate: string[] = [];\r\n const imageFileArray: string[] = [];\r\n const existingConsent: number[] = [];\r\n const existingRemark: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : null;\r\n const passportExpiryDate = formItems[`${i}`]['passportExpiryDate'] !== '' ? new Date(formItems[`${i}`]['passportExpiryDate']) : null;\r\n const passportIssueDate = formItems[`${i}`]['passportIssuedDate'] !== '' ? new Date(formItems[`${i}`]['passportIssuedDate']) : null;\r\n\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingChineseNamesArray.push(formItems[`${i}`]['chineseName']);\r\n existingNextOfKinNamesArray.push(formItems[`${i}`]['nameNextKin']);\r\n existingNextOfKinPhoneNumbersArray.push(formItems[`${i}`]['contactNumberNextKin']);\r\n existingBirthDate.push(birthDate?birthDate.toISOString():'');\r\n existingPassportNumber.push(formItems[`${i}`]['passportNumber']);\r\n existingPassportIssueDate.push(passportIssueDate?passportIssueDate.toISOString():'');\r\n existingPassportExpiryDate.push(passportExpiryDate?passportExpiryDate.toISOString():'');\r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n existingConsent.push(1);\r\n existingCustomPriceAmount.push(customPriceAmount);\r\n existingRemark.push(formItems[`${i}`]['remarks']);\r\n imageFileArray.push('');\r\n\r\n if(productEvents.length === 1)\r\n {\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n \r\n _setEventDatesOnLoad(eventObj, formItems.length);\r\n callbackEventsSelected(true);\r\n \r\n }\r\n }\r\n\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setRemark(existingRemark);\r\n\r\n\r\n callbackName(existingAttendeeName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n callbackConsent(existingConsent);\r\n callbackRemarks(existingRemark);\r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkDateEntered(existingBirthDate);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n \r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n existingBirthDate.push('');\r\n existingPassportNumber.push('');\r\n existingPassportExpiryDate.push('');\r\n existingPassportIssueDate.push('');\r\n imageFileArray.push('');\r\n existingConsent.push(1);\r\n existingRemark.push('');\r\n }\r\n\r\n //setDonationAmount(existingDonationAmount);\r\n if (userValid && existingAttendeeName.length <= 0) {\r\n\r\n existingAttendeeName.push(userInfo.firstname + ' ' + userInfo.lastname);\r\n existingChineseNamesArray.push(userInfo.gmb_fullnamechinese);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setRemark(existingRemark);\r\n\r\n callbackMultiplier(multipliersArray);\r\n //callbackEvent(eventNamesArray);\r\n //callbackEventID(eventIDsArray);\r\n callbackBirthDate(existingBirthDate);\r\n callbackConsent(existingConsent);\r\n callbackRemarks(existingRemark);\r\n\r\n //_checkEventsEntered(eventNamesArray);\r\n \r\n callbackPrice(existingCustomPriceAmount);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n \r\n _checkDateEntered(existingBirthDate);\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n if(productEvents.length === 1 && formItems.length <= 0)\r\n {\r\n \r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n \r\n _setEventDates(eventObj, 0);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n else if(productEvents.length > 1){\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n _checkEventsEntered(eventNamesArray);\r\n }\r\n\r\n\r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remark.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemark(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _setEventDatesOnLoad = (event: any, formLength: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n for(let i=0; i< formLength; i++)\r\n {\r\n \r\n while (typeof selectValueArray[`${i}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${i}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n selectValueArray[`${i}`] = inputEventDates;\r\n eventIDArray[`${i}`] = inputEventIDs;\r\n\r\n }\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n }\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportExpiryDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportExpiryDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportExpiryDate}

\r\n _setPassportExpiryDate(date, idx)}\r\n value={passportExpiryDate[`${idx}`] === '' || passportExpiryDate[`${idx}`]?.includes('1900') ? null : new Date(passportExpiryDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportIssueDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportIssueDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportIssueDate}

\r\n _setPassportIssueDate(date, idx)}\r\n value={passportIssueDate[`${idx}`] === '' || passportIssueDate[`${idx}`]?.includes('1900') ? null : new Date(passportIssueDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n if(productEvents.length > 1)\r\n {\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n const event = productEvents[0];\r\n \r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n \r\n }\r\n\r\n const _buildUploadPassport = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.passportUpload}

\r\n
\r\n
\r\n _setFileInputValue(event, idx)}\r\n className='form-control'\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameNextOfKin}

\r\n _setNextOfKinNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumberNextOfKin}

\r\n _setNextOfKinPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.passportNumber}

\r\n _setPassportNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {remainingSlots !== 0 &&

{formLabels.availableSlots}{remainingSlots}

}\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildContactNumber(idx)}\r\n {_buildNextOfKinName(idx)}\r\n {_buildNextOfKinContactNumber(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildPassportNumber(idx)}\r\n {_buildPassportExpiryDate(idx)}\r\n {_buildPassportIssueDate(idx)}\r\n {_buildUploadPassport(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventPassportUploadForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NameBirthDatetimeForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackName, callbackBirthDate, callbackBirthTime,\r\n callbackNamesEntered, callbackDateEntered,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n\r\n const formLabels = resource.nameBirthDatetimeForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === null) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n\r\n ceremonyNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const birthDateArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackDateEntered(ceremonyNameArray);\r\n }\r\n\r\n if (typeof birthDateArray[`${index}`] !== 'undefined') {\r\n if (birthDateArray.length > 1) {\r\n birthDateArray.splice(index, 1);\r\n } else {\r\n birthDateArray[0] = '';\r\n }\r\n\r\n setBirthDate(birthDateArray);\r\n\r\n callbackName(birthDateArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkDateEntered(birthDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremonyName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingBirthDate);\r\n }\r\n }, [formItems])\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={new Date(1900,1,1)}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthTime = (idx: number): JSX.Element | null => {\r\n if (typeof birthTime[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildBirthTime(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NameBirthDatetimeForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-datepicker';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackSchoolName: any;\r\n callbackBlessingOption: any;\r\n callbackNamesEntered?: any;\r\n callbackSchoolsEntered: any;\r\n callbackDateEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NameBirthdaySchoolForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackEvent, callbackEventID, callbackName, callbackBirthDate, callbackSchoolName, callbackBlessingOption, callbackNamesEntered, callbackSchoolsEntered, callbackDateEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState([new Date().toISOString()]);\r\n const [schoolName, setSchoolName] = useState(['']);\r\n const [optionValue, setOptionValue] = useState([resource.optionInPersonLabel[`${localeCode}`]]);\r\n\r\n const formLabels = resource.nameBirthdaySchoolForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n if (value) {\r\n valueArray[`${index}`] = value.toISOString();\r\n }\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setSchoolName = (name: string, index: number) => {\r\n const valueArray = schoolName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setSchoolName(valueArray);\r\n\r\n callbackSchoolName(valueArray);\r\n\r\n _checkSchoolEntered(valueArray);\r\n }\r\n\r\n const _setOptionValueArray = (value: string, index: number) => {\r\n const valueArray = optionValue.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.optionInPersonLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setOptionValue(valueArray);\r\n\r\n callbackBlessingOption(valueArray);\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkSchoolEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackSchoolsEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === null) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const radioValueArray = optionValue.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n dateValueArray.push(new Date().toISOString());\r\n schoolNameArray.push('');\r\n radioValueArray.push(resource.optionInPersonLabel[`${localeCode}`]);\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setSchoolName(schoolNameArray);\r\n setOptionValue(radioValueArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackSchoolName(schoolNameArray);\r\n callbackBlessingOption(radioValueArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackSchoolsEntered(false);\r\n callbackDateEntered(true);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const blessingOptionArray = optionValue.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const birthDateArray = birthDate.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackDateEntered(ceremonyNameArray);\r\n }\r\n\r\n if (typeof blessingOptionArray[`${index}`] !== 'undefined') {\r\n if (blessingOptionArray.length > 1) {\r\n blessingOptionArray.splice(index, 1);\r\n } else {\r\n blessingOptionArray[0] = resource.optionInPersonLabel[`${localeCode}`];\r\n }\r\n\r\n setOptionValue(blessingOptionArray);\r\n\r\n callbackBlessingOption(blessingOptionArray);\r\n }\r\n\r\n if (typeof schoolNameArray[`${index}`] !== 'undefined') {\r\n if (schoolNameArray.length > 1) {\r\n schoolNameArray.splice(index, 1);\r\n } else {\r\n schoolNameArray[0] = '';\r\n }\r\n\r\n setSchoolName(schoolNameArray);\r\n\r\n callbackSchoolName(schoolNameArray);\r\n }\r\n\r\n if (typeof birthDateArray[`${index}`] !== 'undefined') {\r\n if (birthDateArray.length > 1) {\r\n birthDateArray.splice(index, 1);\r\n } else {\r\n birthDateArray[0] = new Date().toISOString();\r\n }\r\n\r\n setBirthDate(birthDateArray);\r\n\r\n callbackName(birthDateArray);\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkSchoolEntered(schoolNameArray);\r\n _checkDateEntered(birthDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingSchoolName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingRadioValue.push(formItems[`${i}`]['blessingOption'] !== '' ? formItems[`${i}`]['blessingOption'] : resource.optionInPersonLabel[`${localeCode}`]);\r\n existingSchoolName.push(formItems[`${i}`]['schoolName']);\r\n existingBirthDate.push(birthDate.toISOString());\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setSchoolName(existingSchoolName);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackSchoolName(existingSchoolName);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkSchoolEntered(existingSchoolName);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingBirthDate.push(new Date().toISOString());\r\n existingRadioValue.push(resource.optionInPersonLabel[`${localeCode}`]);\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n setOptionValue(existingRadioValue);\r\n setBirthDate(existingBirthDate);\r\n\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n callbackBlessingOption(existingRadioValue);\r\n callbackBirthDate(existingBirthDate);\r\n\r\n _checkDateEntered(existingBirthDate);\r\n }, [formItems])\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n placeholderText='DD/MM/YYYY'\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildSchoolField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.schoolName}

\r\n _setSchoolName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildOptionField = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.option}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildSchoolField(idx)}\r\n {_buildOptionField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NameBirthdaySchoolForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\n//import Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n//import { toast } from 'react-toastify';\r\n\r\n//import countries from '../resources/countries.json';\r\n//import period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\n//import time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, /*ITimeRange*/ } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackStartDate: any;\r\n callbackName: any;\r\n callbackNamesEntered: any;\r\n callbackDateEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NamesDedicationStartDateForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackStartDate, callbackName, \r\n callbackNamesEntered, callbackDateEntered, \r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n\r\n const [startDates, setStartDates] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.nameDedicationDateForm[`${localeCode}`];\r\n \r\n\r\n const startDate = new Date();\r\n startDate.setDate(startDate.getDate() + 1);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n \r\n\r\n const _setStartDate = (value: Date, index: number) => {\r\n const valueArray = startDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(startDate.toISOString());\r\n }\r\n\r\n value.setHours(0, 0, 0, 0);\r\n\r\n const date = value ? value.toISOString() : startDate.toISOString();\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n setStartDates(valueArray);\r\n\r\n callbackStartDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _formatNameInput = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setName(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setName = (name: string, index: number) => {\r\n const valueArray = names.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n \r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (startDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = startDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const startDateInvalid = startDatesArray[`${i}`] === undefined || startDatesArray[`${i}`] === '' ? true : false;\r\n\r\n if (startDateInvalid ) {\r\n result = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n \r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n\r\n startDatesArray.push(startDate.toDateString());\r\n namesArray.push('');\r\n setMultiplers(multipliersArray);\r\n setStartDates(startDatesArray);\r\n setNames(namesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n callbackName(namesArray);\r\n\r\n callbackNamesEntered(false);\r\n \r\n _checkDateEntered(startDatesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n\r\n if (typeof startDatesArray[`${index}`] !== 'undefined') {\r\n if (startDatesArray.length > 1) {\r\n startDatesArray.splice(index, 1);\r\n } else {\r\n startDatesArray[0] = startDate.toISOString();\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n _checkNameEntered(namesArray);\r\n _checkDateEntered(startDatesArray);\r\n\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const startDatesArray: string[] = [];\r\n const namesArray: string[] = [];\r\n\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n \r\n startDatesArray.push(formItems[`${i}`]['startDate'] ? formItems[`${i}`]['startDate'] : startDate.toISOString());\r\n namesArray.push(formItems[`${i}`]['names'][0]);\r\n\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n \r\n _checkNameEntered(namesArray);\r\n \r\n } else {\r\n \r\n startDatesArray.push(startDate.toISOString());\r\n \r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n\r\n _checkDateEntered(startDatesArray);\r\n }, [formItems])\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.startDate}

\r\n _setStartDate(date, idx)}\r\n value={startDates[`${idx}`] === '' || startDates[`${idx}`].includes('1900') ? null : new Date(startDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={startDate}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _formatNameInput(event, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildDedicationPeriod(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesDedicationStartDateForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\nimport countries from '../resources/countries.json';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackPhoneNumber: any;\r\n callbackNamesEntered?: any;\r\n callbackAddressEntered: any;\r\n callbackPhoneNumbersEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NamesAddressContactnoForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry, callbackPhoneNumber, callbackNamesEntered, callbackAddressEntered, callbackPhoneNumbersEntered, formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [serialNumber, setSerialNumber] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n\r\n const formLabels = resource.namesAddressContactnoForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n callbackNamesEntered(false);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const serialNumberArray = serialNumber.slice();\r\n\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof serialNumberArray[`${index}`] !== 'undefined') {\r\n if (serialNumberArray.length > 1) {\r\n serialNumberArray.splice(index, 1);\r\n } else {\r\n serialNumberArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackPhoneNumber(phoneNumbersArray);\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSerialNumber(serialNumberArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingEventName: string[] = [];\r\n const existingEventID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n const phoneNumbersArray: string[] = [];\r\n\r\n // formItems could possibly be populated by past transactions/drafts/coming from cart.\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemCommentParts = formItems[`${i}`]['names'];\r\n \r\n let count = 0;\r\n let ceremonyName = '';\r\n\r\n while (typeof itemCommentParts[`${count}`] !== 'undefined') {\r\n ceremonyName += itemCommentParts[`${count}`];\r\n\r\n if (typeof itemCommentParts[count + 1] !== 'undefined') {\r\n ceremonyName += ';';\r\n }\r\n\r\n count++;\r\n }\r\n\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n existingCeremonyName.push(ceremonyName);\r\n\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n phoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n } else {\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n }\r\n\r\n setCeremonyValue(existingEventName);\r\n setCeremonyIDValue(existingEventID);\r\n\r\n callbackEvent(existingEventName);\r\n callbackEventID(existingEventID);\r\n }, [formItems]);\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n\r\n
\r\n

{formLabels.addressPhone}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesAddressContactnoForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NamesOnlyForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [serialNumber, setSerialNumber] = useState(['']);\r\n\r\n const formLabels = resource.namesOnlyForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const serialNumberArray = serialNumber.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof serialNumberArray[`${index}`] !== 'undefined') {\r\n if (serialNumberArray.length > 1) {\r\n serialNumberArray.splice(index, 1);\r\n } else {\r\n serialNumberArray[0] = '';\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSerialNumber(serialNumberArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingEventName: string[] = [];\r\n const existingEventID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n\r\n // formItems could possibly be populated by past transactions/drafts/coming from cart.\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemCommentParts = formItems[`${i}`]['names'];\r\n \r\n let count = 0;\r\n let ceremonyName = '';\r\n\r\n while (typeof itemCommentParts[`${count}`] !== 'undefined') {\r\n ceremonyName += itemCommentParts[`${count}`];\r\n\r\n if (typeof itemCommentParts[count + 1] !== 'undefined') {\r\n ceremonyName += ';';\r\n }\r\n\r\n count++;\r\n }\r\n\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n existingCeremonyName.push(ceremonyName);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n\r\n callbackName(existingCeremonyName);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n }\r\n\r\n setCeremonyValue(existingEventName);\r\n setCeremonyIDValue(existingEventID);\r\n\r\n callbackEvent(existingEventName);\r\n callbackEventID(existingEventID);\r\n }, [formItems]);\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesOnlyForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackRemarks?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst NamesRemarksForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackRemarks, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations,showRemarksField }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [serialNumber, setSerialNumber] = useState(['']);\r\n const [remark, setRemark] = useState(['']);\r\n\r\n const formLabels = resource.namesRemarksForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remark.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemark(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const remarkArray = remark.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n remarkArray.push('');\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setRemark(remarkArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackRemarks(remarkArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const serialNumberArray = serialNumber.slice();\r\n const remarkArray = remark.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof serialNumberArray[`${index}`] !== 'undefined') {\r\n if (serialNumberArray.length > 1) {\r\n serialNumberArray.splice(index, 1);\r\n } else {\r\n serialNumberArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof remarkArray[`${index}`] !== 'undefined') {\r\n if (remarkArray.length > 1) {\r\n remarkArray.splice(index, 1);\r\n } else {\r\n remarkArray[0] = '';\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSerialNumber(serialNumberArray);\r\n setRemark(remarkArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackRemarks(remarkArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingEventName: string[] = [];\r\n const existingEventID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingRemark: string[] = [];\r\n\r\n // formItems could possibly be populated by past transactions/drafts/coming from cart.\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemCommentParts = formItems[`${i}`]['names'];\r\n \r\n let count = 0;\r\n let ceremonyName = '';\r\n\r\n while (typeof itemCommentParts[`${count}`] !== 'undefined') {\r\n ceremonyName += itemCommentParts[`${count}`];\r\n\r\n if (typeof itemCommentParts[count + 1] !== 'undefined') {\r\n ceremonyName += ';';\r\n }\r\n\r\n count++;\r\n }\r\n\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n existingCeremonyName.push(ceremonyName);\r\n existingRemark.push(formItems[`${i}`]['remarks']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setRemark(existingRemark);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackRemarks(existingRemark);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n }\r\n\r\n setCeremonyValue(existingEventName);\r\n setCeremonyIDValue(existingEventID);\r\n\r\n callbackEvent(existingEventName);\r\n callbackEventID(existingEventID);\r\n }, [formItems]);\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesRemarksForm;","import React, { useState, useEffect } from \"react\";\r\n\r\nimport { useForm } from \"react-hook-form\";\r\n\r\nimport moment from \"moment\";\r\n\r\nimport resource from \"../resources/resource.json\";\r\n\r\nimport { getCartState } from \"@msdyn365-commerce/global-state\";\r\nimport { SimpleProduct, AsyncResult } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\nimport {\r\n deleteBTGPCartLineAsync,\r\n getAllBTGPCartLineAsync,\r\n} from \"../../../actions/DataActionExtension.g\";\r\n\r\nimport { IField, IdState } from \"../ecomm-product-details-form.data\";\r\nimport { IEcommProductDetailsFormConfig } from \"../ecomm-product-details-form.props.autogenerated\";\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n renewableLamps: [];\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n replaceRow(noOfRows: number, idx: number[]): void;\r\n deleteRow(idx: number): void;\r\n removeLamp(serialId: string): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackNoOfYear?: any;\r\n callbackLightOption?: any;\r\n callbackValidFrom?: any;\r\n callbackValidTo?: any;\r\n callbackOldName?: any;\r\n callbackNameChange?: any;\r\n callbackSerialNumber?: any;\r\n callbackSerialId?: any;\r\n callbackSerialNames: any;\r\n callbackNamesEntered?: any;\r\n formItems: any[];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n addRenewLamp: boolean;\r\n itemUnavailable: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NoOfYearsCategoryNamesForm: React.FC = ({\r\n formScheme,\r\n selectedProduct,\r\n renewableLamps,\r\n rowsData,\r\n addRow,\r\n replaceRow,\r\n deleteRow,\r\n removeLamp,\r\n callbackName,\r\n callbackCategory,\r\n callbackNoOfYear,\r\n callbackLightOption,\r\n callbackValidFrom,\r\n callbackValidTo,\r\n callbackOldName,\r\n callbackNameChange,\r\n callbackSerialId,\r\n callbackSerialNumber,\r\n callbackSerialNames,\r\n callbackNamesEntered,\r\n formItems,\r\n config,\r\n localeCode,\r\n actionContext,\r\n isMobile,\r\n isEditMode,\r\n addRenewLamp,\r\n itemUnavailable,\r\n allowMultipleRegistrations\r\n}) => {\r\n const [serialNumberValue, setSerialNumberValue] = useState([\"\"]);\r\n const [serialIdValue, setSerialIdValue] = useState([\"\"]);\r\n const [serialNames, setSerialNames] = useState([\"\"]);\r\n const [lightValue, setLightValue] = useState([\"New\"]);\r\n const [yearValue, setYearValue] = useState([1]);\r\n const [startYearValue, setStartYearValue] = useState([\r\n new Date().toISOString(),\r\n ]);\r\n const [endYearValue, setEndYearValue] = useState([\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString(),\r\n ]);\r\n const [nameChangeValue, setNameChangeValue] = useState([\"\"]);\r\n const [oldNameValue, setOldNameValue] = useState([\"\"]);\r\n const [radioValue, setRadioValue] = useState([\r\n resource.categoryFamilyLabel[`${localeCode}`],\r\n ]);\r\n const [ceremonyName, setCeremonyName] = useState([\"\"]);\r\n //const [clickAddItem, setAddItem] = useState(false);\r\n\r\n const formLabels = resource.noOfYearsCategoryNamesForm[`${localeCode}`];\r\n const noOfNames = formScheme.find((form) => form.field_type === \"textBox\")!\r\n .field_number!;\r\n const companyNames = formScheme.find((form) => form.field_type === \"textBox\")!\r\n .field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeYearValue = (event: any, index: number) => {\r\n _setYearValueArray(event.target.value, index);\r\n _setValidValueArray(event.target.value, index);\r\n };\r\n\r\n const _onChangeNameChangeValue = (event: any, index: number) => {\r\n _setNameChangeValueArray(event.target.value, index);\r\n _setOldNameValueArray(event.target.value, index);\r\n };\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n\r\n const existingNameArray = existingCeremonyName.split(\";\");\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += \";\".repeat(\r\n noOfNames - existingNameArray.length - 1\r\n );\r\n } else {\r\n // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n\r\n existingCeremonyName = existingNameArray.join(\";\");\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += \";\".repeat(\r\n companyNames - existingNameArray.length - 1\r\n );\r\n } else {\r\n // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(\";\");\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n };\r\n\r\n const _setNameChangeValueArray = (value: string, index: number) => {\r\n const nameChangeValueArray = nameChangeValue.slice();\r\n\r\n while (typeof nameChangeValueArray[`${index}`] === \"undefined\") {\r\n nameChangeValueArray.push(\"\");\r\n }\r\n\r\n nameChangeValueArray[`${index}`] = value;\r\n\r\n nameChangeValueArray[`${index}`].trim();\r\n\r\n setNameChangeValue(nameChangeValueArray);\r\n callbackNameChange(nameChangeValueArray);\r\n };\r\n\r\n const _setOldNameValueArray = (value: string, index: number) => {\r\n const oldNameValueArray = oldNameValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof oldNameValueArray[`${index}`] === \"undefined\") {\r\n oldNameValueArray.push(\"\");\r\n }\r\n\r\n if (oldNameValueArray[`${index}`] === \"\") {\r\n if (value === \"Yes\") {\r\n oldNameValueArray[`${index}`] = ceremonyName[`${index}`];\r\n }\r\n\r\n setOldNameValue(oldNameValueArray);\r\n callbackOldName(oldNameValueArray);\r\n } else {\r\n if (value === \"No\") {\r\n ceremonyNameArray[`${index}`] = oldNameValueArray[`${index}`];\r\n oldNameValueArray[`${index}`] = \"\";\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n callbackName(ceremonyNameArray);\r\n setOldNameValue(oldNameValueArray);\r\n callbackOldName(oldNameValueArray);\r\n }\r\n }\r\n };\r\n\r\n const _setYearValueArray = (value: string, index: number) => {\r\n let yearValueArray = yearValue.slice();\r\n\r\n while (typeof yearValueArray[`${index}`] === \"undefined\") {\r\n yearValueArray.push(1);\r\n }\r\n\r\n yearValueArray[`${index}`] = +value;\r\n\r\n setYearValue(yearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n };\r\n\r\n const _setValidValueArray = (value: string, index: number) => {\r\n let startYearValueArray = startYearValue.slice();\r\n let endYearValueArray = endYearValue.slice();\r\n\r\n while (typeof startYearValueArray[`${index}`] === \"undefined\") {\r\n startYearValueArray.push(new Date().toISOString());\r\n }\r\n\r\n while (typeof endYearValueArray[`${index}`] === \"undefined\") {\r\n endYearValueArray.push(\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString()\r\n );\r\n }\r\n\r\n startYearValueArray[`${index}`] = new Date(\r\n startYearValueArray[`${index}`]\r\n ).toISOString();\r\n endYearValueArray[`${index}`] = new Date(\r\n new Date(startYearValueArray[`${index}`]).setFullYear(\r\n new Date(startYearValueArray[`${index}`]).getFullYear() + +value\r\n )\r\n ).toISOString();\r\n\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === \"undefined\") {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(\";\");\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : \"\";\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const _setNameMultipleInputValue = (\r\n event: any,\r\n index: number,\r\n nameIndex: number,\r\n noOfNames: number\r\n ) => {\r\n const maxLength = config.charactersLimitForNames\r\n ? config.charactersLimitForNames\r\n : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(\";\")) {\r\n inputMultipleName += \";\".repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(\";\");\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(\";\");\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === \"undefined\") {\r\n ceremonyNameArray.push(\"\");\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, \"\").trim() === \"\") {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n };\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const serialNumberValueArray = serialNumberValue.slice();\r\n const serialIdValueArray = serialIdValue.slice();\r\n const serialNamesArray = serialNames.slice();\r\n const lightOptionValueArray = lightValue.slice();\r\n const startYearValueArray = startYearValue.slice();\r\n const endYearValueArray = endYearValue.slice();\r\n const yearValueArray = yearValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n serialNumberValueArray.push(\"\");\r\n serialIdValueArray.push(\"\");\r\n serialNamesArray.push(\"\");\r\n lightOptionValueArray.push(\"New\");\r\n startYearValueArray.push(new Date().toISOString());\r\n endYearValueArray.push(\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString()\r\n );\r\n yearValueArray.push(1);\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push(\"\");\r\n\r\n setSerialNumberValue(serialNumberValueArray);\r\n setSerialIdValue(serialIdValueArray);\r\n setSerialNames(serialNamesArray);\r\n setLightValue(lightOptionValueArray);\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n setYearValue(yearValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackSerialNumber(serialNumberValueArray);\r\n callbackSerialId(serialIdValueArray);\r\n callbackSerialNames(serialNamesArray);\r\n callbackLightOption(lightOptionValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackNamesEntered(false);\r\n };\r\n\r\n const _addItemRenewSerial = async () => {\r\n let serialNumberValueArray = serialNumberValue.slice();\r\n let serialIdValueArray = serialIdValue.slice();\r\n let serialNamesArray = serialNames.slice();\r\n let lightOptionValueArray = lightValue.slice();\r\n let startYearValueArray = startYearValue.slice();\r\n let endYearValueArray = endYearValue.slice();\r\n let yearValueArray = yearValue.slice();\r\n let categoryValueArray = radioValue.slice();\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let nameChangeValueArray = nameChangeValue.slice();\r\n let oldNameValueArray = oldNameValue.slice();\r\n\r\n let indexArray = [];\r\n \r\n\r\n for(let j=0; j< serialNumberValue.length; j++){\r\n\r\n for (let i = 0; i < serialNumberValueArray.length; i++) {\r\n if (\r\n serialNumberValueArray[`${i}`] == \"\" &&\r\n lightOptionValueArray[`${i}`] == \"New\" &&\r\n ceremonyNameArray[`${i}`] == \"\"\r\n ) {\r\n\r\n indexArray.push(i);\r\n\r\n serialNumberValueArray.splice(i,1);\r\n serialIdValueArray.splice(i,1);\r\n serialNamesArray.splice(i,1);\r\n lightOptionValueArray.splice(i,1);\r\n startYearValueArray.splice(i,1);\r\n endYearValueArray.splice(i,1);\r\n yearValueArray.splice(i,1);\r\n categoryValueArray.splice(i,1);\r\n ceremonyNameArray.splice(i,1);\r\n nameChangeValueArray.splice(i,1);\r\n\r\n break\r\n }\r\n }\r\n }\r\n\r\n let numberOfLamps = 0;\r\n\r\n for (let i = 0; i < renewableLamps.length; i++) {\r\n if (\r\n renewableLamps[`${i}`][\"isAdded\"] == false &&\r\n renewableLamps[`${i}`][\"isChecked\"] == true &&\r\n serialIdValueArray.findIndex(\r\n (id) => id === renewableLamps[`${i}`][\"serialId\"]\r\n ) < 0\r\n ) {\r\n numberOfLamps++;\r\n\r\n serialNumberValueArray.push(renewableLamps[`${i}`][\"serialNumber\"]);\r\n serialIdValueArray.push(renewableLamps[`${i}`][\"serialId\"]);\r\n serialNamesArray.push(renewableLamps[`${i}`][\"serialName\"]);\r\n lightOptionValueArray.push(\"Renew\");\r\n startYearValueArray.push(\r\n new Date(renewableLamps[`${i}`][\"validTo\"]).toISOString()\r\n );\r\n endYearValueArray.push(\r\n new Date(\r\n new Date(renewableLamps[`${i}`][\"validTo\"]).setFullYear(\r\n new Date(renewableLamps[`${i}`][\"validTo\"]).getFullYear() + 1\r\n )\r\n ).toISOString()\r\n );\r\n yearValueArray.push(1);\r\n categoryValueArray.push(renewableLamps[`${i}`][\"category\"]);\r\n ceremonyNameArray.push(\r\n renewableLamps[`${i}`][\"name_1\"] +\r\n \";\" +\r\n renewableLamps[`${i}`][\"name_2\"]\r\n );\r\n nameChangeValueArray.push(\"No\");\r\n oldNameValueArray.push(\"\");\r\n }\r\n }\r\n\r\n if (indexArray.length > 0) {\r\n replaceRow(numberOfLamps, indexArray);\r\n } else {\r\n addRow(numberOfLamps);\r\n }\r\n \r\n\r\n setSerialNumberValue(serialNumberValueArray);\r\n setSerialIdValue(serialIdValueArray);\r\n setSerialNames(serialNamesArray);\r\n setLightValue(lightOptionValueArray);\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n setYearValue(yearValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setNameChangeValue(nameChangeValueArray);\r\n\r\n callbackSerialNumber(serialNumberValueArray);\r\n callbackSerialId(serialIdValueArray);\r\n callbackSerialNames(serialNamesArray);\r\n callbackLightOption(lightOptionValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackNameChange(nameChangeValueArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== \"undefined\") {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync(\r\n { callerContext: actionContext },\r\n cartState.cart.Id\r\n );\r\n\r\n if (cartItems.length > 0 && formItems[`${index}`][\"cartLineId\"]) {\r\n let removeCartLinesResult = await cartState.removeCartLines({\r\n cartLineIds: [formItems[`${index}`][\"cartLineId\"]],\r\n });\r\n\r\n if (removeCartLinesResult.status === \"SUCCESS\") {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync(\r\n { callerContext: actionContext },\r\n formItems[`${index}`][\"cartLineId\"]\r\n );\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n };\r\n\r\n const _updateStateData = (index: number) => {\r\n const serialNumberValueArray = serialNumberValue.slice();\r\n const serialIdValueArray = serialIdValue.slice();\r\n const serialNamesArray = serialNames.slice();\r\n const lightOptionValueArray = lightValue.slice();\r\n const startYearValueArray = startYearValue.slice();\r\n const endYearValueArray = endYearValue.slice();\r\n const yearValueArray = yearValue.slice();\r\n const nameChangeArray = nameChangeValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const oldNameArray = oldNameValue.slice();\r\n\r\n\r\n if (typeof serialNumberValueArray[`${index}`] !== \"undefined\") {\r\n if (serialNumberValueArray.length > 1) {\r\n serialNumberValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n serialNumberValueArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof serialIdValueArray[`${index}`] !== \"undefined\") {\r\n if (serialIdValueArray[`${index}`] !== \"\") {\r\n removeLamp(serialIdValueArray[`${index}`]);\r\n }\r\n if (serialIdValueArray.length > 1) {\r\n serialIdValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n serialIdValueArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof serialNamesArray[`${index}`] !== \"undefined\") {\r\n\r\n if (serialNamesArray.length > 1) {\r\n \r\n serialNamesArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable){\r\n serialNamesArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof lightOptionValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (lightOptionValueArray.length > 1) {\r\n lightOptionValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable){\r\n lightOptionValueArray[0] = \"New\";\r\n }\r\n }\r\n\r\n if (typeof startYearValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (startYearValueArray.length > 1) {\r\n startYearValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n startYearValueArray[0] = new Date().toISOString();\r\n }\r\n }\r\n\r\n if (typeof endYearValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (endYearValueArray.length > 1) {\r\n endYearValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n endYearValueArray[0] = new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString();\r\n }\r\n }\r\n\r\n if (typeof yearValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (yearValueArray.length > 1) {\r\n yearValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n yearValueArray[0] = 1;\r\n }\r\n }\r\n\r\n if (typeof nameChangeArray[`${index}`] !== \"undefined\") {\r\n\r\n if (nameChangeArray.length > 1) {\r\n nameChangeArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n nameChangeArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== \"undefined\") {\r\n\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n ceremonyNameArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof oldNameArray[`${index}`] !== \"undefined\") {\r\n\r\n if (oldNameArray.length >= 1) {\r\n oldNameArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n oldNameArray[0] = \"\";\r\n }\r\n }\r\n\r\n setSerialNumberValue(serialNumberValueArray);\r\n setSerialIdValue(serialIdValueArray);\r\n setSerialNames(serialNamesArray);\r\n setLightValue(lightOptionValueArray);\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n setYearValue(yearValueArray);\r\n setNameChangeValue(nameChangeArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setOldNameValue(oldNameArray);\r\n\r\n callbackSerialNumber(serialNumberValueArray);\r\n callbackSerialId(serialIdValueArray);\r\n callbackSerialNames(serialNamesArray);\r\n callbackLightOption(lightOptionValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n callbackNameChange(nameChangeArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackOldName(oldNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n useEffect(() => {\r\n const existingCeremonyName: string[] = [];\r\n const existingStartYearValue: string[] = [];\r\n const existingEndYearValue: string[] = [];\r\n const existingYearValue: number[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingLightOptionValue: string[] = [];\r\n const existingNameChangeValue: string[] = [];\r\n const existingOldNameValue: string[] = [];\r\n\r\n if (\r\n formItems.length > 0 &&\r\n typeof formItems[0][\"isPastTransaction\"] !== \"undefined\" &&\r\n formItems[0][\"isPastTransaction\"] != true\r\n ) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`][\"names\"];\r\n const itemYear = formItems[`${i}`][\"quantity\"];\r\n const itemCategory = formItems[`${i}`][\"category\"];\r\n const itemLightOption = formItems[`${i}`][\"lightOption\"];\r\n const itemValidFrom = formItems[`${i}`][\"validFrom\"];\r\n const itemValidTo = formItems[`${i}`][\"validTo\"];\r\n const itemNameChange = formItems[`${i}`][\"nameChange\"];\r\n const itemOldName_1 = formItems[`${i}`][\"oldName_1\"];\r\n const itemOldName_2 = formItems[`${i}`][\"oldName_2\"];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = companyNames;\r\n }\r\n\r\n let itemName = \"\";\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += \";\" + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremonyName.push(itemName);\r\n\r\n if (itemValidFrom) {\r\n existingStartYearValue.push(new Date(itemValidFrom).toISOString());\r\n } else {\r\n existingStartYearValue.push(new Date().toISOString());\r\n }\r\n\r\n if (itemValidTo) {\r\n existingEndYearValue.push(new Date(itemValidTo).toISOString());\r\n } else {\r\n existingEndYearValue.push(\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + itemYear)\r\n ).toISOString()\r\n );\r\n }\r\n\r\n existingYearValue.push(itemYear);\r\n existingRadioValue.push(itemCategory);\r\n existingLightOptionValue.push(\r\n itemLightOption !== \"\" ? itemLightOption : \"New\"\r\n );\r\n existingNameChangeValue.push(itemNameChange);\r\n\r\n if (itemOldName_1 !== \"\") {\r\n let oldName = itemOldName_1 + \";\" + itemOldName_2;\r\n existingOldNameValue.push(oldName);\r\n }\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setStartYearValue(existingStartYearValue);\r\n setEndYearValue(existingEndYearValue);\r\n setYearValue(existingYearValue);\r\n setRadioValue(existingRadioValue);\r\n setLightValue(existingLightOptionValue);\r\n setNameChangeValue(existingNameChangeValue);\r\n setOldNameValue(existingOldNameValue);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackValidFrom(existingStartYearValue);\r\n callbackValidTo(existingEndYearValue);\r\n callbackNoOfYear(existingYearValue);\r\n callbackCategory(existingRadioValue);\r\n callbackLightOption(existingLightOptionValue);\r\n callbackNameChange(existingNameChangeValue);\r\n callbackOldName(existingOldNameValue);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n callbackCategory(radioValue);\r\n callbackLightOption(lightValue);\r\n callbackValidFrom(startYearValue);\r\n callbackValidTo(endYearValue);\r\n }\r\n if (addRenewLamp == true) {\r\n _addItemRenewSerial();\r\n }\r\n }, [formItems, addRenewLamp]);\r\n\r\n const _buildNoOfYearsField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.years}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildNameChangeField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameChangePrompt}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildSponsorshipPeriodField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.period}

\r\n

\r\n {moment(startYearValue[`${idx}`]).format(\"DD MMM YYYY\")} -{\" \"}\r\n {moment(endYearValue[`${idx}`]).format(\"DD MMM YYYY\")}\r\n

\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function(x, i) {\r\n return i;\r\n });\r\n\r\n if (\r\n lightValue[`${idx}`] === \"New\" ||\r\n (lightValue[`${idx}`] === \"Renew\" && nameChangeValue[`${idx}`] === \"Yes\")\r\n ) {\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

\r\n {nameLabel.endsWith(\"*\")\r\n ? nameIndex === 0\r\n ? nameLabel.substring(0, nameLabel.length - 1) +\r\n \" \" +\r\n (nameIndex + 1) +\r\n \"*\"\r\n : nameLabel.replace(\"*\", \" \" + (nameIndex + 1))\r\n : nameLabel + \" \" + nameIndex + 1}\r\n

\r\n \r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)\r\n }\r\n onKeyDown={(event) => {\r\n if (event.keyCode === 13) {\r\n event.preventDefault();\r\n }\r\n }}\r\n className=\"form-control\"\r\n maxLength={\r\n config.charactersLimitForNames\r\n ? config.charactersLimitForNames\r\n : 31\r\n }\r\n />\r\n
\r\n
\r\n );\r\n });\r\n } else {\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

\r\n {nameLabel.endsWith(\"*\")\r\n ? nameIndex === 0\r\n ? nameLabel.substring(0, nameLabel.length - 1) +\r\n \" \" +\r\n (nameIndex + 1) +\r\n \"*\"\r\n : nameLabel.replace(\"*\", \" \" + (nameIndex + 1))\r\n : nameLabel + \" \" + nameIndex + 1}\r\n

\r\n

\r\n {_displayName(ceremonyName[`${idx}`], nameIndex)}\r\n

\r\n
\r\n
\r\n );\r\n });\r\n }\r\n };\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === \"undefined\") {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n return (\r\n
\r\n \r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n if (element.field_name === \"noOfYears\") {\r\n return (\r\n
\r\n {lightValue[`${idx}`] === \"Renew\" && (\r\n
\r\n

\r\n {formLabels.renewalTitle +\r\n serialNumberValue[`${idx}`]}\r\n

\r\n
\r\n )}\r\n {_buildNoOfYearsField(idx)}\r\n {_buildSponsorshipPeriodField(idx)}\r\n {lightValue[`${idx}`] === \"Renew\" &&\r\n _buildNameChangeField(idx)}\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] ===\r\n String(\r\n resource.categoryFamilyLabel[`${localeCode}`]\r\n ) &&\r\n noOfNames > 0 &&\r\n _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] ===\r\n String(\r\n resource.categoryCompanyLabel[`${localeCode}`]\r\n ) &&\r\n companyNames > 0 &&\r\n _buildNameGroup(idx, companyNames)}\r\n
\r\n );\r\n }\r\n if (!isMobile && element.field_type === \"product_price\") {\r\n return (\r\n
\r\n

\r\n $\r\n {selectedProduct.result?.Price! *\r\n yearValue[`${idx}`] }\r\n

\r\n
\r\n );\r\n }\r\n if (element.field_type === \"action\") {\r\n if (isMobile) {\r\n const style = !isEditMode\r\n ? \"form-details-item\"\r\n : \"form-details-item edit\";\r\n\r\n return (\r\n
\r\n {!isEditMode && !itemUnavailable && allowMultipleRegistrations && (\r\n
\r\n \r\n {\r\n resource.addAnotherItemTitle[\r\n `${localeCode}`\r\n ]\r\n }\r\n \r\n
\r\n )}\r\n
\r\n _deleteCartLine(idx)}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n _deleteCartLine(idx)}\r\n />\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && !itemUnavailable && allowMultipleRegistrations && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default NoOfYearsCategoryNamesForm;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackMessage?: any;\r\n callbackRemarks?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst OfferingForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackName, callbackMessage, callbackRemarks, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations,showRemarksField }) => {\r\n const [offeringName, setOfferingName] = useState(['']);\r\n const [offeringMessage, setOfferingMessage] = useState(['']);\r\n const [offeringRemark, setOfferingRemark] = useState(['']);\r\n\r\n const formLabels = resource.offeringForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setOfferingNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setOfferingNameArray = (name: string, index: number) => {\r\n const offeringNameArray = offeringName.slice();\r\n\r\n while (typeof offeringNameArray[`${index}`] === 'undefined') {\r\n offeringNameArray.push('');\r\n }\r\n\r\n offeringNameArray[`${index}`] = name;\r\n\r\n offeringNameArray[`${index}`].trim();\r\n\r\n setOfferingName(offeringNameArray);\r\n\r\n callbackName(offeringNameArray);\r\n\r\n _checkNamesEntered(offeringNameArray);\r\n }\r\n\r\n const _setMessageInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForMessages ? config.charactersLimitForMessages : 20;\r\n\r\n _setOfferingMessageArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setOfferingMessageArray = (name: string, index: number) => {\r\n const offeringMessageArray = offeringMessage.slice();\r\n\r\n while (typeof offeringMessageArray[`${index}`] === 'undefined') {\r\n offeringMessageArray.push('');\r\n }\r\n\r\n offeringMessageArray[`${index}`] = name;\r\n\r\n offeringMessageArray[`${index}`].trim();\r\n\r\n setOfferingMessage(offeringMessageArray);\r\n\r\n callbackMessage(offeringMessageArray);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setOfferingRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setOfferingRemarkArray = (name: string, index: number) => {\r\n const offeringRemarkArray = offeringRemark.slice();\r\n\r\n while (typeof offeringRemarkArray[`${index}`] === 'undefined') {\r\n offeringRemarkArray.push('');\r\n }\r\n\r\n offeringRemarkArray[`${index}`] = name;\r\n\r\n offeringRemarkArray[`${index}`].trim();\r\n\r\n setOfferingRemark(offeringRemarkArray);\r\n\r\n callbackRemarks(offeringRemarkArray);\r\n }\r\n\r\n const _checkNamesEntered = (offeringNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < offeringNameArray.length; i++) {\r\n if (offeringNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const offeringNameArray = offeringName.slice();\r\n const offeringMessageArray = offeringMessage.slice();\r\n const offeringRemarkArray = offeringRemark.slice();\r\n\r\n offeringNameArray.push('');\r\n offeringMessageArray.push('');\r\n offeringRemarkArray.push('');\r\n\r\n setOfferingName(offeringNameArray);\r\n setOfferingMessage(offeringMessageArray);\r\n setOfferingRemark(offeringRemarkArray);\r\n\r\n callbackName(offeringNameArray);\r\n callbackMessage(offeringMessageArray);\r\n callbackRemarks(offeringRemarkArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const offeringNameArray = offeringName.slice();\r\n const offeringMessageArray = offeringMessage.slice();\r\n const offeringRemarkArray = offeringRemark.slice();\r\n\r\n if (typeof offeringNameArray[`${index}`] !== 'undefined') {\r\n if (offeringNameArray.length > 1) {\r\n offeringNameArray.splice(index, 1);\r\n } else {\r\n offeringNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof offeringMessageArray[`${index}`] !== 'undefined') {\r\n if (offeringMessageArray.length > 1) {\r\n offeringMessageArray.splice(index, 1);\r\n } else {\r\n offeringMessageArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof offeringRemarkArray[`${index}`] !== 'undefined') {\r\n if (offeringRemarkArray.length > 1) {\r\n offeringRemarkArray.splice(index, 1);\r\n } else {\r\n offeringRemarkArray[0] = '';\r\n }\r\n }\r\n\r\n setOfferingName(offeringNameArray);\r\n setOfferingMessage(offeringMessageArray);\r\n setOfferingRemark(offeringRemarkArray);\r\n\r\n callbackName(offeringNameArray);\r\n callbackMessage(offeringMessageArray);\r\n callbackRemarks(offeringRemarkArray);\r\n\r\n _checkNamesEntered(offeringNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingOfferingName: string[] = [];\r\n const existingOfferingMessage: string[] = [];\r\n const existingOfferingRemark: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n let itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n // Offering form has only one name, that's why the first element is pushed.\r\n if (itemNames) {\r\n existingOfferingName.push(itemNames[0]);\r\n }\r\n\r\n existingOfferingMessage.push(formItems[`${i}`]['message']);\r\n existingOfferingRemark.push(formItems[`${i}`]['remarks']);\r\n }\r\n\r\n setOfferingName(existingOfferingName);\r\n setOfferingMessage(existingOfferingMessage);\r\n setOfferingRemark(existingOfferingRemark);\r\n\r\n callbackName(existingOfferingName);\r\n callbackMessage(existingOfferingMessage);\r\n callbackRemarks(existingOfferingRemark);\r\n\r\n _checkNamesEntered(existingOfferingName);\r\n }\r\n }, [formItems])\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildMessage = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.message}

\r\n _setMessageInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForMessages ? config.charactersLimitForMessages : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildMessage(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default OfferingForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackCompanyName: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackCompaniesEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesBusinessForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackCompanyName,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackCompaniesEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [companyName, setCompanyName] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesBusinessForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setCompanyName = (name: string, index: number) => {\r\n const valueArray = companyName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCompanyName(valueArray);\r\n\r\n callbackCompanyName(valueArray);\r\n\r\n _checkCompanyEntered(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkCompanyEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackCompaniesEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const companyNameArray = companyName.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n companyNameArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setCompanyName(companyNameArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackCompanyName(companyNameArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackCompaniesEntered(false);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const companyNameArray = companyName.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof companyNameArray[`${index}`] !== 'undefined') {\r\n if (companyNameArray.length > 1) {\r\n companyNameArray.splice(index, 1);\r\n } else {\r\n companyNameArray[0] = '';\r\n }\r\n\r\n setCompanyName(companyNameArray);\r\n\r\n callbackCompanyName(companyNameArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkCompanyEntered(companyNameArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingCompanyName: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingCompanyName.push(formItems[`${i}`]['companyName']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setCompanyName(existingCompanyName);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackCompanyName(existingCompanyName);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkCompanyEntered(existingCompanyName);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n }\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildCompanyField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.companyName}

\r\n _setCompanyName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildCompanyField(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesBusinessForm","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackStartDate: any;\r\n callbackDedicatedBy: any;\r\n callbackName: any;\r\n callbackRelationship: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackDeathDate: any;\r\n callbackDeathTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackRelationshipsEntered: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst ServicesDeceasedForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackStartDate, callbackDedicatedBy, callbackName, callbackRelationship, callbackBirthDate, callbackBirthTime, callbackDeathDate, callbackDeathTime, callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackRelationshipsEntered, callbackDateEntered, callbackAddressEntered, callbackRemarks,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations, showRemarksField }) => {\r\n const [dedicationPeriods, setDedicationPeriods] = useState([period[`${localeCode}`].period[0].label]);\r\n const [startDates, setStartDates] = useState(['']);\r\n const [dedicatedBys, setDedicatedBys] = useState(['']);\r\n const [deceasedNames, setDeceasedNames] = useState(['']);\r\n const [relationships, setRelationships] = useState(['']);\r\n const [birthDates, setBirthDates] = useState(['']);\r\n const [birthTimes, setBirthTimes] = useState(['']);\r\n const [deathDates, setDeathDates] = useState(['']);\r\n const [deathTimes, setDeathTimes] = useState(['']);\r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [countryNames, setCountries] = useState(['']);\r\n const [remarks, setRemarks] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [deathTimeRanges, setDeathTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesDeceasedForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const startDate = new Date();\r\n startDate.setDate(startDate.getDate() + 1);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriods.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriods(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setStartDate = (value: Date, index: number) => {\r\n const valueArray = startDates.slice();\r\n\r\n // while (typeof valueArray[`${index}`] === 'undefined') {\r\n // valueArray.push(startDate.toISOString());\r\n // }\r\n\r\n const date = value ? value.toISOString() : startDate.toISOString();\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n setStartDates(valueArray);\r\n\r\n callbackStartDate(valueArray);\r\n\r\n _checkDateEntered(valueArray, deathDates);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDeceasedNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDeceasedNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRelationshipInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setRelationshipArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const valueArray = dedicatedBys.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n setDedicatedBys(valueArray);\r\n\r\n callbackDedicatedBy(valueArray);\r\n\r\n _checkNameEntered(valueArray, deceasedNames);\r\n }\r\n\r\n const _setDeceasedNameArray = (name: string, index: number) => {\r\n const valueArray = deceasedNames.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n setDeceasedNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(dedicatedBys, valueArray);\r\n }\r\n\r\n const _setRelationshipArray = (name: string, index: number) => {\r\n const valueArray = relationships.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n setRelationships(valueArray);\r\n\r\n callbackRelationship(valueArray);\r\n\r\n _checkRelationshipEntered(valueArray);\r\n }\r\n\r\n const _setDate = (value: Date, index: number, label: string) => {\r\n const valueArray = label === formLabels.birthDate ? birthDates.slice() : deathDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n label === formLabels.birthDate ? _setBirthTimeRange(index) : _setDeathTimeRange(value, index);\r\n\r\n if (label === formLabels.birthDate) {\r\n setBirthDates(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n \r\n _checkBirthDateEntered(valueArray, deathDates);\r\n } else {\r\n setDeathDates(valueArray);\r\n\r\n callbackDeathDate(valueArray);\r\n\r\n _checkDateEntered(startDates, valueArray);\r\n\r\n _checkBirthDateEntered(birthDates, valueArray);\r\n }\r\n }\r\n\r\n const _setTime = (event: any, index: number, label: string) => {\r\n const valueArray = label === formLabels.birthTime ? birthTimes.slice() : deathTimes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n if (label === formLabels.birthTime) {\r\n setBirthTimes(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n } else {\r\n setDeathTimes(valueArray);\r\n\r\n callbackDeathTime(valueArray);\r\n }\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(valueArray, postalCodes, countryNames);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n \r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n \r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, valueArray, countryNames);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountries(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, postalCodes, valueArray);\r\n }\r\n\r\n const _setBirthTimeRange = (index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriods.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n valueArray[`${index}`] = _initBirthTimeRanges();\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _setDeathTimeRange = (value: Date, index: number) => {\r\n const valueArray = deathTimeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriods.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n valueArray[`${index}`] = _initTimeRanges(value);\r\n\r\n setDeathTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriods.length > 0) {\r\n const selectValueArray = dedicationPeriods.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (dedicatedByArray: string[], deceasedNameArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < dedicatedByArray.length; ++i) {\r\n result = result && dedicatedByArray[`${i}`] !== '' && deceasedNameArray[`${i}`] !== '';\r\n }\r\n\r\n callbackNamesEntered(result);\r\n }\r\n\r\n const _checkRelationshipEntered = (relationshipArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < relationshipArray.length; ++i) {\r\n result = result && relationshipArray[`${i}`] !== '';\r\n }\r\n\r\n callbackRelationshipsEntered(result);\r\n }\r\n\r\n const _checkDateEntered = (startDatesArray: string[], deathDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = startDatesArray.length > deathDatesArray.length ? startDatesArray.length : deathDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n\r\n const startDate = new Date(startDatesArray[`${i}`]);\r\n\r\n const startDateInvalid = startDatesArray[`${i}`] === undefined || startDatesArray[`${i}`] === '' || startDate.getFullYear() < 1900 || \r\n startDate.getMonth() > 12 || startDate.getDate() > 31? true : false;\r\n \r\n const deathDate = new Date(deathDatesArray[`${i}`]); \r\n\r\n const deathDateInvalid = deathDatesArray[`${i}`] === undefined || deathDatesArray[`${i}`] === '' || deathDate.getFullYear() < 1900 || deathDate.getMonth() > 12 || deathDate.getDate() > 31 ? true : false;\r\n \r\n\r\n if (startDateInvalid || deathDateInvalid) {\r\n result = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkBirthDateEntered = (birthDatesArray: string[], deathDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = birthDatesArray.length < deathDatesArray.length ? birthDatesArray.length : deathDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n\r\n const birthDate = new Date(birthDatesArray[`${i}`]);\r\n\r\n const birthDateInvalid = birthDate.getFullYear() < 1900 || birthDate.getMonth() > 12 || birthDate.getDate() > 31? true : false;\r\n \r\n const deathDate = new Date(deathDatesArray[`${i}`]); \r\n\r\n const deathDateInvalid = deathDatesArray[`${i}`] === undefined || deathDatesArray[`${i}`] === '' || deathDate.getFullYear() < 1900 || deathDate.getMonth() > 12 || deathDate.getDate() > 31 ? true : false;\r\n\r\n if (birthDateInvalid || deathDateInvalid) {\r\n result = false; break;\r\n }\r\n\r\n if (!birthDateInvalid && !deathDateInvalid) {\r\n if(birthDate > deathDate) {\r\n result = false; break;\r\n }\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[], countriesArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '' && countriesArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remarks.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemarks(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _initTimeRanges = (value: Date): { value: string; label: string; }[] => {\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n return ranges;\r\n }\r\n\r\n return time.intervals;\r\n }\r\n\r\n const _initBirthTimeRanges = (): { value: string; label: string; }[] => {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n //ranges.push({ value: '0', label: '' });\r\n\r\n return ranges.concat(time.intervals);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const dedicatedBysArray = dedicatedBys.slice();\r\n const deceasedNamesArray = deceasedNames.slice();\r\n const relationshipsArray = relationships.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const deathDatesArray = deathDates.slice();\r\n const deathTimesArray = deathTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n multipliersArray.push(period.scale[0]);\r\n dedicationPeriodsArray.push(period[`${localeCode}`].period[0].label);\r\n startDatesArray.push(startDate.toDateString());\r\n dedicatedBysArray.push('');\r\n deceasedNamesArray.push('');\r\n relationshipsArray.push('');\r\n birthDatesArray.push('');\r\n birthTimesArray.push('');\r\n deathDatesArray.push('');\r\n deathTimesArray.push('');\r\n remarksArray.push('');\r\n\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n } else {\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countriesArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n setStartDates(startDatesArray);\r\n setDedicatedBys(dedicatedBysArray);\r\n setDeceasedNames(deceasedNamesArray);\r\n setRelationships(relationshipsArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setDeathDates(deathDatesArray);\r\n setDeathTimes(deathTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n _setBirthTimeRange(dedicationPeriodsArray.length - 1);\r\n _setDeathTimeRange(new Date(), dedicationPeriodsArray.length - 1);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n callbackStartDate(startDatesArray);\r\n callbackDedicatedBy(dedicatedBysArray);\r\n callbackName(deceasedNamesArray);\r\n callbackRelationship(relationshipsArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackDeathDate(deathDatesArray);\r\n callbackBirthTime(deathTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n callbackNamesEntered(false);\r\n\r\n _checkDateEntered(startDatesArray, deathDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const dedicatedBysArray = dedicatedBys.slice();\r\n const deceasedNamesArray = deceasedNames.slice();\r\n const relationshipsArray = relationships.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const deathDatesArray = deathDates.slice();\r\n const deathTimesArray = deathTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof dedicationPeriodsArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodsArray.length > 1) {\r\n dedicationPeriodsArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodsArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n }\r\n\r\n if (typeof startDatesArray[`${index}`] !== 'undefined') {\r\n if (startDatesArray.length > 1) {\r\n startDatesArray.splice(index, 1);\r\n } else {\r\n startDatesArray[0] = startDate.toISOString();\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n }\r\n\r\n if (typeof dedicatedBysArray[`${index}`] !== 'undefined') {\r\n if (dedicatedBysArray.length > 1) {\r\n dedicatedBysArray.splice(index, 1);\r\n } else {\r\n dedicatedBysArray[0] = '';\r\n }\r\n\r\n setDedicatedBys(dedicatedBysArray);\r\n\r\n callbackDedicatedBy(dedicatedBysArray);\r\n }\r\n\r\n if (typeof deceasedNamesArray[`${index}`] !== 'undefined') {\r\n if (deceasedNamesArray.length > 1) {\r\n deceasedNamesArray.splice(index, 1);\r\n } else {\r\n deceasedNamesArray[0] = '';\r\n }\r\n\r\n setDeceasedNames(deceasedNamesArray);\r\n\r\n callbackName(deceasedNamesArray);\r\n }\r\n\r\n if (typeof relationshipsArray[`${index}`] !== 'undefined') {\r\n if (relationshipsArray.length > 1) {\r\n relationshipsArray.splice(index, 1);\r\n } else {\r\n relationshipsArray[0] = '';\r\n }\r\n\r\n setRelationships(relationshipsArray);\r\n\r\n callbackRelationship(relationshipsArray);\r\n }\r\n\r\n if (typeof birthDatesArray[`${index}`] !== 'undefined') {\r\n if (birthDatesArray.length > 1) {\r\n birthDatesArray.splice(index, 1);\r\n } else {\r\n birthDatesArray[0] = '';\r\n }\r\n\r\n setBirthDates(birthDatesArray);\r\n\r\n callbackBirthDate(birthDatesArray);\r\n }\r\n\r\n if (typeof deathDatesArray[`${index}`] !== 'undefined') {\r\n if (deathDatesArray.length > 1) {\r\n deathDatesArray.splice(index, 1);\r\n } else {\r\n deathDatesArray[0] = '';\r\n }\r\n\r\n setDeathDates(deathDatesArray);\r\n\r\n callbackDeathDate(deathDatesArray);\r\n }\r\n\r\n if (typeof birthTimesArray[`${index}`] !== 'undefined') {\r\n if (birthTimesArray.length > 1) {\r\n birthTimesArray.splice(index, 1);\r\n } else {\r\n birthTimesArray[0] = '';\r\n }\r\n\r\n setBirthTimes(birthTimesArray);\r\n\r\n callbackBirthTime(birthTimesArray);\r\n }\r\n\r\n if (typeof deathTimesArray[`${index}`] !== 'undefined') {\r\n if (deathTimesArray.length > 1) {\r\n deathTimesArray.splice(index, 1);\r\n } else {\r\n deathTimesArray[0] = '';\r\n }\r\n\r\n setDeathTimes(deathTimesArray);\r\n\r\n callbackDeathTime(deathTimesArray);\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n\r\n setBuildingNames(buildingNamesArray);\r\n\r\n callbackAddressEntered(buildingNamesArray);\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n\r\n setUnitNumbers(unitNumbersArray);\r\n\r\n callbackUnitNumber(unitNumbersArray);\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackPostalCode(postalCodesArray);\r\n }\r\n\r\n if (typeof countriesArray[`${index}`] !== 'undefined') {\r\n if (countriesArray.length > 1) {\r\n countriesArray.splice(index, 1);\r\n } else {\r\n countriesArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountries(countriesArray);\r\n\r\n callbackCountry(countriesArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setBirthTimeRange(0);\r\n }\r\n }\r\n\r\n if (typeof deathTimeRanges[`${index}`] !== 'undefined') {\r\n if (deathTimeRanges.length > 1) {\r\n deathTimeRanges.splice(index, 1);\r\n } else {\r\n _setDeathTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n if (typeof remarksArray[`${index}`] !== 'undefined') {\r\n if (remarksArray.length > 1) {\r\n remarksArray.splice(index, 1);\r\n } else {\r\n remarksArray[0] = '';\r\n }\r\n \r\n callbackRemarks(remarksArray);\r\n }\r\n\r\n _checkNameEntered(dedicatedBysArray, deceasedNamesArray);\r\n _checkRelationshipEntered(relationshipsArray);\r\n _checkDateEntered(startDatesArray, deathDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const dedicatedPeriodsArray: string[] = [];\r\n const startDatesArray: string[] = [];\r\n const dedicatedBysArray: string[] = [];\r\n const deceasedNamesArray: string[] = [];\r\n const relationshipsArray: string[] = [];\r\n const birthDatesArray: string[] = [];\r\n const birthTimesArray: string[] = [];\r\n const deathDatesArray: string[] = [];\r\n const deathTimesArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const countriesArray: string[] = [];\r\n const remarksArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date(1900, 1, 1, 0, 0, 0);\r\n const deathDate = formItems[`${i}`]['deathDate'] !== '' ? new Date(formItems[`${i}`]['deathDate']) : new Date();\r\n\r\n multipliersArray.push(period.scale[`${index}`]);\r\n dedicatedPeriodsArray.push(selectedPeriod);\r\n startDatesArray.push(formItems[`${i}`]['startDate'] !== '' && formItems[`${i}`]['startDate'] !== undefined ? formItems[`${i}`]['startDate'] : startDate.toISOString());\r\n dedicatedBysArray.push(formItems[`${i}`]['dedicatedBy']);\r\n deceasedNamesArray.push(formItems[`${i}`]['names'][0]);\r\n relationshipsArray.push(formItems[`${i}`]['deceasedRelationship']);\r\n birthDatesArray.push(birthDate.toISOString());\r\n birthTimesArray.push(formItems[`${i}`]['birthTime']);\r\n deathDatesArray.push(deathDate.toISOString());\r\n deathTimesArray.push(formItems[`${i}`]['deathTime']);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n countriesArray.push(formItems[`${i}`]['country']);\r\n remarksArray.push(formItems[`${i}`]['remarks']);\r\n\r\n _setBirthTimeRange(i);\r\n _setDeathTimeRange(deathDate, i);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicatedPeriodsArray);\r\n setDedicatedBys(dedicatedBysArray);\r\n setDeceasedNames(deceasedNamesArray);\r\n setRelationships(relationshipsArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setDeathDates(deathDatesArray);\r\n setDeathTimes(deathTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicatedPeriodsArray);\r\n callbackDedicatedBy(dedicatedBysArray);\r\n callbackName(deceasedNamesArray);\r\n callbackRelationship(relationshipsArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackDeathDate(deathDatesArray);\r\n callbackDeathTime(deathTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n _checkNameEntered(dedicatedBysArray, deceasedNamesArray);\r\n _checkRelationshipEntered(relationshipsArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n } else {\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n startDatesArray.push(startDate.toISOString());\r\n\r\n _setBirthTimeRange(0);\r\n _setDeathTimeRange(new Date(), 0);\r\n \r\n callbackDedicationPeriod(dedicationPeriods);\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n\r\n _checkDateEntered(startDatesArray, deathDatesArray);\r\n\r\n }, [formItems])\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.startDate}

\r\n _setStartDate(date, idx)}\r\n value={startDates[`${idx}`] === '' || birthDates[`${idx}`] === undefined || startDates[`${idx}`].includes('1900') ? null : new Date(startDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={startDate}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDedicatedByField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDeceasedNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.deceasedDetailsPrompt}

\r\n
\r\n

{formLabels.deceasedName}

\r\n _setDeceasedNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRelationshipField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.relationship}

\r\n _setRelationshipInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDates[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTimes[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: 'Select time' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setDate(date, idx, formLabels.birthDate)}\r\n value={birthDates[`${idx}`] === '' || birthDates[`${idx}`] === undefined || birthDates[`${idx}`].includes('1900') ? null : new Date(birthDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setTime(event, idx, formLabels.birthTime)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDeathDateTime = (idx: number): JSX.Element | null => {\r\n if (deathTimeRanges[`${idx}`] === undefined || deathDates[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = deathTimeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === deathTimes[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: 'Select time' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.deathDate}

\r\n _setDate(date, idx, formLabels.deathDate)}\r\n value={deathDates[`${idx}`] === '' || deathDates[`${idx}`] === undefined|| deathDates[`${idx}`].includes('1900') ? null : new Date(deathDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.deathTime}

\r\n _setTime(event, idx, formLabels.deathTime)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingNames[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumbers[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildDedicatedByField(idx)}\r\n {_buildDeceasedNameField(idx)}\r\n {_buildRelationshipField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildDeathDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesDeceasedForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackSchoolName: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackSchoolsEntered: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesEducationForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackSchoolName, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackSchoolsEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [schoolName, setSchoolName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesEducationForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setSchoolName = (name: string, index: number) => {\r\n const valueArray = schoolName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setSchoolName(valueArray);\r\n\r\n callbackSchoolName(valueArray);\r\n\r\n _checkSchoolEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n const date = value ? value.toISOString() : '';\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriod.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkSchoolEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackSchoolsEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === '' || valueArray[`${i}`].includes('1900')) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n schoolNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSchoolName(schoolNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodArray.length - 1);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackSchoolName(schoolNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackSchoolsEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof schoolNameArray[`${index}`] !== 'undefined') {\r\n if (schoolNameArray.length > 1) {\r\n schoolNameArray.splice(index, 1);\r\n } else {\r\n schoolNameArray[0] = '';\r\n }\r\n\r\n setSchoolName(schoolNameArray);\r\n\r\n callbackSchoolName(schoolNameArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkSchoolEntered(schoolNameArray);\r\n _checkDateEntered(dateValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingSchoolName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingSchoolName.push(formItems[`${i}`]['schoolName']);\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n\r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setSchoolName(existingSchoolName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackSchoolName(existingSchoolName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkSchoolEntered(existingSchoolName);\r\n _checkDateEntered(existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackMultiplier(multipliers);\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildSchoolField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.schoolName}

\r\n _setSchoolName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTime[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildSchoolField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesEducationForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackStartDate: any;\r\n callbackName: any;\r\n callbackGender: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst ServicesGeneralForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackStartDate, callbackName, callbackGender, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered, callbackRemarks,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations,showRemarksField }) => {\r\n const [dedicationPeriods, setDedicationPeriods] = useState([period[`${localeCode}`].period[0].label]);\r\n const [startDates, setStartDates] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n const [genders, setGenders] = useState([resource.genderMaleLabel[`${localeCode}`]]);\r\n const [birthDates, setBirthDates] = useState(['']);\r\n const [birthTimes, setBirthTimes] = useState(['']); \r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [countryNames, setCountries] = useState(['']);\r\n const [remarks, setRemarks] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesGeneralForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const startDate = new Date();\r\n startDate.setDate(startDate.getDate() + 1);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriods.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriods(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setStartDate = (value: Date, index: number) => {\r\n const valueArray = startDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(startDate.toISOString());\r\n }\r\n\r\n value.setHours(0, 0, 0, 0);\r\n\r\n const date = value ? value.toISOString() : startDate.toISOString();\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n setStartDates(valueArray);\r\n\r\n callbackStartDate(valueArray);\r\n\r\n _checkDateEntered(valueArray, birthDates);\r\n }\r\n\r\n const _formatNameInput = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setName(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setName = (name: string, index: number) => {\r\n const valueArray = names.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setGender = (event: any, index: number) => {\r\n const valueArray = genders.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.genderMaleLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = event.target.value;\r\n\r\n setGenders(valueArray);\r\n \r\n callbackGender(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n const date = value ? value.toISOString() : '';\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDates(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(startDates, valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTimes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTimes(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(valueArray, postalCodes, countryNames);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, valueArray, countryNames);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountries(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, postalCodes, valueArray);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriods.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriods.length > 0) {\r\n const selectValueArray = dedicationPeriods.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (startDatesArray: string[], birthDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = startDatesArray.length < birthDatesArray.length ? startDatesArray.length : birthDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const startDateInvalid = startDatesArray[`${i}`] === undefined || startDatesArray[`${i}`] === '' ? true : false;\r\n\r\n const birthDate = new Date(birthDatesArray[`${i}`]);\r\n\r\n const birthDateInvalid = birthDatesArray[`${i}`] === undefined || birthDatesArray[`${i}`] === '' || birthDate.getFullYear() <= 1900 || birthDate.getMonth() > 12 || birthDate.getDate() > 31 ? true : false;\r\n\r\n if (startDateInvalid || birthDateInvalid) {\r\n result = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkAddressEntered = (buildingNamesArray: string[], postalCodesArray: string[], countriesArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingNamesArray.length; ++i) {\r\n result = result && buildingNamesArray[`${i}`] !== '' && postalCodesArray[`${i}`] !== '' && countriesArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remarks.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemarks(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n const gendersArray = genders.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n multipliersArray.push(period.scale[0]);\r\n dedicationPeriodsArray.push(period[`${localeCode}`].period[0].label);\r\n startDatesArray.push(startDate.toDateString());\r\n gendersArray.push(resource.genderMaleLabel[`${localeCode}`]);\r\n namesArray.push('');\r\n birthDatesArray.push('');\r\n birthTimesArray.push('');\r\n remarksArray.push('');\r\n\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n } else {\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countriesArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n setStartDates(startDatesArray);\r\n setNames(namesArray);\r\n setGenders(gendersArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodsArray.length - 1);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n callbackStartDate(startDatesArray);\r\n callbackName(namesArray);\r\n callbackGender(gendersArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n callbackNamesEntered(false);\r\n \r\n _checkDateEntered(startDatesArray, birthDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n const gendersArray = genders.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof dedicationPeriodsArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodsArray.length > 1) {\r\n dedicationPeriodsArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodsArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n }\r\n\r\n if (typeof startDatesArray[`${index}`] !== 'undefined') {\r\n if (startDatesArray.length > 1) {\r\n startDatesArray.splice(index, 1);\r\n } else {\r\n startDatesArray[0] = startDate.toISOString();\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n if (typeof gendersArray[`${index}`] !== 'undefined') {\r\n if (gendersArray.length > 1) {\r\n gendersArray.splice(index, 1);\r\n } else {\r\n gendersArray[0] = resource.genderMaleLabel[`${localeCode}`];\r\n }\r\n\r\n setGenders(gendersArray);\r\n\r\n callbackGender(gendersArray);\r\n }\r\n\r\n if (typeof birthDatesArray[`${index}`] !== 'undefined') {\r\n if (birthDatesArray.length > 1) {\r\n birthDatesArray.splice(index, 1);\r\n } else {\r\n birthDatesArray[0] = '';\r\n }\r\n\r\n setBirthDates(birthDatesArray);\r\n\r\n callbackBirthDate(birthDatesArray);\r\n }\r\n\r\n if (typeof birthTimesArray[`${index}`] !== 'undefined') {\r\n if (birthTimesArray.length > 1) {\r\n birthTimesArray.splice(index, 1);\r\n } else {\r\n birthTimesArray[0] = '';\r\n }\r\n\r\n setBirthTimes(birthTimesArray);\r\n\r\n callbackBirthTime(birthTimesArray);\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n\r\n setBuildingNames(buildingNamesArray);\r\n\r\n callbackAddressEntered(buildingNamesArray);\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n\r\n setUnitNumbers(unitNumbersArray);\r\n\r\n callbackUnitNumber(unitNumbersArray);\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackPostalCode(postalCodesArray);\r\n }\r\n\r\n if (typeof countriesArray[`${index}`] !== 'undefined') {\r\n if (countriesArray.length > 1) {\r\n countriesArray.splice(index, 1);\r\n } else {\r\n countriesArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountries(countriesArray);\r\n\r\n callbackCountry(countriesArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n if (typeof remarksArray[`${index}`] !== 'undefined') {\r\n if (remarksArray.length > 1) {\r\n remarksArray.splice(index, 1);\r\n } else {\r\n remarksArray[0] = '';\r\n }\r\n\r\n setRemarks(postalCodesArray);\r\n\r\n callbackRemarks(postalCodesArray);\r\n }\r\n\r\n _checkNameEntered(namesArray);\r\n _checkDateEntered(startDatesArray, birthDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const dedicatedPeriodsArray: string[] = [];\r\n const startDatesArray: string[] = [];\r\n const namesArray: string[] = [];\r\n const gendersArray: string[] = [];\r\n const birthDatesArray: string[] = [];\r\n const birthTimesArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const countriesArray: string[] = [];\r\n const remarksArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const gender = formItems[`${i}`]['gender'] !== '' ? formItems[`${i}`]['gender'] : resource.genderMaleLabel[`${localeCode}`];\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n multipliersArray.push(period.scale[`${index}`]);\r\n dedicatedPeriodsArray.push(selectedPeriod);\r\n startDatesArray.push(formItems[`${i}`]['startDate'] ? formItems[`${i}`]['startDate'] : startDate.toISOString());\r\n namesArray.push(formItems[`${i}`]['names'][0]);\r\n gendersArray.push(gender);\r\n birthDatesArray.push(birthDate.toISOString());\r\n birthTimesArray.push(formItems[`${i}`]['birthTime']);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n countriesArray.push(formItems[`${i}`]['country']);\r\n remarksArray.push(formItems[`${i}`]['remarks']);\r\n \r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicatedPeriodsArray);\r\n setNames(namesArray);\r\n setGenders(gendersArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicatedPeriodsArray);\r\n callbackName(namesArray);\r\n callbackGender(gendersArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n _checkNameEntered(namesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n } else {\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n startDatesArray.push(startDate.toISOString());\r\n gendersArray.push(resource.genderMaleLabel[`${localeCode}`]);\r\n\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackDedicationPeriod(dedicationPeriods);\r\n callbackGender(gendersArray);\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n\r\n _checkDateEntered(startDatesArray, birthDatesArray);\r\n }, [formItems])\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.startDate}

\r\n _setStartDate(date, idx)}\r\n value={startDates[`${idx}`] === '' || startDates[`${idx}`].includes('1900') ? null : new Date(startDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={startDate}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _formatNameInput(event, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildGenderField = (idx: number): JSX.Element | null => {\r\n if (typeof genders[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.gender}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDates[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTimes[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: 'Select time' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDates[`${idx}`] === '' || birthDates[`${idx}`].includes('1900') ? null : new Date(birthDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingNames[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumbers[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildGenderField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesGeneralForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackSurgeryDate: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesHealthSurgeryForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackSurgeryDate, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [surgeryDate, setSurgeryDate] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesHealthSurgeryForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setSurgeryDate = (value: Date, index: number) => {\r\n const valueArray = surgeryDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setSurgeryDate(valueArray);\r\n\r\n callbackSurgeryDate(valueArray);\r\n\r\n _checkDateEntered(valueArray, birthDate);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriod.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(surgeryDate, valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (surgeryDateArray: string[], birthDateArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < surgeryDateArray.length; ++i) {\r\n result = result && (surgeryDateArray[`${i}`] !== '' || !surgeryDateArray[`${i}`].includes('1900')) && (birthDateArray[`${i}`] !== '' || !birthDateArray[`${i}`].includes('1900'));\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const surgeryValueArray = surgeryDate.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n surgeryValueArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSurgeryDate(surgeryValueArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodArray.length - 1);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackSurgeryDate(surgeryValueArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const surgeryValueArray = surgeryDate.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n }\r\n\r\n if (typeof surgeryValueArray[`${index}`] !== 'undefined') {\r\n if (surgeryValueArray.length > 1) {\r\n surgeryValueArray.splice(index, 1);\r\n } else {\r\n surgeryValueArray[0] = '';\r\n }\r\n\r\n setSurgeryDate(surgeryValueArray);\r\n\r\n callbackSurgeryDate(surgeryValueArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n _checkDateEntered(dateValueArray, surgeryValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingSurgeryDate: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const surgeryDate = formItems[`${i}`]['surgeryDate'] !== '' ? new Date(formItems[`${i}`]['surgeryDate']) : new Date();\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingSurgeryDate.push(surgeryDate.toISOString());\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n\r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setSurgeryDate(existingSurgeryDate);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackSurgeryDate(existingSurgeryDate);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingSurgeryDate, existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildSurgeryDate = (idx: number): JSX.Element | null => {\r\n if (surgeryDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.surgeryDate}

\r\n _setSurgeryDate(date, idx)}\r\n value={surgeryDate[`${idx}`] === '' || surgeryDate[`${idx}`].includes('1900') ? null : new Date(surgeryDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTime[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildSurgeryDate(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesHealthSurgeryForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport blessings from '../resources/blessingType.json';\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackBlessingType: any;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesInfantSpiritForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackBlessingType, callbackName, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [blessingType, setBlessingType] = useState([blessings[`${localeCode}`].options[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesInfantSpiritForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setBlessingType = (event: any, index: number) => {\r\n const valueArray = blessingType.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(blessings[`${localeCode}`].options[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBlessingType(valueArray);\r\n\r\n callbackBlessingType(valueArray);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriod.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === '' || valueArray[`${i}`].includes('1900')) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const blessingOptionArray = blessingType.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n blessingOptionArray.push(blessings[`${localeCode}`].options[0].label);\r\n ceremonyNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setBlessingType(blessingOptionArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodArray.length - 1);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackBlessingType(blessingOptionArray);\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const blessingOptionArray = blessingType.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof blessingOptionArray[`${index}`] !== 'undefined') {\r\n if (blessingOptionArray.length > 1) {\r\n blessingOptionArray.splice(index, 1);\r\n } else {\r\n blessingOptionArray[0] = blessings[`${localeCode}`].options[0].label;\r\n }\r\n\r\n setBlessingType(blessingOptionArray);\r\n\r\n callbackBlessingType(blessingOptionArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkDateEntered(dateValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingBlessingType: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingBlessingType.push(formItems[`${i}`]['blessingOption'] !== '' ? formItems[`${i}`]['blessingOption'] : blessings[`${localeCode}`].options[0].label);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n\r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setBlessingType(existingBlessingType);\r\n setCeremonyName(existingCeremonyName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackBlessingType(existingBlessingType);\r\n callbackName(existingCeremonyName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n }\r\n\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n callbackBlessingType(blessingType);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBlessingOptions = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.blessingType}

\r\n _setBlessingType(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.parentDetailsPrompt}

\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTime[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildBlessingOptions(idx)}\r\n {_buildNameField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesInfantSpiritForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesMarriageForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const moment = require('moment');\r\n const formLabels = resource.servicesMarriageForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n const noPersons = 2;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setDisplayValue = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNamesInputValue = (event: any, index: number, elementIdx: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let storedElements = ceremonyName[`${index}`];\r\n\r\n if (!storedElements.includes(';')) {\r\n storedElements += ';'.repeat(1);\r\n }\r\n\r\n const valueArray = storedElements.split(';');\r\n\r\n valueArray[`${elementIdx}`] = event.target.value.substring(0, maxLength - 1);\r\n\r\n _setCeremonyNameArray(valueArray.join(';'), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (value: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _displayFirstDateValue = (value: string): string => {\r\n if (value.includes(';')) {\r\n const valueSplit = value.split(';');\r\n\r\n return valueSplit[0];\r\n }\r\n\r\n return value;\r\n }\r\n\r\n const _displaySecondDateValue = (value: string): string => {\r\n if (value.includes(';')) {\r\n const valueSplit = value.split(';');\r\n\r\n return _formatDateString(valueSplit[1]);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n const _formatDateString = (value: string): string => {\r\n // Convert DD-MM-YYYY into YYYY-MM-DD to initialise DateTime object.\r\n if (value === '') {\r\n return '';\r\n }\r\n\r\n const birthDate = value.split('-');\r\n\r\n return birthDate[2] + '-' + birthDate[1] + '-' + birthDate[0];\r\n }\r\n\r\n const _setDatesInputValue = (value: Date, index: number, elementIdx: number) => {\r\n let storedElements = birthDate[`${index}`];\r\n\r\n if (!storedElements.includes(';')) {\r\n storedElements += ';'.repeat(1);\r\n }\r\n\r\n const valueArray = storedElements.split(';');\r\n\r\n const date = value ? value : new Date(1900, 1, 1);\r\n\r\n valueArray[`${elementIdx}`] = elementIdx === 0 ? date.toISOString() : moment(date).format('DD-MM-YYYY');\r\n\r\n _setBirthDate(valueArray.join(';'), index);\r\n }\r\n\r\n const _setBirthDate = (value: string, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setTimesInputValue = (event: any, index: number, elementIdx: number) => {\r\n let storedElements = birthTime[`${index}`];\r\n\r\n if (!storedElements.includes(';')) {\r\n storedElements += ';'.repeat(1);\r\n }\r\n\r\n const valueArray = storedElements.split(';');\r\n\r\n valueArray[`${elementIdx}`] = event.label;\r\n\r\n _setBirthTime(valueArray.join(';'), index);\r\n }\r\n\r\n const _setBirthTime = (value: string, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n if (valueArray.length > 0) {\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].length > 0 && valueArray[`${i}`].indexOf(\";\") > 0) {\r\n var namesArray = valueArray[`${i}`].split(\";\");\r\n for (let j = 0; j < namesArray.length; j++) {\r\n if (namesArray[`${j}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n } else {\r\n checked = false; break;\r\n }\r\n }\r\n }\r\n else {\r\n checked = false\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n if (valueArray.length > 0) {\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].length > 0 && valueArray[`${i}`].indexOf(\";\") > 0) {\r\n var dateArray = valueArray[`${i}`].split(\";\");\r\n\r\n if (dateArray.length === noPersons) {\r\n for (let j = 0; j < dateArray.length; j++) {\r\n const value = dateArray[`${j}`].replace(/;/g, '').trim();\r\n\r\n if (value === '' || value.includes('1900')) {\r\n checked = false; break;\r\n }\r\n }\r\n } else {\r\n checked = false; break;\r\n }\r\n } else {\r\n checked = false; break;\r\n }\r\n }\r\n }\r\n else {\r\n checked = false\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkDateEntered(dateValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < noPersons) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n const birthDates = (formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']).toISOString() : new Date().toISOString()) + (formItems[`${i}`]['birthDate_2'] !== '' ? ';' + moment(formItems[`${i}`]['birthDate_2']).format('DD-MM-YYYY') : '');\r\n\r\n const birthTimes = formItems[`${i}`]['birthTime'] + (formItems[`${i}`]['birthTime_2'] !== '' ? ';' + formItems[`${i}`]['birthTime_2'] : '');\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(itemName);\r\n existingBirthDate.push(birthDates);\r\n existingBirthTime.push(birthTimes);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n }\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number, elementIdx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.detailsPrompt + ' ' + (elementIdx + 1)}

\r\n
\r\n

{formLabels.name}

\r\n _setNamesInputValue(event, idx, elementIdx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number, elementIdx: number): JSX.Element | null => {\r\n const displayBirthDate = elementIdx === 0 ? _displayFirstDateValue(birthDate[`${idx}`]) : _displaySecondDateValue(birthDate[`${idx}`]);\r\n\r\n if (displayBirthDate === undefined) {\r\n return null;\r\n }\r\n\r\n const found = time.intervals.find(slot => slot.label === _setDisplayValue(birthTime[`${idx}`], elementIdx));\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setDatesInputValue(date, idx, elementIdx)}\r\n value={displayBirthDate === '' || displayBirthDate.includes('1900') ? null : new Date(displayBirthDate)}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setTimesInputValue(event, idx, elementIdx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx, 0)}\r\n {_buildBirthDateTime(idx, 0)}\r\n {_buildNameField(idx, 1)}\r\n {_buildBirthDateTime(idx, 1)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesMarriageForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport Select from 'react-select';\r\n\r\nimport quantity from '../resources/consecrationQuantity.json';\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n subProduct: SimpleProduct;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackSubProductQuantity?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ThreeCategoryNamesConsecrationForm1: React.FC = ({ formScheme, selectedProduct, subProduct, rowsData, addRow, deleteRow, callbackName, callbackCategory, callbackDedicatedBy, callbackSubProductQuantity, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n const [subProductQuantity, setSubProductQuantity] = useState([0]);\r\n\r\n const formLabels = resource.threeCategoryNamesConsecrationForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n const deceasedNames = formScheme.find(form => form.field_type === 'textBox')!.field_number3!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n dedicatedNameArray[`${index}`] = '';\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else if (event.target.value === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n };\r\n\r\n const _setSubProductQuantity = (event: any, index: number) => {\r\n const valueArray = subProductQuantity.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(0);\r\n }\r\n\r\n valueArray[`${index}`] = +event.value;\r\n\r\n setSubProductQuantity(valueArray);\r\n\r\n callbackSubProductQuantity(valueArray);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n\r\n dedicatedByArray[`${index}`] = name;\r\n\r\n dedicatedByArray[`${index}`].trim();\r\n\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n };\r\n\r\n const _displaySubProductQuantity = (index: number): { value: string, label: string } | null => {\r\n if (subProductQuantity.length > 0) {\r\n const selectValueArray = subProductQuantity.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined' && selectValueArray[`${index}`] != 0) {\r\n return quantity[`${localeCode}`].quantity.find((item: { value: string, label: string }) => item.value === String(selectValueArray[`${index}`]));\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n let categoryValueArray = radioValue.slice();\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let dedicatedByArray = dedicatedBy.slice();\r\n let subProductQuantityArray = subProductQuantity.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n subProductQuantityArray.push(0);\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n setSubProductQuantity(subProductQuantityArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n callbackSubProductQuantity(subProductQuantityArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n let categoryValueArray = radioValue.slice();\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let dedicatedByArray = dedicatedBy.slice();\r\n let subProductQuantityArray = subProductQuantity.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof subProductQuantityArray[`${index}`] !== 'undefined') {\r\n if (subProductQuantityArray.length > 1) {\r\n subProductQuantityArray.splice(index, 1);\r\n } else {\r\n subProductQuantityArray[0] = 0;\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n setSubProductQuantity(subProductQuantityArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n callbackSubProductQuantity(subProductQuantityArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n }\r\n\r\n useEffect(() => {\r\n let existingCeremonyName: string[] = [];\r\n let existingDedicatedBy: string[] = [];\r\n let existingRadioValue: string[] = [];\r\n let existingSubProductQuantity: number[] = [0]\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n let itemNames: string[] = formItems[`${i}`]['names'];\r\n let itemDedicatedBy = formItems[`${i}`]['dedicatedBy'];\r\n let itemCategory = formItems[`${i}`]['category'];\r\n let itemSubProductQuantity = typeof formItems[`${i}`]['subProductQuantity'] !== 'undefined' ? formItems[`${i}`]['subProductQuantity'] : 0;\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else if (itemCategory === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n itemNameCount = companyNames\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(itemDedicatedBy);\r\n existingRadioValue.push(itemCategory);\r\n \r\n if (i == 0) {\r\n existingSubProductQuantity[0] = itemSubProductQuantity;\r\n } else {\r\n existingSubProductQuantity.push(itemSubProductQuantity);\r\n }\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n setRadioValue(existingRadioValue);\r\n setSubProductQuantity(existingSubProductQuantity);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n callbackCategory(existingRadioValue);\r\n callbackSubProductQuantity(existingSubProductQuantity);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n callbackCategory(radioValue);\r\n }\r\n }, [formItems])\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildSubProductQuantity = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n
\r\n

{formLabels.consecration}

\r\n

{formLabels.consecrationSub}

\r\n
\r\n _setSubProductQuantity(event, idx)}\r\n className={'col-lg-6 select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDedicatedByField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames)}\r\n {radioValue[`${idx}`] !== String(resource.categoryFamilyLabel[`${localeCode}`]) && (deceasedNames > 0 || companyNames > 0) && _buildDedicatedByField(idx)}\r\n {_buildSubProductQuantity(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! + (subProduct ? subProduct.Price * subProductQuantity[`${idx}`] : 0)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default ThreeCategoryNamesConsecrationForm1;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ThreeCategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackName, callbackCategory, callbackDedicatedBy, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.threeCategoryNamesForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n const deceasedNames = formScheme.find(form => form.field_type === 'textBox')!.field_number3!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n dedicatedNameArray[`${index}`] = '';\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else if (event.target.value === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n }\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n\r\n dedicatedByArray[`${index}`] = name;\r\n\r\n dedicatedByArray[`${index}`].trim();\r\n\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, radioValue);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n const existingRadioValue: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n let itemNames: string[] = formItems[`${i}`]['names'];\r\n let itemDedicatedBy = formItems[`${i}`]['dedicatedBy'];\r\n let itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else if (itemCategory === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n itemNameCount = companyNames\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(itemDedicatedBy);\r\n existingRadioValue.push(itemCategory);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n setRadioValue(existingRadioValue);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n callbackCategory(existingRadioValue);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n callbackCategory(radioValue);\r\n }\r\n }, [formItems])\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildDedicatedByField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 &&\r\n _buildDedicatedByField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default ThreeCategoryNamesForm;","var map = {\n\t\"./af\": 155,\n\t\"./af.js\": 155,\n\t\"./ar\": 156,\n\t\"./ar-dz\": 157,\n\t\"./ar-dz.js\": 157,\n\t\"./ar-kw\": 158,\n\t\"./ar-kw.js\": 158,\n\t\"./ar-ly\": 159,\n\t\"./ar-ly.js\": 159,\n\t\"./ar-ma\": 160,\n\t\"./ar-ma.js\": 160,\n\t\"./ar-ps\": 161,\n\t\"./ar-ps.js\": 161,\n\t\"./ar-sa\": 162,\n\t\"./ar-sa.js\": 162,\n\t\"./ar-tn\": 163,\n\t\"./ar-tn.js\": 163,\n\t\"./ar.js\": 156,\n\t\"./az\": 164,\n\t\"./az.js\": 164,\n\t\"./be\": 165,\n\t\"./be.js\": 165,\n\t\"./bg\": 166,\n\t\"./bg.js\": 166,\n\t\"./bm\": 167,\n\t\"./bm.js\": 167,\n\t\"./bn\": 168,\n\t\"./bn-bd\": 169,\n\t\"./bn-bd.js\": 169,\n\t\"./bn.js\": 168,\n\t\"./bo\": 170,\n\t\"./bo.js\": 170,\n\t\"./br\": 171,\n\t\"./br.js\": 171,\n\t\"./bs\": 172,\n\t\"./bs.js\": 172,\n\t\"./ca\": 173,\n\t\"./ca.js\": 173,\n\t\"./cs\": 174,\n\t\"./cs.js\": 174,\n\t\"./cv\": 175,\n\t\"./cv.js\": 175,\n\t\"./cy\": 176,\n\t\"./cy.js\": 176,\n\t\"./da\": 177,\n\t\"./da.js\": 177,\n\t\"./de\": 178,\n\t\"./de-at\": 179,\n\t\"./de-at.js\": 179,\n\t\"./de-ch\": 180,\n\t\"./de-ch.js\": 180,\n\t\"./de.js\": 178,\n\t\"./dv\": 181,\n\t\"./dv.js\": 181,\n\t\"./el\": 182,\n\t\"./el.js\": 182,\n\t\"./en-au\": 183,\n\t\"./en-au.js\": 183,\n\t\"./en-ca\": 184,\n\t\"./en-ca.js\": 184,\n\t\"./en-gb\": 185,\n\t\"./en-gb.js\": 185,\n\t\"./en-ie\": 186,\n\t\"./en-ie.js\": 186,\n\t\"./en-il\": 187,\n\t\"./en-il.js\": 187,\n\t\"./en-in\": 188,\n\t\"./en-in.js\": 188,\n\t\"./en-nz\": 189,\n\t\"./en-nz.js\": 189,\n\t\"./en-sg\": 190,\n\t\"./en-sg.js\": 190,\n\t\"./eo\": 191,\n\t\"./eo.js\": 191,\n\t\"./es\": 192,\n\t\"./es-do\": 193,\n\t\"./es-do.js\": 193,\n\t\"./es-mx\": 194,\n\t\"./es-mx.js\": 194,\n\t\"./es-us\": 195,\n\t\"./es-us.js\": 195,\n\t\"./es.js\": 192,\n\t\"./et\": 196,\n\t\"./et.js\": 196,\n\t\"./eu\": 197,\n\t\"./eu.js\": 197,\n\t\"./fa\": 198,\n\t\"./fa.js\": 198,\n\t\"./fi\": 199,\n\t\"./fi.js\": 199,\n\t\"./fil\": 200,\n\t\"./fil.js\": 200,\n\t\"./fo\": 201,\n\t\"./fo.js\": 201,\n\t\"./fr\": 202,\n\t\"./fr-ca\": 203,\n\t\"./fr-ca.js\": 203,\n\t\"./fr-ch\": 204,\n\t\"./fr-ch.js\": 204,\n\t\"./fr.js\": 202,\n\t\"./fy\": 205,\n\t\"./fy.js\": 205,\n\t\"./ga\": 206,\n\t\"./ga.js\": 206,\n\t\"./gd\": 207,\n\t\"./gd.js\": 207,\n\t\"./gl\": 208,\n\t\"./gl.js\": 208,\n\t\"./gom-deva\": 209,\n\t\"./gom-deva.js\": 209,\n\t\"./gom-latn\": 210,\n\t\"./gom-latn.js\": 210,\n\t\"./gu\": 211,\n\t\"./gu.js\": 211,\n\t\"./he\": 212,\n\t\"./he.js\": 212,\n\t\"./hi\": 213,\n\t\"./hi.js\": 213,\n\t\"./hr\": 214,\n\t\"./hr.js\": 214,\n\t\"./hu\": 215,\n\t\"./hu.js\": 215,\n\t\"./hy-am\": 216,\n\t\"./hy-am.js\": 216,\n\t\"./id\": 217,\n\t\"./id.js\": 217,\n\t\"./is\": 218,\n\t\"./is.js\": 218,\n\t\"./it\": 219,\n\t\"./it-ch\": 220,\n\t\"./it-ch.js\": 220,\n\t\"./it.js\": 219,\n\t\"./ja\": 221,\n\t\"./ja.js\": 221,\n\t\"./jv\": 222,\n\t\"./jv.js\": 222,\n\t\"./ka\": 223,\n\t\"./ka.js\": 223,\n\t\"./kk\": 224,\n\t\"./kk.js\": 224,\n\t\"./km\": 225,\n\t\"./km.js\": 225,\n\t\"./kn\": 226,\n\t\"./kn.js\": 226,\n\t\"./ko\": 227,\n\t\"./ko.js\": 227,\n\t\"./ku\": 228,\n\t\"./ku-kmr\": 229,\n\t\"./ku-kmr.js\": 229,\n\t\"./ku.js\": 228,\n\t\"./ky\": 230,\n\t\"./ky.js\": 230,\n\t\"./lb\": 231,\n\t\"./lb.js\": 231,\n\t\"./lo\": 232,\n\t\"./lo.js\": 232,\n\t\"./lt\": 233,\n\t\"./lt.js\": 233,\n\t\"./lv\": 234,\n\t\"./lv.js\": 234,\n\t\"./me\": 235,\n\t\"./me.js\": 235,\n\t\"./mi\": 236,\n\t\"./mi.js\": 236,\n\t\"./mk\": 237,\n\t\"./mk.js\": 237,\n\t\"./ml\": 238,\n\t\"./ml.js\": 238,\n\t\"./mn\": 239,\n\t\"./mn.js\": 239,\n\t\"./mr\": 240,\n\t\"./mr.js\": 240,\n\t\"./ms\": 241,\n\t\"./ms-my\": 242,\n\t\"./ms-my.js\": 242,\n\t\"./ms.js\": 241,\n\t\"./mt\": 243,\n\t\"./mt.js\": 243,\n\t\"./my\": 244,\n\t\"./my.js\": 244,\n\t\"./nb\": 245,\n\t\"./nb.js\": 245,\n\t\"./ne\": 246,\n\t\"./ne.js\": 246,\n\t\"./nl\": 247,\n\t\"./nl-be\": 248,\n\t\"./nl-be.js\": 248,\n\t\"./nl.js\": 247,\n\t\"./nn\": 249,\n\t\"./nn.js\": 249,\n\t\"./oc-lnc\": 250,\n\t\"./oc-lnc.js\": 250,\n\t\"./pa-in\": 251,\n\t\"./pa-in.js\": 251,\n\t\"./pl\": 252,\n\t\"./pl.js\": 252,\n\t\"./pt\": 253,\n\t\"./pt-br\": 254,\n\t\"./pt-br.js\": 254,\n\t\"./pt.js\": 253,\n\t\"./ro\": 255,\n\t\"./ro.js\": 255,\n\t\"./ru\": 256,\n\t\"./ru.js\": 256,\n\t\"./sd\": 257,\n\t\"./sd.js\": 257,\n\t\"./se\": 258,\n\t\"./se.js\": 258,\n\t\"./si\": 259,\n\t\"./si.js\": 259,\n\t\"./sk\": 260,\n\t\"./sk.js\": 260,\n\t\"./sl\": 261,\n\t\"./sl.js\": 261,\n\t\"./sq\": 262,\n\t\"./sq.js\": 262,\n\t\"./sr\": 263,\n\t\"./sr-cyrl\": 264,\n\t\"./sr-cyrl.js\": 264,\n\t\"./sr.js\": 263,\n\t\"./ss\": 265,\n\t\"./ss.js\": 265,\n\t\"./sv\": 266,\n\t\"./sv.js\": 266,\n\t\"./sw\": 267,\n\t\"./sw.js\": 267,\n\t\"./ta\": 268,\n\t\"./ta.js\": 268,\n\t\"./te\": 269,\n\t\"./te.js\": 269,\n\t\"./tet\": 270,\n\t\"./tet.js\": 270,\n\t\"./tg\": 271,\n\t\"./tg.js\": 271,\n\t\"./th\": 272,\n\t\"./th.js\": 272,\n\t\"./tk\": 273,\n\t\"./tk.js\": 273,\n\t\"./tl-ph\": 274,\n\t\"./tl-ph.js\": 274,\n\t\"./tlh\": 275,\n\t\"./tlh.js\": 275,\n\t\"./tr\": 276,\n\t\"./tr.js\": 276,\n\t\"./tzl\": 277,\n\t\"./tzl.js\": 277,\n\t\"./tzm\": 278,\n\t\"./tzm-latn\": 279,\n\t\"./tzm-latn.js\": 279,\n\t\"./tzm.js\": 278,\n\t\"./ug-cn\": 280,\n\t\"./ug-cn.js\": 280,\n\t\"./uk\": 281,\n\t\"./uk.js\": 281,\n\t\"./ur\": 282,\n\t\"./ur.js\": 282,\n\t\"./uz\": 283,\n\t\"./uz-latn\": 284,\n\t\"./uz-latn.js\": 284,\n\t\"./uz.js\": 283,\n\t\"./vi\": 285,\n\t\"./vi.js\": 285,\n\t\"./x-pseudo\": 286,\n\t\"./x-pseudo.js\": 286,\n\t\"./yo\": 287,\n\t\"./yo.js\": 287,\n\t\"./zh-cn\": 288,\n\t\"./zh-cn.js\": 288,\n\t\"./zh-hk\": 289,\n\t\"./zh-hk.js\": 289,\n\t\"./zh-mo\": 290,\n\t\"./zh-mo.js\": 290,\n\t\"./zh-tw\": 291,\n\t\"./zh-tw.js\": 291\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 307;"],"names":["async","getProductsByCategoryId","context","categoryId","searchResult","searchByCategoryAsync","callerContext","actionContext","requestContext","apiSettings","channelId","catalogId","catch","error","console","log","length","sort","a","b","DisplayOrder","productIds","map","item","push","RecordId","getByIdsAsync","getProducts","categoryIDs","criterias","Context","ChannelId","CatalogId","CategoryIds","IncludeAttributes","searchAsync","getCustomerOrderHistory","hierarchy","customer","organisation","isUat","limit","source","dictionary","result","forEach","record","Children","Main","SubIDs","Products","j","generateDictionary","orderHistory","btgpTransactions","orders","getOrderHistoryAsync","AccountNumber","getByCustomerAllBTGPTransactionAsync","Email","getByCustomerAllBTGPTransactionFromHqAsync","i","transaction","JSON","parse","transactionNames","nameID","mainName","mainID","price","ProductCategoryID","found","find","parseInt","ProductID","Name","Price","ProductCategory","Number","ProductPrice","DedicationPeriod","findIndex","label","matchingOrder","order","Id","SalesOrderID","orderReceiptNo","ReceiptNo","SalesId","toString","EventDates","EventName","Names","OrderDate","DateOfTransaction","Date","Record","getTime","generateErrorLog","errorLogName","errorDetails","createBTGPErrorLogAsync","uuid","uuidv4","uuidValidate","uuidVersion","generateUUID","toISOString","CartLineID","CartID","EventID","SerialID","SerialNumber","SerialName","Name_1","Name_2","Name_3","Name_4","Name_5","Name_6","Name_7","Name_8","Name_9","Name_10","Name_11","Name_12","Name_13","Name_14","Name_15","Name_16","Name_17","Name_18","Name_19","Name_20","Remarks","Message","Category","DedicatedBy","HasTaxDeduction","Nric","BuildingName","UnitNumber","PostalCode","BirthDate","PhoneNumber","SchoolName","DonationOption","BlessingOption","CartLineComment","BirthTime","LightOption","ValidFrom","ValidTo","ParentCartLineID","Country","CompanyName","DeceasedRelationship","SurgeryDate","DeathDate","DeathTime","NameChange","OldName_1","OldName_2","BirthDate_2","BirthTime_2","StartDate","Gender","ChineseName","ContactNumber","NameNextKin","ContactNumberNextKin","PassportNumber","PassportExpiryDate","PassportIssuedDate","createOrUpdateCartline","createOrUpdateBTGPCartLineAsync","Form","IsValid","InvalidType","InCart","IsSubProduct","Consent","IsInsuranceIncluded","showNextOrPreviousPage","selectors","showClassName","hideClassName","showNextPage","showPageIndex","elements","document","querySelectorAll","htmlElement","classList","contains","remove","add","elementToShow","loadingProductListInHomePageOrPrecheckoutPage","className","productListEl","getElementsByClassName","overlayEl","hasChildNodes","style","display","intervalId","setInterval","clearInterval","showLoadingScreen","show","overlayTimeout","setTimeout","showLoadingScreenInstant","showTryAgainPrintReceiptPopUp","clearOverlayTimeout","clearTimeout","showStartOverBtnInHeader2","Array","from","element","buildKioskv3ReceiptItems","cart","_cart$cart$CartLines","_cart$cart$CartLines2","CartLines","cartLine","ProductId","simpleProductsResults","Ids","receiptItems","receiptItem","quantity","Quantity","productName","product","ProductName","totalAmount","comment","Comment","Breakpoints","isMobile","width","large","FOMOOrderStatus","InventoryLvls","Response","showStrikethroughPricing","props","originalPrice","getOriginalPrice","data","CustomerContextualPrice","Math","max","BasePrice","TradeAgreementPrice","AdjustedPrice","renderCurrentPrice","initialPrice","formatCurrency","React","itemProp","undefined","freePriceText","cultureFormatter","renderCurrentPriceWithOriginalPrice","originalPriceText","currentPriceText","savingsText","ProductDetailsPriceComponent","msdyn365Commerce","createComponent","_objectSpread","component","classnames","uuidValidateV4","strSplit","sentence","splitChar","oneWord","newSentence","split","AddToCartComponentActions","onClick","_event","setDisabled","openModal","cartError","addToCartError","productToAdd","propagateError","getSelectedProduct","cartState","getCartState","matchingCartItems","matchingCartLineIds","value","index","cartLinesResult","getAllBTGPCartLineAsync","cartLineData","cartIdToRemove","cl","removeCartResult","removeCartLines","cartLineIds","status","errorMessageId","ErrorResourceId","errorMessageDetail","LocalizedMessage","failureReason","cartActionResult","deleteBTGPCartLineAsync","parsed","names","cartEvent","events","cartEventArray","cartEventID","eventIDs","cartEventIDArray","cartSerialId","serialIds","cartSerialNumber","serialNumbers","cartSerialName","serialNames","cartName","cartNameArray","r","cartMessage","messages","cartMessageTemp","substring","cartRemark","remarks","cartCategory","categories","cartDedicatedBy","dedicatedBy","cartHasTaxDeduction","hasTaxDeductions","cartNric","nrics","cartBuildingName","buildingNames","cartUnitNumber","unitNumbers","cartPostalCode","postalCodes","cartPhoneNumber","phoneNumbers","String","cartChineseName","chineseNames","cartNameNextKin","nameNextKins","cartContactNumber","contactNumbers","cartContactNumbersNextKin","contactNumbersNextKin","cartPassportNumber","passportNumbers","cartPassportExpiryDate","passportExpiryDates","cartPassportIssuedDate","passportIssuedDates","cartConsent","consents","cartIsInsuranceIncluded","isInsuranceIncluded","cartCountry","countries","cartSchoolName","schoolNames","cartBirthDate","birthDates","cartBirthDates","cartBirthTimes","birthTimes","cartCollectionOption","collectionOptions","cartBlessingOption","blessingOptions","cartLightOption","lightOptions","cartValidFrom","validFroms","cartValidTo","validTos","cartDedicationPeriod","dedicationPeriods","cartStartDate","startDates","cartGender","genders","cartCompanyName","companyNames","cartDeceasedRelationship","deceasedRelationships","cartDeathDate","deathDates","cartDeathTime","deathTimes","cartSurgeryDate","surgeryDates","cartNameChange","nameChanges","cartOldName","oldNames","cartOldNameArray","cartQuantity","quantities","cartSubProductQuantity","subProductQuantities","cartHasSubProduct","subProduct","cartParentCartLineID","cartEventAddedIndex","cartSubParentAdded","cartSubProductAdded","cartComment","addToCartResult","addProductToCart","count","availableQuantity","productAvailability","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isOrderQuantityLimitsFeatureEnabled","enableStockCheck","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","cartLineProductID","cartLineID","LineId","updateCart","updateCartLines","updateCartLinesAsync","cartItem","propagateResult","AddToCart","_props$dialogStrings","_props$dialogStrings2","_props$dialogStrings3","disabled","useState","modalOpen","setModalOpen","priceComponent","id","typeName","dialogStrings","popupProps","imageSettings","gridSettings","request","productQuantity","navigationUrl","telemetryContent","renderModalPopup","Popup","Object","assign","getLinkText","payload","getPayloadObject","TelemetryEvent","attributes","getTelemetryAttributes","event","isIntermediateState","shouldShowOutOfStock","defaultProps","outOfStockText","addToCartText","isCustomPriceSelected","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","Dimensions","missingDimensions","filter","dimension","DimensionValue","Value","stockLeft","includeCurrentQuantity","app","config","isLoading","isUpdatingDimension","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","isAddServiceItemToCart","includedQuantityNumber","onAdd","onError","ProductDetailsAddToCartComponent","getGenericDonationsError","resources","location","addedToCartFailureMessage","substatus","elementFoundAt","productIdToFind","_context$actionContex","DeliveryMode","channel","PickupDeliveryModeCode","FulfillmentStoreId","OrgUnitNumber","curQuantity","cartLineToUpdate","maxQuantityForCartLineItem","availableQty","quantityLimit","min","maxQuantityLimitText","replace","_result$cartActionRes","getConfigureDonationsErrors","isGiftCard","dimensions","DimensionTypeValue","dimensionTypeValue","productDimensionTypeColorErrorMessage","productDimensionTypeConfigurationErrorMessage","productDimensionTypeSizeErrorMessage","productDimensionTypeAmountErrorMessage","productDimensionTypeStyleErrorMessage","getDimensionDonationsErrorString","ProductDetailsAddtoCartButton","_ref","simpleProductList","productsAvailability","productPriceList","localeCode","keyInPriceAmount","cartAdded","isEditMode","callbackState","setCallBackState","errorState","configureErrors","quantityError","customAmountError","otherError","errorHost","selectedProduct","productAvailableQuantity","productPrice","productDeliveryOptions","isServiceItem","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","dimensionUpdateQueue","FinitePromiseQueue","simpleProductValue","cartValue","elem","TotalAvailable","UnitOfMeasure","ExtensionProperties","goToCartText","buyBoxGoToCartText","continueShoppingText","buyBoxContinueShoppingText","headerItemOneText","buyBoxSingleItemText","headerItemFormatText","buyBoxMultiLineItemFormatText","headerMessageText","buyBoxHeaderMessageText","priceFree","addToCartCallbacks","updateQuantity","newQuantity","errorStateVal","prevState","updateErrorState","newErrorState","updateSelectedProduct","newSelectedProduct","newInventory","newPrice","newDeliveryOptions","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","enqueue","Promise","reason","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","resource","changeModalOpen","isModalOpen","changeUpdatingDimension","isUpdDimension","changeUpdatingDeliveryOptions","isUpdDeliveryOptions","updateKeyInPrice","useEffect","simpleProduct","productPriceVal","ProductDetailsOutOfStockText","quantityErrorForState","customAmountErrorForState","cartObj","otherErrorForState","errorMessageOutOfStock","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","getQuantityError","formatedAmountLimit","invalidSmallCustomAmountText","invalidLargeCustomAmountText","IsGiftCard","onAddToCartSuccess","_callbackState$errorS","_callbackState$errorS2","_callbackState$errorS3","PrductDetailsAddtoCartErrorBlock","showError","_ref2","errorMessages","values","message","Alert","isOpen","color","assertive","buyboxErrorMessageHeader","key","formScheme","rowsData","addRow","deleteRow","callbackPrice","callbackName","callbackCategory","callbackDedicatedBy","callbackNamesEntered","callbackPricesEntered","formItems","allowMultipleRegistrations","minDonationNumberOption","field_options","minDonationstringOption","setCustomPrice","inputValue","setInputValue","donationValue","setDonationValue","radioValue","setRadioValue","ceremonyName","setCeremonyName","setDedicatedBy","formLabels","noOfNames","form","field_name","field_number","deceasedNames","field_number3","handleSubmit","reset","useForm","_onChangeRadioValue","_setRadioValueArray","target","ceremonyNameArray","slice","existingCeremonyName","existingNameArray","dedicatedNameArray","repeat","pop","join","_setCustomPriceArray","customPriceArray","_setDonationValueArray","donationValueArray","_setInputValue","num","isNaN","_setInputValueArray","inputValueArray","radioValueArray","_displayName","nameIndex","_setCeremonyNameArray","name","trim","_checkNamesEntered","_setDedicatedByArray","dedicatedByArray","categoryArray","namesEntered","_addItem","categoryValueArray","_deleteCartLine","success","deleteCartLineResult","splice","_updateStateData","minDonationvalue","minDonationString","existingDonationValue","existingInputValue","existingCustomPriceAmount","existingRadioValue","existingDedicatedBy","itemCategory","itemNames","itemNameCount","itemName","_buildAmountField","idx","amount","option","type","checked","onChange","_onChangePriceValue","inputMode","pattern","role","onKeyPress","test","preventDefault","onKeyDown","keyCode","_buildNameGroup","isDeceased","apply","x","deceasedName","endsWith","_setNameMultipleInputValue","maxLength","charactersLimitForNames","inputName","inputMultipleName","includes","inputMutlipleNameSplit","_buildDedicatedBy","_setDedicatedByValue","onSubmit","onReset","autoComplete","category","valueOf","_buildCategoryField","_selectedProduct$resu","_selectedProduct$resu2","field_type","action","callbackEvent","callbackEventID","callbackBuilding","callbackUnitNumber","callbackPostalCode","callbackPhoneNumber","callbackAddressEntered","userInfo","productEvents","eventNames","setEventNames","setEventIDs","setCategories","setNames","setBuildingNames","setUnitNumbers","setPostalCodes","setPhoneNumbers","namesCount","companyCount","field_number2","userValid","emailaddress1","_onChangeCategory","_setCategory","namesArray","valueArray","_setName","_checkNameEntered","_checkAddressEntered","buildingNamesArray","postalCodesArray","_initBuildingField","gmb_blockno","gmb_buildingno","gmb_buildingname","address1_line1","eventNamesArray","eventIDsArray","categoriesArray","unitNumbersArray","phoneNumbersArray","gmb_unitnofloorapartmentno","address1_postalcode","nameLabel","_formatNameInput","inputMultipleNames","newValues","_buildAddressField","addressPrompt","addressBuilding","_setBuildingName","addressUnit","_setUnitNumber","addressPostalCode","_setPostalCode","toast","warning","addressCountry","addressCountryPrompt","addressPhone","_setPhoneNumber","callbackCollection","ceremonyValue","setCeremonyValue","ceremonyIDValue","setCeremonyIDValue","optionValue","setOptionValue","_onChangeOptionValue","_setOptionValueArray","_checkInputEntered","ceremonyValueArray","ceremonyIDValueArray","optionValueArray","existingCeremony","existingCeremonyID","existingOptionValue","_buildOptionField","callbackMultiplier","callbackEventsSelected","multipliers","setMultiplers","_setMultipleEventDates","inputEventDates","inputEventIDs","selectValueArray","eventIDArray","_setMultipler","_checkEventsEntered","_displayEventDates","displayValue","eventDates","eventIds","ceremonyEventArray","eventsSelected","multipliersArray","eventName","eventDate","Select","isMulti","closeMenuOnSelect","options","classNamePrefix","noOptionsMessage","blurInputOnSelect","_buildEventDropdown","_checkNumberOfSelectedEvent","attendeeName","setAttendeeName","coursesEventId","setCoursesEventId","selectValue","setSelectValue","_setAttendeeNameArray","attendeeNameArray","_checkPricesEntered","pricesEntered","multiplierArray","coursesEventArray","coursesEventIDArray","existingAttendeeName","existingDonationAmount","firstname","lastname","cousesEventArray","_buildName","_setNameInputValue","ceremonyNameArraysplit","_buildDeceasedNameGroup","_buildDedicatedName","donationName","setDonationName","donationAmount","setDonationAmount","_setDonationNameArray","donationNameArray","isNumeric","existingDonationName","ceremonyEventID","setEventID","ceremonyEventIDArray","_buildDeceasedName","callbackNextOfKinName","callbackPhoneNumbersEntered","callbackNextOfKinPhoneNumber","callbackBirthDate","callbackDateEntered","azureContainerName","callbackPassportNumberEntered","callbackPassportExpiryDateEntered","callbackPassportIssueDateEntered","callbackFileUploaded","isFileUploaded","callbackPassportNumber","callbackPassportExpiryDate","callbackPassportIssuedDate","callbackConsent","callbackRemarks","showRemarksField","insuranceAmount","callbackInsuranceIncluded","callbackInsuranceIncludedNum","insuranceAmountValue","chineseName","setChineseName","nextOfKinName","setNextOfKinName","nextOfKinPhoneNumbers","setNextOfKinPhoneNumbers","birthDate","setBirthDate","passportNumber","setPassportNumber","passportExpiryDate","setPassportExpiryDate","passportIssueDate","setPassportIssueDate","remainingSlots","setRemainingSlots","file","setFile","imageFiles","setImageFiles","isValidFileSize","setIsValidFileSize","consent","setConsent","remark","setRemark","setIsInsuranceIncluded","isInsuranceIncludedNum","setIsInsuranceIncludedNum","showAddMoreButton","setShowAddMoreButton","_checkDateEntered","_checkPassportExpiryDateEntered","_checkPassportIssueDateEntered","_setNextOfKinNameInputValue","_setNextOfKinNameArray","nextOfKinNameArray","_setFileInputValue","imageFile","files","size","_validateFileSize","base64","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","convertToBase64","base64String","imageFileArray","fileSizeErrorMsg","_checkFileUploaded","imageFileUploaded","_checkPhoneNumberEntered","phoneNumbersEntered","_checkPassportNumberEntered","passportNumbersArray","passportNumbersEntered","nextOfKinNamesArray","nextOfKinPhoneNumbersArray","chineseNamesArray","birthdayArray","passportNumberArray","passportIssueDateArray","passportExpiryDateArray","consentArray","remarkArray","eventObj","_setEventDates","isInsuranceIncludedArray","isInsuranceIncludedNumArray","existingPhoneNumbersArray","existingChineseNamesArray","existingNextOfKinNamesArray","existingNextOfKinPhoneNumbersArray","existingBirthDate","existingPassportNumber","existingPassportIssueDate","existingPassportExpiryDate","existingConsent","existingRemark","insuranceIncludeArray","hasInsurance","checkbox","getElementById","_selectedProduct$resu3","_setEventDatesOnLoad","_selectedProduct$resu4","gmb_fullnamechinese","mobilephone","_setRemarkArray","eventDetails","hideAddMoreButton","eventAvailableSlot","formLength","_buildBirthDate","DatePicker","date","_setBirthDate","format","maxDate","dayPlaceholder","monthPlaceholder","yearPlaceholder","_buildPassportExpiryDate","_passportExpiryDate","_setPassportExpiryDate","_buildPassportIssueDate","_passportIssueDate","_setPassportIssueDate","_buildUploadPassport","passportUpload","accept","e","env","entity","fileName","base64Image","containerName","uploadImageFileToAzure","toUpperCase","SUCCESS","fileUploadFailedMsg","fileUploadSuccessMsg","validPassportText","_uploadFileToAzure","_buildNextOfKinContactNumber","phoneNumberNextOfKin","_setNextOfKinPhoneNumbers","_buildPassportNumber","_setPassportNumber","_buildContactNumber","phoneNumber","_buildRemarks","_setRemarksInputValue","charactersLimitForRemarks","_buildInsuranceField","tax","taxPrompt","htmlFor","_setInsuranceAmount","insuranceArray","insuranceNumArray","_selectedProduct$resu5","_selectedProduct$resu6","availableSlots","coursesEvents","defaultValue","nameNextOfKin","_buildNextOfKinName","_selectedProduct$resu7","callbackHasTaxDeduction","callbackNRIC","callbackCountry","callbackEnableSaveDraft","callbackFormsValidation","taxDeductions","setTaxDeductions","setNRICs","countryNames","setCountryNames","_validateForms","_setNames","_resetFields","nricsArray","countryNamesArray","_displayNames","_checkStringArray","_validateIdentity","_validateNricFin","_validateUen","nricRegex","nricTypeRegex","weightArr","nricLetterST","nricLetterFG","nric","exec","nricArr","match","nricType","nricDigitsArr","total","indexOf","letterIndex","nricLetter","checkAlphabet","entityTypeIndicator","uenStrArray","entityType","entityTypeMatch","taxDeductionsArray","hasNames","_checkTaxDeductions","countriesArray","hasTax","_buildTaxDeductionField","_setTaxDeduction","_buildNRIC","_setNric","_buildPhone","addressPhonePrompt","_setPhoneNumbers","_buildAddress","states","addressOptional","placeholder","_setCountryName","isSearchable","callbackChineseName","callbackChineseNamesEntered","makeChinesNameMandatory","_setChineseNameArray","chineseNameArray","_checkChineseNamesEntered","chineseNamesEntered","_buildChineseName","chineseNameNotMandatory","_setChineseNameInputValue","insuranceFeeLabel","callbackBirthTime","birthTime","setBirthTime","dateValueArray","timeValueArray","birthDateArray","existingBirthTime","_buildNameField","minDate","_buildBirthTime","time","_setBirthTime","callbackSchoolName","callbackBlessingOption","callbackSchoolsEntered","schoolName","setSchoolName","_checkSchoolEntered","schoolNameArray","blessingOptionArray","existingSchoolName","dateFormat","selected","placeholderText","_buildSchoolField","_setSchoolName","callbackStartDate","setStartDates","startDate","setDate","getDate","setHours","startDatesArray","toDateString","_buildDedicationPeriod","_setStartDate","serialNumber","setSerialNumber","buildingName","setBuildingName","unitNumber","setUnitNumber","postalCode","setPostalCode","countryName","setCountry","buildingArray","postalCodeArray","address1_city","_initCountryField","place","address1_country","buildingNameArray","unitNumberArray","countryArray","serialNumberArray","existingEventName","existingEventID","existingBuildingName","existingUnitNumber","existingPostalCode","existingCountry","itemCommentParts","eventID","_setCountry","renewableLamps","replaceRow","removeLamp","callbackNoOfYear","callbackLightOption","callbackValidFrom","callbackValidTo","callbackOldName","callbackNameChange","callbackSerialId","callbackSerialNumber","callbackSerialNames","addRenewLamp","itemUnavailable","serialNumberValue","setSerialNumberValue","serialIdValue","setSerialIdValue","setSerialNames","lightValue","setLightValue","yearValue","setYearValue","startYearValue","setStartYearValue","endYearValue","setEndYearValue","setFullYear","getFullYear","nameChangeValue","setNameChangeValue","oldNameValue","setOldNameValue","_onChangeYearValue","_setYearValueArray","_setValidValueArray","_onChangeNameChangeValue","_setNameChangeValueArray","_setOldNameValueArray","nameChangeValueArray","oldNameValueArray","yearValueArray","startYearValueArray","endYearValueArray","serialNumberValueArray","serialIdValueArray","serialNamesArray","lightOptionValueArray","nameChangeArray","oldNameArray","existingStartYearValue","existingEndYearValue","existingYearValue","existingLightOptionValue","existingNameChangeValue","existingOldNameValue","itemYear","itemLightOption","itemValidFrom","itemValidTo","itemNameChange","itemOldName_1","itemOldName_2","oldName","indexArray","numberOfLamps","_addItemRenewSerial","renewalTitle","years","oneYearTitle","twoYearTitle","_buildNoOfYearsField","period","moment","_buildSponsorshipPeriodField","nameChangePrompt","keepNameTitle","changeNameTitle","_buildNameChangeField","callbackMessage","offeringName","setOfferingName","offeringMessage","setOfferingMessage","offeringRemark","setOfferingRemark","_setOfferingNameArray","offeringNameArray","_setOfferingMessageArray","offeringMessageArray","_setOfferingRemarkArray","offeringRemarkArray","existingOfferingName","existingOfferingMessage","existingOfferingRemark","_buildMessage","_setMessageInputValue","charactersLimitForMessages","callbackDedicationPeriod","callbackCompanyName","callbackCompaniesEntered","dedicationPeriod","setDedicationPeriod","companyName","setCompanyName","_setDedicationPeriod","periodLabel","scaleIdx","_displayDedicationPeriod","_checkCompanyEntered","dedicationPeriodArray","companyNameArray","existingMultiplier","existingDedicatedPeriod","existingCompanyName","selectedPeriod","_buildCompanyField","_setCompanyName","callbackRelationship","callbackDeathDate","callbackDeathTime","callbackRelationshipsEntered","setDedicationPeriods","dedicatedBys","setDedicatedBys","setDeceasedNames","relationships","setRelationships","setBirthDates","setBirthTimes","setDeathDates","setDeathTimes","setCountries","setRemarks","timeRanges","setTimeRanges","deathTimeRanges","setDeathTimeRanges","_setDeceasedNameArray","_setRelationshipArray","_checkRelationshipEntered","_setDate","_setBirthTimeRange","_setDeathTimeRange","_checkBirthDateEntered","_setTime","_initBirthTimeRanges","_initTimeRanges","deceasedNameArray","relationshipArray","deathDatesArray","startDateInvalid","getMonth","deathDate","deathDateInvalid","birthDatesArray","birthDateInvalid","now","ranges","range","interval","firstHour","lastHour","getHours","concat","dedicationPeriodsArray","dedicatedBysArray","deceasedNamesArray","relationshipsArray","birthTimesArray","deathTimesArray","remarksArray","dedicatedPeriodsArray","_buildDedicatedByField","_buildDeceasedNameField","deceasedDetailsPrompt","_setDeceasedNameInputValue","_buildRelationshipField","relationship","_setRelationshipInputValue","displayTime","slot","_buildBirthDateTime","deathTime","_buildDeathDateTime","_setTimeRange","callbackGender","setGenders","_setGender","gendersArray","gender","_buildGenderField","callbackSurgeryDate","surgeryDate","setSurgeryDate","surgeryDateArray","surgeryValueArray","existingSurgeryDate","_buildSurgeryDate","_setSurgeryDate","callbackBlessingType","blessingType","setBlessingType","blessings","existingBlessingType","_buildBlessingOptions","_setBlessingType","parentDetailsPrompt","require","_setDisplayValue","_formatDateString","dateArray","elementIdx","detailsPrompt","_setNamesInputValue","storedElements","displayBirthDate","_displayFirstDateValue","valueSplit","_displaySecondDateValue","_setDatesInputValue","_setTimesInputValue","callbackSubProductQuantity","subProductQuantity","setSubProductQuantity","_displaySubProductQuantity","subProductQuantityArray","existingSubProductQuantity","itemDedicatedBy","itemSubProductQuantity","_buildSubProductQuantity","consecration","consecrationSub","consecrationPrompt","_setSubProductQuantity","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","module","exports"],"sourceRoot":""}