{"version":3,"file":"BestellWizardMobile-1zrudcxB.js","names":["_Fragment","_Fragment","Form","_Fragment","_Fragment","_Fragment","_Fragment","useState","_Fragment","Form","useState","_Fragment","Form","Modal","_Fragment","_Fragment","useState","Form","Alert","useState","useState","uuidv4","Step5CPickupLocationConfirmWaitingList","Step6BAssociationMembership","Spinner","Form_default","require_react","Button","__toESM","Modal_default","require_jsx_runtime","TapirButton","BestellWizardApi","CoopApi","useApi","addToast","WaitingListApi","v4","handleRequestError","PickupLocationsApi","getCsrfToken","Alert_default","Step10OrderSummary","updateProductsAndProductTypesOverCapacity","buildEmptyShoppingCart","Step4BProductTypeOrder","willBecomeMemberNow","fetchFirstDeliveryDates","shouldIncludeStepGrowingPeriodChoice","Step3BGrowingPeriodChoice","isShoppingCartEmpty","Step5BPickupLocationChoice","Step11Legal","updateWaitingList","getProductTypeByProductId","buildSettings","buildEmptySettings","getEmptyPersonalData","isProductInWaitingList","getProductByIdGlobal","TapirCheckbox","getProductTypeFromStep","NextStepButton","getVisibleAssociationMembershipTypes","getMonthlyPayment","getHtmlDescription","BestellWizardMobileBase","Step9BankingData","PersonalDataFormControl","StepGenericIntro","replaceTokens","getPhase","buildFilteredShoppingCart","isAtLeastOneProductOrdered","BUTTON_VARIANT","TapirHelpButton","sortProductTypes","formatCurrency","checkPickupLocationCapacities","shouldShowEmailMismatchWarning","emailsMatch","isPhoneNumberValid","isEmailValid","isPersonalDataValidShort","Step6BAssociationMemberships","Step6BCoopShares","import_react","getTestPersonalData","email","updateMinimumNumberOfShares","combinedCart","shoppingCartOrder","productTypesInWaitingList","coopApi","setMinimumNumberOfShares","response","setSelectedNumberOfCoopShares","updateProductPrices","productPricesController","localController","setProductPricesController","bestellWizardApi","selectedGrowingPeriod","productType","settings","product","getNewPrice","setSettings","error","setToastDatas","productIdB","price","pricesByProductId","productIdA","import_jsx_runtime","Step12Channel","updateSelection","selected","selectedDistributionChannels","channel","setSelectedDistributionChannels","channelId","channelName","checked","confirmOrder","goToNextStep","confirmOrderLoading","Step13Feedback","feedback","setFeedback","event","BackToWebsiteButton","Step14BConfirmationWaitingList","memberMail","Step14Confirmation","Step1AWelcome","Step1BWelcome","Step2FirstName","showValidation","setShowValidation","stepActive","validate","personalData","setPersonalData","selectAllRequiredProductTypes","setSelectedProductTypes","productTypes","selectedProductTypes","Step3ProductTypesChoice","productTypeForModal","setProductTypeForModal","showError","setShowError","investingMembership","setShoppingCart","setInvestingMembership","getModalText","selection","pt","showInvestingMembership","firstName","Step5BPickupLocationConfirmWaitingList","setCurrentStep","setCurrentTab","Step6CCoopMemberNow","setBecomeMemberNow","getProductSolidarityChoices","choices","productId","quantity","shoppingCart","choice","SUFFIX","Step7SolidarityContribution","selectedValue","setSelectedValue","customValue","setCustomValue","defaultValueSet","setDefaultValueSet","productChoices","productMinimum","minimum","getMinimum","selectDefaultValue","setSolidarityContribution","customContribution","makeSureTheSelectedValueIsValid","getValues","isValueValid","solidarityContribution","choiceAsString","values","a","b","minimums","value","getDisplay","onSelect","associationMembershipType","contractStartDate","updateCustomValue","cleanedValue","inputValue","floatValue","input","selectionStart","FIELDS","PSEUDONYM_MAX_LENGTH","PSEUDONYM_HELP_TEXT","getType","key","Step8PersonalData","isOver18","setIsOver18","controller","setController","changesDisabled","setEmailAddressAlreadyInUseLoading","setEmailAddressAlreadyInUse","valid","emailAddressAlreadyInUse","getPlaceholder","emailAddressAlreadyInUseLoading","isValid","getExtraText","field","areAllOrderedProductsInWaitingList","isAtLeastOneOrderedProductWithDelivery","orderedProductIds","orderedProductId","isOrderWaitingListOnly","becomeMemberNow","shouldConfirmMemberNow","waitingListConfirmationMode","buildSteps","newSteps","waitingListEntryDetails","shouldShowStepSolidarityContributionBeforeStepPickupLocation","shouldIncludeStepsPickupLocations","selectedPickupLocation","pickupLocationsWithCapacityFull","buildCoopSteps","buildAssociationSteps","shouldShowStepSolidarityContributionBeforeStepPersonalData","shouldIncludeStepsCoopShares","showCoopContent","allowInvestingMembership","shouldShowStepSolidarityContribution","coopSteps","associationSteps","getPublicPickupLocationById","pl","pickupLocationId","BestellWizardMobile","csrfToken","waitingListApi","pickupLocationsApi","settingsLoaded","setSettingsLoaded","toastDatas","steps","setSteps","currentStep","phases","setPhases","selectedPickupLocations","setSelectedPickupLocations","pickupLocationsCapacityCheckLoading","setPickupLocationsCapacityCheckLoading","setPickupLocationsWithCapacityFull","selectedNumberOfCoopShares","statuteAccepted","setStatuteAccepted","minimumNumberOfShares","studentStatusEnabled","setStudentStatusEnabled","payCoopSharesInInstalments","setPayCoopSharesInInstalments","sepaAllowed","setSepaAllowed","contractAccepted","setContractAccepted","setContractStartDate","firstDeliveryDatesByPickupLocationAndProductType","setFirstDeliveryDatesByPickupLocationAndProductType","cancellationPolicyRead","setCancellationPolicyRead","privacyPolicyRead","setPrivacyPolicyRead","checkingCapacities","setCheckingCapacities","checkingCapacitiesController","setCheckingCapacitiesController","productIdsOverCapacity","setProductIdsOverCapacity","productTypeIdsOverCapacity","setProductTypeIdsOverCapacity","setProductTypesInWaitingList","currentPickupLocationTab","setCurrentPickupLocationTab","setSelectedGrowingPeriod","setConfirmOrderLoading","selectedAssociationMembershipType","setSelectedAssociationMembershipType","baseData","minNumberOfShares","newSettings","buildShoppingCartFromWaitingListEntry","productTypesFromWishes","productWish","pickupLocation","handleBeforeUnload","onWindowResize","index","newPhases","step","stepPhase","newShoppingCart","wish","publicProductType","setTestData","visibleMembershipTypes","isPayingCoopSharesInInstalments","onConfirmOrder","locations","handleOrderResponse","goToProductTypeStep","getStepComponent","subStep"],"sources":["../../src_frontend/bestell_wizard/utils/getTestPersonalData.ts","../../src_frontend/bestell_wizard/utils/updateMinimumNumberOfShares.ts","../../src_frontend/utils/updateProductPrices.ts","../../src_frontend/bestell_wizard_mobile/steps/Step12Channel.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step13Feedback.tsx","../../src_frontend/bestell_wizard_mobile/components/BackToWebsiteButton.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step14BConfirmationWaitingList.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step14Confirmation.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step1AWelcome.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step1BWelcome.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step2FirstName.tsx","../../src_frontend/bestell_wizard/utils/selectAllRequiredProductTypes.ts","../../src_frontend/bestell_wizard_mobile/steps/Step3ProductTypesChoice.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step5CPickupLocationConfirmWaitingList.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step6CCoopMemberNow.tsx","../../src_frontend/bestell_wizard_mobile/utils/getProductSolidarityChoices.ts","../../src_frontend/bestell_wizard_mobile/steps/Step7SolidarityContribution.tsx","../../src_frontend/bestell_wizard_mobile/steps/Step8PersonalData.tsx","../../src_frontend/bestell_wizard/utils/areAllOrderedProductsInWaitingList.ts","../../src_frontend/bestell_wizard/utils/isAtLeastOneOrderedProductWithDelivery.ts","../../src_frontend/bestell_wizard_mobile/utils/isOrderWaitingListOnly.ts","../../src_frontend/bestell_wizard_mobile/utils/shouldConfirmMemberNow.ts","../../src_frontend/bestell_wizard_mobile/utils/buildSteps.ts","../../src_frontend/bestell_wizard_mobile/utils/getPublicPickupLocationById.ts","../../src_frontend/bestell_wizard_mobile/BestellWizardMobile.tsx"],"sourcesContent":["import { PersonalData } from \"../types/PersonalData.ts\";\n\nexport function getTestPersonalData(): PersonalData {\n  const email =\n    \"max.mustermann\" + Math.floor(Math.random() * 100000) + \"@example.com\";\n  return {\n    firstName: \"Max\",\n    lastName: \"Mustermann\",\n    email: email,\n    emailConfirm: email,\n    phoneNumber: \"017626274538\",\n    street: \"Musterstrasse 1\",\n    street2: \"\",\n    postcode: \"12345\",\n    city: \"Musterstadt\",\n    country: \"DE\",\n    accountOwner: \"Max Mustermann\",\n    iban: \"DE89370400440532013000\",\n    pseudonym: \"\",\n    paymentRhythm: \"monthly\",\n  };\n}\n","import { CoopApi, PublicProductType } from \"../../api-client\";\nimport { ShoppingCart } from \"../types/ShoppingCart.ts\";\nimport { buildFilteredShoppingCart } from \"./buildFilteredShoppingCart.ts\";\n\nexport function updateMinimumNumberOfShares(\n  coopApi: CoopApi,\n  shoppingCartOrder: ShoppingCart,\n  productTypesInWaitingList: Set<PublicProductType>,\n  setMinimumNumberOfShares: (num: number) => void,\n  setSelectedNumberOfCoopShares: (num: number) => void,\n) {\n  const combinedCart = buildFilteredShoppingCart(\n    shoppingCartOrder,\n    false,\n    productTypesInWaitingList,\n  );\n\n  coopApi\n    .coopApiMinimumNumberOfSharesRetrieve({\n      productIds: Object.keys(combinedCart),\n      quantities: Object.values(combinedCart),\n    })\n    .then((response) => {\n      setMinimumNumberOfShares(response.minimumNumberOfShares);\n      setSelectedNumberOfCoopShares(response.minimumNumberOfShares);\n    });\n}\n","import React from \"react\";\nimport { BestellWizardApi, PublicGrowingPeriod } from \"../api-client\";\nimport { BestellWizardSettings } from \"../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { ToastData } from \"../types/ToastData.ts\";\nimport { handleRequestError } from \"./handleRequestError.ts\";\n\nexport function updateProductPrices(\n  bestellWizardApi: BestellWizardApi,\n  selectedGrowingPeriod: PublicGrowingPeriod,\n  productPricesController: AbortController | undefined,\n  setProductPricesController: (controller: AbortController) => void,\n  settings: BestellWizardSettings,\n  setSettings: (settings: BestellWizardSettings) => void,\n  setToastDatas?: React.Dispatch<React.SetStateAction<ToastData[]>>,\n) {\n  if (productPricesController) {\n    productPricesController.abort();\n  }\n\n  const localController = new AbortController();\n  setProductPricesController(localController);\n\n  bestellWizardApi\n    .bestellWizardApiProductPricesRetrieve(\n      { growingPeriodId: selectedGrowingPeriod?.id! },\n      { signal: localController.signal },\n    )\n    .then((response) => {\n      for (const productType of settings.productTypes) {\n        for (const product of productType.products) {\n          Object.assign(product, {\n            price: getNewPrice(product.id!, response.pricesByProductId),\n          });\n        }\n      }\n\n      setSettings({ ...settings });\n    })\n    .catch(async (error) => {\n      if (error.cause?.name === \"AbortError\") return;\n      await handleRequestError(\n        error,\n        \"Fehler beim Laden der Produkt-Preise\",\n        setToastDatas,\n      );\n    });\n}\n\nfunction getNewPrice(\n  productIdA: string,\n  pricesByProductId: { [productId: string]: number },\n) {\n  for (const [productIdB, price] of Object.entries(pricesByProductId)) {\n    if (productIdA === productIdB) {\n      return price;\n    }\n  }\n  return 0;\n}\n","import React from \"react\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport NextStepButton from \"../components/NextStepButton.tsx\";\nimport TapirCheckbox from \"../components/TapirCheckbox.tsx\";\n\ninterface Step12ChannelProps {\n  settings: BestellWizardSettings;\n  goToNextStep: () => void;\n  selectedDistributionChannels: Set<string>;\n  setSelectedDistributionChannels: (set: Set<string>) => void;\n  confirmOrder: (() => void) | undefined;\n  confirmOrderLoading: boolean;\n  stepActive: boolean;\n}\n\nconst Step12Channel: React.FC<Step12ChannelProps> = ({\n  settings,\n  goToNextStep,\n  selectedDistributionChannels,\n  setSelectedDistributionChannels,\n  confirmOrder,\n  confirmOrderLoading,\n  stepActive,\n}) => {\n  function updateSelection(channel: string, selected: boolean) {\n    if (selected) {\n      selectedDistributionChannels.add(channel);\n    } else {\n      selectedDistributionChannels.delete(channel);\n    }\n    setSelectedDistributionChannels(new Set(selectedDistributionChannels));\n  }\n\n  return (\n    <>\n      <p className={\"text-center\"}>Mehrfachauswahl möglich</p>\n\n      <div className={\"d-flex flex-column gap-2\"}>\n        {Object.entries(settings.distributionChannels).map(\n          ([channelId, channelName]) => (\n            <TapirCheckbox\n              key={channelId}\n              checked={selectedDistributionChannels.has(channelId)}\n              onChange={(checked) => updateSelection(channelId, checked)}\n              controlId={\"distribution_channels_\" + channelId}\n              label={channelName}\n            />\n          ),\n        )}\n      </div>\n      <NextStepButton\n        onClick={confirmOrder ?? goToNextStep}\n        isOrderStep={!settings.feedbackStepEnabled}\n        loading={confirmOrderLoading}\n        stepActive={stepActive}\n      />\n    </>\n  );\n};\n\nexport default Step12Channel;\n","import React from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { getHtmlDescription } from \"../../utils/getHtmlDescription.ts\";\nimport NextStepButton from \"../components/NextStepButton.tsx\";\n\ninterface Step13FeedbackProps {\n  settings: BestellWizardSettings;\n  goToNextStep: () => void;\n  confirmOrder: () => void;\n  confirmOrderLoading: boolean;\n  feedback: string;\n  setFeedback: (value: string) => void;\n  stepActive: boolean;\n}\n\nconst Step13Feedback: React.FC<Step13FeedbackProps> = ({\n  settings,\n  goToNextStep,\n  confirmOrder,\n  confirmOrderLoading,\n  feedback,\n  setFeedback,\n  stepActive,\n}) => {\n  return (\n    <>\n      <p\n        className={\"text-center\"}\n        dangerouslySetInnerHTML={getHtmlDescription(\n          settings.strings.step13Text,\n        )}\n      />\n      <Form.Group style={{ width: \"100%\" }}>\n        <Form.Control\n          as={\"textarea\"}\n          value={feedback}\n          onChange={(event) => setFeedback(event.target.value)}\n          placeholder={\"Dein Feedback\"}\n        />\n      </Form.Group>\n      <NextStepButton\n        onClick={confirmOrder ?? goToNextStep}\n        isOrderStep={true}\n        loading={confirmOrderLoading}\n        stepActive={stepActive}\n      />\n    </>\n  );\n};\n\nexport default Step13Feedback;\n","import React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { BUTTON_VARIANT } from \"../utils/BUTTON_VARIANT.ts\";\n\ninterface BackToWebsiteButtonProps {\n  settings: BestellWizardSettings;\n}\n\nconst BackToWebsiteButton: React.FC<BackToWebsiteButtonProps> = ({\n  settings,\n}) => {\n  if (!settings.websiteUrl) {\n    return null;\n  }\n\n  return (\n    <div className={\"d-flex justify-content-center mt-3\"}>\n      {/* target _top: when the wizard is embedded in an iframe, leave the iframe instead of loading the website inside it */}\n      <Button\n        variant={BUTTON_VARIANT}\n        href={settings.websiteUrl}\n        target={\"_top\"}\n        style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\" }}\n      >\n        <span className={\"material-icons\"}>home</span>\n        <h5 className={\"mb-0\"}>\n          {settings.strings.step14BackToWebsiteButtonText}\n        </h5>\n      </Button>\n    </div>\n  );\n};\n\nexport default BackToWebsiteButton;\n","import React from \"react\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { getHtmlDescription } from \"../../utils/getHtmlDescription.ts\";\nimport BackToWebsiteButton from \"../components/BackToWebsiteButton.tsx\";\n\ninterface Step14BConfirmationWaitingListProps {\n  settings: BestellWizardSettings;\n  memberMail: string;\n}\n\nconst Step14BConfirmationWaitingList: React.FC<\n  Step14BConfirmationWaitingListProps\n> = ({ settings, memberMail }) => {\n  return (\n    <>\n      <p\n        className={\"text-center\"}\n        dangerouslySetInnerHTML={getHtmlDescription(\n          settings.strings.step14bText\n            .replace(\"{{mitglieder_mail}}\", memberMail)\n            .replace(\"{{kontakt_mail}}\", settings.contactMailAddress),\n        )}\n      />\n      <BackToWebsiteButton settings={settings} />\n    </>\n  );\n};\n\nexport default Step14BConfirmationWaitingList;\n","import React from \"react\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { getHtmlDescription } from \"../../utils/getHtmlDescription.ts\";\nimport BackToWebsiteButton from \"../components/BackToWebsiteButton.tsx\";\n\ninterface Step14ConfirmationProps {\n  settings: BestellWizardSettings;\n  memberMail: string;\n}\n\nconst Step14Confirmation: React.FC<Step14ConfirmationProps> = ({\n  settings,\n  memberMail,\n}) => {\n  return (\n    <>\n      <p\n        className={\"text-center\"}\n        dangerouslySetInnerHTML={getHtmlDescription(\n          settings.strings.step14Text\n            .replace(\"{{mitglieder_mail}}\", memberMail)\n            .replace(\"{{kontakt_mail}}\", settings.contactMailAddress),\n        )}\n      />\n      <BackToWebsiteButton settings={settings} />\n    </>\n  );\n};\n\nexport default Step14Confirmation;\n","import React from \"react\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport NextStepButton from \"../components/NextStepButton.tsx\";\n\ninterface Step1AIntroProps {\n  goToNextStep: () => void;\n  settings: BestellWizardSettings;\n  stepActive: boolean;\n}\n\nconst Step1AWelcome: React.FC<Step1AIntroProps> = ({\n  goToNextStep,\n  settings,\n  stepActive,\n}) => {\n  return (\n    <>\n      {settings.strings.step1aText && (\n        <p\n          className={\"text-center\"}\n          dangerouslySetInnerHTML={{ __html: settings.strings.step1aText }}\n        />\n      )}\n      <NextStepButton\n        text={\"Starten\"}\n        onClick={goToNextStep}\n        stepActive={stepActive}\n      />\n    </>\n  );\n};\n\nexport default Step1AWelcome;\n","import React from \"react\";\nimport TapirButton from \"../../components/TapirButton.tsx\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { BUTTON_VARIANT } from \"../utils/BUTTON_VARIANT.ts\";\n\ninterface Step1AIntroProps {\n  goToNextStep: () => void;\n  settings: BestellWizardSettings;\n}\n\nconst Step1BWelcome: React.FC<Step1AIntroProps> = ({\n  goToNextStep,\n  settings,\n}) => {\n  return (\n    <>\n      {settings.strings.step1bText && <p>{settings.strings.step1bText}</p>}\n      <TapirButton\n        variant={BUTTON_VARIANT}\n        text={\"Starten\"}\n        onClick={goToNextStep}\n        icon={\"keyboard_arrow_down\"}\n      />\n    </>\n  );\n};\n\nexport default Step1BWelcome;\n","import React, { useEffect, useState } from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { PersonalData } from \"../../bestell_wizard/types/PersonalData.ts\";\nimport NextStepButton from \"../components/NextStepButton.tsx\";\n\ninterface Step2FirstNameProps {\n  goToNextStep: () => void;\n  personalData: PersonalData;\n  setPersonalData: (personalData: PersonalData) => void;\n  settings: BestellWizardSettings;\n  stepActive: boolean;\n}\n\nconst Step2FirstName: React.FC<Step2FirstNameProps> = ({\n  goToNextStep,\n  personalData,\n  setPersonalData,\n  settings,\n  stepActive,\n}) => {\n  const [showValidation, setShowValidation] = useState(false);\n\n  useEffect(() => {\n    if (stepActive) {\n      setTimeout(\n        () => document.getElementById(\"first_name_input\")?.focus(),\n        200,\n      );\n    } else {\n      setTimeout(() => setShowValidation(false), 200);\n    }\n  }, [stepActive]);\n\n  function validate() {\n    setShowValidation(true);\n    if (personalData.firstName.length > 0) {\n      goToNextStep();\n    }\n  }\n\n  return (\n    <>\n      {settings.strings.step2Text && <p>{settings.strings.step2Text}</p>}\n      <Form.Control\n        placeholder={\"Vorname\"}\n        style={{ maxWidth: \"300px\" }}\n        value={personalData.firstName}\n        onChange={(event) => {\n          personalData.firstName = event.target.value;\n          setPersonalData({ ...personalData });\n        }}\n        id={\"first_name_input\"}\n        onKeyUp={(event) => {\n          if (event.key === \"Enter\" && stepActive) validate();\n        }}\n        isValid={showValidation && personalData.firstName.length > 0}\n        isInvalid={showValidation && personalData.firstName.length === 0}\n      />\n      <NextStepButton onClick={validate} stepActive={stepActive} />\n    </>\n  );\n};\n\nexport default Step2FirstName;\n","import { PublicProductType } from \"../../api-client\";\n\nexport function selectAllRequiredProductTypes(\n  productTypes: PublicProductType[],\n  selectedProductTypes: PublicProductType[],\n  setSelectedProductTypes: (types: PublicProductType[]) => void,\n) {\n  setSelectedProductTypes(\n    productTypes.filter(\n      (productType) =>\n        productType.mustBeSubscribedTo ||\n        selectedProductTypes.includes(productType),\n    ),\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Modal } from \"react-bootstrap\";\nimport { PublicGrowingPeriod, PublicProductType } from \"../../api-client\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { ShoppingCart } from \"../../bestell_wizard/types/ShoppingCart.ts\";\nimport { buildEmptyShoppingCart } from \"../../bestell_wizard/utils/buildEmptyShoppingCart.ts\";\nimport { selectAllRequiredProductTypes } from \"../../bestell_wizard/utils/selectAllRequiredProductTypes.ts\";\nimport { sortProductTypes } from \"../../bestell_wizard/utils/sortProductTypes.ts\";\nimport TapirButton from \"../../components/TapirButton.tsx\";\nimport { getHtmlDescription } from \"../../utils/getHtmlDescription.ts\";\nimport NextStepButton from \"../components/NextStepButton.tsx\";\nimport { BUTTON_VARIANT } from \"../utils/BUTTON_VARIANT.ts\";\nimport { replaceTokens } from \"../utils/replaceTokens.ts\";\nimport \"./Step3ProductTypesChoice.css\";\n\ninterface Step3ProductTypeChoiceProps {\n  settings: BestellWizardSettings;\n  goToNextStep: () => void;\n  firstName: string;\n  selectedProductTypes: PublicProductType[];\n  setSelectedProductTypes: (types: PublicProductType[]) => void;\n  investingMembership: boolean;\n  setInvestingMembership: (investing: boolean) => void;\n  setShoppingCart: (cart: ShoppingCart) => void;\n  selectedGrowingPeriod: PublicGrowingPeriod | undefined;\n  stepActive: boolean;\n}\n\nconst Step3ProductTypesChoice: React.FC<Step3ProductTypeChoiceProps> = ({\n  settings,\n  goToNextStep,\n  firstName,\n  selectedProductTypes,\n  setSelectedProductTypes,\n  investingMembership,\n  setInvestingMembership,\n  setShoppingCart,\n  selectedGrowingPeriod,\n  stepActive,\n}) => {\n  const [productTypeForModal, setProductTypeForModal] =\n    useState<PublicProductType>();\n  const [showError, setShowError] = useState(false);\n\n  useEffect(() => {\n    if (investingMembership) {\n      setSelectedProductTypes([]);\n      setShoppingCart(buildEmptyShoppingCart(settings.productTypes));\n    } else {\n      selectAllRequiredProductTypes(\n        selectedGrowingPeriod?.productTypes ?? settings.productTypes,\n        selectedProductTypes,\n        setSelectedProductTypes,\n      );\n    }\n  }, [investingMembership]);\n\n  useEffect(() => {\n    if (selectedProductTypes.length > 0) {\n      setInvestingMembership(false);\n    }\n  }, [selectedProductTypes]);\n\n  useEffect(() => {\n    setShowError(false);\n  }, [selectedProductTypes, investingMembership]);\n\n  function getModalText() {\n    if (productTypeForModal === undefined) {\n      return \"Kein Produkt ausgewählt\";\n    }\n\n    if (!productTypeForModal.descriptionBestellwizardShort) {\n      return \"Beschreibung fehlt\";\n    }\n\n    return (\n      <span\n        dangerouslySetInnerHTML={getHtmlDescription(\n          productTypeForModal.descriptionBestellwizardShort,\n        )}\n      />\n    );\n  }\n\n  function updateSelection(productType: PublicProductType, selected: boolean) {\n    let selection;\n    if (selected) {\n      if (selectedProductTypes.includes(productType)) {\n        return;\n      }\n      selection = [...selectedProductTypes, productType];\n    } else {\n      selection = selectedProductTypes.filter((pt) => productType.id !== pt.id);\n    }\n    setSelectedProductTypes(sortProductTypes(selection));\n  }\n\n  function validate() {\n    if (selectedProductTypes.length === 0 && !investingMembership) {\n      setShowError(true);\n    } else {\n      goToNextStep();\n    }\n  }\n\n  function showInvestingMembership() {\n    switch (settings.legalStatus) {\n      case \"association\":\n        return settings.associationsAllowInvestingMembership;\n      case \"coop\":\n        return settings.allowInvestingMembership;\n      case \"company\":\n        return false;\n    }\n  }\n\n  return (\n    <>\n      {settings.strings.step3Text && (\n        <p\n          className={\"text-center\"}\n          dangerouslySetInnerHTML={{\n            __html: replaceTokens(settings.strings.step3Text, firstName),\n          }}\n        />\n      )}\n\n      <div>\n        <div\n          id={\"product_types_choice\"}\n          className={\"d-flex gap-2 justify-content-center align-items-center\"}\n        >\n          {sortProductTypes(\n            selectedGrowingPeriod?.productTypes ?? settings.productTypes,\n          ).map((productType) => (\n            <div key={productType.id}>\n              <input\n                type=\"checkbox\"\n                className=\"btn-check\"\n                id={productType.id}\n                autoComplete=\"off\"\n                onChange={(event) =>\n                  updateSelection(productType, event.target.checked)\n                }\n                checked={selectedProductTypes.includes(productType)}\n                disabled={\n                  productType.mustBeSubscribedTo && !investingMembership\n                }\n              />\n              <label\n                className={\"btn btn-\" + BUTTON_VARIANT}\n                htmlFor={productType.id}\n              >\n                <div className={\"d-flex flex-row gap-2 align-items-center\"}>\n                  <Form.Check\n                    checked={selectedProductTypes.includes(productType)}\n                    readOnly={true}\n                    style={{ pointerEvents: \"none\" }}\n                  />\n                  {productType.iconLink && (\n                    <img\n                      src={productType.iconLink}\n                      alt={\"Produkt-Icon\"}\n                      style={{ height: \"1.5rem\" }}\n                    />\n                  )}\n                  <span>{productType.name}</span>\n                  {productType.descriptionBestellwizardShort && (\n                    <TapirButton\n                      variant={\"outline-secondary\"}\n                      icon={\"help\"}\n                      size={\"sm\"}\n                      onClick={() => {\n                        setProductTypeForModal(productType);\n                      }}\n                      style={{ pointerEvents: \"auto\" }}\n                    />\n                  )}\n                </div>\n              </label>\n            </div>\n          ))}\n        </div>\n        {showInvestingMembership() && (\n          <>\n            <hr />\n            <div className={\"d-flex justify-content-center\"}>\n              <input\n                type=\"checkbox\"\n                className=\"btn-check\"\n                id={\"investing\"}\n                autoComplete=\"off\"\n                onChange={(event) =>\n                  setInvestingMembership(event.target.checked)\n                }\n                checked={investingMembership}\n              />\n              <label\n                className={\"btn btn-\" + BUTTON_VARIANT}\n                htmlFor={\"investing\"}\n              >\n                <div className={\"d-flex flex-row gap-2 align-items-center\"}>\n                  <Form.Check\n                    checked={investingMembership}\n                    style={{ pointerEvents: \"none\" }}\n                    readOnly={true}\n                  />\n                  <span>{settings.strings.step3SupportingMembershipName}</span>\n                </div>\n              </label>\n            </div>\n          </>\n        )}\n        {showError && (\n          <>\n            <hr />\n            <div className={\"text-danger text-center\"}>\n              Wähle mindestens eine Option.\n            </div>\n          </>\n        )}\n      </div>\n      <NextStepButton onClick={validate} stepActive={stepActive} />\n      <Modal\n        show={productTypeForModal !== undefined}\n        fullscreen={\"md-down\"}\n        centered={true}\n        onHide={() => setProductTypeForModal(undefined)}\n      >\n        <Modal.Header closeButton={true}>\n          {productTypeForModal?.name}\n        </Modal.Header>\n        <Modal.Body>{getModalText()}</Modal.Body>\n      </Modal>\n    </>\n  );\n};\n\nexport default Step3ProductTypesChoice;\n","import React from \"react\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { BUTTON_VARIANT } from \"../utils/BUTTON_VARIANT.ts\";\nimport TapirButton from \"../../components/TapirButton.tsx\";\nimport { Step } from \"../types/Step.ts\";\nimport { PickupLocationTab } from \"../types/PickupLocationTab.ts\";\n\ninterface Step5BPickupLocationConfirmWaitingListProps {\n  settings: BestellWizardSettings;\n  setCurrentStep: (step: Step) => void;\n  goToNextStep: () => void;\n  setCurrentTab: (tab: PickupLocationTab) => void;\n}\n\nconst Step5BPickupLocationConfirmWaitingList: React.FC<\n  Step5BPickupLocationConfirmWaitingListProps\n> = ({ settings, setCurrentStep, goToNextStep, setCurrentTab }) => {\n  return (\n    <>\n      <p\n        className={\"text-center\"}\n        dangerouslySetInnerHTML={{ __html: settings.strings.step5cText }}\n      />\n      <div className={\"d-flex flex-row gap-2\"}>\n        <TapirButton\n          variant={BUTTON_VARIANT}\n          text={\"Ja\"}\n          icon={\"keyboard_arrow_up\"}\n          onClick={() => {\n            setCurrentStep(\"5b_pickup_location_choice\");\n            setCurrentTab(\"map\");\n          }}\n        />\n        <TapirButton\n          onClick={goToNextStep}\n          text={\"Nein\"}\n          variant={BUTTON_VARIANT}\n          icon={\"keyboard_arrow_down\"}\n        />\n      </div>\n    </>\n  );\n};\n\nexport default Step5BPickupLocationConfirmWaitingList;\n","import React from \"react\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport TapirButton from \"../../components/TapirButton.tsx\";\nimport { Step } from \"../types/Step.ts\";\nimport { BUTTON_VARIANT } from \"../utils/BUTTON_VARIANT.ts\";\nimport \"../utils/flexColOnSmallScreen.css\";\n\ninterface Step6CCoopMemberNowProps {\n  settings: BestellWizardSettings;\n  setCurrentStep: (step: Step) => void;\n  setBecomeMemberNow: (becomeMemberNow: boolean) => void;\n}\n\nconst Step6CCoopMemberNow: React.FC<Step6CCoopMemberNowProps> = ({\n  settings,\n  setCurrentStep,\n  setBecomeMemberNow,\n}) => {\n  return (\n    <>\n      <p\n        dangerouslySetInnerHTML={{ __html: settings.strings.step6cText }}\n        className={\"text-center\"}\n      />\n      <div className={\"d-flex flex-row gap-2\"}>\n        <TapirButton\n          text={\"Nein\"}\n          variant={BUTTON_VARIANT}\n          onClick={() => {\n            setBecomeMemberNow(false);\n            setTimeout(() => setCurrentStep(\"8_personal_data\"), 1);\n          }}\n          icon={\"pending_actions\"}\n        />\n        <TapirButton\n          text={\"Ja\"}\n          variant={BUTTON_VARIANT}\n          onClick={() => {\n            setBecomeMemberNow(true);\n            setTimeout(\n              () =>\n                setCurrentStep(\n                  settings.legalStatus === \"association\"\n                    ? \"6b_association_membership\"\n                    : \"6b_coop_shares\",\n                ),\n              50,\n            );\n          }}\n          icon={\"id_card\"}\n        />\n      </div>\n    </>\n  );\n};\n\nexport default Step6CCoopMemberNow;\n","import { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { ShoppingCart } from \"../../bestell_wizard/types/ShoppingCart.ts\";\nimport { getProductByIdGlobal } from \"./getProductByIdGlobal.ts\";\n\nexport function getProductSolidarityChoices(\n  shoppingCart: ShoppingCart,\n  settings: BestellWizardSettings,\n) {\n  const choices = new Set<number>();\n  for (const [productId, quantity] of Object.entries(shoppingCart)) {\n    if (quantity <= 0) {\n      continue;\n    }\n    const product = getProductByIdGlobal(productId, settings.productTypes);\n    for (const choice of product?.solidarityChoices ?? []) {\n      choices.add(choice);\n    }\n  }\n  return choices;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Alert, Form } from \"react-bootstrap\";\nimport { AssociationMembershipType, PublicProductType } from \"../../api-client\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { ShoppingCart } from \"../../bestell_wizard/types/ShoppingCart.ts\";\nimport { isAtLeastOneProductOrdered } from \"../../bestell_wizard/utils/isAtLeastOneProductOrdered.ts\";\nimport { formatCurrency } from \"../../utils/formatCurrency.ts\";\nimport NextStepButton from \"../components/NextStepButton.tsx\";\nimport { getMonthlyPayment } from \"../utils/getMonthlyPayment.ts\";\nimport { getProductSolidarityChoices } from \"../utils/getProductSolidarityChoices.ts\";\n\ninterface Step7SolidarityContributionProps {\n  goToNextStep: () => void;\n  settings: BestellWizardSettings;\n  solidarityContribution: number;\n  setSolidarityContribution: (c: number) => void;\n  stepActive: boolean;\n  shoppingCart: ShoppingCart;\n  productTypesInWaitingList: Set<PublicProductType>;\n  associationMembershipType?: AssociationMembershipType;\n  contractStartDate: Date;\n}\n\nconst SUFFIX = \"\\u00A0€\";\n\nconst Step7SolidarityContribution: React.FC<\n  Step7SolidarityContributionProps\n> = ({\n  goToNextStep,\n  settings,\n  setSolidarityContribution,\n  stepActive,\n  solidarityContribution,\n  shoppingCart,\n  productTypesInWaitingList,\n  associationMembershipType,\n  contractStartDate,\n}) => {\n  const [selectedValue, setSelectedValue] = useState<number | \"custom\">(0);\n  const [customValue, setCustomValue] = useState(\"\");\n  const [showValidation, setShowValidation] = useState(false);\n  const [defaultValueSet, setDefaultValueSet] = useState(false);\n\n  const productChoices = getProductSolidarityChoices(shoppingCart, settings);\n  const productMinimum =\n    productChoices.size === 0 ? null : Math.min(...productChoices);\n  const minimum = getMinimum();\n\n  useEffect(() => {\n    if (defaultValueSet) {\n      return;\n    }\n    setDefaultValueSet(true);\n\n    selectDefaultValue();\n  }, [settings]);\n\n  useEffect(() => {\n    if (selectedValue !== \"custom\") {\n      setSolidarityContribution(selectedValue);\n      return;\n    }\n    const customContribution = Number.parseFloat(\n      customValue.replace(SUFFIX, \"\"),\n    );\n    if (Number.isNaN(customContribution)) {\n      return;\n    }\n    setSolidarityContribution(customContribution);\n  }, [selectedValue, customValue]);\n\n  useEffect(() => {\n    if (!stepActive) {\n      setTimeout(() => setShowValidation(false), 200);\n      return;\n    }\n\n    makeSureTheSelectedValueIsValid();\n  }, [stepActive]);\n\n  function makeSureTheSelectedValueIsValid() {\n    // in case the ordered products have changed since the last time the step was active\n    if (\n      selectedValue === \"custom\" ||\n      (getValues().includes(selectedValue) && isValueValid(selectedValue))\n    ) {\n      return;\n    }\n\n    selectDefaultValue();\n  }\n\n  function selectDefaultValue() {\n    if (getValues().includes(settings.solidarityContributionDefault)) {\n      setSelectedValue(settings.solidarityContributionDefault);\n    } else {\n      setSelectedValue(\"custom\");\n      setCustomValue(settings.solidarityContributionDefault + SUFFIX);\n    }\n  }\n\n  function validate() {\n    setShowValidation(true);\n\n    if (!isValueValid(solidarityContribution)) {\n      return;\n    }\n\n    goToNextStep();\n  }\n\n  function getValues(): (number | \"custom\")[] {\n    if (productChoices.size === 0) {\n      return settings.solidarityContributionChoices.map((choiceAsString) =>\n        choiceAsString === \"custom\"\n          ? \"custom\"\n          : Number.parseFloat(choiceAsString),\n      );\n    }\n\n    const values = [...productChoices];\n    if (!values.includes(0) && Math.min(...values) <= 0) {\n      values.push(0);\n    }\n    values.sort((a, b) => a - b);\n    return [...values, \"custom\"];\n  }\n\n  function getMinimum() {\n    const minimums = [\n      settings.solidarityContributionMinimum,\n      productMinimum,\n    ].filter((value) => value !== null);\n    if (minimums.length === 0) {\n      return null;\n    }\n    return Math.max(...minimums);\n  }\n\n  function getDisplay(value: number | \"custom\") {\n    if (value === \"custom\") {\n      return \"Ich möchte einen anderen Betrag zahlen\";\n    }\n    return formatCurrency(value) + \" pro Monat\";\n  }\n\n  function onSelect(selected: string) {\n    if (selected === \"custom\") {\n      setSelectedValue(selected);\n    } else {\n      setSelectedValue(Number.parseFloat(selected));\n    }\n  }\n\n  function isValueValid(value: number) {\n    if (productMinimum !== null && value < productMinimum) {\n      return false;\n    }\n\n    if (value < 0 && !isAtLeastOneProductOrdered(shoppingCart)) {\n      return false;\n    }\n\n    if (\n      getMonthlyPayment(\n        value,\n        shoppingCart,\n        settings,\n        productTypesInWaitingList,\n        associationMembershipType,\n        contractStartDate,\n      ) < 0\n    ) {\n      return false;\n    }\n\n    if (settings.solidarityContributionMinimum === null) {\n      return true;\n    }\n\n    return value >= settings.solidarityContributionMinimum;\n  }\n\n  function updateCustomValue(inputValue: string) {\n    const cleanedValue = inputValue\n      .replace(\"\\u00A0\", \"\")\n      .replace(\"€\", \"\")\n      .trim();\n\n    const floatValue = Number.parseFloat(cleanedValue);\n    if (Number.isNaN(floatValue)) {\n      setCustomValue(cleanedValue);\n      return;\n    }\n\n    setCustomValue(floatValue.toFixed(2) + SUFFIX);\n    const input = document.getElementById(\n      \"custom_solidarity_contribution\",\n    ) as HTMLInputElement;\n    const selectionStart = input.selectionStart;\n    setTimeout(() => {\n      input.selectionStart = selectionStart;\n      input.selectionEnd = selectionStart;\n    }, 10);\n  }\n\n  return (\n    <div className={\"d-flex flex-column gap-2 align-items-center\"}>\n      {settings.strings.step4dText && (\n        <p\n          className={\"text-center\"}\n          dangerouslySetInnerHTML={{\n            __html: isAtLeastOneProductOrdered(shoppingCart)\n              ? settings.strings.step4dText\n              : settings.strings.step4dTextSupportingMember,\n          }}\n        />\n      )}\n      <div\n        className={\"d-flex flex-column gap-2 align-items-center\"}\n        style={{ maxWidth: \"500px\" }}\n      >\n        <Form.Select\n          value={selectedValue}\n          onChange={(event) => onSelect(event.target.value)}\n          isValid={showValidation && isValueValid(solidarityContribution)}\n          isInvalid={showValidation && !isValueValid(solidarityContribution)}\n        >\n          {getValues()\n            .filter((value) => value === \"custom\" || isValueValid(value))\n            .map((value) => (\n              <option key={value} value={value}>\n                {getDisplay(value)}\n              </option>\n            ))}\n        </Form.Select>\n        {selectedValue === \"custom\" && (\n          <Form.Group className={\"d-flex flex-column gap-2 align-items-center\"}>\n            <Form.Text>\n              Bitte eine Zahl eingeben. Beispiel: '5' eingeben um 5 € extra\n              beizutragen, oder '-10' um 10 € weniger zu zahlen.\n            </Form.Text>\n            <span className={\"d-flex gap-2\"}>\n              <Form.Control\n                id={\"custom_solidarity_contribution\"}\n                placeholder={\"Personalisierter Beitrag\"}\n                value={customValue}\n                onChange={(event) => updateCustomValue(event.target.value)}\n                style={{ maxWidth: \"300px\" }}\n                isValid={showValidation && isValueValid(solidarityContribution)}\n                isInvalid={\n                  showValidation && !isValueValid(solidarityContribution)\n                }\n              />\n              <span>pro Monat</span>\n            </span>\n            {minimum !== null && solidarityContribution < minimum && (\n              <Alert variant={\"danger\"}>\n                Der niedrigste mögliche Solidarbeitrag beträgt{\" \"}\n                {formatCurrency(minimum)}\n              </Alert>\n            )}\n          </Form.Group>\n        )}\n      </div>\n      <NextStepButton onClick={validate} stepActive={stepActive} />\n    </div>\n  );\n};\n\nexport default Step7SolidarityContribution;\n","import React, { useEffect, useState } from \"react\";\nimport { BestellWizardApi } from \"../../api-client\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { PersonalData } from \"../../bestell_wizard/types/PersonalData.ts\";\nimport {\n  emailsMatch,\n  shouldShowEmailMismatchWarning,\n} from \"../../bestell_wizard/utils/emailsMatch.ts\";\nimport { isEmailValid } from \"../../bestell_wizard/utils/isEmailValid.ts\";\nimport { isPhoneNumberValid } from \"../../bestell_wizard/utils/isPhoneNumberValid.ts\";\nimport TapirHelpButton from \"../../components/TapirHelpButton.tsx\";\nimport { useApi } from \"../../hooks/useApi.ts\";\nimport { ToastData } from \"../../types/ToastData.ts\";\nimport { getCsrfToken } from \"../../utils/getCsrfToken.ts\";\nimport { handleRequestError } from \"../../utils/handleRequestError.ts\";\nimport NextStepButton from \"../components/NextStepButton.tsx\";\nimport PersonalDataFormControl from \"../components/PersonalDataFormControl.tsx\";\nimport TapirCheckbox from \"../components/TapirCheckbox.tsx\";\nimport { isPersonalDataValidShort } from \"../utils/isPersonalDataValidShort.ts\";\nimport \"./Step8PersonalData.css\";\n\ninterface Step8PersonalDataProps {\n  settings: BestellWizardSettings;\n  goToNextStep: () => void;\n  personalData: PersonalData;\n  setPersonalData: (personalData: PersonalData) => void;\n  stepActive: boolean;\n  emailAddressAlreadyInUse: boolean;\n  setEmailAddressAlreadyInUse: (emailAddressAlreadyInUse: boolean) => void;\n  emailAddressAlreadyInUseLoading: boolean;\n  setEmailAddressAlreadyInUseLoading: (\n    emailAddressAlreadyInUseLoading: boolean,\n  ) => void;\n  setToastDatas: React.Dispatch<React.SetStateAction<ToastData[]>>;\n  changesDisabled: boolean;\n}\n\nconst FIELDS: (keyof PersonalData)[] = [\n  \"firstName\",\n  \"lastName\",\n  \"email\",\n  \"emailConfirm\",\n  \"street\",\n  \"street2\",\n  \"postcode\",\n  \"city\",\n  \"phoneNumber\",\n];\n\nconst PSEUDONYM_MAX_LENGTH = 150;\n\nconst PSEUDONYM_HELP_TEXT =\n  \"Wenn du ein Pseudonym angibst, steht es auf der Abholliste für die Brote \" +\n  \"an deiner Verteilstation anstelle deines Namens. Überall sonst wird \" +\n  \"weiterhin dein echter Name verwendet. Du kannst das Pseudonym auch später \" +\n  \"im Mitgliederbereich eintragen, ändern oder entfernen.\";\n\nfunction getType(key: keyof PersonalData) {\n  switch (key) {\n    case \"phoneNumber\":\n      return \"tel\";\n    case \"email\":\n    case \"emailConfirm\":\n      return \"email\";\n    default:\n      return \"text\";\n  }\n}\n\nconst Step8PersonalData: React.FC<Step8PersonalDataProps> = ({\n  settings,\n  goToNextStep,\n  personalData,\n  setPersonalData,\n  stepActive,\n  emailAddressAlreadyInUse,\n  setEmailAddressAlreadyInUse,\n  emailAddressAlreadyInUseLoading,\n  setEmailAddressAlreadyInUseLoading,\n  setToastDatas,\n  changesDisabled,\n}) => {\n  const [isOver18, setIsOver18] = useState(false);\n  const [showValidation, setShowValidation] = useState(false);\n  const [controller, setController] = useState<AbortController>();\n  const bestellWizardApi = useApi(BestellWizardApi, getCsrfToken());\n\n  useEffect(() => {\n    if (!stepActive) {\n      setTimeout(() => setShowValidation(false), 200);\n    }\n  }, [stepActive]);\n\n  useEffect(() => {\n    setIsOver18(changesDisabled);\n  }, [changesDisabled]);\n\n  useEffect(() => {\n    if (changesDisabled) {\n      return;\n    }\n    if (controller) controller.abort();\n\n    if (!isEmailValid(personalData.email)) {\n      return;\n    }\n\n    setEmailAddressAlreadyInUseLoading(true);\n    const localController = new AbortController();\n    setController(localController);\n\n    bestellWizardApi\n      .bestellWizardApiIsEmailAddressValidRetrieve(\n        { email: personalData.email },\n        { signal: localController.signal },\n      )\n      .then((valid) => {\n        setEmailAddressAlreadyInUse(!valid);\n      })\n      .catch(async (error) => {\n        if (error.cause?.name === \"AbortError\") return;\n        await handleRequestError(\n          error,\n          \"Fehler beim Prüfen der Mail-Gültigkeit\",\n          setToastDatas,\n        );\n      })\n      .finally(() => setEmailAddressAlreadyInUseLoading(false));\n  }, [personalData.email, changesDisabled]);\n\n  function validate() {\n    setShowValidation(true);\n\n    if (\n      isPersonalDataValidShort(\n        personalData,\n        emailAddressAlreadyInUse,\n        settings.phoneNumberRequired,\n      ) &&\n      isOver18\n    ) {\n      goToNextStep();\n    }\n  }\n\n  function getPlaceholder(key: keyof PersonalData) {\n    switch (key) {\n      case \"firstName\":\n        return \"Vorname\";\n      case \"lastName\":\n        return \"Nachname\";\n      case \"street\":\n        return \"Straße & Hausnummer\";\n      case \"street2\":\n        return \"Adresszusatz (optional)\";\n      case \"postcode\":\n        return \"Postleitzahl\";\n      case \"city\":\n        return \"Stadt\";\n      case \"email\":\n        return emailAddressAlreadyInUseLoading\n          ? \"Wird geprüft...\"\n          : \"E-Mail-Adresse\";\n      case \"emailConfirm\":\n        return \"E-Mail-Adresse wiederholen\";\n      case \"phoneNumber\":\n        return settings.phoneNumberRequired\n          ? \"Telefon-Nr\"\n          : \"Telefon-Nr (optional)\";\n      case \"pseudonym\":\n        return \"Pseudonym (optional)\";\n      default:\n        return key;\n    }\n  }\n\n  function isValid(key: keyof PersonalData) {\n    switch (key) {\n      case \"phoneNumber\":\n        if (personalData.phoneNumber.length === 0) {\n          return !settings.phoneNumberRequired;\n        }\n        return isPhoneNumberValid(personalData.phoneNumber);\n      case \"email\":\n        return (\n          isEmailValid(personalData.email) &&\n          !emailAddressAlreadyInUse &&\n          !emailAddressAlreadyInUseLoading\n        );\n      case \"emailConfirm\":\n        return (\n          personalData.emailConfirm.trim().length > 0 &&\n          emailsMatch(personalData.email, personalData.emailConfirm)\n        );\n      case \"street2\":\n      case \"pseudonym\":\n        return true;\n      default:\n        return personalData[key].length > 0;\n    }\n  }\n\n  function getExtraText(key: keyof PersonalData) {\n    switch (key) {\n      case \"email\":\n        return emailAddressAlreadyInUse && !emailAddressAlreadyInUseLoading\n          ? \"Diese Email-Adresse ist schon vergeben\"\n          : \"\";\n      case \"emailConfirm\":\n        return shouldShowEmailMismatchWarning(\n          personalData.email,\n          personalData.emailConfirm,\n        )\n          ? \"Die E-Mail-Adressen stimmen nicht überein\"\n          : \"\";\n      case \"phoneNumber\":\n        return showValidation &&\n          settings.phoneNumberRequired &&\n          personalData.phoneNumber.length === 0\n          ? \"Bitte gib eine Telefonnummer an.\"\n          : \"\";\n      case \"pseudonym\":\n        return (personalData.pseudonym ?? \"\").length >= PSEUDONYM_MAX_LENGTH\n          ? `Maximal ${PSEUDONYM_MAX_LENGTH} Zeichen.`\n          : \"\";\n      default:\n        return \"\";\n    }\n  }\n\n  return (\n    <div className={\"d-flex flex-column gap-2 align-items-center\"}>\n      {settings.strings.step8Text && (\n        <div\n          className={\"text-center\"}\n          dangerouslySetInnerHTML={{\n            __html: settings.strings.step8Text.replace(\n              \"{vorname}\",\n              personalData.firstName,\n            ),\n          }}\n        />\n      )}\n      <div\n        id={\"personal_data_flex\"}\n        className={\"d-flex gap-2 flex-wrap align-items-start\"}\n        style={{ maxWidth: \"540px\" }}\n      >\n        {FIELDS.map((field) => (\n          <PersonalDataFormControl\n            personalData={personalData}\n            setPersonalData={setPersonalData}\n            key={field}\n            field={field}\n            placeholder={getPlaceholder(field)}\n            type={getType(field)}\n            showValidation={showValidation}\n            isValid={isValid(field)}\n            extraText={getExtraText(field)}\n            style={{ width: \"264px\" }}\n            disabled={changesDisabled}\n          />\n        ))}\n        {settings.pseudonymEnabled && (\n          <div\n            className={\"d-flex flex-row gap-2 align-items-start\"}\n            style={{ width: \"264px\" }}\n          >\n            <PersonalDataFormControl\n              personalData={personalData}\n              setPersonalData={setPersonalData}\n              field={\"pseudonym\"}\n              placeholder={getPlaceholder(\"pseudonym\")}\n              type={getType(\"pseudonym\")}\n              showValidation={showValidation}\n              isValid={isValid(\"pseudonym\")}\n              extraText={getExtraText(\"pseudonym\")}\n              style={{ flexGrow: 1 }}\n              disabled={changesDisabled}\n              maxLength={PSEUDONYM_MAX_LENGTH}\n            />\n            <div\n              className={\"d-flex align-items-center\"}\n              style={{ height: \"calc(3.5rem + 2px)\" }}\n            >\n              <TapirHelpButton\n                title={\"Wofür ist das Pseudonym?\"}\n                text={PSEUDONYM_HELP_TEXT}\n                width={\"300px\"}\n              />\n            </div>\n          </div>\n        )}\n      </div>\n      <TapirCheckbox\n        onChange={setIsOver18}\n        checked={isOver18}\n        label={\"Ich bin über 18 Jahre alt\"}\n        controlId={\"over18\"}\n        showError={showValidation && !isOver18}\n        disabled={changesDisabled}\n      />\n      <NextStepButton onClick={validate} stepActive={stepActive} />\n    </div>\n  );\n};\n\nexport default Step8PersonalData;\n","import { ShoppingCart } from \"../types/ShoppingCart.ts\";\nimport { PublicProductType } from \"../../api-client\";\nimport { isProductInWaitingList } from \"./isProductInWaitingList.ts\";\nimport { isAtLeastOneProductOrdered } from \"./isAtLeastOneProductOrdered.ts\";\n\nexport function areAllOrderedProductsInWaitingList(\n  shoppingCart: ShoppingCart,\n  productTypesInWaitingList: Set<PublicProductType>,\n) {\n  if (!isAtLeastOneProductOrdered(shoppingCart)) {\n    return false;\n  }\n\n  for (const [productId, quantity] of Object.entries(shoppingCart)) {\n    if (quantity === 0) continue;\n\n    if (!isProductInWaitingList(productId, productTypesInWaitingList))\n      return false;\n  }\n  return true;\n}\n","import { ShoppingCart } from \"../types/ShoppingCart.ts\";\nimport { PublicProductType } from \"../../api-client\";\n\nexport function isAtLeastOneOrderedProductWithDelivery(\n  shoppingCart: ShoppingCart,\n  productTypes: PublicProductType[],\n) {\n  const orderedProductIds = Object.keys(shoppingCart);\n  for (const orderedProductId of orderedProductIds) {\n    if (shoppingCart[orderedProductId] === 0) {\n      continue;\n    }\n    for (const productType of productTypes) {\n      if (productType.noDelivery) {\n        continue;\n      }\n      for (const product of productType.products) {\n        if (product.id === orderedProductId) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n}\n","import { PublicProductType } from \"../../api-client\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { ShoppingCart } from \"../../bestell_wizard/types/ShoppingCart.ts\";\nimport { areAllOrderedProductsInWaitingList } from \"../../bestell_wizard/utils/areAllOrderedProductsInWaitingList.ts\";\nimport { willBecomeMemberNow } from \"./willBecomeMemberNow.ts\";\n\nexport function isOrderWaitingListOnly(\n  settings: BestellWizardSettings,\n  shoppingCart: ShoppingCart,\n  productTypesInWaitingList: Set<PublicProductType>,\n  becomeMemberNow: boolean | null,\n) {\n  if (settings.forceWaitingList) {\n    return true;\n  }\n\n  return (\n    areAllOrderedProductsInWaitingList(\n      shoppingCart,\n      productTypesInWaitingList,\n    ) && !willBecomeMemberNow(settings, becomeMemberNow)\n  );\n}\n","import { PublicProductType } from \"../../api-client\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { ShoppingCart } from \"../../bestell_wizard/types/ShoppingCart.ts\";\nimport { areAllOrderedProductsInWaitingList } from \"../../bestell_wizard/utils/areAllOrderedProductsInWaitingList.ts\";\n\nexport function shouldConfirmMemberNow(\n  settings: BestellWizardSettings,\n  shoppingCart: ShoppingCart,\n  productTypesInWaitingList: Set<PublicProductType>,\n  waitingListConfirmationMode: boolean,\n) {\n  if (settings.forceWaitingList) {\n    return false;\n  }\n\n  if (waitingListConfirmationMode) {\n    return false;\n  }\n\n  return areAllOrderedProductsInWaitingList(\n    shoppingCart,\n    productTypesInWaitingList,\n  );\n}\n","import {\n  PublicPickupLocation,\n  PublicProductType,\n  PublicWaitingListEntryDetails,\n} from \"../../api-client\";\nimport { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { ShoppingCart } from \"../../bestell_wizard/types/ShoppingCart.ts\";\nimport { areAllOrderedProductsInWaitingList } from \"../../bestell_wizard/utils/areAllOrderedProductsInWaitingList.ts\";\nimport { isAtLeastOneOrderedProductWithDelivery } from \"../../bestell_wizard/utils/isAtLeastOneOrderedProductWithDelivery.ts\";\nimport { isAtLeastOneProductOrdered } from \"../../bestell_wizard/utils/isAtLeastOneProductOrdered.ts\";\nimport { Step } from \"../types/Step.ts\";\nimport { isOrderWaitingListOnly } from \"./isOrderWaitingListOnly.ts\";\nimport { shouldConfirmMemberNow } from \"./shouldConfirmMemberNow.ts\";\nimport { shouldIncludeStepGrowingPeriodChoice } from \"./shouldIncludeStepGrowingPeriodChoice.ts\";\nimport { willBecomeMemberNow } from \"./willBecomeMemberNow.ts\";\n\nexport function buildSteps(\n  settings: BestellWizardSettings,\n  selectedProductTypes: PublicProductType[],\n  shoppingCart: ShoppingCart,\n  becomeMemberNow: boolean | null,\n  productTypesInWaitingList: Set<PublicProductType>,\n  selectedPickupLocation: PublicPickupLocation[],\n  pickupLocationsWithCapacityFull: Set<PublicPickupLocation>,\n  waitingListEntryDetails?: PublicWaitingListEntryDetails,\n) {\n  const newSteps: Step[] = [];\n  newSteps.push(\n    settings.forceWaitingList ? \"1b_welcome_waiting_list\" : \"1a_welcome\",\n    \"2_first_name\",\n  );\n\n  if (\n    shouldIncludeStepGrowingPeriodChoice(\n      settings.growingPeriodChoices,\n      waitingListEntryDetails,\n    )\n  ) {\n    newSteps.push(\"3b_growing_period_choice\");\n  }\n\n  if (settings.introEnabled && waitingListEntryDetails === undefined) {\n    newSteps.push(\"3_product_type_choice\");\n  }\n\n  for (const productType of selectedProductTypes) {\n    if (!productType.noDelivery) {\n      newSteps.push(productType.id! + \"_intro\", productType.id! + \"_order\");\n    }\n  }\n\n  if (\n    shouldShowStepSolidarityContributionBeforeStepPickupLocation(\n      settings,\n      waitingListEntryDetails,\n      shoppingCart,\n    )\n  ) {\n    newSteps.push(\"7_solidarity_contribution\");\n  }\n\n  if (\n    shouldIncludeStepsPickupLocations(\n      settings,\n      waitingListEntryDetails,\n      shoppingCart,\n    )\n  ) {\n    newSteps.push(\"5a_pickup_location_intro\", \"5b_pickup_location_choice\");\n\n    if (\n      selectedPickupLocation.length === 1 &&\n      pickupLocationsWithCapacityFull.has(selectedPickupLocation[0]) &&\n      !waitingListEntryDetails\n    ) {\n      newSteps.push(\"5c_pickup_location_confirm_waiting_list\");\n    }\n  }\n\n  for (const productType of selectedProductTypes) {\n    if (productType.noDelivery) {\n      newSteps.push(productType.id! + \"_intro\", productType.id! + \"_order\");\n    }\n  }\n\n  newSteps.push(\n    ...buildCoopSteps(\n      waitingListEntryDetails,\n      settings,\n      shoppingCart,\n      productTypesInWaitingList,\n      becomeMemberNow,\n    ),\n    ...buildAssociationSteps(\n      settings,\n      shoppingCart,\n      productTypesInWaitingList,\n      becomeMemberNow,\n      waitingListEntryDetails,\n    ),\n  );\n\n  if (\n    shouldShowStepSolidarityContributionBeforeStepPersonalData(\n      settings,\n      waitingListEntryDetails,\n      shoppingCart,\n    )\n  ) {\n    newSteps.push(\"7_solidarity_contribution\");\n  }\n\n  newSteps.push(\"8_personal_data\");\n\n  if (\n    willBecomeMemberNow(settings, becomeMemberNow) &&\n    !waitingListEntryDetails?.memberAlreadyExists\n  ) {\n    newSteps.push(\"9_banking_data\");\n  }\n\n  newSteps.push(\"10_summary\", \"11_legal\");\n\n  if (!waitingListEntryDetails?.memberAlreadyExists) {\n    newSteps.push(\"12_channel\");\n    if (settings.feedbackStepEnabled) {\n      newSteps.push(\"13_feedback\");\n    }\n  }\n\n  if (\n    isOrderWaitingListOnly(\n      settings,\n      shoppingCart,\n      productTypesInWaitingList,\n      becomeMemberNow,\n    )\n  ) {\n    newSteps.push(\"14b_confirmation_waiting_list\");\n  } else {\n    newSteps.push(\"14_confirmation\");\n  }\n\n  return newSteps;\n}\n\nfunction shouldIncludeStepsCoopShares(\n  waitingListEntryDetails: PublicWaitingListEntryDetails | undefined,\n  showCoopContent: boolean,\n  allowInvestingMembership: boolean,\n  productTypesInWaitingList: Set<PublicProductType>,\n  shoppingCart: ShoppingCart,\n) {\n  if (!showCoopContent) {\n    return false;\n  }\n\n  if (waitingListEntryDetails?.memberAlreadyExists) {\n    return waitingListEntryDetails.numberOfCoopShares > 0;\n  }\n\n  if (allowInvestingMembership) {\n    return true;\n  }\n\n  return !areAllOrderedProductsInWaitingList(\n    shoppingCart,\n    productTypesInWaitingList,\n  );\n}\n\nfunction shouldIncludeStepsPickupLocations(\n  settings: BestellWizardSettings,\n  waitingListEntryDetails: PublicWaitingListEntryDetails | undefined,\n  shoppingCart: ShoppingCart,\n) {\n  if (settings.pickupLocations.length === 0) {\n    return false;\n  }\n\n  if (waitingListEntryDetails !== undefined) {\n    return (waitingListEntryDetails.pickupLocationWishes ?? []).length > 0;\n  }\n\n  return isAtLeastOneOrderedProductWithDelivery(\n    shoppingCart,\n    settings.productTypes,\n  );\n}\n\nfunction shouldShowStepSolidarityContribution(\n  waitingListEntryDetails: PublicWaitingListEntryDetails | undefined,\n) {\n  if (waitingListEntryDetails === undefined) {\n    return true;\n  }\n\n  return waitingListEntryDetails.shouldShowSolidarityStep;\n}\n\nfunction shouldShowStepSolidarityContributionBeforeStepPickupLocation(\n  settings: BestellWizardSettings,\n  waitingListEntryDetails: PublicWaitingListEntryDetails | undefined,\n  shoppingCart: ShoppingCart,\n) {\n  if (!shouldShowStepSolidarityContribution(waitingListEntryDetails)) {\n    return false;\n  }\n\n  if (settings.solidarityStepPosition !== \"before_pickup_location\") {\n    return false;\n  }\n\n  return isAtLeastOneProductOrdered(shoppingCart);\n}\n\nfunction shouldShowStepSolidarityContributionBeforeStepPersonalData(\n  settings: BestellWizardSettings,\n  waitingListEntryDetails: PublicWaitingListEntryDetails | undefined,\n  shoppingCart: ShoppingCart,\n) {\n  if (!shouldShowStepSolidarityContribution(waitingListEntryDetails)) {\n    return false;\n  }\n\n  return (\n    settings.solidarityStepPosition === \"before_personal_data\" ||\n    !shouldShowStepSolidarityContributionBeforeStepPickupLocation(\n      settings,\n      waitingListEntryDetails,\n      shoppingCart,\n    )\n  );\n}\n\nfunction buildCoopSteps(\n  waitingListEntryDetails: PublicWaitingListEntryDetails | undefined,\n  settings: BestellWizardSettings,\n  shoppingCart: ShoppingCart,\n  productTypesInWaitingList: Set<PublicProductType>,\n  becomeMemberNow: boolean | null,\n) {\n  if (settings.forceWaitingList) {\n    return [];\n  }\n\n  if (\n    !shouldIncludeStepsCoopShares(\n      waitingListEntryDetails,\n      settings.showCoopContent,\n      settings.allowInvestingMembership,\n      productTypesInWaitingList,\n      shoppingCart,\n    )\n  ) {\n    return [];\n  }\n\n  const coopSteps: Step[] = [];\n\n  coopSteps.push(\"6a_coop_intro\");\n\n  if (\n    shouldConfirmMemberNow(\n      settings,\n      shoppingCart,\n      productTypesInWaitingList,\n      waitingListEntryDetails !== undefined,\n    )\n  ) {\n    coopSteps.push(\"6c_coop_member_now\");\n  }\n\n  if (willBecomeMemberNow(settings, becomeMemberNow)) {\n    coopSteps.push(\"6b_coop_shares\");\n  }\n\n  return coopSteps;\n}\n\nfunction buildAssociationSteps(\n  settings: BestellWizardSettings,\n  shoppingCart: ShoppingCart,\n  productTypesInWaitingList: Set<PublicProductType>,\n  becomeMemberNow: boolean | null,\n  waitingListEntryDetails: PublicWaitingListEntryDetails | undefined,\n) {\n  if (settings.forceWaitingList) {\n    return [];\n  }\n\n  if (settings.legalStatus !== \"association\") {\n    return [];\n  }\n\n  if (waitingListEntryDetails?.memberAlreadyExists) {\n    return [];\n  }\n\n  if (\n    !settings.associationsAllowInvestingMembership &&\n    areAllOrderedProductsInWaitingList(shoppingCart, productTypesInWaitingList)\n  ) {\n    return [];\n  }\n\n  const associationSteps: Step[] = [];\n\n  associationSteps.push(\"6a_coop_intro\");\n\n  if (\n    shouldConfirmMemberNow(\n      settings,\n      shoppingCart,\n      productTypesInWaitingList,\n      waitingListEntryDetails !== undefined,\n    )\n  ) {\n    associationSteps.push(\"6c_coop_member_now\");\n  }\n\n  if (willBecomeMemberNow(settings, becomeMemberNow)) {\n    associationSteps.push(\"6b_association_membership\");\n  }\n\n  return associationSteps;\n}\n","import { BestellWizardSettings } from \"../../bestell_wizard/types/BestellWizardSettings.ts\";\n\nexport function getPublicPickupLocationById(\n  pickupLocationId: string,\n  settings: BestellWizardSettings,\n) {\n  return settings.pickupLocations.find((pl) => pl.id === pickupLocationId);\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Spinner } from \"react-bootstrap\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport \"../../tapir/core/static/core/bootstrap/5.3.8/css/bootstrap.min.css\";\nimport \"../../tapir/core/static/core/css/base.css\";\nimport {\n  AssociationMembershipType,\n  BestellWizardApi,\n  CoopApi,\n  OrderConfirmationResponse,\n  PickupLocationsApi,\n  PublicGrowingPeriod,\n  PublicPickupLocation,\n  type PublicProductType,\n  PublicWaitingListEntryDetails,\n  WaitingListApi,\n} from \"../api-client\";\nimport { BestellWizardSettings } from \"../bestell_wizard/types/BestellWizardSettings.ts\";\nimport { PersonalData } from \"../bestell_wizard/types/PersonalData.ts\";\nimport { ShoppingCart } from \"../bestell_wizard/types/ShoppingCart.ts\";\nimport { buildEmptySettings } from \"../bestell_wizard/utils/buildEmptySettings.ts\";\nimport { buildEmptyShoppingCart } from \"../bestell_wizard/utils/buildEmptyShoppingCart.ts\";\nimport { buildFilteredShoppingCart } from \"../bestell_wizard/utils/buildFilteredShoppingCart.ts\";\nimport { buildSettings } from \"../bestell_wizard/utils/buildSettings.ts\";\nimport { checkPickupLocationCapacities } from \"../bestell_wizard/utils/checkPickupLocationCapacities.ts\";\nimport { fetchFirstDeliveryDates } from \"../bestell_wizard/utils/fetchFirstDeliveryDates.ts\";\nimport { getEmptyPersonalData } from \"../bestell_wizard/utils/getEmptyPersonalData.ts\";\nimport { getTestPersonalData } from \"../bestell_wizard/utils/getTestPersonalData.ts\";\nimport { isAtLeastOneProductOrdered } from \"../bestell_wizard/utils/isAtLeastOneProductOrdered.ts\";\nimport { isShoppingCartEmpty } from \"../bestell_wizard/utils/isShoppingCartEmpty.ts\";\nimport { sortProductTypes } from \"../bestell_wizard/utils/sortProductTypes.ts\";\nimport { updateMinimumNumberOfShares } from \"../bestell_wizard/utils/updateMinimumNumberOfShares.ts\";\nimport { updateProductsAndProductTypesOverCapacity } from \"../bestell_wizard/utils/updateProductsAndProductTypesOverCapacity.ts\";\nimport { useApi } from \"../hooks/useApi.ts\";\nimport { ToastData } from \"../types/ToastData.ts\";\nimport { addToast } from \"../utils/addToast.ts\";\nimport { handleRequestError } from \"../utils/handleRequestError.ts\";\nimport { updateProductPrices } from \"../utils/updateProductPrices.ts\";\nimport BestellWizardMobileBase from \"./components/BestellWizardMobileBase.tsx\";\nimport Step10OrderSummary from \"./steps/Step10OrderSummary.tsx\";\nimport Step11Legal from \"./steps/Step11Legal.tsx\";\nimport Step12Channel from \"./steps/Step12Channel.tsx\";\nimport Step13Feedback from \"./steps/Step13Feedback.tsx\";\nimport Step14BConfirmationWaitingList from \"./steps/Step14BConfirmationWaitingList.tsx\";\nimport Step14Confirmation from \"./steps/Step14Confirmation.tsx\";\nimport Step1AWelcome from \"./steps/Step1AWelcome.tsx\";\nimport Step1BWelcome from \"./steps/Step1BWelcome.tsx\";\nimport Step2FirstName from \"./steps/Step2FirstName.tsx\";\nimport Step3BGrowingPeriodChoice from \"./steps/Step3BGrowingPeriodChoice.tsx\";\nimport Step3ProductTypesChoice from \"./steps/Step3ProductTypesChoice.tsx\";\nimport Step4BProductTypeOrder from \"./steps/Step4BProductTypeOrder.tsx\";\nimport Step5BPickupLocationChoice from \"./steps/Step5BPickupLocationChoice.tsx\";\nimport Step5CPickupLocationConfirmWaitingList from \"./steps/Step5CPickupLocationConfirmWaitingList.tsx\";\nimport Step6BAssociationMembership from \"./steps/Step6BAssociationMembership.tsx\";\nimport Step6BCoopShares from \"./steps/Step6BCoopShares.tsx\";\nimport Step6CCoopMemberNow from \"./steps/Step6CCoopMemberNow.tsx\";\nimport Step7SolidarityContribution from \"./steps/Step7SolidarityContribution.tsx\";\nimport Step8PersonalData from \"./steps/Step8PersonalData.tsx\";\nimport Step9BankingData from \"./steps/Step9BankingData.tsx\";\nimport StepGenericIntro from \"./steps/StepGenericIntro.tsx\";\nimport { Phase } from \"./types/Phase.ts\";\nimport { PickupLocationTab } from \"./types/PickupLocationTab.ts\";\nimport { Step } from \"./types/Step.ts\";\nimport { buildSteps } from \"./utils/buildSteps.ts\";\nimport { getPhase } from \"./utils/getPhase.ts\";\nimport { getProductTypeByProductId } from \"./utils/getProductTypeByProductId.ts\";\nimport { getProductTypeFromStep } from \"./utils/getProductTypeFromStep.ts\";\nimport { getPublicPickupLocationById } from \"./utils/getPublicPickupLocationById.ts\";\nimport { getVisibleAssociationMembershipTypes } from \"./utils/getVisibleAssociationMembershipTypes.ts\";\nimport { isOrderWaitingListOnly } from \"./utils/isOrderWaitingListOnly.ts\";\nimport { updateWaitingList } from \"./utils/updateWaitingList.ts\";\nimport { willBecomeMemberNow } from \"./utils/willBecomeMemberNow.ts\";\n\ninterface BestellWizardMobileProps {\n  csrfToken: string;\n  waitingListEntryDetails?: PublicWaitingListEntryDetails;\n}\n\nconst BestellWizardMobile: React.FC<BestellWizardMobileProps> = ({\n  csrfToken,\n  waitingListEntryDetails,\n}) => {\n  const bestellWizardApi = useApi(BestellWizardApi, csrfToken);\n  const coopApi = useApi(CoopApi, csrfToken);\n  const waitingListApi = useApi(WaitingListApi, csrfToken);\n  const pickupLocationsApi = useApi(PickupLocationsApi, csrfToken);\n\n  const [settings, setSettings] =\n    useState<BestellWizardSettings>(buildEmptySettings());\n  const [settingsLoaded, setSettingsLoaded] = useState(false);\n  const [toastDatas, setToastDatas] = useState<ToastData[]>([]);\n  const [steps, setSteps] = useState<Step[]>([\"loading\"]);\n  const [currentStep, setCurrentStep] = useState<Step>(\"loading\");\n  const [phases, setPhases] = useState<Phase[]>([]);\n  const [personalData, setPersonalData] = useState<PersonalData>(\n    getEmptyPersonalData(),\n  );\n  const [selectedProductTypes, setSelectedProductTypes] = useState<\n    PublicProductType[]\n  >([]);\n  const [shoppingCart, setShoppingCart] = useState<ShoppingCart>({});\n  const [investingMembership, setInvestingMembership] = useState(false);\n\n  const [selectedPickupLocations, setSelectedPickupLocations] = useState<\n    PublicPickupLocation[]\n  >([]);\n  const [\n    pickupLocationsCapacityCheckLoading,\n    setPickupLocationsCapacityCheckLoading,\n  ] = useState(false);\n  const [pickupLocationsWithCapacityFull, setPickupLocationsWithCapacityFull] =\n    useState<Set<PublicPickupLocation>>(new Set<PublicPickupLocation>());\n  const [selectedNumberOfCoopShares, setSelectedNumberOfCoopShares] =\n    useState(0);\n  const [statuteAccepted, setStatuteAccepted] = useState(false);\n  const [minimumNumberOfShares, setMinimumNumberOfShares] = useState(0);\n  const [studentStatusEnabled, setStudentStatusEnabled] = useState(false);\n  const [payCoopSharesInInstalments, setPayCoopSharesInInstalments] =\n    useState(false);\n  const [sepaAllowed, setSepaAllowed] = useState(false);\n  const [contractAccepted, setContractAccepted] = useState(false);\n  const [contractStartDate, setContractStartDate] = useState(new Date());\n  const [\n    firstDeliveryDatesByPickupLocationAndProductType,\n    setFirstDeliveryDatesByPickupLocationAndProductType,\n  ] = useState<{ [key: string]: { [key: string]: Date } }>({});\n  const [cancellationPolicyRead, setCancellationPolicyRead] = useState(false);\n  const [privacyPolicyRead, setPrivacyPolicyRead] = useState(false);\n  const [selectedDistributionChannels, setSelectedDistributionChannels] =\n    useState<Set<string>>(new Set<string>());\n  const [solidarityContribution, setSolidarityContribution] = useState(0);\n  const [emailAddressAlreadyInUse, setEmailAddressAlreadyInUse] =\n    useState(false);\n  const [emailAddressAlreadyInUseLoading, setEmailAddressAlreadyInUseLoading] =\n    useState(false);\n  const [checkingCapacities, setCheckingCapacities] = useState(false);\n  const [checkingCapacitiesController, setCheckingCapacitiesController] =\n    useState<AbortController>();\n  const [productIdsOverCapacity, setProductIdsOverCapacity] = useState<\n    string[]\n  >([]);\n  const [productTypeIdsOverCapacity, setProductTypeIdsOverCapacity] = useState<\n    string[]\n  >([]);\n  const [productTypesInWaitingList, setProductTypesInWaitingList] = useState<\n    Set<PublicProductType>\n  >(new Set<PublicProductType>());\n  const [becomeMemberNow, setBecomeMemberNow] = useState<boolean | null>(null);\n  const [currentPickupLocationTab, setCurrentPickupLocationTab] =\n    useState<PickupLocationTab>(\"map\");\n  const [selectedGrowingPeriod, setSelectedGrowingPeriod] =\n    useState<PublicGrowingPeriod>();\n  const [productPricesController, setProductPricesController] =\n    useState<AbortController>();\n  const [confirmOrderLoading, setConfirmOrderLoading] = useState(false);\n  const [feedback, setFeedback] = useState(\"\");\n  const [\n    selectedAssociationMembershipType,\n    setSelectedAssociationMembershipType,\n  ] = useState<AssociationMembershipType>();\n\n  useEffect(() => {\n    Promise.all([\n      bestellWizardApi.bestellWizardApiBestellWizardBaseDataRetrieve(),\n      coopApi.coopApiMinimumNumberOfSharesRetrieve({\n        productIds: [],\n        quantities: [],\n      }),\n    ])\n      .then(([baseData, minNumberOfShares]) => {\n        const newSettings = buildSettings(baseData);\n        setSettings(newSettings);\n        setSettingsLoaded(true);\n        setSelectedProductTypes(\n          newSettings.introEnabled ? [] : newSettings.productTypes,\n        );\n        if (waitingListEntryDetails) {\n          setShoppingCart(\n            buildShoppingCartFromWaitingListEntry(\n              newSettings,\n              waitingListEntryDetails,\n              setSelectedProductTypes,\n            ),\n          );\n\n          const productTypesFromWishes = (\n            waitingListEntryDetails.productWishes ?? []\n          ).map((productWish) =>\n            getProductTypeByProductId(productWish.product.id!, newSettings)!,\n          );\n          setSelectedProductTypes(\n            sortProductTypes([...new Set(productTypesFromWishes)]),\n          );\n        } else {\n          setShoppingCart(buildEmptyShoppingCart(newSettings.productTypes));\n        }\n        setMinimumNumberOfShares(minNumberOfShares.minimumNumberOfShares);\n\n        personalData.paymentRhythm = baseData.defaultPaymentRhythm;\n\n        if (waitingListEntryDetails) {\n          personalData.firstName = waitingListEntryDetails.firstName;\n          personalData.lastName = waitingListEntryDetails.lastName;\n          personalData.email = waitingListEntryDetails.email;\n          personalData.emailConfirm = waitingListEntryDetails.email;\n          personalData.phoneNumber = waitingListEntryDetails.phoneNumber;\n          personalData.street = waitingListEntryDetails.street;\n          personalData.street2 = waitingListEntryDetails.street2;\n          personalData.postcode = waitingListEntryDetails.postcode;\n          personalData.city = waitingListEntryDetails.city;\n          personalData.pseudonym = waitingListEntryDetails.pseudonym;\n          personalData.iban = waitingListEntryDetails.iban ?? \"\";\n          personalData.accountOwner =\n            waitingListEntryDetails.accountOwner ?? \"\";\n          personalData.paymentRhythm =\n            waitingListEntryDetails.paymentRhythm ??\n            baseData.defaultPaymentRhythm;\n\n          setSelectedPickupLocations(\n            (waitingListEntryDetails.pickupLocationWishes ?? [])\n              .map((pickupLocation) =>\n                getPublicPickupLocationById(pickupLocation.id!, newSettings),\n              )\n              .filter((pl) => pl !== undefined),\n          );\n        }\n\n        setPersonalData({ ...personalData });\n\n        if (newSettings.growingPeriodChoices.length > 0) {\n          setSelectedGrowingPeriod(newSettings.growingPeriodChoices[0]);\n        }\n\n        setSolidarityContribution(settings.solidarityContributionDefault);\n      })\n      .catch((error) =>\n        handleRequestError(\n          error,\n          \"Fehler beim Laden der BestellWizard\",\n          setToastDatas,\n        ),\n      );\n  }, []);\n\n  useEffect(() => {\n    if (!selectedGrowingPeriod) {\n      return;\n    }\n\n    updateProductPrices(\n      bestellWizardApi,\n      selectedGrowingPeriod,\n      productPricesController,\n      setProductPricesController,\n      settings,\n      setSettings,\n      setToastDatas,\n    );\n\n    setContractStartDate(selectedGrowingPeriod.contractStartDate);\n\n    if (waitingListEntryDetails === undefined) {\n      setSelectedProductTypes(\n        settings.introEnabled ? [] : selectedGrowingPeriod.productTypes,\n      );\n    }\n  }, [selectedGrowingPeriod]);\n\n  useEffect(() => {\n    function handleBeforeUnload(event: BeforeUnloadEvent) {\n      if (\n        isAtLeastOneProductOrdered(shoppingCart) &&\n        currentStep !== steps.at(-1)\n      ) {\n        event.preventDefault();\n      }\n    }\n\n    addEventListener(\"beforeunload\", handleBeforeUnload);\n\n    return () => window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n  }, [shoppingCart, currentStep]);\n\n  useEffect(() => {\n    const element = document.getElementById(currentStep);\n    element?.scrollIntoView({\n      behavior: \"smooth\",\n    });\n  }, [currentStep, steps]);\n\n  function onWindowResize() {\n    const element = document.getElementById(currentStep);\n    element?.scrollIntoView({\n      behavior: \"instant\",\n    });\n  }\n\n  useEffect(() => {\n    window.addEventListener(\"resize\", onWindowResize, { capture: false });\n  }, [onWindowResize]);\n\n  useEffect(() => {\n    if (!settingsLoaded) return;\n    const newSteps = buildSteps(\n      settings,\n      selectedProductTypes,\n      shoppingCart,\n      becomeMemberNow,\n      productTypesInWaitingList,\n      selectedPickupLocations,\n      pickupLocationsWithCapacityFull,\n      waitingListEntryDetails,\n    );\n\n    setSteps(newSteps);\n    if (waitingListEntryDetails) {\n      const index = newSteps.indexOf(\"2_first_name\");\n      setCurrentStep(newSteps[index + 1]);\n    } else if (!newSteps.includes(currentStep)) {\n      setCurrentStep(newSteps[0]);\n    }\n  }, [\n    settings,\n    selectedProductTypes,\n    shoppingCart,\n    studentStatusEnabled,\n    becomeMemberNow,\n    productTypesInWaitingList,\n    selectedPickupLocations,\n    pickupLocationsWithCapacityFull,\n    waitingListEntryDetails,\n  ]);\n\n  useEffect(() => {\n    const newPhases: Phase[] = [];\n    for (const step of steps) {\n      const stepPhase = getPhase(step);\n      if (!newPhases.includes(stepPhase)) {\n        newPhases.push(stepPhase);\n      }\n    }\n    setPhases(newPhases);\n  }, [steps, currentStep, shoppingCart, settings]);\n\n  useEffect(() => {\n    if (\n      settings.pickupLocations.length === 0 ||\n      isShoppingCartEmpty(shoppingCart)\n    ) {\n      return;\n    }\n\n    checkPickupLocationCapacities(\n      pickupLocationsApi,\n      settings.pickupLocations,\n      shoppingCart,\n      setPickupLocationsCapacityCheckLoading,\n      setPickupLocationsWithCapacityFull,\n      setToastDatas,\n      selectedGrowingPeriod,\n    );\n  }, [settings, shoppingCart, selectedGrowingPeriod]);\n\n  useEffect(() => {\n    if (waitingListEntryDetails === undefined) {\n      updateProductsAndProductTypesOverCapacity(\n        bestellWizardApi,\n        shoppingCart,\n        setProductIdsOverCapacity,\n        setProductTypeIdsOverCapacity,\n        setCheckingCapacities,\n        setToastDatas,\n        checkingCapacitiesController,\n        setCheckingCapacitiesController,\n        selectedGrowingPeriod,\n      );\n    }\n\n    updateMinimumNumberOfShares(\n      coopApi,\n      shoppingCart,\n      productTypesInWaitingList,\n      setMinimumNumberOfShares,\n      setSelectedNumberOfCoopShares,\n    );\n  }, [shoppingCart, selectedGrowingPeriod]);\n\n  useEffect(() => {\n    if (!selectedGrowingPeriod) {\n      return;\n    }\n\n    fetchFirstDeliveryDates(\n      bestellWizardApi,\n      shoppingCart,\n      selectedGrowingPeriod,\n      setFirstDeliveryDatesByPickupLocationAndProductType,\n      setToastDatas,\n      undefined,\n    );\n  }, [shoppingCart, selectedGrowingPeriod]);\n\n  useEffect(() => {\n    if (waitingListEntryDetails !== undefined) {\n      return;\n    }\n\n    updateWaitingList(\n      selectedPickupLocations,\n      pickupLocationsWithCapacityFull,\n      settings,\n      shoppingCart,\n      productTypeIdsOverCapacity,\n      productIdsOverCapacity,\n      setProductTypesInWaitingList,\n    );\n  }, [\n    productTypeIdsOverCapacity,\n    productIdsOverCapacity,\n    pickupLocationsWithCapacityFull,\n    selectedPickupLocations,\n    shoppingCart,\n    waitingListEntryDetails,\n  ]);\n\n  useEffect(() => {\n    setBecomeMemberNow(null);\n  }, [shoppingCart]);\n\n  function buildShoppingCartFromWaitingListEntry(\n    settings: BestellWizardSettings,\n    waitingListEntryDetails: PublicWaitingListEntryDetails,\n    setSelectedProductTypes: (types: PublicProductType[]) => void,\n  ) {\n    const newShoppingCart = buildEmptyShoppingCart(settings.productTypes);\n    const selectedProductTypes = new Set<PublicProductType>();\n    for (const wish of waitingListEntryDetails.productWishes ?? []) {\n      newShoppingCart[wish.product.id!] = wish.quantity;\n\n      const publicProductType = getProductTypeByProductId(\n        wish.product.id!,\n        settings,\n      );\n      if (publicProductType) {\n        selectedProductTypes.add(publicProductType);\n      }\n    }\n    setSelectedProductTypes(sortProductTypes([...selectedProductTypes]));\n    return newShoppingCart;\n  }\n\n  function goToNextStep() {\n    const currentIndex = steps.indexOf(currentStep);\n    if (currentIndex + 1 >= steps.length) {\n      return;\n    }\n\n    setCurrentStep(steps[steps.indexOf(currentStep) + 1]);\n  }\n\n  function setTestData() {\n    setPersonalData(getTestPersonalData());\n    setSelectedProductTypes(selectedGrowingPeriod?.productTypes ?? []);\n    const newShoppingCart: ShoppingCart = {};\n    for (const productType of selectedGrowingPeriod?.productTypes ??\n      settings.productTypes) {\n      for (const product of productType.products) {\n        newShoppingCart[product.id!] = 1;\n      }\n    }\n    setShoppingCart(newShoppingCart);\n    setSelectedPickupLocations([settings.pickupLocations[0]]);\n    switch (settings.legalStatus) {\n      case \"coop\":\n        setSelectedNumberOfCoopShares(7);\n        break;\n      case \"association\":\n        const visibleMembershipTypes = getVisibleAssociationMembershipTypes(\n          settings.associationMembershipTypes,\n        );\n        if (visibleMembershipTypes.length > 0) {\n          setSelectedAssociationMembershipType(visibleMembershipTypes[0]);\n        }\n    }\n    setSepaAllowed(true);\n    setContractAccepted(true);\n    setStatuteAccepted(true);\n    setCancellationPolicyRead(true);\n    setPrivacyPolicyRead(true);\n  }\n\n  function isPayingCoopSharesInInstalments() {\n    // The minimum can change after the choice was made, for example if the shopping cart changes\n    return (\n      payCoopSharesInInstalments &&\n      !studentStatusEnabled &&\n      selectedNumberOfCoopShares === minimumNumberOfShares\n    );\n  }\n\n  function onConfirmOrder() {\n    setConfirmOrderLoading(true);\n\n    if (waitingListEntryDetails !== undefined) {\n      waitingListApi\n        .waitingListApiPublicConfirmWaitingListEntryCreate({\n          publicConfirmWaitingListEntryRequestRequest: {\n            entryId: waitingListEntryDetails.entryId,\n            accountOwner: personalData.accountOwner,\n            contractAccepted:\n              contractAccepted || waitingListEntryDetails.memberAlreadyExists,\n            iban: personalData.iban,\n            sepaAllowed:\n              sepaAllowed || waitingListEntryDetails.memberAlreadyExists,\n            linkKey: waitingListEntryDetails.linkKey,\n            numberOfCoopShares: selectedNumberOfCoopShares,\n            payCoopSharesInInstalments: isPayingCoopSharesInInstalments(),\n            paymentRhythm: personalData.paymentRhythm,\n            solidarityContribution: solidarityContribution,\n            associationMembershipTypeId:\n              selectedAssociationMembershipType?.id ?? null,\n          },\n        })\n        .then(handleOrderResponse)\n        .catch(async (error) => {\n          await handleRequestError(\n            error,\n            \"Fehler bei der Bestätigung der Warteliste-Eintrag\",\n            setToastDatas,\n          );\n        })\n        .finally(() => setConfirmOrderLoading(false));\n      return;\n    }\n\n    bestellWizardApi\n      .bestellWizardBestellWizardConfirmOrderCreate({\n        bestellWizardConfirmOrderRequestRequest: {\n          personalData: {\n            accountOwner: personalData.accountOwner,\n            city: personalData.city,\n            country: personalData.country,\n            email: personalData.email,\n            iban: personalData.iban,\n            firstName: personalData.firstName,\n            lastName: personalData.lastName,\n            phoneNumber: personalData.phoneNumber,\n            postcode: personalData.postcode,\n            street: personalData.street,\n            street2: personalData.street2,\n            pseudonym: personalData.pseudonym,\n          },\n          sepaAllowed: sepaAllowed,\n          contractAccepted: contractAccepted,\n          statuteAccepted: statuteAccepted,\n          numberOfCoopShares: selectedNumberOfCoopShares,\n          payCoopSharesInInstalments: isPayingCoopSharesInInstalments(),\n          pickupLocationIds: selectedPickupLocations.map(\n            (locations) => locations.id!,\n          ),\n          shoppingCartOrder: buildFilteredShoppingCart(\n            shoppingCart,\n            false,\n            productTypesInWaitingList,\n          ),\n          shoppingCartWaitingList: buildFilteredShoppingCart(\n            shoppingCart,\n            true,\n            productTypesInWaitingList,\n          ),\n          studentStatusEnabled: studentStatusEnabled,\n          paymentRhythm: personalData.paymentRhythm,\n          becomeMemberNow: willBecomeMemberNow(settings, becomeMemberNow),\n          privacyPolicyRead: privacyPolicyRead,\n          cancellationPolicyRead: cancellationPolicyRead,\n          growingPeriodId: selectedGrowingPeriod!.id!,\n          solidarityContribution: solidarityContribution,\n          distributionChannels: [...selectedDistributionChannels],\n          feedback: feedback,\n          associationMembershipTypeId: selectedAssociationMembershipType?.id,\n        },\n      })\n      .then(handleOrderResponse)\n      .catch(async (error) => {\n        await handleRequestError(\n          error,\n          \"Fehler bei der Bestätigung der Bestellung\",\n          setToastDatas,\n        );\n      })\n      .finally(() => setConfirmOrderLoading(false));\n  }\n\n  function handleOrderResponse(response: OrderConfirmationResponse) {\n    if (!response.orderConfirmed) {\n      addToast(\n        {\n          title: \"Fehler beim Bestellen\",\n          message: response.error ?? undefined,\n          variant: \"danger\",\n          id: uuidv4(),\n        },\n        setToastDatas,\n      );\n      return;\n    }\n\n    if (\n      isOrderWaitingListOnly(\n        settings,\n        shoppingCart,\n        productTypesInWaitingList,\n        becomeMemberNow,\n      )\n    ) {\n      setCurrentStep(\"14b_confirmation_waiting_list\");\n    } else {\n      setCurrentStep(\"14_confirmation\");\n    }\n  }\n\n  function goToProductTypeStep(productType: PublicProductType) {\n    if (!selectedProductTypes.includes(productType)) {\n      setSelectedProductTypes([...selectedProductTypes, productType]);\n    }\n    setCurrentStep(productType.id! + \"_order\");\n  }\n\n  function getStepComponent(step: Step) {\n    switch (step) {\n      case \"1a_welcome\":\n        return (\n          <Step1AWelcome\n            goToNextStep={goToNextStep}\n            settings={settings}\n            stepActive={step === currentStep}\n          />\n        );\n      case \"1b_welcome_waiting_list\":\n        return (\n          <Step1BWelcome goToNextStep={goToNextStep} settings={settings} />\n        );\n      case \"2_first_name\":\n        return (\n          <Step2FirstName\n            goToNextStep={goToNextStep}\n            personalData={personalData}\n            setPersonalData={setPersonalData}\n            settings={settings}\n            stepActive={currentStep === step}\n          />\n        );\n      case \"3_product_type_choice\":\n        return (\n          <Step3ProductTypesChoice\n            goToNextStep={goToNextStep}\n            settings={settings}\n            firstName={personalData.firstName}\n            selectedProductTypes={selectedProductTypes}\n            setSelectedProductTypes={setSelectedProductTypes}\n            investingMembership={investingMembership}\n            setInvestingMembership={setInvestingMembership}\n            setShoppingCart={setShoppingCart}\n            selectedGrowingPeriod={selectedGrowingPeriod}\n            stepActive={step === currentStep}\n          />\n        );\n      case \"3b_growing_period_choice\":\n        return (\n          <Step3BGrowingPeriodChoice\n            goToNextStep={goToNextStep}\n            settings={settings}\n            selectedGrowingPeriod={selectedGrowingPeriod}\n            setSelectedGrowingPeriod={setSelectedGrowingPeriod}\n            stepActive={step === currentStep}\n          />\n        );\n      case \"5a_pickup_location_intro\":\n        return (\n          <StepGenericIntro\n            content={{\n              text: settings.strings.step5aText,\n            }}\n            goToNextStep={goToNextStep}\n            stepActive={step === currentStep}\n          />\n        );\n      case \"5b_pickup_location_choice\":\n        return (\n          <Step5BPickupLocationChoice\n            settings={settings}\n            selectedPickupLocations={selectedPickupLocations}\n            setSelectedPickupLocations={setSelectedPickupLocations}\n            pickupLocationsCapacityCheckLoading={\n              pickupLocationsCapacityCheckLoading\n            }\n            pickupLocationsWithCapacityFull={pickupLocationsWithCapacityFull}\n            goToNextStep={goToNextStep}\n            stepIsActive={step === \"5b_pickup_location_choice\"}\n            firstDeliveryDatesByPickupLocationAndProductType={\n              firstDeliveryDatesByPickupLocationAndProductType\n            }\n            stepActive={currentStep === step}\n            productTypesInWaitingList={productTypesInWaitingList}\n            shoppingCart={shoppingCart}\n            currentTab={currentPickupLocationTab}\n            setCurrentTab={setCurrentPickupLocationTab}\n            productTypeIdsOverCapacity={productTypeIdsOverCapacity}\n            productIdsOverCapacity={productIdsOverCapacity}\n            isOrderStep={false}\n            orderLoading={false}\n            changesDisabled={\n              (waitingListEntryDetails?.pickupLocationWishes ?? []).length > 0\n            }\n          />\n        );\n      case \"5c_pickup_location_confirm_waiting_list\":\n        return (\n          <Step5CPickupLocationConfirmWaitingList\n            settings={settings}\n            setCurrentStep={setCurrentStep}\n            goToNextStep={goToNextStep}\n            setCurrentTab={setCurrentPickupLocationTab}\n          />\n        );\n      case \"6a_coop_intro\":\n        return (\n          <StepGenericIntro\n            goToNextStep={goToNextStep}\n            content={{\n              text: settings.strings.step6aText,\n            }}\n            stepActive={step === currentStep}\n          />\n        );\n      case \"6b_coop_shares\":\n        return (\n          <Step6BCoopShares\n            goToNextStep={goToNextStep}\n            settings={settings}\n            selectedNumberOfCoopShares={selectedNumberOfCoopShares}\n            setSelectedNumberOfCoopShares={setSelectedNumberOfCoopShares}\n            minimumNumberOfShares={minimumNumberOfShares}\n            studentStatusEnabled={studentStatusEnabled}\n            setStudentStatusEnabled={setStudentStatusEnabled}\n            statuteAccepted={statuteAccepted}\n            setStatuteAccepted={setStatuteAccepted}\n            stepActive={currentStep === step}\n            isOrderStep={false}\n            orderLoading={false}\n            canChangeNumberOfShares={\n              !waitingListEntryDetails?.memberAlreadyExists\n            }\n            forceHideStudentCheckbox={!isAtLeastOneProductOrdered(shoppingCart)}\n            payInInstalments={payCoopSharesInInstalments}\n            setPayInInstalments={setPayCoopSharesInInstalments}\n          />\n        );\n      case \"6b_association_membership\":\n        return (\n          <Step6BAssociationMembership\n            goToNextStep={goToNextStep}\n            settings={settings}\n            selectedAssociationMembershipType={\n              selectedAssociationMembershipType\n            }\n            setSelectedAssociationMembershipType={\n              setSelectedAssociationMembershipType\n            }\n            contractStartDate={contractStartDate}\n            stepActive={currentStep === step}\n            isOrderStep={false}\n          />\n        );\n      case \"6c_coop_member_now\":\n        return (\n          <Step6CCoopMemberNow\n            settings={settings}\n            setCurrentStep={setCurrentStep}\n            setBecomeMemberNow={setBecomeMemberNow}\n          />\n        );\n      case \"7_solidarity_contribution\":\n        return (\n          <Step7SolidarityContribution\n            settings={settings}\n            goToNextStep={goToNextStep}\n            setSolidarityContribution={setSolidarityContribution}\n            solidarityContribution={solidarityContribution}\n            stepActive={currentStep === step}\n            shoppingCart={shoppingCart}\n            productTypesInWaitingList={productTypesInWaitingList}\n            associationMembershipType={selectedAssociationMembershipType}\n            contractStartDate={contractStartDate}\n          />\n        );\n      case \"8_personal_data\":\n        return (\n          <Step8PersonalData\n            settings={settings}\n            goToNextStep={goToNextStep}\n            personalData={personalData}\n            setPersonalData={setPersonalData}\n            stepActive={currentStep === step}\n            emailAddressAlreadyInUse={emailAddressAlreadyInUse}\n            setEmailAddressAlreadyInUse={setEmailAddressAlreadyInUse}\n            emailAddressAlreadyInUseLoading={emailAddressAlreadyInUseLoading}\n            setEmailAddressAlreadyInUseLoading={\n              setEmailAddressAlreadyInUseLoading\n            }\n            setToastDatas={setToastDatas}\n            changesDisabled={waitingListEntryDetails !== undefined}\n          />\n        );\n      case \"9_banking_data\":\n        return (\n          <Step9BankingData\n            goToNextStep={goToNextStep}\n            personalData={personalData}\n            setPersonalData={setPersonalData}\n            sepaAllowed={sepaAllowed}\n            setSepaAllowed={setSepaAllowed}\n            contractAccepted={contractAccepted}\n            setContractAccepted={setContractAccepted}\n            settings={settings}\n            shoppingCart={shoppingCart}\n            solidarityContribution={solidarityContribution}\n            stepActive={currentStep === step}\n            productTypesInWaitingList={productTypesInWaitingList}\n            isOrderStep={false}\n            orderLoading={false}\n            canChangePaymentRhythm={true}\n            autoFillAccountOwnerFromName={true}\n          />\n        );\n      case \"10_summary\":\n        return (\n          <Step10OrderSummary\n            goToNextStep={goToNextStep}\n            settings={settings}\n            studentStatusEnabled={studentStatusEnabled}\n            numberOfCoopShares={selectedNumberOfCoopShares}\n            payCoopSharesInInstalments={isPayingCoopSharesInInstalments()}\n            shoppingCart={shoppingCart}\n            contractStartDate={contractStartDate}\n            firstDeliveryDatesByPickupLocationAndProductType={\n              firstDeliveryDatesByPickupLocationAndProductType\n            }\n            goToProductTypeStep={goToProductTypeStep}\n            selectedPickupLocations={selectedPickupLocations}\n            solidarityContribution={solidarityContribution}\n            personalData={personalData}\n            productTypesInWaitingList={productTypesInWaitingList}\n            becomeMemberNow={becomeMemberNow}\n            pickupLocationsWithCapacityFull={pickupLocationsWithCapacityFull}\n            confirmOrderLoading={confirmOrderLoading}\n            isOrderStep={waitingListEntryDetails !== undefined}\n            confirmOrder={onConfirmOrder}\n            waitingListEntryDetails={waitingListEntryDetails}\n            associationMembershipType={selectedAssociationMembershipType}\n            selectedGrowingPeriod={selectedGrowingPeriod}\n            hideTrialPeriod={false}\n            stepActive={step === currentStep}\n            setCurrentStep={setCurrentStep}\n          />\n        );\n      case \"11_legal\":\n        return (\n          <Step11Legal\n            goToNextStep={goToNextStep}\n            settings={settings}\n            cancellationPolicyRead={cancellationPolicyRead}\n            setCancellationPolicyRead={setCancellationPolicyRead}\n            privacyPolicyRead={privacyPolicyRead}\n            setPrivacyPolicyRead={setPrivacyPolicyRead}\n            stepActive={step === currentStep}\n            productTypesInWaitingList={productTypesInWaitingList}\n            shoppingCart={shoppingCart}\n            solidarityContribution={solidarityContribution}\n            isOrderStep={false}\n          />\n        );\n      case \"12_channel\":\n        return (\n          <Step12Channel\n            goToNextStep={goToNextStep}\n            settings={settings}\n            selectedDistributionChannels={selectedDistributionChannels}\n            setSelectedDistributionChannels={setSelectedDistributionChannels}\n            confirmOrder={\n              settings.feedbackStepEnabled ? undefined : onConfirmOrder\n            }\n            confirmOrderLoading={\n              settings.feedbackStepEnabled ? false : confirmOrderLoading\n            }\n            stepActive={step === currentStep}\n          />\n        );\n      case \"13_feedback\":\n        return (\n          <Step13Feedback\n            goToNextStep={goToNextStep}\n            settings={settings}\n            confirmOrder={onConfirmOrder}\n            confirmOrderLoading={confirmOrderLoading}\n            feedback={feedback}\n            setFeedback={setFeedback}\n            stepActive={step === currentStep}\n          />\n        );\n      case \"14_confirmation\":\n        return (\n          <Step14Confirmation\n            settings={settings}\n            memberMail={personalData.email}\n          />\n        );\n      case \"14b_confirmation_waiting_list\":\n        return (\n          <Step14BConfirmationWaitingList\n            settings={settings}\n            memberMail={personalData.email}\n          />\n        );\n      case \"loading\":\n        return (\n          <div\n            style={{ width: \"100%\", height: \"100%\" }}\n            className={\"d-flex justify-content-center align-items-center\"}\n          >\n            <Spinner />\n          </div>\n        );\n      default: {\n        // If the step is not one of the predefined ones, then it's a product type step\n        const [productType, subStep] = getProductTypeFromStep(step, settings);\n        if (productType === undefined) {\n          return <div>Fehler: ungültiges Schritt {step}</div>;\n        }\n        switch (subStep) {\n          case \"intro\":\n            return (\n              <StepGenericIntro\n                content={{\n                  text: productType.descriptionBestellwizardLong,\n                  accordions: productType.accordions,\n                }}\n                goToNextStep={goToNextStep}\n                stepActive={step === currentStep}\n              />\n            );\n          case \"order\":\n            return (\n              <Step4BProductTypeOrder\n                settings={settings}\n                productType={productType}\n                goToNextStep={goToNextStep}\n                shoppingCart={shoppingCart}\n                setShoppingCart={setShoppingCart}\n                stepActive={step === currentStep}\n                checkingCapacities={checkingCapacities}\n                productTypeIdsOverCapacity={productTypeIdsOverCapacity}\n                productIdsOverCapacity={productIdsOverCapacity}\n                waitingListLinkConfirmationModeEnabled={\n                  waitingListEntryDetails !== undefined\n                }\n                waitingListEntryDetails={waitingListEntryDetails}\n                productTypesInWaitingList={productTypesInWaitingList}\n                isOrderStep={false}\n                orderLoading={false}\n              />\n            );\n        }\n      }\n    }\n  }\n\n  return (\n    <BestellWizardMobileBase\n      settings={settings}\n      steps={steps}\n      currentStep={currentStep}\n      setCurrentStep={setCurrentStep}\n      shoppingCart={shoppingCart}\n      phases={phases}\n      selectedPickupLocations={selectedPickupLocations}\n      solidarityContribution={solidarityContribution}\n      productTypesInWaitingList={productTypesInWaitingList}\n      personalData={personalData}\n      getStepComponent={getStepComponent}\n      setTestData={setTestData}\n      toastDatas={toastDatas}\n      setToastDatas={setToastDatas}\n      showProgress={true}\n      hideFooterButtonsOnLastStep={true}\n      selectedNumberOfCoopShares={selectedNumberOfCoopShares}\n      goToProductTypeStep={goToProductTypeStep}\n      associationMembershipType={selectedAssociationMembershipType}\n      contractStartDate={contractStartDate}\n      selectedGrowingPeriod={selectedGrowingPeriod}\n    />\n  );\n};\n\nexport default BestellWizardMobile;\n"],"mappings":"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"}