{"version":3,"file":"js/headset_builder-b111b4f84797df1b39db.js","mappings":"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","sources":["webpack://epos-atc-headset-configurator/./app/javascript/helpers/StepHelper.jsx","webpack://epos-atc-headset-configurator/./app/javascript/utils/index.js","webpack://epos-atc-headset-configurator/./app/javascript/helpers/FilterHelper.jsx","webpack://epos-atc-headset-configurator/./app/javascript/lists/ColumnList.tsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/headsetSeries/Components.tsx","webpack://epos-atc-headset-configurator/./app/javascript/utils/const.ts","webpack://epos-atc-headset-configurator/./app/javascript/reducers.jsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/HeadsetSeriesPage.tsx","webpack://epos-atc-headset-configurator/./app/javascript/selectors.jsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/HeadsetsPage.tsx","webpack://epos-atc-headset-configurator/./app/javascript/lists/PttList.tsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/pttSeries/Components.jsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/PttSeriesPage.tsx","webpack://epos-atc-headset-configurator/./app/javascript/lists/PttListWithDropdown.tsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/PttsPage.tsx","webpack://epos-atc-headset-configurator/./app/javascript/hooks/useFilteredCables/index.tsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/BottomCablesPage.tsx","webpack://epos-atc-headset-configurator/./app/javascript/utils/plug_configuration.js","webpack://epos-atc-headset-configurator/./app/javascript/pages/PlugConfigurationPage.jsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/YourHeadsetPage.jsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/CableWithoutPttPage.tsx","webpack://epos-atc-headset-configurator/./app/javascript/pages/ThankYouPage.tsx","webpack://epos-atc-headset-configurator/./app/javascript/entrypoints/headset_builder.jsx"],"sourcesContent":["import React from \"react\"\nimport { camelCase } from \"change-case\"\n\n// On test mode, we don't skip any step\nexport const nextStepUrl = (\n currentUrl,\n cartIds,\n stepSkippers,\n testMode = false,\n) => {\n let step = currentUrl\n do {\n step = nextStep(step)\n } while (skipStep(step, cartIds, stepSkippers) && !testMode)\n\n return \"/\" + step\n}\n\nexport const previousStepUrl = (\n currentUrl,\n cartIds,\n stepSkippers,\n testMode = false,\n) => {\n let step = currentUrl\n do {\n step = previousStep(step)\n } while (skipStep(step, cartIds, stepSkippers) && !testMode)\n\n return \"/\" + step\n}\n\nconst skipStep = (step, cartIds, stepSkippers) => {\n return (\n anyStepSkipperApplies(step, cartIds, stepSkippers) ||\n (step === \"plugConfiguration\" && !hasPlug(cartIds))\n )\n}\n\nconst hasPlug = (cartIds) => {\n return Number.isInteger(cartIds.plugId) && cartIds.plugId > 0\n}\n\nconst anyStepSkipperApplies = (step, cartIds, stepSkippers) =>\n stepSkippers.some((stepSkipper) => {\n return (\n step == camelCase(stepSkipper.step) &&\n (!stepSkipper.bottom_cable_id ||\n stepSkipper.bottom_cable_id == cartIds.bottomCableId) &&\n (!stepSkipper.headset_series_id ||\n stepSkipper.headset_series_id == cartIds.headsetSeriesId) &&\n (!stepSkipper.headset_id ||\n stepSkipper.headset_id == cartIds.headsetId) &&\n (!stepSkipper.ptt_series_id ||\n stepSkipper.ptt_series_id == cartIds.pttSeriesId) &&\n (!stepSkipper.ptt_id || stepSkipper.ptt_id == cartIds.pttId) &&\n (!stepSkipper.top_cable_id ||\n stepSkipper.top_cable_id == cartIds.topCableId)\n )\n })\n\nconst nextStepIndex = (currentStepIndex, STEPS) =>\n currentStepIndex < STEPS.length ? currentStepIndex + 1 : currentStepIndex\nconst previousStepIndex = (currentStepIndex, STEPS) =>\n currentStepIndex > 0 ? currentStepIndex - 1 : 0\n\nconst currentStepIndex = (currentStep) => STEPS.indexOf(currentStep)\n\nconst nextStep = (currentStep) =>\n STEPS[nextStepIndex(currentStepIndex(currentStep), STEPS)]\nconst previousStep = (currentStep) =>\n STEPS[previousStepIndex(currentStepIndex(currentStep), STEPS)]\n\nconst STEPS = [\n \"headsetSeries\",\n \"headsets\",\n \"pttSeries\",\n \"ptts\",\n \"bottomCables\",\n \"cableWithoutPtts\",\n \"plugConfiguration\",\n \"yourHeadset\",\n]\n","import { isEmpty, isNil } from \"ramda\"\n\nexport const isBlank = (x) => isEmpty(x) || isNil(x)\n","import { isBlank } from \"../utils\"\nimport { isEmpty } from \"ramda\"\n\nconst sameActiveGard = (headset, active_gard) =>\n isEmpty(active_gard) ||\n headset.active_gard == \"both\" ||\n headset.active_gard == active_gard\n\nexport const filterHeadsets = (headsets) => (options) => {\n const wearingStyleHeadsetsFilter =\n ({ wearing_style }) =>\n (headset) =>\n isBlank(wearing_style) ? true : headset.wearing_style == wearing_style\n const activeGardHeadsetsFilter =\n ({ active_gard }) =>\n (headset) =>\n isBlank(active_gard) ? true : sameActiveGard(headset, active_gard)\n const microphoneTypeHeadsetsFilter =\n ({ microphone_type }) =>\n (headset) =>\n isBlank(microphone_type)\n ? true\n : headset.microphone_type == microphone_type\n\n return headsets\n .filter(microphoneTypeHeadsetsFilter(options))\n .filter(wearingStyleHeadsetsFilter(options))\n .filter(activeGardHeadsetsFilter(options))\n}\n\nexport const filterPTTs = (ptts) => (options) => {\n const portTypeFilter =\n ({ port_type }) =>\n (ptt) =>\n isBlank(port_type) ? true : ptt.port_type == port_type\n const plugTypeFilter =\n ({ plug_type }) =>\n (ptt) =>\n isBlank(plug_type) ? true : ptt.plug_type == plug_type\n const microphonePreamplifierFilter =\n ({ microphone_preamplifier }) =>\n (ptt) =>\n isBlank(microphone_preamplifier)\n ? true\n : ptt.microphone_preamplifier == microphone_preamplifier\n\n return ptts\n .filter(portTypeFilter(options))\n .filter(microphonePreamplifierFilter(options))\n .filter(plugTypeFilter(options))\n}\n","import React from \"react\"\n\nimport { ElementType, HeadsetSeriesWithSettingsType } from \"../utils/types\"\nimport HeadsetCard from \"../components/HeadsetCard\"\n\ntype Props = {\n list: ElementType[] | HeadsetSeriesWithSettingsType[]\n onSelect: (id: number) => Promise\n series?: boolean\n}\n\nexport const ColumnList = (props: Props) => {\n const { list, onSelect, series } = props\n\n const filteredElements = list.filter((e) => !e.disabled)\n return (\n
\n {filteredElements.length === 0 ? (\n

No products matched the criteria

\n ) : (\n filteredElements.map((element) => (\n \n ))\n )}\n
\n )\n}\n","import React from \"react\"\nimport Tooltip from \"../../components/Tooltip\"\n\ntype Props = {\n onChange: (e: React.ChangeEvent) => void\n selected: string\n tooltip: string\n wrapperClass: string\n className: string\n}\n\nexport const ActiveGardSelect = ({\n onChange,\n selected,\n tooltip,\n wrapperClass = \"\",\n className,\n}: Props) => {\n return (\n
\n
\n

ActiveGard™

