{ "version": 3, "sources": ["../../../../../../owl-nest/ulule/features/project/src/public/views/detail/components/sidebar/Shipping.tsx", "../../../../../../owl-nest/ulule/features/project/src/public/views/detail/hooks/useShippingInfo.ts"], "sourcesContent": ["import * as React from 'react'\nimport styled from 'styled-components'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport * as api from '@owl-nest/api-client/next'\nimport { t, tc, tp } from '@owl-nest/localize'\nimport * as models from '@owl-nest/models'\nimport * as env from '@owl-nest/config'\n\ntype ShippingsProps = {\n zone: Omit & {\n id: number | undefined\n }\n\n currency: string\n pickupDescription?: boolean\n}\n\nexport function Shippings({ zone, currency, pickupDescription = false }: ShippingsProps) {\n const userConfig = env.useUserEnv()\n\n const homeDeliveryBands = zone.home_delivery?.bands?.map((band, index) => {\n return {\n id: band.id,\n node: getText(band, zone.home_delivery?.band_type, zone.home_delivery?.bands[index + 1]),\n }\n })\n\n const mondialRelayBands = zone.mondial_relay_delivery?.bands.map((band, index) => {\n return {\n id: band.id,\n node: getText(band, zone.mondial_relay_delivery?.band_type, zone.mondial_relay_delivery?.bands[index + 1]),\n }\n })\n\n return (\n <>\n \n {homeDeliveryBands && }\n {mondialRelayBands && }\n {zone.pickup_points && }\n \n\n {zone.pickup_points && (\n <>\n {zone.pickup_points.map((pickupPoint) => {\n return [\n \n {models.pickup.city(pickupPoint)}\n {pickupDescription && (\n <>\n \n {models.pickup.description(pickupPoint)}\n \n\n \n {models.pickup.address(pickupPoint) && (\n \n window.open(\n 'https://www.google.com/maps/place/' + models.pickup.address(pickupPoint) + '/',\n '_blank',\n )\n }\n >\n {t('See address')}\n \n )}\n \n \n )}\n ,\n ]\n })}\n \n )}\n \n )\n\n function getText(band: api.ShippingBand, type: api.BandType | undefined, nextBand?: api.ShippingBand) {\n if (type === 'priced_per_cart') {\n return (\n <>\n {band.price === 0 ? (\n tp('free', 'BO shipping - delivery')\n ) : (\n \n )}\n {nextBand ? (\n <>\n <> \n {tc('up to [price]', {\n price: (\n \n ),\n })}\n \n ) : (\n <>\n <> \n {tc('above [price]', {\n price: (\n \n ),\n })}\n \n )}\n \n )\n } else {\n return (\n <>\n {band.price === 0 ? (\n tp('free', 'BO shipping - delivery')\n ) : (\n <>\n {tc('[price] per shipment', {\n price: (\n \n ),\n })}\n \n )}\n {Boolean(band.price_increase) && (\n <>\n <> \n {band.price === 0 ? t('then') : '+'}\n <> \n {tc('[price] per quantity', {\n price: (\n \n ),\n })}\n \n )}\n \n )\n }\n }\n}\n\nconst Grid = styled.div`\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n display: grid;\n grid-column-gap: 20px;\n grid-row-gap: 16px;\n grid-template-columns: repeat(2, max-content);\n }\n`\n\ntype ItemProps = {\n name: string\n items: { id: number; node: React.ReactNode }[]\n}\n\nexport function ShippingItem({ name, items }: ItemProps) {\n return (\n <>\n {name}\n \n {items.map((item) => (\n
  • \n {item.node}\n
  • \n ))}\n
    \n \n )\n}\n\nfunction PickupPointShippingItem({ name }: { name: string }) {\n return (\n <>\n {name}\n\n {t('Free')}\n \n )\n}\n\nconst List = styled.ul`\n list-style-type: none;\n margin: 0 0 16px 0;\n padding: 0;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin: 0;\n }\n`\n\nconst ShippingCost = styled(plume.styles.copy.S)`\n display: flex;\n align-items: baseline;\n color: ${plume.COLORS.PRIMARY_SAND_700};\n\n @media not screen and ${plume.BREAKPOINTS.MOBILE_L} {\n margin-left: 24px;\n }\n`\n\nconst PickupPoint = styled.div`\n margin-left: 32px;\n margin-top: 8px;\n`\n\nconst PickupName = styled(plume.styles.copy.S)`\n font-weight: 600; /* HACK: Irregular font manipulation. We'll be adding copy.M.semiBold, so this is just by anticipation. */\n`\n\nconst PickupDescription = styled(plume.styles.copy.S)`\n color: ${plume.COLORS.PRIMARY_SAND_900};\n`\n\nconst PickupAddressLink = styled(plume.styles.copy.S)``\n", "import * as React from 'react'\n\nimport * as api from '@owl-nest/api-client/latest'\nimport * as env from '@owl-nest/config'\n\nimport * as projectModel from '../../../models/project'\n\nexport function useShippingInfo(project: projectModel.Project) {\n const rewardsHaveCustomDeliveries = project.rewards?.some((reward) => reward.has_custom_delivery) ?? false\n\n if (!project.shippings.zones) {\n return {\n rewardsHaveCustomDeliveries,\n selectedCountry: undefined,\n setSelectedCountry: () => {},\n shippingZone: undefined,\n supportedCountries: [],\n supportedCountryCodes: undefined,\n }\n }\n\n // We use Set so that we don't have duplicated countries\n const supportedCountryCodes = project.shippings.zones.reduce(\n (countryArray: string[], zone: api.ShippingZone) => [...new Set([...countryArray, ...(zone.all_countries ?? [])])],\n [],\n )\n\n const userCountry = env.USER_COUNTRY\n\n const [selectedCountry, setSelectedCountry] = React.useState(\n userCountry && supportedCountryCodes.includes(userCountry) ? userCountry : project.country,\n )\n\n const supportedCountries = supportedCountryCodes\n .map((code) => ({\n label: getCountryLabel(code),\n code,\n }))\n .filter((option): option is { label: string; code: string } => option.label !== undefined)\n .sort((a, b) => a.label.localeCompare(b.label))\n\n const shippingZone =\n supportedCountries.length === 1\n ? project.shippings.zones[0]\n : findShippingZoneForCountry(\n project.shippings.zones.filter((zone) => zone.all_countries?.includes(selectedCountry)),\n )\n\n return {\n supportedCountries,\n supportedCountryCodes,\n selectedCountry,\n setSelectedCountry,\n shippingZone,\n rewardsHaveCustomDeliveries,\n }\n}\n\nexport function getCountryLabel(countryCode: string) {\n const country = env.COUNTRIES.find((country) => country.code === countryCode)\n\n if (country === undefined) {\n return undefined\n }\n\n return country.label()\n}\n\nfunction findShippingZoneForCountry(zones: api.ShippingZone[]): api.ShippingZone | undefined {\n if (zones.length === 1) {\n return zones[0]\n }\n\n // Priority rules for shippings:\n // - zones with searched country but no area has top priority\n // - then european-union > europe > rest-of-the-world and overseas-fr > rest-of-the-world\n const singleZone = zones.find((zone) => zone.areas === null)\n if (singleZone) return singleZone\n\n const europeArea = zones.find((zone) => zone.areas?.includes('european-union'))\n if (europeArea) return europeArea\n\n const overeasFrArea = zones.find((zone) => zone.areas?.includes('overseas-fr'))\n if (overeasFrArea) return overeasFrArea\n\n const europeUnionZone = zones.find((zone) => zone.areas?.includes('european'))\n if (europeUnionZone) return europeUnionZone\n\n const restOfTheWorldZone = zones.find((zone) => zone.areas?.includes('rest-of-world'))\n if (restOfTheWorldZone) return restOfTheWorldZone\n}\n"], "mappings": "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", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "React", "Shippings", "zone", "currency", "pickupDescription", "_a", "_b", "_c", "userConfig", "useUserEnv", "homeDeliveryBands", "band", "index", "getText", "mondialRelayBands", "Grid", "ShippingItem", "PickupPointShippingItem", "pickupPoint", "PickupPoint", "PickupName", "pickup_exports", "PickupDescription", "PickupAddressLink", "Link", "type", "nextBand", "LocaleMoneyDisplayer", "src_default", "__template", "breakpoints_exports", "name", "items", "styles_exports", "List", "item", "ShippingCost", "colors_exports", "_d", "_e", "_f", "_g", "init_define_process_env", "init_sentry_release_injection_stub", "React", "useShippingInfo", "project", "_a", "_b", "rewardsHaveCustomDeliveries", "reward", "supportedCountryCodes", "countryArray", "zone", "userCountry", "USER_COUNTRY", "selectedCountry", "setSelectedCountry", "supportedCountries", "code", "getCountryLabel", "option", "a", "b", "shippingZone", "findShippingZoneForCountry", "countryCode", "country", "COUNTRIES", "zones", "singleZone", "europeArea", "overeasFrArea", "europeUnionZone", "restOfTheWorldZone"] }