{"version":3,"sources":["webpack:///./src/components/molecules/ProductEventList/ProductEventList.scss","webpack:///./src/components/molecules/ProductEventList/ProductEventList.jsx","webpack:///./src/components/molecules/ProductEventList/index.jsx"],"names":["module","exports","productEventList","eventItem","ticketInfo","groupTitle","weekday","date","onlyTime","time","timeIcon","headerButton","on","title","info","iconCircle","showMore","showMoreDates","grouper","groups","item","itemKey","month","_objectSpread","_defineProperty","concat","_toConsumableArray","sortFunctions","a","b","timestamp","EventListItems","_ref","products","showProductLink","map","product","i","react_default","createElement","Fragment","key","TableList","className","styles","Link","href","startTime","appendQueryParams","parseUrl","getFullUrl","url","startDate","fromDate","getFormattedDate","fromTime","makeProductUrl","Heading","size","sizes","heading5","Icon","icon","calendar","toDate","clock","nameOfStartDay","nameOfEndDay","undefined","toTime","marker","intro","EventTicketInfo","isLoading","externalData","ticketData","alt","EventListHeader","_ref2","columnCount","onClick","culture","useSiteSettings","colSpan","Button","transparent","full","noPadding","classnames","heading3","minus","plus","out","split","alterGroupTitleByCulture","ProductEventList","React","memo","_ref3","dateVariant","channel","render","toggleGroups","groupByMonth","showInitial","_useSiteSettings2","productPageLink","tellusTicketChannelName","transformedProducts","useMemo","eventDate","getDateFromISO","now","Date","day","id","getProductUrl","sortedProducts","sort","length","translate","ticketAvailabilityFetcherKey","TicketAvailabilityFetcher","Toggle","_ref4","setOn","caption","ProductEventList_EventListItems","slice","iconAfter","chevronDown","groupedProducts","groupedObject","reduce","Object","keys","groupProducts","group","groupIndex","_ref5","toggle","ProductEventList_EventListHeader","displayName","propTypes","PropTypes","array","isRequired","bool","string","func","defaultProps"],"mappings":"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","file":"producteventlist.bundle.ffec886969d431d6ed43.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"productEventList\":\"_30aO8f\",\"eventItem\":\"_3jM4s0\",\"ticketInfo\":\"_1sQopa\",\"groupTitle\":\"_1ePezS\",\"weekday\":\"qZXNce\",\"date\":\"_2X9Ed9\",\"onlyTime\":\"_2Or858\",\"time\":\"_2t-wEn\",\"timeIcon\":\"UrLhe6\",\"headerButton\":\"_2CLlEg\",\"on\":\"ALNGp1\",\"title\":\"_1sYxBX\",\"info\":\"_1FlSRE\",\"iconCircle\":\"_2YACm6\",\"showMore\":\"_1frRlE\",\"showMoreDates\":\"IkdPZA\"};","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport Heading, { H4, H3 } from 'components/atoms/Heading';\nimport Link from 'components/atoms/Link';\nimport Icon from 'components/atoms/Icon';\nimport {\n  clock,\n  marker,\n  minus,\n  plus,\n  chevronDown,\n  calendar,\n} from 'components/atoms/Icon/icons';\nimport EventTicketInfo from 'components/molecules/EventTicketInfo';\nimport Table, { Row, Column } from 'components/molecules/TableList';\nimport Button, { IconButton } from 'components/atoms/Button';\nimport BreakpointContainer from 'containers/BreakpointContainer';\nimport Toggle from 'components/utilities/Toggle';\nimport TicketAvailabilityFetcher from 'components/utilities/TicketAvailabilityFetcher';\nimport getProductUrl from 'utils/getProductUrl';\nimport { translate } from 'utils/translate';\nimport { getFullUrl, appendQueryParams, parseUrl } from 'utils/bundle-helper';\nimport useSiteSettings from 'hooks/use-site-settings';\nimport { getDateFromISO, getFormattedDate } from 'utils/dateTime';\n\nimport * as styles from './ProductEventList.scss';\n\nconst grouper = (groups, item) => {\n  const itemKey = item.month;\n  return {\n    ...groups,\n    [itemKey]: [...(groups[itemKey] || []), ...[item]],\n  };\n};\nconst sortFunctions = {\n  noFromTime: (a, b) => {\n    if (!a.fromTime) return -1;\n    return 0;\n  },\n  timestamp: (a, b) => {\n    if (a.timestamp > b.timestamp) {\n      return 1;\n    }\n    if (a.timestamp < b.timestamp) {\n      return -1;\n    }\n    return 0;\n  },\n};\n\nconst groupProducts = products => {\n  const groupedObject = products.reduce(grouper, {});\n  return Object.keys(groupedObject).map(key => ({\n    title: key,\n    products: groupedObject[key],\n  }));\n};\n\nconst makeProductUrl = product => {\n  if (!!product.startTime) {\n    return appendQueryParams(parseUrl(getFullUrl(product.url)), {\n      startDate: product.fromDate,\n      startTime: getFormattedDate(product.fromTime, 'HH:mm'),\n    }).href;\n  }\n  return appendQueryParams(parseUrl(getFullUrl(product.url)), {\n    startDate: product.fromDate,\n  }).href;\n};\n\nconst EventListItems = ({ products, showProductLink, ticketInfo }) =>\n  products.map((product, i) => (\n    <React.Fragment key={product.key}>\n      <Row className={styles.eventItem}>\n        <Column>\n          <article>\n            {showProductLink ? (\n              <Link href={makeProductUrl(product)} className={styles.title}>\n                <H4 size={Heading.sizes.heading5}>{product.title}</H4>\n              </Link>\n            ) : (\n              <span className={styles.title}>\n                <H4 size={Heading.sizes.heading5}>{product.title}</H4>\n              </span>\n            )}\n            <span className={styles.date}>\n              <Icon\n                icon={calendar}\n                className={styles.timeIcon}\n                size={['1.5em', '1.5em']}\n              />\n              <span>\n\n                {`${getFormattedDate(\n                  product.fromDate,\n                  'dd',\n                )} ${getFormattedDate(product.fromDate, 'MMM yyyy')}`}{' '}\n                {!!product.toDate && product.fromDate !== product.toDate && (\n                  <React.Fragment>\n                    {\"- \"}\n                    {getFormattedDate(product.toDate, 'dd')}\n                    {getFormattedDate(product.toDate, ' MMM yyyy')}\n                  </React.Fragment>\n                )}\n              </span>\n            </span>\n            <span className={styles.date}>\n            <Icon\n                icon={clock}\n                className={styles.timeIcon}\n                size={['1.5em', '1.5em']}\n              />\n              <span>\n              <span className={styles.weekday}>\n                  {product.nameOfStartDay}{' '}\n                </span>\n                {product.fromDate !== product.toDate && (product.nameOfEndDay !== null && product.nameOfEndDay !== '' && product.nameOfEndDay !== undefined) && (\n                  <span>-&nbsp;{product.nameOfEndDay}</span>\n                )}\n                 {!!product.fromTime && (\n                  <span>\n                    {getFormattedDate(product.fromTime, ' p')}\n                    {!!product.toTime &&\n                      product.fromTime !== product.toTime &&\n                      getFormattedDate(product.toTime, '-p')}\n                  </span>\n                )}\n              </span>\n            </span>\n            <span>\n              <Icon\n                icon={marker}\n                className={styles.iconCircle}\n                size={['1.5em', '1.5em']}\n              />\n              <span>{product.intro}</span>\n            </span>\n            <div className={styles.ticketInfo}>\n              <EventTicketInfo\n                isLoading={ticketInfo.isLoading}\n                externalData={ticketInfo.ticketData[i]}\n                product={product}\n                alt\n              />\n            </div>\n          </article>\n        </Column>\n      </Row>\n    </React.Fragment>\n  ));\n\nconst alterGroupTitleByCulture = (title, culture) => {\n  let out = title;\n  if (culture === 'it') {\n    out = title.split(' ');\n    return `${out[0]}, ${out[1]} ${out[2]} ${out[3]}`;\n  }\n  if (culture === 'de') {\n    out = title.split(',');\n    // return `${out[0]}, ${out[1]} ${out[2]}`;\n    return `${out[0]}, ${out[1]}`;\n  }\n  return out;\n};\n\nconst EventListHeader = ({ columnCount, title, onClick, on }) => {\n  const { culture } = useSiteSettings();\n\n  return (\n    <Row>\n      <Column colSpan={columnCount}>\n        <div>\n          {!onClick ? (\n            <H3 alt size={Heading.sizes.heading3} className={styles.groupTitle}>\n              {alterGroupTitleByCulture(title, culture)}\n            </H3>\n          ) : (\n            <Button\n              onClick={onClick}\n              transparent\n              full\n              noPadding\n              className={classnames(styles.groupTitle, {\n                [styles.on]: on,\n              })}\n            >\n              <H3 alt size={Heading.sizes.heading3}>\n                {title}\n              </H3>\n              <Icon size={['2em', '2em']} icon={on ? minus : plus} />\n            </Button>\n          )}\n        </div>\n      </Column>\n    </Row>\n  );\n};\n\nconst ProductEventList = React.memo(\n  ({\n    dateVariant,\n    products,\n    showProductLink,\n    channel,\n    render,\n    toggleGroups,\n    groupByMonth,\n    showInitial,\n    title,\n  }) => {\n    const { productPageLink, tellusTicketChannelName } = useSiteSettings();\n    const transformedProducts = useMemo(\n      () =>\n        products\n          ? products.map(product => {\n              const eventDate = getDateFromISO(\n                product.fromDate,\n                product.fromTime,\n              );\n              const timestamp = getFormattedDate(eventDate, 't');\n              const now = new Date();\n              const day = getFormattedDate(product.fromDate, 'PPPP');\n              const month = getFormattedDate(eventDate < now ? now : product.fromDate, 'MMMM yyyy');\n              const key = `${product.id}_${getFormattedDate(\n                eventDate,\n                \"yyyy-MM-dd'T'HH:mm\",\n              )}`;\n              const url = getProductUrl(product.url, productPageLink);\n              return {\n                ...product,\n                eventDate,\n                key,\n                day,\n                month,\n                timestamp,\n                url,\n              };\n            })\n          : null,\n      [products, productPageLink],\n    );\n\n    const sortedProducts = transformedProducts\n      ? transformedProducts.sort(sortFunctions.timestamp)\n      : [];\n\n    // no products\n    if (!products || !products.length) {\n      return <p>{translate('/pages/eventListPage/noResult')}</p>;\n    }\n\n    if (!groupByMonth) {\n      const ticketAvailabilityFetcherKey = `${sortedProducts[0].fromDate}–${sortedProducts[0].toDate}`;\n\n      return (\n        <TicketAvailabilityFetcher\n          products={sortedProducts}\n          channel={channel || tellusTicketChannelName}\n          key={ticketAvailabilityFetcherKey}\n        >\n          {ticketInfo => (\n            <Toggle\n              on={products.length <= 3}\n              render={({ on, setOn }) => (\n                <React.Fragment>\n                  <Table caption={title}>\n                    <EventListItems\n                      products={\n                        on\n                          ? sortedProducts\n                          : sortedProducts.slice(0, showInitial)\n                      }\n                      dateVariant={dateVariant}\n                      ticketInfo={ticketInfo}\n                      showProductLink={showProductLink}\n                    />\n                  </Table>\n                  {!on && (\n                    <p className={styles.showMore}>\n                      <IconButton\n                        onClick={setOn}\n                        iconAfter={chevronDown}\n                        className={styles.showMoreDates}\n                      >\n                        {translate('/product/showMoreDates')}\n                      </IconButton>\n                    </p>\n                  )}\n                </React.Fragment>\n              )}\n            />\n          )}\n        </TicketAvailabilityFetcher>\n      );\n    }\n\n    // grouped products\n    const groupedProducts = groupProducts(sortedProducts);\n\n    if (render) {\n      return render(groupedProducts);\n    }\n    const ticketAvailabilityFetcherKey = `${sortedProducts[0].fromDate}–${sortedProducts[0].toDate}`;\n    return (\n      <Table className={styles.productEventList}>\n        {groupedProducts.map((group, groupIndex) => (\n          <Toggle\n            key={`${group.groupTitle}`}\n            on={\n              (groupIndex < 2 &&\n                groupedProducts[groupIndex].products.length < 5) ||\n              groupIndex === 0\n            }\n            render={({ on, toggle }) => (\n              <React.Fragment>\n                {!!group.title && (\n                  <EventListHeader\n                    columnCount={3}\n                    title={group.title}\n                    onClick={toggleGroups && toggle}\n                    on={on}\n                  />\n                )}\n                {on && (\n                  <TicketAvailabilityFetcher\n                    products={group.products}\n                    channel={channel || tellusTicketChannelName}\n                    key={ticketAvailabilityFetcherKey}\n                  >\n                    {ticketInfo => (\n                      <EventListItems\n                        products={group.products}\n                        dateVariant={dateVariant}\n                        showProductLink={showProductLink}\n                        ticketInfo={ticketInfo}\n                      />\n                    )}\n                  </TicketAvailabilityFetcher>\n                )}\n              </React.Fragment>\n            )}\n          />\n        ))}\n      </Table>\n    );\n  },\n);\nProductEventList.displayName = 'ProductEventList';\nProductEventList.propTypes = {\n  products: PropTypes.array.isRequired,\n  showProductLink: PropTypes.bool,\n  channel: PropTypes.string,\n  render: PropTypes.func,\n};\nProductEventList.defaultProps = {\n  dateVariant: 'dateTime',\n  showProductLink: true,\n  render: null,\n};\n\nexport default ProductEventList;\n","import ProductEventList from './ProductEventList';\nexport default ProductEventList;\n"],"sourceRoot":""}