\n \n
\n \n \n \n \n \n
\n )\n}\n\nexport const WearingStyleSelect = ({\n onChange,\n selected,\n tooltip,\n wrapperClass = \"\",\n className,\n}: Props) => {\n return (\n
\n
\n

Headset

\n \n
\n \n \n \n \n \n
\n )\n}\n\nexport const MicrophoneTypeSelect = ({\n onChange,\n selected,\n tooltip,\n wrapperClass = \"\",\n className,\n}: Props) => {\n return (\n
\n
\n

Microphone

\n \n
\n \n \n \n \n \n
\n )\n}\n","export const microphoneTooltip: string =\n \"Your voice switch system determines if you need a dynamic or electret microphone. \" +\n \"Dynamic microphones have lower output than electret, but electret microphones require external power.\"\n\nexport const headsetTooltip: string =\n \"Choose single-sided headset if you only require audio in one ear, or want to follow communication \" +\n \"in the control center/office. Choose dual-sided headset if two channels of audio is required. i.e. \" +\n \"radio audio in one ear and telephone audio in the other ear, or if you want to focus on the headset \" +\n \"communication, and don’t want to be distracted\"\n\nexport const activegardTooltip: string =\n \"ActiveGard ™ protects your hearing against sudden loud sound bursts. It is built into the headset. \" +\n \"Some voice switches have a similar function built into the system. ActiveGard may be required to conform \" +\n \"to regulations set by the FFA and EC directive.\"\n\nexport const portTypeTooltip: string =\n \"Depending on your voice switch and configuration, choose analog or USB interface.\"\n\nexport const microphonePreamplifierTooltip: string =\n \"Our PTTs are available with a microphone pre-amplifier. This is necessary for our SC 200 and SC 600 series headset.\"\n\nexport const plugTypeTooltip: string =\n \"The headset can be hardwired directly into the PTT. Alternatively, it can be supplied with mini-XLR plug, which simply plugs into the appropriate PTT for headset changeability.\"\n\nexport const topCableTooltip: string =\n \"The Top Cable connects the headset to the PTT.\"\n","import {\n REQUEST_HEADSET_SERIES,\n RECEIVE_HEADSET_SERIES,\n SELECT_HEADSET_SERIES,\n REQUEST_HEADSETS,\n RECEIVE_HEADSETS,\n SELECT_HEADSET,\n REQUEST_TOP_CABLES,\n RECEIVE_TOP_CABLES,\n SELECT_TOP_CABLE,\n REQUEST_PTT_SERIES,\n RECEIVE_PTT_SERIES,\n SELECT_PTT_SERIES,\n REQUEST_PTTS,\n RECEIVE_PTTS,\n SELECT_PTT,\n REQUEST_BOTTOM_CABLES,\n RECEIVE_BOTTOM_CABLES,\n SELECT_BOTTOM_CABLE,\n REQUEST_CABLE_WITHOUT_PTTS,\n RECEIVE_CABLE_WITHOUT_PTTS,\n SELECT_CABLE_WITHOUT_PTT,\n REQUEST_PLUGS,\n RECEIVE_PLUGS,\n SELECT_PLUG,\n REQUEST_STEP_SKIPPERS,\n RECEIVE_STEP_SKIPPERS,\n REQUEST_INCOMPATIBILITIES,\n RECEIVE_INCOMPATIBILITIES,\n SET_PLUG_CONFIGURATION,\n RESET_PLUG_CONFIGURATION,\n RESET_CART,\n SET_HEADSET_FILTER,\n SET_PTT_FILTER,\n UPDATE_CUSTOMER_DETAILS,\n RESET_CUSTOMER_DETAILS,\n} from \"./actions\"\n\nconst INITIAL_HEADSET_SERIES_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function headsetSeries(state = INITIAL_HEADSET_SERIES_STATE, action) {\n switch (action.type) {\n case REQUEST_HEADSET_SERIES:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_HEADSET_SERIES:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst INITIAL_CART_STATE = {\n headsetSeries: {},\n headset: {},\n topCable: {},\n pttSeries: {},\n ptt: {},\n bottomCable: {},\n plug: {},\n plugConfiguration: {},\n stepSkippers: {},\n incompatibilities: {},\n}\n\nconst keyHierarchy = [\n \"headsetSeriesId\",\n \"headsetId\",\n \"pttSeriesId\",\n \"pttId\",\n \"topCableId\",\n \"cableWithoutPttId\",\n \"bottomCableId\",\n \"plugId\",\n \"plugConfigurationId\",\n]\n\nexport const updateStateWithNewId = (state, key, id) => {\n const relevantKeyIndex = keyHierarchy.indexOf(key)\n const laterKeys = keyHierarchy.slice(relevantKeyIndex + 1)\n\n const newState = { ...state }\n newState[key] = id\n\n for (const laterKey of laterKeys) {\n newState[laterKey] = undefined\n }\n\n return newState\n}\n\nexport function cartIds(state = INITIAL_CART_STATE, action) {\n switch (action.type) {\n case SELECT_HEADSET_SERIES:\n return updateStateWithNewId(\n state,\n \"headsetSeriesId\",\n action.selectedHeadsetSeriesId,\n )\n\n case SELECT_HEADSET:\n return updateStateWithNewId(state, \"headsetId\", action.selectedHeadsetId)\n\n case SELECT_PTT_SERIES:\n return updateStateWithNewId(\n state,\n \"pttSeriesId\",\n action.selectedPttSeriesId,\n )\n\n case SELECT_PTT:\n return updateStateWithNewId(state, \"pttId\", action.selectedPttId)\n\n case SELECT_TOP_CABLE:\n return updateStateWithNewId(\n state,\n \"topCableId\",\n action.selectedTopCableId,\n )\n\n case SELECT_PLUG:\n return updateStateWithNewId(state, \"plugId\", action.selectedPlugId)\n\n case SELECT_BOTTOM_CABLE:\n return updateStateWithNewId(\n state,\n \"bottomCableId\",\n action.selectedBottomCableId,\n )\n\n case SELECT_CABLE_WITHOUT_PTT:\n return updateStateWithNewId(\n state,\n \"cableWithoutPttId\",\n action.selectedCableWithoutPttId,\n )\n\n case RESET_CART:\n return INITIAL_CART_STATE\n\n default:\n return state\n }\n}\n\nconst INITIAL_HEADSETS_STATE = {\n isFetching: false,\n items: [],\n filtering: {},\n}\n\nexport function headsets(state = INITIAL_HEADSETS_STATE, action) {\n switch (action.type) {\n case REQUEST_HEADSETS:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_HEADSETS:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n case SET_HEADSET_FILTER:\n return {\n ...state,\n filtering: { ...state.filtering, ...action.filtering },\n }\n case RESET_CART:\n return {\n ...state,\n filtering: {},\n }\n default:\n return state\n }\n}\n\nconst INITIAL_TOP_CABLE_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function topCables(state = INITIAL_TOP_CABLE_STATE, action) {\n switch (action.type) {\n case REQUEST_TOP_CABLES:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_TOP_CABLES:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst INITIAL_PTT_SERIES_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function pttSeries(state = INITIAL_PTT_SERIES_STATE, action) {\n switch (action.type) {\n case REQUEST_PTT_SERIES:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_PTT_SERIES:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst INITIAL_PTTS_STATE = {\n isFetching: false,\n items: [],\n filtering: {},\n}\n\nexport function ptts(state = INITIAL_PTTS_STATE, action) {\n switch (action.type) {\n case REQUEST_PTTS:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_PTTS:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n case SET_PTT_FILTER:\n return {\n ...state,\n filtering: { ...state.filtering, ...action.filter },\n }\n case RESET_CART:\n return {\n ...state,\n filtering: {},\n }\n default:\n return state\n }\n}\n\nconst INITIAL_BOTTOM_CABLES_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function bottomCables(state = INITIAL_BOTTOM_CABLES_STATE, action) {\n switch (action.type) {\n case REQUEST_BOTTOM_CABLES:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_BOTTOM_CABLES:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst INITIAL_CABLE_WITHOUT_PTTS_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function cableWithoutPtts(\n state = INITIAL_CABLE_WITHOUT_PTTS_STATE,\n action,\n) {\n switch (action.type) {\n case REQUEST_CABLE_WITHOUT_PTTS:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_CABLE_WITHOUT_PTTS:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst INITIAL_PLUGS_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function plugs(state = INITIAL_PLUGS_STATE, action) {\n switch (action.type) {\n case REQUEST_PLUGS:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_PLUGS:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst INITIAL_STEP_SKIPPERS_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function stepSkippers(state = INITIAL_STEP_SKIPPERS_STATE, action) {\n switch (action.type) {\n case REQUEST_STEP_SKIPPERS:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_STEP_SKIPPERS:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst INITIAL_INCOMPATIBILITIES_STATE = {\n isFetching: false,\n items: [],\n}\n\nexport function incompatibilities(\n state = INITIAL_INCOMPATIBILITIES_STATE,\n action,\n) {\n switch (action.type) {\n case REQUEST_INCOMPATIBILITIES:\n return {\n ...state,\n isFetching: true,\n }\n case RECEIVE_INCOMPATIBILITIES:\n return {\n ...state,\n isFetching: false,\n items: action.items,\n lastUpdated: action.receivedAt,\n }\n default:\n return state\n }\n}\n\nconst initialPlugConfigurationState = {}\nexport function plugConfiguration(\n state = initialPlugConfigurationState,\n action,\n) {\n switch (action.type) {\n case SET_PLUG_CONFIGURATION:\n return {\n ...action.payload,\n }\n case SELECT_HEADSET_SERIES:\n return initialPlugConfigurationState\n case SELECT_HEADSET:\n return initialPlugConfigurationState\n case SELECT_PTT_SERIES:\n return initialPlugConfigurationState\n case SELECT_PTT:\n return initialPlugConfigurationState\n case SELECT_TOP_CABLE:\n return initialPlugConfigurationState\n case SELECT_PLUG:\n return initialPlugConfigurationState\n case SELECT_BOTTOM_CABLE:\n return initialPlugConfigurationState\n case SELECT_CABLE_WITHOUT_PTT:\n case RESET_CART:\n return initialPlugConfigurationState\n case RESET_PLUG_CONFIGURATION:\n return initialPlugConfigurationState\n default:\n return state\n }\n}\n\nconst INITIAL_CUSTOMER_DETAILS_STATE = {\n name: \"\",\n companyName: \"\",\n address: \"\",\n zipCode: \"\",\n city: \"\",\n country: \"\",\n phoneNumber: \"\",\n email: \"\",\n totalAmount: \"\",\n comments: \"\",\n}\n\nexport function customerDetails(\n state = INITIAL_CUSTOMER_DETAILS_STATE,\n action,\n) {\n switch (action.type) {\n case UPDATE_CUSTOMER_DETAILS:\n return {\n ...state,\n ...action.payload,\n }\n case RESET_CUSTOMER_DETAILS:\n return INITIAL_CUSTOMER_DETAILS_STATE\n default:\n return state\n }\n}\n","import React, { Component } from \"react\"\nimport {\n fetchHeadsetSeries,\n selectHeadsetSeries,\n fetchHeadsets,\n setHeadsetFilter,\n} from \"../actions\"\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from \"redux\"\nimport { push } from \"connected-react-router\"\nimport { nextStepUrl } from \"../helpers/StepHelper\"\nimport {\n getIncompatibleHeadsetSeries,\n filterCompatibleHeadsets,\n} from \"../helpers/IncompatibilityHelper\"\nimport { map, contains, isEmpty, prop } from \"ramda\"\nimport { filterHeadsets } from \"../helpers/FilterHelper\"\n\nimport StepHeader from \"../components/StepHeader\"\nimport { ColumnList } from \"../lists/ColumnList\"\nimport {\n ActiveGardSelect,\n WearingStyleSelect,\n MicrophoneTypeSelect,\n} from \"./headsetSeries/Components\"\nimport Header from \"../components/Header\"\nimport ProgressBar from \"../components/ProgressBar\"\nimport {\n activegardTooltip,\n headsetTooltip,\n microphoneTooltip,\n} from \"../utils/const\"\nimport {\n ElementType,\n HeadsetSeriesType,\n HeadsetSeriesWithSettingsType,\n StepType,\n} from \"../utils/types\"\nimport { updateStateWithNewId } from \"../reducers\"\n\ntype HeadsetSeriesPageProps = {\n fetchHeadsetSeries: () => void\n fetchHeadsets: () => void\n location: {\n search: string\n }\n headsetFiltering: () => void\n setHeadsetFilter: (filtering: any) => void\n selectHeadsetSeries: (id: number) => Promise\n push: (address: string) => void\n cartIds: any\n stepSkippers: StepType[]\n headsets: ElementType[]\n}\n\ntype HeadsetSeriesPageState = {\n headsetSeriess: HeadsetSeriesType[]\n isTestMode: boolean\n}\n\nconst disableItem = (item: ElementType) => ({ ...item, disabled: true })\nconst enableItem = (item: ElementType) => ({ ...item, disabled: false })\n\nconst toggleItemEnabled = (enabledIds: number) => (item: ElementType) =>\n contains(item.id, enabledIds) ? enableItem(item) : disableItem(item)\n\nclass HeadsetSeriesPage extends Component<\n HeadsetSeriesPageProps,\n HeadsetSeriesPageState\n> {\n constructor(props: HeadsetSeriesPageProps) {\n super(props)\n\n this.state = {\n headsetSeriess: [],\n isTestMode: props.location.search.includes(\"test=true\"),\n }\n }\n\n componentDidMount() {\n this.props.fetchHeadsetSeries()\n this.props.fetchHeadsets()\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: any) {\n const { headsetSeriess } = nextProps\n if (!isEmpty(headsetSeriess)) {\n const incompatibleHeadsetSeriess = map(\n disableItem,\n getIncompatibleHeadsetSeries(nextProps),\n )\n\n this.setState({\n headsetSeriess: this.compatibleHeadsetSeries(\n headsetSeriess,\n incompatibleHeadsetSeriess,\n ),\n })\n }\n }\n\n onSeriesSelect = async (id: number) => {\n const { selectHeadsetSeries, push, cartIds, stepSkippers, location } =\n this.props\n\n await selectHeadsetSeries(id)\n push(\n nextStepUrl(\n \"headsetSeries\",\n updateStateWithNewId(cartIds, \"headsetSeriesId\", id),\n stepSkippers,\n this.state.isTestMode,\n ) + location.search,\n )\n }\n\n compatibleHeadsetSeries = (\n headsetSeriess: HeadsetSeriesType[],\n incompatibleHeadsetSeriess: HeadsetSeriesType[],\n ): HeadsetSeriesType[] => {\n return headsetSeriess.filter(\n (headsetSeries) =>\n !incompatibleHeadsetSeriess.some(\n (incompatibleHeadsetSeries) =>\n incompatibleHeadsetSeries.id === headsetSeries.id,\n ),\n )\n }\n\n sameActiveGard = (headset: ElementType, active_gard: string | null) =>\n isEmpty(active_gard) ||\n headset.active_gard == \"both\" ||\n headset.active_gard == active_gard\n\n filterHeadsetSeriess = (options: any) => {\n const compatibleHeadsets = this.state.isTestMode\n ? this.props.headsets\n : filterCompatibleHeadsets(this.props)\n const filteredHeadsets = filterHeadsets(compatibleHeadsets)(options)\n\n const seriesIds = filteredHeadsets.map(\n (headset: ElementType) => headset.headset_series_id,\n )\n\n return map(toggleItemEnabled(seriesIds), this.state.headsetSeriess)\n }\n\n onActiveGardChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const active_gard = isEmpty(value) ? \"\" : value\n\n this.props.setHeadsetFilter({ active_gard })\n }\n\n onWearingStyleChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const wearing_style = isEmpty(value) ? \"\" : value\n\n this.props.setHeadsetFilter({ wearing_style })\n }\n\n onMicrophoneTypeChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const microphone_type = isEmpty(value) ? \"\" : value\n\n this.props.setHeadsetFilter({ microphone_type })\n }\n\n transformActiveGuardSeries = (active_gard: string) => {\n if (active_gard === \"only_with\") return \"With ActiveGard™\"\n if (active_gard === \"only_without\") return \"Without ActiveGard™\"\n return \"Both\"\n }\n\n render() {\n const { headsetFiltering, headsets } = this.props\n const headsetSeriess = this.filterHeadsetSeriess(headsetFiltering)\n\n const seriesWithSettings = headsetSeriess.map(\n (serie: HeadsetSeriesWithSettingsType) => {\n serie.microphone_type = []\n serie.active_gard = []\n serie.wearing_style = []\n\n const filteredHeadsets = headsets.filter((headset: ElementType) => {\n return headset.headset_series_id == serie.id\n })\n\n for (let filteredHeadset of filteredHeadsets) {\n if (\n filteredHeadset.microphone_type != null &&\n !serie.microphone_type.includes(filteredHeadset.microphone_type)\n ) {\n serie.microphone_type.push(filteredHeadset.microphone_type)\n }\n if (\n filteredHeadset.active_gard != null &&\n !serie.active_gard.includes(\n this.transformActiveGuardSeries(filteredHeadset.active_gard),\n )\n ) {\n serie.active_gard.push(\n this.transformActiveGuardSeries(filteredHeadset.active_gard),\n )\n }\n if (\n filteredHeadset.wearing_style != null &&\n !serie.wearing_style.includes(filteredHeadset.wearing_style)\n ) {\n serie.wearing_style.push(filteredHeadset.wearing_style)\n }\n }\n\n return serie\n },\n )\n\n return (\n <>\n
\n
\n \n \n
\n
\n \n \n \n
\n \n
\n
\n \n )\n }\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n headsetSeriess: state.headsetSeries.items,\n cartIds: state.cartIds,\n stepSkippers: state.stepSkippers.items,\n incompatibilities: state.incompatibilities.items,\n headsets: state.headsets.items,\n headsetFiltering: state.headsets.filtering,\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) =>\n bindActionCreators(\n {\n fetchHeadsetSeries,\n selectHeadsetSeries,\n push,\n fetchHeadsets,\n setHeadsetFilter,\n },\n dispatch,\n )\nexport default connect(mapStateToProps, mapDispatchToProps)(HeadsetSeriesPage)\n","import { createSelector } from \"reselect\"\nimport { filterHeadsets, filterPTTs } from \"./helpers/FilterHelper\"\n\nconst getHeadsetsItems = (state) => state.headsets.items\nconst getHeadsetsFiltering = (state) => state.headsets.filtering\n\nexport const selectFilteredHeadsets = createSelector(\n [getHeadsetsItems, getHeadsetsFiltering],\n (headsets, filtering) => {\n const filteredHeadsets = filterHeadsets(headsets)(filtering)\n\n const updatedHeadsets = headsets.map((headset) => {\n const doesMatchFilter = filteredHeadsets.find(\n (filteredHeadset) => filteredHeadset.id === headset.id,\n )\n if (doesMatchFilter) {\n return { ...headset, disabled: false }\n }\n\n return { ...headset, disabled: true }\n })\n\n return updatedHeadsets\n },\n)\n\nconst getPttItems = (state) => state.ptts.items\nconst getPttFiltering = (state) => state.ptts.filtering\n\nexport const selectFilteredPtts = createSelector(\n [getPttItems, getPttFiltering],\n (ptt, filtering) => {\n const filteredPtts = filterPTTs(ptt)(filtering)\n\n const upldatedPtts = ptt.map((ptt) => {\n const doesMatchFilter = filteredPtts.find(\n (filteredPtt) => filteredPtt.id === ptt.id,\n )\n if (doesMatchFilter) {\n return { ...ptt, disabled: false }\n }\n\n return { ...ptt, disabled: true }\n })\n return upldatedPtts\n },\n)\n","import React, { useEffect } from \"react\"\nimport { nextStepUrl, previousStepUrl } from \"../helpers/StepHelper\"\nimport ProgressFooter from \"../components/ProgressFooter\"\nimport { getFooterArray } from \"../utils/getFooterArray\"\nimport { getCart } from \"../cartSelector\"\nimport Header from \"../components/Header\"\nimport ProgressBar from \"../components/ProgressBar\"\nimport { bindActionCreators } from \"redux\"\nimport { fetchHeadsets, selectHeadset, setHeadsetFilter } from \"../actions\"\nimport { connect } from \"react-redux\"\nimport { push } from \"connected-react-router\"\nimport { ColumnList } from \"../lists/ColumnList\"\nimport {\n activegardTooltip,\n headsetTooltip,\n microphoneTooltip,\n} from \"../utils/const\"\nimport { prop, isEmpty } from \"ramda\"\nimport {\n ActiveGardSelect,\n MicrophoneTypeSelect,\n WearingStyleSelect,\n} from \"./headsetSeries/Components\"\nimport { selectFilteredHeadsets } from \"../selectors\"\nimport { updateStateWithNewId } from \"../reducers\"\n\nconst HeadsetsPage = ({\n fetchHeadsets,\n selectHeadset,\n push,\n cartIds,\n stepSkippers,\n filteredHeadsets,\n location,\n cart,\n headsetFiltering,\n setHeadsetFilter,\n}: any) => {\n const isTestMode = location.search.includes(\"test=true\")\n const currentPage = \"headsets\"\n\n useEffect(() => {\n const headsetSeriesId = cartIds.headsetSeriesId\n fetchHeadsets(headsetSeriesId)\n }, [])\n\n // this function will navigate us to the next page without selecting a headset\n const skipCurrentStep = () => {\n push(\n nextStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n }\n\n // We pass here the arguments because it has not yet updated in the global state.\n // TODO: Refactor this to use the global state instead of passing it as an argument.\n const onNextStep = (headsetId: number) => {\n\n push(\n nextStepUrl(\n currentPage,\n updateStateWithNewId(cartIds, 'headsetId', headsetId),\n stepSkippers,\n isTestMode,\n ) + location.search,\n )\n }\n\n const onPreviousStep = () => {\n push(\n previousStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n getFooterArray(cart).slice(0, -1)\n }\n\n const onHeadsetSelect = async (headsetId: number) => {\n await selectHeadset(headsetId)\n\n onNextStep(headsetId)\n }\n\n const onMicrophoneTypeChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const microphone_type = isEmpty(value) ? \"\" : value\n\n setHeadsetFilter({ microphone_type })\n }\n\n const onActiveGardChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const active_gard = isEmpty(value) ? \"\" : value\n\n setHeadsetFilter({ active_gard })\n }\n\n const onWearingStyleChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const wearing_style = isEmpty(value) ? \"\" : value\n\n setHeadsetFilter({ wearing_style })\n }\n\n return (\n <>\n
\n
\n \n
\n
\n \n \n \n
\n \n
\n
\n \n \n )\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n headsets: state.headsets.items,\n cartIds: state.cartIds,\n cart: getCart(state),\n filteredHeadsets: selectFilteredHeadsets(state),\n stepSkippers: state.stepSkippers.items,\n incompatibilities: state.incompatibilities.items,\n headsetFiltering: state.headsets.filtering,\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) =>\n bindActionCreators(\n { fetchHeadsets, selectHeadset, push, setHeadsetFilter },\n dispatch,\n )\n\nexport default connect(mapStateToProps, mapDispatchToProps)(HeadsetsPage)\n","import React from \"react\"\n\nimport { PttSeriesWithSettingsType, PttType } from \"../utils/types\"\nimport PttCard from \"../components/PttCard\"\n\ntype Props = {\n list: PttType[] | PttSeriesWithSettingsType[]\n onSelect: (id: number) => void\n series?: boolean\n}\n\nexport const PttList = (props: Props) => {\n const { list, onSelect, series } = props\n const filteredElements = list.filter((e) => !e.disabled)\n\n return (\n
\n {filteredElements.length === 0 ? (\n

No products matched the criteria

\n ) : (\n filteredElements.map((element) => (\n \n ))\n )}\n
\n )\n}\n","import React from \"react\"\nimport Tooltip from \"../../components/Tooltip\"\n\nexport const PortTypeSelect = ({\n onChange,\n selected,\n tooltip,\n wrapperClass = \"\",\n className,\n}) => (\n
\n
\n

