{"version":3,"file":"static/js/735abcb46f91abb3b6c4.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 } from '@msdyn365-commerce/core';\r\n\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\n\r\nimport { AsyncResult, Customer, Product, ProductSearchCriteria, ProductSearchResult, SimpleProduct } 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 } 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\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) {\r\n const dictionary = await generateDictionary(context, hierarchy);\r\n\r\n const orders = await getOrderHistoryAsync({ callerContext: context.actionContext }, customer.AccountNumber);\r\n\r\n const orderHistory: PastTransaction[] = [];\r\n\r\n const btgpTransactions = await getByCustomerAllBTGPTransactionAsync({ callerContext: context.actionContext }, customer.AccountNumber, customer.Email!, organisation, isUat, limit);\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 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}","// <= 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\": 198,\n\t\"./af.js\": 198,\n\t\"./ar\": 199,\n\t\"./ar-dz\": 200,\n\t\"./ar-dz.js\": 200,\n\t\"./ar-kw\": 201,\n\t\"./ar-kw.js\": 201,\n\t\"./ar-ly\": 202,\n\t\"./ar-ly.js\": 202,\n\t\"./ar-ma\": 203,\n\t\"./ar-ma.js\": 203,\n\t\"./ar-sa\": 204,\n\t\"./ar-sa.js\": 204,\n\t\"./ar-tn\": 205,\n\t\"./ar-tn.js\": 205,\n\t\"./ar.js\": 199,\n\t\"./az\": 206,\n\t\"./az.js\": 206,\n\t\"./be\": 207,\n\t\"./be.js\": 207,\n\t\"./bg\": 208,\n\t\"./bg.js\": 208,\n\t\"./bm\": 209,\n\t\"./bm.js\": 209,\n\t\"./bn\": 210,\n\t\"./bn-bd\": 211,\n\t\"./bn-bd.js\": 211,\n\t\"./bn.js\": 210,\n\t\"./bo\": 212,\n\t\"./bo.js\": 212,\n\t\"./br\": 213,\n\t\"./br.js\": 213,\n\t\"./bs\": 214,\n\t\"./bs.js\": 214,\n\t\"./ca\": 215,\n\t\"./ca.js\": 215,\n\t\"./cs\": 216,\n\t\"./cs.js\": 216,\n\t\"./cv\": 217,\n\t\"./cv.js\": 217,\n\t\"./cy\": 218,\n\t\"./cy.js\": 218,\n\t\"./da\": 219,\n\t\"./da.js\": 219,\n\t\"./de\": 220,\n\t\"./de-at\": 221,\n\t\"./de-at.js\": 221,\n\t\"./de-ch\": 222,\n\t\"./de-ch.js\": 222,\n\t\"./de.js\": 220,\n\t\"./dv\": 223,\n\t\"./dv.js\": 223,\n\t\"./el\": 224,\n\t\"./el.js\": 224,\n\t\"./en-au\": 225,\n\t\"./en-au.js\": 225,\n\t\"./en-ca\": 226,\n\t\"./en-ca.js\": 226,\n\t\"./en-gb\": 227,\n\t\"./en-gb.js\": 227,\n\t\"./en-ie\": 228,\n\t\"./en-ie.js\": 228,\n\t\"./en-il\": 229,\n\t\"./en-il.js\": 229,\n\t\"./en-in\": 230,\n\t\"./en-in.js\": 230,\n\t\"./en-nz\": 231,\n\t\"./en-nz.js\": 231,\n\t\"./en-sg\": 232,\n\t\"./en-sg.js\": 232,\n\t\"./eo\": 233,\n\t\"./eo.js\": 233,\n\t\"./es\": 234,\n\t\"./es-do\": 235,\n\t\"./es-do.js\": 235,\n\t\"./es-mx\": 236,\n\t\"./es-mx.js\": 236,\n\t\"./es-us\": 237,\n\t\"./es-us.js\": 237,\n\t\"./es.js\": 234,\n\t\"./et\": 238,\n\t\"./et.js\": 238,\n\t\"./eu\": 239,\n\t\"./eu.js\": 239,\n\t\"./fa\": 240,\n\t\"./fa.js\": 240,\n\t\"./fi\": 241,\n\t\"./fi.js\": 241,\n\t\"./fil\": 242,\n\t\"./fil.js\": 242,\n\t\"./fo\": 243,\n\t\"./fo.js\": 243,\n\t\"./fr\": 244,\n\t\"./fr-ca\": 245,\n\t\"./fr-ca.js\": 245,\n\t\"./fr-ch\": 246,\n\t\"./fr-ch.js\": 246,\n\t\"./fr.js\": 244,\n\t\"./fy\": 247,\n\t\"./fy.js\": 247,\n\t\"./ga\": 248,\n\t\"./ga.js\": 248,\n\t\"./gd\": 249,\n\t\"./gd.js\": 249,\n\t\"./gl\": 250,\n\t\"./gl.js\": 250,\n\t\"./gom-deva\": 251,\n\t\"./gom-deva.js\": 251,\n\t\"./gom-latn\": 252,\n\t\"./gom-latn.js\": 252,\n\t\"./gu\": 253,\n\t\"./gu.js\": 253,\n\t\"./he\": 254,\n\t\"./he.js\": 254,\n\t\"./hi\": 255,\n\t\"./hi.js\": 255,\n\t\"./hr\": 256,\n\t\"./hr.js\": 256,\n\t\"./hu\": 257,\n\t\"./hu.js\": 257,\n\t\"./hy-am\": 258,\n\t\"./hy-am.js\": 258,\n\t\"./id\": 259,\n\t\"./id.js\": 259,\n\t\"./is\": 260,\n\t\"./is.js\": 260,\n\t\"./it\": 261,\n\t\"./it-ch\": 262,\n\t\"./it-ch.js\": 262,\n\t\"./it.js\": 261,\n\t\"./ja\": 263,\n\t\"./ja.js\": 263,\n\t\"./jv\": 264,\n\t\"./jv.js\": 264,\n\t\"./ka\": 265,\n\t\"./ka.js\": 265,\n\t\"./kk\": 266,\n\t\"./kk.js\": 266,\n\t\"./km\": 267,\n\t\"./km.js\": 267,\n\t\"./kn\": 268,\n\t\"./kn.js\": 268,\n\t\"./ko\": 269,\n\t\"./ko.js\": 269,\n\t\"./ku\": 270,\n\t\"./ku.js\": 270,\n\t\"./ky\": 271,\n\t\"./ky.js\": 271,\n\t\"./lb\": 272,\n\t\"./lb.js\": 272,\n\t\"./lo\": 273,\n\t\"./lo.js\": 273,\n\t\"./lt\": 274,\n\t\"./lt.js\": 274,\n\t\"./lv\": 275,\n\t\"./lv.js\": 275,\n\t\"./me\": 276,\n\t\"./me.js\": 276,\n\t\"./mi\": 277,\n\t\"./mi.js\": 277,\n\t\"./mk\": 278,\n\t\"./mk.js\": 278,\n\t\"./ml\": 279,\n\t\"./ml.js\": 279,\n\t\"./mn\": 280,\n\t\"./mn.js\": 280,\n\t\"./mr\": 281,\n\t\"./mr.js\": 281,\n\t\"./ms\": 282,\n\t\"./ms-my\": 283,\n\t\"./ms-my.js\": 283,\n\t\"./ms.js\": 282,\n\t\"./mt\": 284,\n\t\"./mt.js\": 284,\n\t\"./my\": 285,\n\t\"./my.js\": 285,\n\t\"./nb\": 286,\n\t\"./nb.js\": 286,\n\t\"./ne\": 287,\n\t\"./ne.js\": 287,\n\t\"./nl\": 288,\n\t\"./nl-be\": 289,\n\t\"./nl-be.js\": 289,\n\t\"./nl.js\": 288,\n\t\"./nn\": 290,\n\t\"./nn.js\": 290,\n\t\"./oc-lnc\": 291,\n\t\"./oc-lnc.js\": 291,\n\t\"./pa-in\": 292,\n\t\"./pa-in.js\": 292,\n\t\"./pl\": 293,\n\t\"./pl.js\": 293,\n\t\"./pt\": 294,\n\t\"./pt-br\": 295,\n\t\"./pt-br.js\": 295,\n\t\"./pt.js\": 294,\n\t\"./ro\": 296,\n\t\"./ro.js\": 296,\n\t\"./ru\": 297,\n\t\"./ru.js\": 297,\n\t\"./sd\": 298,\n\t\"./sd.js\": 298,\n\t\"./se\": 299,\n\t\"./se.js\": 299,\n\t\"./si\": 300,\n\t\"./si.js\": 300,\n\t\"./sk\": 301,\n\t\"./sk.js\": 301,\n\t\"./sl\": 302,\n\t\"./sl.js\": 302,\n\t\"./sq\": 303,\n\t\"./sq.js\": 303,\n\t\"./sr\": 304,\n\t\"./sr-cyrl\": 305,\n\t\"./sr-cyrl.js\": 305,\n\t\"./sr.js\": 304,\n\t\"./ss\": 306,\n\t\"./ss.js\": 306,\n\t\"./sv\": 307,\n\t\"./sv.js\": 307,\n\t\"./sw\": 308,\n\t\"./sw.js\": 308,\n\t\"./ta\": 309,\n\t\"./ta.js\": 309,\n\t\"./te\": 310,\n\t\"./te.js\": 310,\n\t\"./tet\": 311,\n\t\"./tet.js\": 311,\n\t\"./tg\": 312,\n\t\"./tg.js\": 312,\n\t\"./th\": 313,\n\t\"./th.js\": 313,\n\t\"./tk\": 314,\n\t\"./tk.js\": 314,\n\t\"./tl-ph\": 315,\n\t\"./tl-ph.js\": 315,\n\t\"./tlh\": 316,\n\t\"./tlh.js\": 316,\n\t\"./tr\": 317,\n\t\"./tr.js\": 317,\n\t\"./tzl\": 318,\n\t\"./tzl.js\": 318,\n\t\"./tzm\": 319,\n\t\"./tzm-latn\": 320,\n\t\"./tzm-latn.js\": 320,\n\t\"./tzm.js\": 319,\n\t\"./ug-cn\": 321,\n\t\"./ug-cn.js\": 321,\n\t\"./uk\": 322,\n\t\"./uk.js\": 322,\n\t\"./ur\": 323,\n\t\"./ur.js\": 323,\n\t\"./uz\": 324,\n\t\"./uz-latn\": 325,\n\t\"./uz-latn.js\": 325,\n\t\"./uz.js\": 324,\n\t\"./vi\": 326,\n\t\"./vi.js\": 326,\n\t\"./x-pseudo\": 327,\n\t\"./x-pseudo.js\": 327,\n\t\"./yo\": 328,\n\t\"./yo.js\": 328,\n\t\"./zh-cn\": 329,\n\t\"./zh-cn.js\": 329,\n\t\"./zh-hk\": 330,\n\t\"./zh-hk.js\": 330,\n\t\"./zh-mo\": 331,\n\t\"./zh-mo.js\": 331,\n\t\"./zh-tw\": 332,\n\t\"./zh-tw.js\": 332\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 = 337;"],"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","dictionary","result","forEach","record","Children","Main","SubIDs","Products","j","generateDictionary","orders","getOrderHistoryAsync","AccountNumber","orderHistory","btgpTransactions","getByCustomerAllBTGPTransactionAsync","Email","i","transaction","JSON","parse","transactionNames","nameID","mainName","mainID","price","ProductCategoryID","found","find","parseInt","ProductID","Name","Price","ProductCategory","Number","ProductPrice","DedicationPeriod","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","Breakpoints","isMobile","width","large","FOMOOrderStatus","InventoryLvls","Response","showStrikethroughPricing","props","originalPrice","getOriginalPrice","data","CustomerContextualPrice","Math","max","BasePrice","TradeAgreementPrice","AdjustedPrice","renderCurrentPrice","initialPrice","formatCurrency","React","className","itemProp","undefined","freePriceText","cultureFormatter","renderCurrentPriceWithOriginalPrice","originalPriceText","currentPriceText","savingsText","ProductDetailsPriceComponent","msdyn365Commerce","_objectSpread","component","classnames","uuidValidateV4","strSplit","sentence","splitChar","oneWord","newSentence","split","AddToCartComponentActions","onClick","_event","setDisabled","openModal","cartError","addToCartError","productToAdd","product","propagateError","getSelectedProduct","cartState","getCartState","matchingCartItems","matchingCartLineIds","value","index","cartLinesResult","getAllBTGPCartLineAsync","cart","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","CartLines","ProductId","cartLineID","LineId","updateCart","updateCartLines","Comment","updateCartLinesAsync","cartItem","propagateResult","AddToCart","_props$dialogStrings","_props$dialogStrings2","_props$dialogStrings3","disabled","useState","modalOpen","setModalOpen","priceComponent","id","typeName","dialogStrings","popupProps","imageSettings","gridSettings","request","productQuantity","quantity","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","Quantity","maxQuantityForCartLineItem","availableQty","quantityLimit","min","maxQuantityLimitText","replace","_result$cartActionRes","_result$cartActionRes2","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","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","element","_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","Array","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","style","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","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","document","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","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","findIndex","_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":""}