{"version":3,"file":"BmSiTjbS.js","sources":["../../../../src/complib/components/htmlDialog/simpleHtmlDialog.vue","../../../../src/helpers/validations.ts","../../../../src/components/formFields/addressRows/addressRows.vue","../../../../src/components/formTools/address/suggestions/composables/useAddressSuggestions.ts","../../../../src/components/formTools/address/suggestions/addressSuggestions.vue","../../../../src/components/formTools/address/validation/composables/useValidateAddressExternal.ts","../../../../src/components/formTools/address/validation/components/addressField.vue","../../../../src/components/formTools/address/validation/addressChoice.vue"],"sourcesContent":["\n\n","// List of all invalid words in street feld\n// invalid words are the words that refer to Packing station or P.O. Box\nconst unvalidWords = ['Packstation', 'Postnummer', 'Postnumer', 'Postnr'];\n\n// check if a string contain at lest one of invalid words\nexport function checkStreetNameForPackingStation(streetName: string) {\n const Rg = new RegExp(unvalidWords.join('|'), 'i');\n const Rg1 = /\\d{9}/;\n streetName = streetName.trim().replace(/\\s+/g, '');\n return Rg1.test(streetName) || Rg.test(streetName);\n}\n","\n\n","import type {\n Result as SuggestionsResult,\n PostBody as SuggestionPostBody,\n} from '@/server/api/[site]/user/account/suggestAddresses.post';\nimport type {\n Result as FullAddressResult,\n PostBody as FullAddressPostBody,\n} from '@/server/api/[site]/user/account/fullAddressFromPlaceId.post';\nimport { useSecureSessionPost } from '@/composables/dataFetching/genericFetchers';\nimport { getNode } from '@formkit/core';\n\nexport type FormKitAddressFieldInput = {\n input: {\n [key in keyof FullAddressResult['address']]?: string;\n };\n fieldNames: {\n [key in keyof FullAddressResult['address']]?: string;\n };\n};\n\n/**\n * @param options\n * @param options.debounceTime Suggestion fetch debounce time | default: 500\n * @param options.inputLengthThreshold Minimum length of the input before suggestions are fetched | default: 3\n * @param options.fillFormkitFields On Address select tries to fill formkit fields | default: null\n * @param options.filterResultsByType Filters _results_ by the given types | default: []\n * @param options.filterInputByTerms Filters _input_ by the given terms and sets error state if matches found | default: []\n * @returns state - reactive object containing the state of the suggestions\n * @returns getSuggestions - function to fetch suggestions\n * @returns selectSuggestion - function to select a suggestion (loads details)\n * @returns clearSuggestions - function to clear the suggestions & error-states\n * @returns getSuggestionWithHighlightAsStringArray - helper function to get the suggestion as an array with highlighted parts\n */\nexport default function useAddressSuggestions(options?: {\n debounceTime?: number;\n inputLengthThreshold?: number;\n fillFormkitAddressFields?: FormKitAddressFieldInput['fieldNames'];\n filterResultsByType?: Array<\n SuggestionsResult['suggestions'][0]['types'] | Array\n >;\n filterInputByTerms?: Array<{\n description: string;\n values: Array;\n type: 'startsWith' | 'includes';\n }>;\n}) {\n const debounceTime = options?.debounceTime ?? 500;\n const inputLengthThreshold = options?.inputLengthThreshold ?? 3;\n const filterResultsByType = options?.filterResultsByType ?? [];\n const filterInputByTerms = options?.filterInputByTerms ?? [];\n const removals = useTrans().t('addressSuggestions.name1Removals').split('; ');\n\n const state = reactive({\n previousResponseId: null as string | null,\n suggestions: [] as SuggestionsResult['suggestions'],\n selectedSuggestion: {\n suggestion: null as SuggestionsResult['suggestions'][0],\n details: null as any,\n },\n error: {\n details: false,\n suggestions: false,\n formkitFieldFill: false,\n filteredInput: null as string | null,\n },\n loading: {\n details: false,\n suggestions: false,\n waiting: true,\n },\n });\n\n /**\n * @summary Debounced fetch of suggestions based on the input\n * @info Influenced by the `debounceTime` and `inputLengthThreshold` options\n */\n async function getSuggestions(input: string) {\n state.loading.waiting = true;\n getSuggestionsDebounced(input);\n }\n\n const getSuggestionsDebounced = useDebounceFn(async (input: string) => {\n const inputValidity = handleInputValidity(input);\n if (!inputValidity) return;\n\n state.error.filteredInput = null;\n state.suggestions = [];\n state.loading.suggestions = true;\n try {\n const postbody: SuggestionPostBody = {\n address: input,\n previousResponseId: state.previousResponseId,\n };\n const reqResult = await useSecureSessionPost(\n `/api/${useSiteIdent()}/user/account/suggestAddresses`,\n postbody,\n );\n handleSuggestionsResponse(reqResult);\n state.error.suggestions = false;\n } catch (e) {\n state.error.suggestions = true;\n throw e;\n } finally {\n state.loading.suggestions = false;\n state.loading.waiting = false;\n }\n }, debounceTime);\n\n function handleInputValidity(input: string) {\n if (input?.length <= inputLengthThreshold) {\n state.error.filteredInput = null;\n state.suggestions = [];\n return false;\n }\n\n for (const term of filterInputByTerms) {\n if (\n term.values.some((value) => {\n return term.type === 'startsWith'\n ? input.toLowerCase().startsWith(value)\n : input.toLowerCase().includes(value);\n })\n ) {\n state.error.filteredInput = term.description;\n state.suggestions = [];\n return false;\n }\n }\n\n return true;\n }\n\n function handleSuggestionsResponse(response: SuggestionsResult) {\n if (response.responseId) {\n state.previousResponseId = response.responseId;\n }\n state.suggestions = response.suggestions;\n state.suggestions = state.suggestions.slice(0, 6);\n if (filterResultsByType.length) {\n for (const type of filterResultsByType) {\n state.suggestions = state.suggestions.filter((suggestion) =>\n suggestion.types.includes(type as any),\n );\n }\n }\n }\n\n /**\n * @summary Fetches the details of the selected suggestion & sets the state accordingly\n */\n async function selectSuggestion(\n suggestion: SuggestionsResult['suggestions'][0],\n ) {\n if (!state.loading.details) {\n state.loading.details = true;\n state.selectedSuggestion.suggestion = suggestion;\n await getPlaceDetails(suggestion.placeId);\n if (options?.fillFormkitAddressFields) {\n fillFormkitAddressFields(\n state.selectedSuggestion.details.address,\n options.fillFormkitAddressFields,\n );\n }\n state.loading.details = false;\n }\n }\n\n async function getPlaceDetails(placeId: string) {\n let result: FullAddressResult | null = null;\n try {\n const postBody: FullAddressPostBody = {\n placeId,\n previousResponseId: state.previousResponseId,\n };\n result = await useSecureSessionPost(\n `/api/${useSiteIdent()}/user/account/fullAddressFromPlaceId`,\n postBody,\n );\n state.selectedSuggestion.details = result;\n state.error.details = false;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n state.error.details = true;\n }\n }\n\n /**\n * @summary Clears the suggestions, selected suggestion & error-states\n */\n function clearSuggestions() {\n state.suggestions = [];\n state.selectedSuggestion.suggestion = null;\n state.selectedSuggestion.details = null;\n state.error.formkitFieldFill = false;\n state.error.details = false;\n state.error.suggestions = false;\n }\n\n /**\n * @returns An array of {text: string, highlighted: boolean} objects\n */\n function getSuggestionWithHighlightAsStringArray(\n suggestion: SuggestionsResult['suggestions'][0],\n maxLength = 9999,\n ): Array<{ text: string; highlighted: boolean }> {\n const result: Array<{ text: string; highlighted: boolean }> = [];\n let currentIndex = 0;\n let totalLength = 0;\n\n for (const { start, end } of suggestion.highlightedSubstrings) {\n if (\n currentIndex < start &&\n addText(suggestion.text.slice(currentIndex, start), false)\n ) {\n return result;\n }\n\n if (addText(suggestion.text.slice(start, end), true)) {\n return result;\n }\n\n currentIndex = end;\n }\n\n if (currentIndex < suggestion.text.length && totalLength < maxLength) {\n addText(suggestion.text.slice(currentIndex), false);\n }\n\n function addText(text: string, highlighted: boolean) {\n const remainingLength = maxLength - totalLength;\n const sliceLength = Math.min(text.length, remainingLength);\n result.push({ text: text.slice(0, sliceLength), highlighted });\n totalLength += sliceLength;\n return totalLength >= maxLength;\n }\n\n return result;\n }\n\n /**\n * @summary Fills the given formkit fields with the given input\n * - Silently errors on exception and does not throw\n */\n function fillFormkitAddressFields(\n input: FormKitAddressFieldInput['input'],\n fieldNames: FormKitAddressFieldInput['fieldNames'],\n ) {\n try {\n for (const [key] of Object.entries(fieldNames)) {\n const field = getNode(fieldNames[key as keyof typeof fieldNames]);\n if (field) {\n if ((key as keyof typeof fieldNames) === 'name1') {\n field.input(\n removeMatchingWords(input[key as keyof typeof input], removals),\n );\n } else {\n field.input(input[key as keyof typeof input]);\n }\n }\n }\n } catch (e) {\n state.error.formkitFieldFill = true;\n // eslint-disable-next-line no-console\n console.error(e);\n }\n }\n\n return {\n state,\n selectSuggestion,\n getSuggestions,\n clearSuggestions,\n getSuggestionWithHighlightAsStringArray,\n };\n}\n\n/**\n * @summary removals get removed from target, whitespace gets trimmed\n * @example ('eins zwei drei vier fünf', ['zwei', 'fünf']) => 'eins drei vier'\n */\nfunction removeMatchingWords(target: string, removals: string[]) {\n const removalRegex = new RegExp(\n removals.map((word) => `\\\\b${word}\\\\b`).join('|'),\n 'g',\n );\n return target.replace(removalRegex, '').replace(/\\s+/g, ' ').trim();\n}\n","\n\n\n","import type { Result } from '@/server/api/[site]/user/account/validateAddress.post';\nimport { useSecureSessionPost } from '@/composables/dataFetching/genericFetchers';\nimport type { UserData } from '@/server/gateway/connections/shopware/actions/registerUser';\nimport { hashCode } from '~~/src/helpers/hashCode';\n\ntype AddressToValidate = Pick<\n UserData['billingAddress'],\n 'countryId' | 'city' | 'zipcode' | 'street' | 'number'\n>;\n\n/**\n *\n * @returns isLoading - if the validation is currently loading\n * @returns loadingError - if the validation has encountered an (api)error\n * @returns validationResult - the result of the validation\n * @returns needsManualCheck - if the address needs manual validation\n * @returns validateAddress - function to validate an address\n * @returns resetManualCheck - function to reset the manual check\n * @returns reset - function to reset the validation\n */\nexport default function useValidateAddressExternal() {\n let previousResponseId = '';\n\n const isLoading = ref(false);\n const loadingError = ref(false);\n const validationResult = ref(null);\n const needsManualCheck = ref(false);\n\n /**\n * Calls the validation API to validate the given address,\n * and sets the result in the `validationResult` ref.\n */\n async function validateAddress(address: AddressToValidate): Promise {\n if (\n !address ||\n isLoading.value ||\n hashCode(address) ===\n hashCode(validationResult.value?.addresses?.[0]?.originalFormat ?? {})\n )\n return;\n\n try {\n isLoading.value = true;\n const reqResult = await useSecureSessionPost(\n `/api/${useSiteIdent()}/user/account/validateAddress`,\n {\n address,\n previousResponseId: previousResponseId,\n },\n );\n handleResponse(reqResult);\n } catch (e) {\n setLoadingErrorState();\n throw e;\n } finally {\n isLoading.value = false;\n }\n }\n\n async function resetManualCheck() {\n needsManualCheck.value = false;\n }\n\n /**\n * Resets the validation state EXCEPT for the internal previousResponseId\n */\n function reset() {\n validationResult.value = null;\n needsManualCheck.value = false;\n loadingError.value = false;\n }\n\n function setLoadingErrorState() {\n validationResult.value = null;\n loadingError.value = true;\n needsManualCheck.value = false;\n }\n\n /*\n * Handles the response from the validation API and sets the state of the refs accordingly\n */\n function handleResponse(response: Result) {\n previousResponseId = response.responseId;\n if (response.addresses.length > 0) {\n validationResult.value = response;\n if (\n response.overallValid === false &&\n (!validationResult.value.isValid ||\n validationResult.value.hasAnyKindOfChange)\n ) {\n needsManualCheck.value = true;\n }\n } else {\n throw new Error('The Validation-API encountered an error');\n }\n }\n\n return {\n validateAddress,\n resetManualCheck,\n reset,\n validationResult,\n isLoading,\n loadingError,\n needsManualCheck,\n };\n}\n","\n\n\n","\n\n\n"],"names":["props","__props","dialogRef","ref","t","useTrans","htmlDialogOrder","useState","dialogId","watch","newVal","_a","_b","id","onUnmounted","unvalidWords","checkStreetNameForPackingStation","streetName","Rg","Rg1","shippingSuffix","emits","__emit","street","number","zip","city","zipCodeValidation","useZipCodeValidation","isPackingStation","computed","newValue","useAddressSuggestions","options","debounceTime","inputLengthThreshold","filterResultsByType","filterInputByTerms","removals","state","reactive","getSuggestions","input","getSuggestionsDebounced","useDebounceFn","handleInputValidity","postbody","reqResult","useSecureSessionPost","useSiteIdent","handleSuggestionsResponse","e","term","value","response","type","suggestion","selectSuggestion","getPlaceDetails","fillFormkitAddressFields","placeId","result","postBody","clearSuggestions","getSuggestionWithHighlightAsStringArray","maxLength","currentIndex","totalLength","start","end","addText","text","highlighted","remainingLength","sliceLength","fieldNames","key","field","getNode","removeMatchingWords","target","removalRegex","word","minInputLength","textCutOff","emit","userInput","inputFieldId","uuidv4","activeElement","useActiveElement","inputField","suggestionsFields","dropdownSelectedField","inputIsFocused","showSuggestions","val","selectDropdownField","index","handleInputChange","clearInput","handleSelectSuggestion","useValidateAddressExternal","previousResponseId","isLoading","loadingError","validationResult","needsManualCheck","validateAddress","address","hashCode","_c","handleResponse","setLoadingErrorState","resetManualCheck","reset","getHighlightClass","highlightType","selectedAddress","incompleteData","noSuggestion","addressKeys","highlightedFields","add","addressFields","arr","i","open","selectAndSaveAddress","selectAddress","saveAddress"],"mappings":"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"}