Interface

\n \n
\n \n \n \n \n \n
\n)\n\nexport const MicrophonePreamplifierSelect = ({\n onChange,\n selected,\n tooltip,\n wrapperClass = \"\",\n className,\n}) => (\n
\n
\n

Preamplifier

\n \n
\n \n \n \n \n \n
\n)\n\nexport const PlugTypeSelect = ({\n onChange,\n selected,\n tooltip,\n wrapperClass = \"\",\n className,\n}) => (\n
\n
\n

Connector type

\n \n
\n \n \n \n \n \n
\n)\n","import React, { useEffect, useState } from \"react\"\nimport { bindActionCreators } from \"redux\"\nimport { connect } from \"react-redux\"\nimport { push } from \"connected-react-router\"\nimport Header from \"../components/Header\"\nimport ProgressBar from \"../components/ProgressBar\"\nimport ProgressFooter from \"../components/ProgressFooter\"\nimport { PttList } from \"../lists/PttList\"\nimport { getCart } from \"../cartSelector\"\nimport { getFooterArray } from \"../utils/getFooterArray\"\nimport {\n fetchPttSeries,\n fetchPtts,\n selectPttSeries,\n setPTTFilter,\n} from \"../actions\"\nimport { nextStepUrl, previousStepUrl } from \"../helpers/StepHelper\"\nimport {\n getIncompatiblePttSeries,\n filterIncompatiblePtts,\n} from \"../helpers/IncompatibilityHelper\"\nimport { filterPTTs } from \"../helpers/FilterHelper\"\nimport {\n PlugTypeSelect,\n MicrophonePreamplifierSelect,\n PortTypeSelect,\n} from \"./pttSeries/Components\"\nimport { map, isEmpty, prop, pluck } from \"ramda\"\nimport {\n portTypeTooltip,\n microphonePreamplifierTooltip,\n plugTypeTooltip,\n} from \"../utils/const\"\nimport { updateStateWithNewId } from \"../reducers\"\n\n\nconst PttSeriesPage = ({\n fetchPttSeries,\n fetchPtts,\n selectPttSeries,\n stepSkippers,\n push,\n setPTTFilter,\n cartIds,\n pttSeries,\n ptts,\n cart,\n incompatibilities,\n pttFiltering,\n}: any) => {\n const [statePttSeries, setStatePttSeries] = useState([])\n const isTestMode = location.search.includes(\"test=true\")\n const currentPage = \"pttSeries\"\n\n useEffect(() => {\n fetchPttSeries()\n fetchPtts()\n }, [])\n\n useEffect(() => {\n if (!isEmpty(pttSeries)) {\n const incompatiblePttSeries = isTestMode\n ? []\n : map(\n disableItem,\n getIncompatiblePttSeries({ pttSeries, incompatibilities, cartIds }),\n )\n\n const compatibleSeries = compatiblePttSeries(\n pttSeries,\n incompatiblePttSeries,\n )\n\n setStatePttSeries(\n map(toggleItemEnabled(pluck(\"id\", compatibleSeries)), pttSeries),\n )\n }\n }, [pttSeries])\n\n const compatiblePttSeries = (pttSeries: any, incompatiblePttSeries: any) =>\n pttSeries.filter(\n (pttSeries: any) =>\n !incompatiblePttSeries.some(\n (incompatiblePttSeries: any) =>\n incompatiblePttSeries.id == pttSeries.id,\n ),\n )\n\n const disableItem = (item: any) => ({ ...item, disabled: true })\n const enableItem = (item: any) => ({ ...item, disabled: false })\n\n function toggleItemEnabled(enabledIds: any) {\n return function (item: any) {\n if (enabledIds.includes(item.id)) {\n return enableItem(item)\n } else {\n return disableItem(item)\n }\n }\n }\n\n const filterCompatiblePTTs = (ptts: any) =>\n ptts.filter(\n (ptt: any) =>\n !filterIncompatiblePtts({ ptts, incompatibilities, cartIds }).some(\n (incompatiblePtt: any) => incompatiblePtt.id == ptt.id,\n ),\n )\n\n const filterPttSeries = (options: any) => {\n const compatiblePTTs = isTestMode ? ptts : filterCompatiblePTTs(ptts)\n\n const filteredSeriesIds = filterPTTs(compatiblePTTs)(options).map(\n (ptt: any) => ptt.ptt_series_id,\n )\n\n const noPTT = statePttSeries.find((ptt: any) => ptt.name == \"No PTT\")\n\n if (noPTT && !noPTT.disabled) {\n filteredSeriesIds.push(noPTT.id)\n }\n\n const result = statePttSeries.map((item: any) => {\n if (filteredSeriesIds.includes(item.id)) {\n return item\n } else {\n return { ...item, disabled: true }\n }\n })\n\n return result\n }\n\n const onPttSeriesSelect = (pttSeriesId: number) => {\n selectPttSeries(pttSeriesId)\n\n onNextStep(pttSeriesId)\n }\n\n const onPreviousStep = () => {\n push(\n previousStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n getFooterArray(cart).slice(0, -1)\n }\n\n // this function will navigate us to the next page without selecting a headset\n const skipCurrentStep = () => {\n push(\n nextStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n }\n\n // We pass here the pttSeriesId because it has not yet updated in the global state.\n // TODO: Refactor this to use the global state instead of passing it as an argument.\n const onNextStep = (pttSeriesId: number) => {\n push(\n nextStepUrl(\n currentPage,\n updateStateWithNewId(cartIds, currentPage, pttSeriesId),\n stepSkippers,\n isTestMode,\n ) + location.search,\n )\n }\n\n const onPortTypeChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const port_type = isEmpty(value) ? \"\" : value\n\n setPTTFilter({ port_type })\n }\n\n const onMicrophonePreamplifierChange = (\n e: React.ChangeEvent,\n ) => {\n const { value } = e.target\n const microphone_preamplifier = isEmpty(value) ? \"\" : value == \"true\"\n\n setPTTFilter({ microphone_preamplifier })\n }\n\n const onPlugTypeChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const plug_type = isEmpty(value) ? \"\" : value\n\n setPTTFilter({ plug_type })\n }\n\n const filteredPttsSeries = filterPttSeries(pttFiltering)\n\n const pttSeriesWithSettings = filteredPttsSeries.map((serie: any) => {\n serie.plug_type = []\n serie.microphone_preamplifier = []\n serie.port_type = []\n\n const compatiblePTTs = isTestMode ? ptts : filterCompatiblePTTs(ptts)\n\n const filteredPtts = compatiblePTTs.filter(\n (ptt: any) => ptt.ptt_series_id == serie.id,\n )\n\n for (let ptt of filteredPtts) {\n if (ptt.plug_type != null && !serie.plug_type.includes(ptt.plug_type)) {\n serie.plug_type.push(ptt.plug_type)\n }\n if (\n ptt.microphone_preamplifier != null &&\n !serie.microphone_preamplifier.includes(ptt.microphone_preamplifier)\n ) {\n serie.microphone_preamplifier.push(ptt.microphone_preamplifier)\n }\n\n if (ptt.port_type != null && !serie.port_type.includes(ptt.port_type)) {\n serie.port_type.push(ptt.port_type)\n }\n }\n return serie\n })\n\n return (\n <>\n
\n
\n \n\n
\n
\n \n \n \n
\n \n
\n
\n \n \n )\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n pttSeries: state.pttSeries.items,\n ptts: state.ptts.items,\n cart: getCart(state),\n cartIds: state.cartIds,\n stepSkippers: state.stepSkippers.items,\n incompatibilities: state.incompatibilities.items,\n pttFiltering: state.ptts.filtering,\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) =>\n bindActionCreators(\n { fetchPttSeries, fetchPtts, selectPttSeries, push, setPTTFilter },\n dispatch,\n )\nexport default connect(mapStateToProps, mapDispatchToProps)(PttSeriesPage)\n","import React from \"react\"\n\nimport { PttSeriesWithSettingsType, PttType } from \"../utils/types\"\nimport PttCardWithDropdown from \"../components/PttCardWithDropdown\"\n\ntype Props = {\n list: PttType[] | PttSeriesWithSettingsType[]\n onSelect: (pttId: number, topCableId: number) => Promise\n series?: boolean\n}\n\nexport const PttListWithDropdown = (props: Props) => {\n const { list, onSelect, series } = props\n\n const filteredElements = list.filter((e) => !e.disabled)\n\n return (\n
\n {filteredElements.length === 0 ? (\n

No products matched the criteria

\n ) : (\n filteredElements.map((element) => (\n \n ))\n )}\n
\n )\n}\n","import React, { useEffect, useState } from \"react\"\nimport ProgressBar from \"../components/ProgressBar\"\nimport {\n fetchPtts,\n selectPtt,\n setPTTFilter,\n fetchTopCables,\n selectTopCable,\n} from \"../actions\"\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from \"redux\"\nimport { push } from \"connected-react-router\"\nimport { prop, isEmpty, map, pluck } from \"ramda\"\nimport { nextStepUrl, previousStepUrl } from \"../helpers/StepHelper\"\nimport { filterIncompatiblePtts } from \"../helpers/IncompatibilityHelper\"\nimport { filterPTTs } from \"../helpers/FilterHelper\"\nimport ProgressFooter from \"../components/ProgressFooter\"\nimport Header from \"../components/Header\"\nimport {\n PlugTypeSelect,\n MicrophonePreamplifierSelect,\n PortTypeSelect,\n} from \"./pttSeries/Components\"\nimport { PttListWithDropdown } from \"../lists/PttListWithDropdown\"\nimport {\n plugTypeTooltip,\n microphonePreamplifierTooltip,\n portTypeTooltip,\n} from \"../utils/const\"\nimport { getFooterArray } from \"../utils/getFooterArray\"\nimport { getCart } from \"../cartSelector\"\nimport { updateStateWithNewId } from \"../reducers\"\n\nconst PttsPage = ({\n fetchPtts,\n fetchTopCables,\n topCables,\n selectPtt,\n selectTopCable,\n ptts,\n push,\n cartIds,\n stepSkippers,\n incompatibilities,\n location,\n cart,\n pttFiltering,\n setPTTFilter,\n}: any) => {\n const [statePtts, setStatePtts] = useState([])\n const isTestMode = location.search.includes(\"test=true\")\n const currentPage = \"ptts\"\n\n useEffect(() => {\n const pttSeriesId = cartIds.pttSeriesId\n fetchPtts(pttSeriesId)\n fetchTopCables()\n }, [])\n\n useEffect(() => {\n if (!isEmpty(ptts)) {\n const compatiblePttDevices = compatiblePtts(ptts, [])\n\n setStatePtts(\n map(toggleItemEnabled(pluck(\"id\", compatiblePttDevices)), ptts),\n )\n }\n }, [ptts])\n\n const compatiblePtts = (ptts: any, incompatiblePtts: any) =>\n ptts.filter(\n (ptts: any) =>\n !incompatiblePtts.some(\n (incompatiblePtts: any) => incompatiblePtts.id == ptts.id,\n ),\n )\n\n const disableItem = (item: any) => ({ ...item, disabled: true })\n const enableItem = (item: any) => ({ ...item, disabled: false })\n\n function toggleItemEnabled(enabledIds: any) {\n return function (item: any) {\n if (enabledIds.includes(item.id)) {\n return enableItem(item)\n } else {\n return disableItem(item)\n }\n }\n }\n\n // this function will navigate us to the next page without selecting a headset\n const skipCurrentStep = () => {\n push(\n nextStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n }\n\n // We pass here the arguments because it has not yet updated in the global state.\n // TODO: Refactor this to use the global state instead of passing it as an argument.\n const onNextStep = (pttId: number, topCableId: number) => {\n updateStateWithNewId(cartIds, \"pttId\", pttId)\n updateStateWithNewId(cartIds, \"topCableId\", topCableId)\n \n push(\n nextStepUrl(\n currentPage,\n { ...cartIds, pttId, topCableId },\n stepSkippers,\n isTestMode,\n ) + location.search,\n )\n }\n\n const onPreviousStep = () => {\n push(\n previousStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n getFooterArray(cart).slice(0, -1)\n }\n\n const onPttsSelect = async (pttId: number, topCableId: number) => {\n await selectPtt(pttId)\n await selectTopCable(topCableId)\n onNextStep(pttId, topCableId)\n }\n\n const onPortTypeChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n\n const port_type = isEmpty(value) ? \"\" : value\n setPTTFilter({ port_type })\n }\n\n const onMicrophonePreamplifierChange = (\n e: React.ChangeEvent,\n ) => {\n const { value } = e.target\n const microphone_preamplifier = isEmpty(value) ? \"\" : value == \"true\"\n\n setPTTFilter({ microphone_preamplifier })\n }\n\n const onPlugTypeChange = (e: React.ChangeEvent) => {\n const { value } = e.target\n const plug_type = isEmpty(value) ? \"\" : value\n\n setPTTFilter({ plug_type })\n }\n\n const filterCompatiblePTTs = (ptts: any) =>\n ptts.filter(\n (ptt: any) =>\n !filterIncompatiblePtts({ ptts, incompatibilities, cartIds }).some(\n (incompatiblePtt: any) => incompatiblePtt.id == ptt.id,\n ),\n )\n\n const filterPtts = (options: any) => {\n const compatiblePTTs = isTestMode ? ptts : filterCompatiblePTTs(ptts)\n\n const filteredPttsIds = filterPTTs(compatiblePTTs)(options).map(\n (ptt: any) => ptt.id,\n )\n\n const noPTT = statePtts.find((ptt: any) => ptt.name == \"No PTT\")\n if (noPTT && !noPTT.disabled) {\n filteredPttsIds.push(noPTT.id)\n }\n\n const result = statePtts.map((item: any) =>\n toggleItemEnabled(filteredPttsIds)(item),\n )\n\n return result\n }\n\n return (\n <>\n
\n
\n \n
\n
\n \n \n \n
\n \n
\n
\n \n \n )\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n ptts: state.ptts.items,\n cartIds: state.cartIds,\n cart: getCart(state),\n stepSkippers: state.stepSkippers.items,\n incompatibilities: state.incompatibilities.items,\n pttFiltering: state.ptts.filtering,\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) =>\n bindActionCreators(\n {\n fetchPtts,\n selectPtt,\n push,\n fetchTopCables,\n selectTopCable,\n setPTTFilter,\n },\n dispatch,\n )\nexport default connect(mapStateToProps, mapDispatchToProps)(PttsPage)\n","import { useMemo } from \"react\"\n\nconst useFilteredCables = (\n cables: any,\n filterFunction: any,\n incompatibilities: any,\n cartIds: any,\n) => {\n const incompatibleCables = useMemo(\n () => filterFunction(cables, incompatibilities, cartIds),\n [cables, incompatibilities, cartIds],\n )\n\n const compatibleCables = useMemo(\n () =>\n cables.filter(\n (cable: { id: number }) =>\n !incompatibleCables.some(\n (incompatCable: any) => incompatCable.id === cable.id,\n ),\n ),\n [cables, incompatibleCables],\n )\n\n return { compatibleCables }\n}\n\nexport default useFilteredCables\n","import React, { useEffect, useState } from \"react\"\nimport Header from \"../components/Header\"\nimport ProgressBar from \"../components/ProgressBar\"\nimport ProgressFooter from \"../components/ProgressFooter\"\nimport useFilteredCables from \"../hooks/useFilteredCables\"\nimport { nextStepUrl, previousStepUrl } from \"../helpers/StepHelper\"\nimport { filterIncompatibleBottomCables } from \"../helpers/IncompatibilityHelper\"\nimport { push } from \"connected-react-router\"\nimport {\n fetchBottomCables,\n fetchCableWithoutPtts,\n fetchPlugs,\n selectBottomCable,\n selectCableWithoutPtt,\n selectPlug,\n} from \"../actions\"\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from \"redux\"\nimport { getCart } from \"../cartSelector\"\nimport CableCardWithDropdown from \"../components/CableCardWithDropdown\"\nimport { updateStateWithNewId } from \"../reducers\"\n\ntype Cable = {\n id: number\n name: string\n image_url: string\n description: string\n}\n\nconst BottomCablesPage = ({\n bottomCables,\n cartIds,\n stepSkippers,\n incompatibilities,\n fetchBottomCables,\n fetchPlugs,\n selectBottomCable,\n selectPlug,\n push,\n cart,\n}: any) => {\n const isTestMode = location.search.includes(\"test=true\")\n const currentPage = \"bottomCables\"\n\n const [activeCables, setActiveCables] = useState(bottomCables)\n const { compatibleCables: compatibleBottomCables } = useFilteredCables(\n bottomCables,\n filterIncompatibleBottomCables,\n incompatibilities,\n cartIds,\n )\n\n useEffect(() => {\n if (activeCables.length === 0 && bottomCables.length > 0)\n setActiveCables(bottomCables)\n }, [bottomCables])\n\n useEffect(() => {\n fetchBottomCables()\n fetchPlugs()\n }, [])\n\n useEffect(() => {\n setActiveCables(compatibleBottomCables)\n }, [activeCables])\n\n const onPreviousStep = () => {\n push(\n previousStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n }\n\n // this function will navigate us to the next page without selecting a headset\n const skipCurrentStep = () => {\n push(\n nextStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n }\n\n // We pass here the arguments because it has not yet updated in the global state.\n // TODO: Refactor this to use the global state instead of passing it as an argument.\n const onNextStep = (bottomCableId: number, plugId: number) => {\n updateStateWithNewId(cartIds, \"bottomCableId\", bottomCableId)\n updateStateWithNewId(cartIds, \"plugId\", plugId)\n \n push(\n nextStepUrl(\n currentPage,\n { ...cartIds, bottomCableId, plugId },\n stepSkippers,\n isTestMode,\n ) + location.search,\n )\n }\n\n const onBottomCableSelect = async (bottomCableId: number, plugId: number) => {\n await selectBottomCable(bottomCableId)\n await selectPlug(plugId)\n onNextStep(bottomCableId, plugId)\n }\n\n return (\n
\n
\n
\n \n
\n {activeCables.length > 0 ? (\n <>\n {activeCables.map((cable: Cable) => (\n \n ))}\n \n ) : (\n
No cables found
\n )}\n
\n
\n\n \n
\n )\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n bottomCables: state.bottomCables.items,\n cableWithoutPtts: state.cableWithoutPtts.items,\n plugs: state.plugs.items,\n cartIds: state.cartIds,\n stepSkippers: state.stepSkippers.items,\n incompatibilities: state.incompatibilities.items,\n cart: getCart(state),\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) =>\n bindActionCreators(\n {\n fetchBottomCables,\n fetchPlugs,\n fetchCableWithoutPtts,\n selectBottomCable,\n selectCableWithoutPtt,\n selectPlug,\n push,\n },\n dispatch,\n )\nexport default connect(mapStateToProps, mapDispatchToProps)(BottomCablesPage)\n","const single_sided = [\n \"Spkr. +\",\n \"Spkr -\",\n \"Mic +\",\n \"Mic - \",\n \"Screen\",\n \"PTT\",\n \"PTT return\",\n \"Resistor Pin 1\",\n \"Resistor Pin 2\",\n \"Strap Pin 1\",\n \"Strap Pin 2\",\n]\n\nconst dual_sided = [\n \"Spkr. L +\",\n \"Spkr. L -\",\n \"Spkr. R +\",\n \"Spkr. R -\",\n \"Mic +\",\n \"Mic - \",\n \"Screen\",\n \"PTT\",\n \"PTT return\",\n \"Resistor Pin 1\",\n \"Resistor Pin 2\",\n \"Strap Pin 1\",\n \"Strap Pin 2\",\n]\n\nconst getPlugConfiguration = (style) => {\n switch (style) {\n case \"single_sided\":\n return single_sided\n break\n case \"dual_sided\":\n return dual_sided\n break\n default:\n return []\n break\n }\n}\n\nexport default getPlugConfiguration\n","import React, { Component } from \"react\"\nimport { push } from \"connected-react-router\"\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from \"redux\"\nimport { range, map, inc } from \"ramda\"\n\nimport ProgressBar from \"../components/ProgressBar\"\nimport ProgressFooter from \"../components/ProgressFooter\"\nimport Header from \"../components/Header\"\nimport TextArea from \"../components/TextArea\"\nimport InputField from \"../components/InputField\"\nimport Dropdown from \"../components/Dropdown\"\nimport { PrimaryButton } from \"../components/Buttons\"\nimport { getCart } from \"../cartSelector\"\nimport { setPlugConfiguration } from \"../actions\"\nimport getPlugConfiguration from \"../utils/plug_configuration\"\nimport plugImage from \"images/ATC-Generic-Connector.png\"\nimport PropTypes from \"prop-types\"\nimport { nextStepUrl, previousStepUrl } from \"../helpers/StepHelper\"\nimport { resetCart } from \"../actions\"\n\nconst buildPinObject = (i) => ({ name: `Pin ${i}`, value: `Pin ${i}` })\nconst number_of_pins = ({ number_of_pins }) => range(1, inc(number_of_pins))\n\nconst getPlugConfigurationValues = (plugConfiguration) => (label) => ({\n label: label,\n value: plugConfiguration[label],\n})\n\nclass PlugConfigurationPage extends Component {\n constructor(props) {\n super(props)\n this.onPreviousStep = this.onPreviousStep.bind(this)\n this.onContinue = this.onContinue.bind(this)\n this.onRestart = this.onRestart.bind(this)\n const { plug } = this.props\n const pinOptions = map(buildPinObject, number_of_pins(plug))\n\n this.state = {\n pinOptions,\n configuration: props.plugConfiguration,\n }\n }\n\n onPreviousStep() {\n this.props.push(\n previousStepUrl(\n \"plugConfiguration\",\n this.props.cartIds,\n this.props.stepSkippers,\n this.state.isTestMode,\n ) + this.props.location.search,\n )\n }\n\n onContinue() {\n this.props.setPlugConfiguration(this.state.configuration)\n this.props.push(\n nextStepUrl(\n \"plugConfiguration\",\n this.props.cartIds,\n this.props.stepSkippers,\n this.state.isTestMode,\n ) + this.props.location.search,\n )\n }\n\n onRestart() {\n this.props.resetCart()\n this.props.push(\"headsetSeries\" + this.props.location.search)\n }\n\n updateConfiguration(label, value) {\n const configuration = { ...this.state.configuration, [label]: value }\n this.setState({ configuration })\n }\n\n onPinSelected = ({ label, value }) => {\n let pinOptions = this.state.pinOptions\n this.updateConfiguration(label, value)\n this.setState({ pinOptions })\n }\n\n onInputValueChange = (key) => (e) => {\n this.updateConfiguration(key, e.target.value)\n }\n\n render() {\n const { wearing_style } = this.props.headset\n const defaultPlugConfiguration = map(\n getPlugConfigurationValues(this.props.plugConfiguration),\n getPlugConfiguration(wearing_style),\n )\n\n return (\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n {this.state.pinOptions.map((option, index) => (\n \n ))}\n
\n\n
\n \n
\n\n \n \n
\n
\n
\n \n
\n )\n }\n}\n\nPlugConfigurationPage.propTypes = {\n setPlugConfiguration: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n location: PropTypes.object,\n cartIds: PropTypes.object,\n resetCart: PropTypes.func.isRequired,\n stepSkippers: PropTypes.array,\n}\n\nconst mapStateToProps = (state) => {\n return {\n headset: getCart(state).headset,\n plug: getCart(state).plug,\n plugConfiguration: state.plugConfiguration,\n cart: getCart(state),\n cartIds: state.cartIds,\n stepSkippers: state.stepSkippers.items,\n }\n}\nconst mapDispatchToProps = (dispatch) =>\n bindActionCreators({ push, resetCart, setPlugConfiguration }, dispatch)\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(PlugConfigurationPage)\n","import React, { Component } from \"react\"\nimport PropTypes from \"prop-types\"\nimport ProgressBar from \"../components/ProgressBar\"\nimport Header from \"../components/Header\"\nimport OrderDetails from \"../components/OrderDetails\"\nimport OrderDetailsVisual from \"../components/OrderDetailsVisual\"\nimport { PrimaryButton, SecondaryButton } from \"../components/Buttons\"\nimport { push } from \"connected-react-router\"\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from \"redux\"\nimport { getCart } from \"../cartSelector\"\nimport { previousStepUrl } from \"../helpers/StepHelper\"\nimport CustomerDetailsModal from \"../components/CustomerDetailsModal\"\nimport { map, values, isNil, reject } from \"ramda\"\nimport { resetCart, submitInquiry } from \"../actions\"\nimport StepHeader from \"../components/StepHeader\"\nimport ProgressFooter from \"../components/ProgressFooter\"\n\nconst toGroupListItem = (item) => ({\n title: item.title,\n subtitle: item.name,\n content: item.description,\n ...item,\n})\n\nconst toGroupList = (items) => map(toGroupListItem, values(items))\nconst emptyItems = (item) => isNil(item.content)\n\nclass YourHeadsetPage extends Component {\n constructor(props) {\n super(props)\n this.state = {\n isModalOpen: false,\n cartItems: toGroupList(this.props.cart),\n isTestMode: props.location.search.includes(\"test=true\"),\n }\n this.onPreviousStep = this.onPreviousStep.bind(this)\n this.cartArray = this.cartArray.bind(this)\n this.toggleModal = this.toggleModal.bind(this)\n this.onModalSubmit = this.onModalSubmit.bind(this)\n this.inquiryBody = this.inquiryBody.bind(this)\n }\n\n onPreviousStep() {\n this.props.push(\n previousStepUrl(\n \"yourHeadset\",\n this.props.cartIds,\n this.props.stepSkippers,\n this.state.isTestMode,\n ) + this.props.location.search,\n )\n }\n\n cartArray = () => reject(emptyItems, this.state.cartItems)\n\n toggleModal() {\n this.setState({ isModalOpen: !this.state.isModalOpen })\n }\n\n onModalSubmit(e) {\n this.setState({ isModalOpen: false })\n this.props.submitInquiry(this.inquiryBody())\n this.props.resetCart()\n this.props.push(\"/thankYou\" + this.props.location.search)\n }\n\n inquiryBody() {\n const { cart, cartIds, modalForm } = this.props\n return {\n headset_id: cartIds.headsetId,\n top_cable_id: cartIds.topCableId,\n ptt_id: cartIds.pttId,\n bottom_cable_id: cartIds.bottomCableId,\n plug_id: cartIds.plugId,\n custom_plug_specification: cartIds.customPlugSpecification,\n cable_without_ptt_id: cartIds.cableWithoutPttId,\n name: modalForm.name,\n company_name: modalForm.companyName,\n address: modalForm.address,\n zip_code: modalForm.zipCode,\n city: modalForm.city,\n phone_number: modalForm.phoneNumber,\n email: modalForm.email,\n total_amount: modalForm.totalAmount,\n comments: modalForm.comments,\n country_alpha3: modalForm.country,\n plug_configuration: cart.plugConfiguration.htmlDescription,\n }\n }\n\n render() {\n return (\n <>\n
\n
\n \n \n
\n
\n \n
\n
\n
\n Your setup is complete. Below, you will find all the necessary\n information. Additionally, you have the option to print this\n information as a PDF or submit an inquiry for further\n assistance.\n
\n \n
\n \n window.print()}\n className=\"no-print py-5 px-6 xl:px-10 text-lg\"\n text=\"Print configuration\"\n />\n
\n
\n
\n \n
\n \n \n )\n }\n}\n\nconst mapStateToProps = (state) => {\n const customerDetails = state.customerDetails\n return {\n cart: getCart(state),\n cartIds: state.cartIds,\n stepSkippers: state.stepSkippers.items,\n modalForm: customerDetails,\n }\n}\n\nYourHeadsetPage.propTypes = {\n push: PropTypes.func.isRequired,\n submitInquiry: PropTypes.func.isRequired,\n cart: PropTypes.object.isRequired,\n cartIds: PropTypes.object,\n stepSkippers: PropTypes.array,\n modalForm: PropTypes.object,\n resetCart: PropTypes.func.isRequired,\n location: PropTypes.object,\n}\n\nconst mapDispatchToProps = (dispatch) =>\n bindActionCreators({ push, resetCart, submitInquiry }, dispatch)\nexport default connect(mapStateToProps, mapDispatchToProps)(YourHeadsetPage)\n","import React, { useEffect, useState } from \"react\"\nimport ProgressBar from \"../components/ProgressBar\"\nimport {\n fetchBottomCables,\n fetchCableWithoutPtts,\n fetchPlugs,\n selectBottomCable,\n selectCableWithoutPtt,\n selectPlug,\n} from \"../actions\"\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from \"redux\"\nimport { push } from \"connected-react-router\"\nimport { nextStepUrl, previousStepUrl } from \"../helpers/StepHelper\"\nimport { filterIncompatibleCableWithoutPtts } from \"../helpers/IncompatibilityHelper\"\nimport Header from \"../components/Header\"\nimport ProgressFooter from \"../components/ProgressFooter\"\nimport useFilteredCables from \"../hooks/useFilteredCables\"\nimport CableCardWithDropdown from \"../components/CableCardWithDropdown\"\nimport { getCart } from \"../cartSelector\"\nimport { updateStateWithNewId } from \"../reducers\"\n\ntype Cable = {\n id: number\n name: string\n image_url: string\n description: string\n}\n\nconst CableWithoutPttsPage = ({\n bottomCables,\n cableWithoutPtts,\n cartIds,\n stepSkippers,\n incompatibilities,\n fetchBottomCables,\n fetchPlugs,\n fetchCableWithoutPtts,\n selectCableWithoutPtt,\n selectPlug,\n push,\n cart,\n}: any) => {\n const isTestMode = location.search.includes(\"test=true\")\n const currentPage = \"cableWithoutPtts\"\n const [activeCables, setActiveCables] = useState(bottomCables)\n const { compatibleCables: compatibleCableWithoutPtts } = useFilteredCables(\n cableWithoutPtts,\n filterIncompatibleCableWithoutPtts,\n incompatibilities,\n cartIds,\n )\n\n useEffect(() => {\n if (activeCables.length === 0 && bottomCables.length > 0)\n setActiveCables(bottomCables)\n }, [bottomCables, cableWithoutPtts])\n\n useEffect(() => {\n fetchBottomCables()\n fetchCableWithoutPtts()\n fetchPlugs()\n }, [])\n\n useEffect(() => {\n setActiveCables(compatibleCableWithoutPtts)\n }, [activeCables])\n\n const onPreviousStep = () => {\n push(\n previousStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n }\n\n // this function will navigate us to the next page without selecting a headset\n const skipCurrentStep = () => {\n push(\n nextStepUrl(currentPage, cartIds, stepSkippers, isTestMode) +\n location.search,\n )\n }\n\n // We pass here the arguments because it has not yet updated in the global state.\n // TODO: Refactor this to use the global state instead of passing it as an argument.\n const onNextStep = (cableWithoutPttId: number, plugId: number) => {\n updateStateWithNewId(cartIds, \"cableWithoutPttId\", cableWithoutPttId)\n updateStateWithNewId(cartIds, \"plugId\", plugId)\n push(\n nextStepUrl(\n currentPage,\n { ...cartIds, cableWithoutPttId, plugId },\n stepSkippers,\n isTestMode,\n ) + location.search,\n )\n }\n\n const onCableSelect = async (cableId: number, plugId: number) => {\n await selectCableWithoutPtt(cableId)\n await selectPlug(plugId)\n onNextStep(cableId, plugId)\n }\n\n return (\n
\n
\n
\n \n
\n {activeCables.length > 0 ? (\n <>\n {activeCables.map((cable: Cable) => (\n \n ))}\n \n ) : (\n
No cables found
\n )}\n
\n
\n\n \n
\n )\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n bottomCables: state.bottomCables.items,\n cableWithoutPtts: state.cableWithoutPtts.items,\n plugs: state.plugs.items,\n cartIds: state.cartIds,\n stepSkippers: state.stepSkippers.items,\n incompatibilities: state.incompatibilities.items,\n cart: getCart(state),\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) =>\n bindActionCreators(\n {\n fetchBottomCables,\n fetchPlugs,\n fetchCableWithoutPtts,\n selectBottomCable,\n selectCableWithoutPtt,\n selectPlug,\n push,\n },\n dispatch,\n )\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(CableWithoutPttsPage)\n","import React, { useEffect, useState } from \"react\"\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from \"redux\"\nimport { push } from \"connected-react-router\"\nimport thumbsupImage from \"images/thumbsup.svg\"\n\ntype Location = {\n search: string\n}\n\ntype ThankYouPageProps = {\n push: (path: string) => void\n location: Location\n}\n\nconst ThankYouPage = (props: ThankYouPageProps) => {\n const [timer, setTimer] = useState(5)\n\n useEffect(() => {\n setTimeout(countDown, 1000)\n setTimeout(() => props.push(\"/\" + props.location.search), 5000)\n }, [])\n\n const countDown = () => {\n setTimer(timer - 1)\n if (timer > 0) setTimeout(countDown, 1000)\n }\n\n return (\n
\n
\n
\n \n

Thank you!

\n
\n Your message has been sent. You will receive a confirmation by email.\n
\n
\n
\n {\" \"}\n This message closes in {timer} seconds\n
\n
\n )\n}\n\nconst mapStateToProps = (_state: any) => {\n return {}\n}\n\nconst mapDispatchToProps = (dispatch: any) =>\n bindActionCreators({ push }, dispatch)\nexport default connect(mapStateToProps, mapDispatchToProps)(ThankYouPage)\n","import React from \"react\"\nimport { createRoot } from \"react-dom/client\"\n\nimport { Provider } from \"react-redux\"\nimport {\n legacy_createStore as createStore,\n applyMiddleware,\n compose,\n} from \"redux\"\nimport thunkMiddleware from \"redux-thunk\"\n\nimport { createBrowserHistory } from \"history\"\nimport { Route } from \"react-router\"\nimport {\n connectRouter,\n routerMiddleware,\n ConnectedRouter,\n} from \"connected-react-router\"\n\nimport HeadsetSeriesPage from \"../pages/HeadsetSeriesPage\"\nimport HeadsetsPage from \"../pages/HeadsetsPage\"\nimport PttSeriesPage from \"../pages/PttSeriesPage\"\nimport PttsPage from \"../pages/PttsPage\"\nimport BottomCablesPage from \"../pages/BottomCablesPage\"\nimport PlugConfigurationPage from \"../pages/PlugConfigurationPage\"\nimport YourHeadsetPage from \"../pages/YourHeadsetPage\"\nimport CableWithoutPttPage from \"../pages/CableWithoutPttPage\"\nimport ThankYouPage from \"../pages/ThankYouPage\"\n\nimport { persistStore, persistCombineReducers } from \"redux-persist\"\nimport { PersistGate } from \"redux-persist/es/integration/react\"\nimport storage from \"redux-persist/es/storage\"\n\nimport * as reducers from \"../reducers\"\nimport {\n fetchStepSkippers,\n fetchIncompatibilities,\n resetCart,\n} from \"../actions\"\nimport { polyfill } from \"es6-promise\"\n\npolyfill()\nconst history = createBrowserHistory()\nconst middleware = routerMiddleware(history)\n\nconst setNewExpireCacheDate = () => {\n const expireCacheDate = new Date()\n expireCacheDate.setHours(expireCacheDate.getHours() + 1)\n\n window.localStorage.setItem(\"expireCacheDate\", expireCacheDate)\n}\n\nconst mayExpireStore = () => {\n const expireCacheDate = new Date(\n window.localStorage.getItem(\"expireCacheDate\"),\n )\n if (expireCacheDate < new Date()) {\n store.dispatch(resetCart())\n }\n setNewExpireCacheDate()\n}\n\nconst storageConfig = {\n key: \"headsetBuilder\",\n storage: storage,\n}\n\nconst persistedReducers = persistCombineReducers(storageConfig, {\n ...reducers,\n router: connectRouter(history),\n})\n\nconst store = createStore(\n persistedReducers,\n compose(applyMiddleware(middleware, thunkMiddleware)),\n)\n\nconst persistor = persistStore(store, undefined, mayExpireStore)\n\nstore.dispatch(fetchStepSkippers())\nstore.dispatch(fetchIncompatibilities())\n\nconst element = document.createElement(\"div\")\nelement.className = \"h-100\"\ndocument.body.appendChild(element)\n\nconst root = createRoot(element)\n\nroot.render(\n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
,\n)\n"],"names":["nextStepUrl","currentUrl","cartIds","stepSkippers","testMode","step","nextStep","skipStep","previousStepUrl","previousStep","anyStepSkipperApplies","hasPlug","Number","isInteger","plugId","some","stepSkipper","camelCase","bottom_cable_id","bottomCableId","headset_series_id","headsetSeriesId","headset_id","headsetId","ptt_series_id","pttSeriesId","ptt_id","pttId","top_cable_id","topCableId","currentStepIndex","currentStep","STEPS","indexOf","length","nextStepIndex","previousStepIndex","isBlank","x","isEmpty","isNil","filterHeadsets","headsets","options","filter","microphone_type","headset","microphoneTypeHeadsetsFilter","wearing_style","wearingStyleHeadsetsFilter","active_gard","sameActiveGard","activeGardHeadsetsFilter","filterPTTs","ptts","port_type","ptt","portTypeFilter","microphone_preamplifier","microphonePreamplifierFilter","plug_type","plugTypeFilter","ColumnList","props","list","onSelect","series","filteredElements","e","disabled","className","map","element","HeadsetCard","key","id","ActiveGardSelect","onChange","selected","tooltip","wrapperClass","Tooltip","text","value","WearingStyleSelect","MicrophoneTypeSelect","microphoneTooltip","headsetTooltip","activegardTooltip","portTypeTooltip","microphonePreamplifierTooltip","plugTypeTooltip","INITIAL_HEADSET_SERIES_STATE","isFetching","items","headsetSeries","state","action","type","REQUEST_HEADSET_SERIES","RECEIVE_HEADSET_SERIES","lastUpdated","receivedAt","INITIAL_CART_STATE","topCable","pttSeries","bottomCable","plug","plugConfiguration","incompatibilities","keyHierarchy","updateStateWithNewId","relevantKeyIndex","laterKeys","slice","newState","laterKey","undefined","SELECT_HEADSET_SERIES","selectedHeadsetSeriesId","SELECT_HEADSET","selectedHeadsetId","SELECT_PTT_SERIES","selectedPttSeriesId","SELECT_PTT","selectedPttId","SELECT_TOP_CABLE","selectedTopCableId","SELECT_PLUG","selectedPlugId","SELECT_BOTTOM_CABLE","selectedBottomCableId","SELECT_CABLE_WITHOUT_PTT","selectedCableWithoutPttId","RESET_CART","INITIAL_HEADSETS_STATE","filtering","REQUEST_HEADSETS","RECEIVE_HEADSETS","SET_HEADSET_FILTER","INITIAL_TOP_CABLE_STATE","topCables","REQUEST_TOP_CABLES","RECEIVE_TOP_CABLES","INITIAL_PTT_SERIES_STATE","REQUEST_PTT_SERIES","RECEIVE_PTT_SERIES","INITIAL_PTTS_STATE","REQUEST_PTTS","RECEIVE_PTTS","SET_PTT_FILTER","INITIAL_BOTTOM_CABLES_STATE","bottomCables","REQUEST_BOTTOM_CABLES","RECEIVE_BOTTOM_CABLES","INITIAL_CABLE_WITHOUT_PTTS_STATE","cableWithoutPtts","REQUEST_CABLE_WITHOUT_PTTS","RECEIVE_CABLE_WITHOUT_PTTS","INITIAL_PLUGS_STATE","plugs","REQUEST_PLUGS","RECEIVE_PLUGS","INITIAL_STEP_SKIPPERS_STATE","REQUEST_STEP_SKIPPERS","RECEIVE_STEP_SKIPPERS","INITIAL_INCOMPATIBILITIES_STATE","REQUEST_INCOMPATIBILITIES","RECEIVE_INCOMPATIBILITIES","initialPlugConfigurationState","SET_PLUG_CONFIGURATION","payload","RESET_PLUG_CONFIGURATION","INITIAL_CUSTOMER_DETAILS_STATE","name","companyName","address","zipCode","city","country","phoneNumber","email","totalAmount","comments","customerDetails","UPDATE_CUSTOMER_DETAILS","RESET_CUSTOMER_DETAILS","disableItem","item","HeadsetSeriesPage","Component","constructor","super","this","headsetSeriess","isTestMode","location","search","includes","componentDidMount","fetchHeadsetSeries","fetchHeadsets","UNSAFE_componentWillReceiveProps","nextProps","incompatibleHeadsetSeriess","getIncompatibleHeadsetSeries","setState","compatibleHeadsetSeries","onSeriesSelect","async","selectHeadsetSeries","push","incompatibleHeadsetSeries","filterHeadsetSeriess","compatibleHeadsets","filterCompatibleHeadsets","seriesIds","enabledIds","contains","enableItem","onActiveGardChange","target","setHeadsetFilter","onWearingStyleChange","onMicrophoneTypeChange","transformActiveGuardSeries","render","headsetFiltering","seriesWithSettings","serie","filteredHeadsets","filteredHeadset","Header","ProgressBar","activeStep","numberOfSteps","title","StepHeader","prop","connect","dispatch","bindActionCreators","selectFilteredHeadsets","createSelector","find","filteredPtts","filteredPtt","cart","getCart","selectHeadset","currentPage","useEffect","onNextStep","ProgressFooter","backStep","getFooterArray","PttList","PttCard","PortTypeSelect","MicrophonePreamplifierSelect","PlugTypeSelect","pttFiltering","fetchPttSeries","fetchPtts","selectPttSeries","setPTTFilter","statePttSeries","setStatePttSeries","useState","incompatiblePttSeries","getIncompatiblePttSeries","compatibleSeries","compatiblePttSeries","pluck","filterCompatiblePTTs","filterIncompatiblePtts","incompatiblePtt","pttSeriesWithSettings","compatiblePTTs","filteredSeriesIds","noPTT","filterPttSeries","PttListWithDropdown","PttCardWithDropdown","addOnName","selectPtt","fetchTopCables","selectTopCable","statePtts","setStatePtts","compatiblePttDevices","compatiblePtts","toggleItemEnabled","incompatiblePtts","filteredPttsIds","filterPtts","cables","filterFunction","incompatibleCables","useMemo","compatibleCables","cable","incompatCable","fetchBottomCables","fetchPlugs","fetchCableWithoutPtts","selectBottomCable","selectCableWithoutPtt","selectPlug","activeCables","setActiveCables","compatibleBottomCables","useFilteredCables","filterIncompatibleBottomCables","onBottomCableSelect","CableCardWithDropdown","cableIdName","single_sided","dual_sided","style","buildPinObject","i","PlugConfigurationPage","onPreviousStep","bind","onContinue","onRestart","pinOptions","number_of_pins","range","inc","configuration","setPlugConfiguration","resetCart","updateConfiguration","label","onPinSelected","onInputValueChange","defaultPlugConfiguration","getPlugConfigurationValues","getPlugConfiguration","src","plugImage","option","index","Dropdown","InputField","placeholder","resistorValue","TextArea","additionalRequirements","PrimaryButton","onClick","skipStepText","propTypes","PropTypes","toGroupListItem","subtitle","content","description","emptyItems","YourHeadsetPage","isModalOpen","cartItems","values","cartArray","toggleModal","onModalSubmit","inquiryBody","reject","submitInquiry","modalForm","plug_id","custom_plug_specification","customPlugSpecification","cable_without_ptt_id","cableWithoutPttId","company_name","zip_code","phone_number","total_amount","country_alpha3","plug_configuration","htmlDescription","OrderDetailsVisual","order","OrderDetails","SecondaryButton","window","print","CustomerDetailsModal","show","onClose","compatibleCableWithoutPtts","filterIncompatibleCableWithoutPtts","onCableSelect","cableId","_state","timer","setTimer","setTimeout","countDown","thumbsupImage","polyfill","history","createBrowserHistory","middleware","routerMiddleware","storageConfig","storage","persistedReducers","persistCombineReducers","reducers","router","connectRouter","store","createStore","compose","applyMiddleware","thunkMiddleware","persistor","persistStore","Date","localStorage","getItem","expireCacheDate","setHours","getHours","setItem","setNewExpireCacheDate","fetchStepSkippers","fetchIncompatibilities","document","createElement","body","appendChild","createRoot","exact","path","component","HeadsetsPage","PttSeriesPage","CableWithoutPttPage","PttsPage","BottomCablesPage","ThankYouPage"],"sourceRoot":""}