{"version":3,"file":"/etc.clientlibs/corp-aem-sherwin/components/pressreleaselisting/clientlibs/site-pressreleaselisting/site-pressreleaselisting.ded10c71cb73f500e606.js","mappings":"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","sources":["webpack://aem-maven-archetype/../ui.apps/src/main/content/jcr_root/apps/corp-aem-sherwin/components/pagination/pagination.tsx","webpack://aem-maven-archetype/../ui.apps/src/main/content/jcr_root/apps/corp-aem-sherwin/components/pressreleaselisting/Icon.tsx","webpack://aem-maven-archetype/../ui.apps/src/main/content/jcr_root/apps/corp-aem-sherwin/components/pressreleaselisting/PressReleaseListing.tsx","webpack://aem-maven-archetype/../ui.apps/src/main/content/jcr_root/apps/corp-aem-sherwin/components/pressreleaselisting/Filter.tsx","webpack://aem-maven-archetype/../ui.apps/src/main/content/jcr_root/apps/corp-aem-sherwin/components/pressreleaselisting/pressreleaselisting.site.tsx","webpack://aem-maven-archetype/../ui.apps/src/main/content/jcr_root/apps/corp-aem-sherwin/components/pressreleaselisting/useFilter.tsx"],"sourcesContent":["import React, {useMemo} from 'react';\nimport './pagination.site.scss';\n\nfunction Pagination({\n  currentPage = 0,\n  pageSize = 10,\n  numberOfItems = 0,\n  i18nLabel = 'Goto Page ${page}',\n  setPage,\n}) {\n  const pages = useMemo(\n    () => new Array(Math.ceil(numberOfItems / pageSize) || 1).fill(0),\n    [numberOfItems, pageSize]\n  );\n\n  return (\n    <nav className=\"sw-pagination\" role=\"navigation\">\n      <ol className=\"sw-pagination__list\">\n        {pages.map((_, i: number) => {\n          const page = '' + (i + 1);\n\n          return (\n            <li key={i}>\n              <button\n                aria-label={i18nLabel.replace('${page}', page)}\n                className=\"sw-pagination__btn\"\n                onClick={setPage && setPage.bind(null, i)}\n                type=\"button\"\n                disabled={i == currentPage}\n              >\n                {page}\n              </button>\n            </li>\n          );\n        })}\n      </ol>\n    </nav>\n  );\n}\n\nexport default Pagination;\n","import React from 'react';\n\ninterface IconProps {\n  spritePath: string;\n  iconName: string;\n  iconClassName?: string | null;\n}\n\nexport function Icon({spritePath, iconName, iconClassName = null}: IconProps) {\n  return (\n    <svg className={iconClassName}>\n      <use xlinkHref={`${spritePath}#${iconName}`} />\n    </svg>\n  );\n}\n","import React, {useMemo} from 'react';\n\nimport Pagination from '../pagination/pagination';\nimport {Icon} from './Icon';\n\nexport interface IntermediateParsedPressRelease {\n  title: string;\n  body: string;\n  date: string;\n  category: string;\n  link: string;\n  key: string;\n}\n\nexport interface PressRelease {\n  title: string;\n  body: string;\n  date: Date;\n  category: string;\n  link: string;\n  key: string;\n}\n\nconst pressReleaseDateFormattingOptions: Intl.DateTimeFormatOptions = {\n  month: 'long',\n  year: 'numeric',\n  day: 'numeric',\n};\n\nexport const paginationPageSize = 12;\n\ninterface PressReleaseListingProps {\n  searchText: string;\n  category: string | null;\n  year: number | null;\n  pageNumber: number;\n  setPageNumber: (n: number) => void;\n  pressReleases: PressRelease[];\n  filteredPressReleases: PressRelease[];\n  i18nMessages: PressReleaseListingInternationalization;\n  spritePath: string;\n}\n\nexport interface PressReleaseListingInternationalization {\n  noPrsFound: string;\n  noFilteredPrsFound: string;\n}\n\nexport function PressReleaseListing({\n  searchText,\n  category,\n  year,\n  pageNumber,\n  setPageNumber,\n  pressReleases,\n  filteredPressReleases,\n  i18nMessages,\n  spritePath,\n}: PressReleaseListingProps) {\n  const pressReleaseListingHtml = useMemo(() => {\n    if (pressReleases.length === 0) {\n      return <p>{i18nMessages.noPrsFound}</p>;\n    }\n\n    if (filteredPressReleases.length === 0) {\n      return <p>{i18nMessages.noFilteredPrsFound}</p>;\n    }\n\n    const firstIndexToTake = pageNumber * paginationPageSize;\n\n    return filteredPressReleases\n      .map((pressRelease: PressRelease) => {\n        return (\n          <article\n            className=\"cmp-pressreleaselisting__article\"\n            key={pressRelease.key}\n          >\n            <p className=\"cmp-pressreleaselisting__category\">\n              {pressRelease.category}\n            </p>\n            <p className=\"cmp-pressreleaselisting__date\">\n              {pressRelease.date.toLocaleDateString(\n                'en-US',\n                pressReleaseDateFormattingOptions\n              )}\n            </p>\n            <a\n              href={pressRelease.link + '.html'}\n              className=\"cmp-pressreleaselisting__link\"\n            >\n              <h3 className=\"cmp-pressreleaselisting__title\">\n                {pressRelease.title}{' '}\n                <Icon\n                  spritePath={spritePath}\n                  iconName={'filter-arrow-right'}\n                  iconClassName={'cmp-pressreleaselisting__title-arrow'}\n                />\n              </h3>\n            </a>\n          </article>\n        );\n      })\n      .slice(firstIndexToTake, firstIndexToTake + paginationPageSize);\n  }, [searchText, category, year, pressReleases, filteredPressReleases]);\n\n  return (\n    <div className=\"cmp-pressreleaselisting__container\">\n      {pressReleaseListingHtml}\n      <Pagination\n        setPage={setPageNumber}\n        currentPage={pageNumber}\n        numberOfItems={filteredPressReleases.length}\n        pageSize={paginationPageSize}\n      />\n    </div>\n  );\n}\n","import React, {useState, useEffect} from 'react';\nimport {useFilter, FilterStartingValues} from './useFilter';\nimport {\n  IntermediateParsedPressRelease,\n  paginationPageSize,\n  PressRelease,\n  PressReleaseListing,\n  PressReleaseListingInternationalization,\n} from './PressReleaseListing';\nimport {Icon} from './Icon';\n\nfunction escapeRegex(string: string): string {\n  return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction isNullOrWhitespace(input: string): boolean {\n  return !input || !input.trim();\n}\n\nfunction currentAndLastThreeYears() {\n  const currentYear = new Date().getFullYear();\n\n  const years = [];\n\n  for (let i = currentYear; i > currentYear - 4; i--) {\n    years.push(i);\n  }\n\n  return years;\n}\n\nfunction transformPressRelease(\n  pressRelease: IntermediateParsedPressRelease\n): PressRelease {\n  const prCategoryArr = pressRelease.category.split(':');\n\n  let pressReleaseCategory: string;\n\n  if (prCategoryArr.length < 2) {\n    pressReleaseCategory = '';\n  } else if (!isNullOrWhitespace(prCategoryArr[1])) {\n    pressReleaseCategory = prCategoryArr[1].replace('-',' ');\n  } else {\n    pressReleaseCategory = prCategoryArr[0];\n  }\n\n  return {\n    title: pressRelease.title,\n    body: pressRelease.body,\n    date: new Date(pressRelease.date),\n    category: pressReleaseCategory,\n    link: pressRelease.link,\n    key: pressRelease.key,\n  };\n}\n\nfunction shouldShowPressRelease(\n  searchText: string,\n  category: string | null,\n  year: number | null,\n  pressRelease: PressRelease\n): boolean {\n  if (year !== null && year !== pressRelease.date.getFullYear()) {\n    return false;\n  }\n\n  if (\n    !isNullOrWhitespace(searchText) &&\n    pressRelease.title.match(RegExp(escapeRegex(searchText.trim()), 'gi')) ===\n      null\n  ) {\n    return false;\n  }\n\n  if (\n    category !== null &&\n    pressRelease.category.match(RegExp(escapeRegex(category), 'gi')) === null\n  ) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction preventSubmit(e: React.SyntheticEvent) {\n  e.preventDefault();\n}\n\ninterface FilterInternationalization {\n  showingOfString: string;\n  searchPlaceholder: string;\n  yearLabel: string;\n  searchLabel: string;\n  categoryLabel: string;\n  clearLabel: string;\n  categoryCorporateLabel: string;\n  categoryArchitecturalCoatingsLabel: string;\n  categoryFinancialLabel: string;\n  categoryInnovationLabel: string;\n  categoryIndustrialLabel: string;\n  categorySustainabilityLabel: string;\n  categoryEmployeeLabel: string;\n  categoryCultureLabel: string;\n  categoryManufacturingAndDistributionLabel: string;\n  categoryIndustrialCoatingsLabel: string;\n  categoryLeadershipLabel: string;\n  categoryStoresLabel: string;\n  categoryInclusionDiversityEquityLabel: string;\n  categoryCommunityEngagementLabel: string;\n  categoryBuildingOurFutureLabel: string;\n}\n\ninterface FilterProps {\n  spritePath: string;\n  filterStartingValues?: FilterStartingValues;\n  prInternationalization?: PressReleaseListingInternationalization;\n  filterInternationalization?: FilterInternationalization;\n}\n\nexport function Filter({\n  spritePath,\n  filterStartingValues,\n  prInternationalization = {\n    noPrsFound: 'No press releases found.',\n    noFilteredPrsFound:\n      'No press releases found with the current filter settings.',\n  },\n  filterInternationalization = {\n    showingOfString: 'Showing {current} of {total}',\n    searchPlaceholder: 'Search...',\n    yearLabel: 'Year',\n    searchLabel: 'Search',\n    categoryLabel: 'Category',\n    clearLabel: 'Clear',\n    categoryCorporateLabel: 'Corporate',\n    categoryArchitecturalCoatingsLabel: 'Architectural Coatings',\n    categoryFinancialLabel: 'Financial',\n    categoryInnovationLabel: 'Innovation',\n    categoryIndustrialLabel: 'Industrial',\n    categorySustainabilityLabel: 'Sustainability',\n    categoryEmployeeLabel: 'Employee',\n    categoryCultureLabel: 'Culture',\n    categoryManufacturingAndDistributionLabel: 'Manufacturing & Distribution',\n    categoryIndustrialCoatingsLabel: 'Industrial Coatings',\n    categoryLeadershipLabel: 'Leadership',\n    categoryStoresLabel: 'Stores',\n    categoryInclusionDiversityEquityLabel: 'Inclusion, Diversity & Equity',\n    categoryCommunityEngagementLabel: 'Community & Engagement',\n    categoryBuildingOurFutureLabel: 'Building Our Future',\n  },\n}: FilterProps) {\n  const filter = useFilter(filterStartingValues);\n  const [searchText, setSearchText, category, setCategory, year, setYear] =\n    filter;\n  const [pressReleases, setPressReleases] = useState<PressRelease[]>([]);\n  const [filteredPressReleases, setFilteredPressReleases] = useState<\n    PressRelease[]\n  >([]);\n  const [pageNumber, setPageNumber] = useState(0);\n\n  useEffect(() => {\n    const jsonScript = document.getElementById('pressReleaseJsonOutput');\n\n    if (jsonScript === null) {\n      return;\n    }\n\n    let parsedPressReleases: IntermediateParsedPressRelease[];\n\n    try {\n      parsedPressReleases = JSON.parse(jsonScript.innerHTML);\n    } catch (error) {\n      console.error(error);\n      return;\n    }\n\n    if (!Array.isArray(parsedPressReleases)) {\n      return;\n    }\n\n    const parsedPrs = parsedPressReleases.map(transformPressRelease);\n\n    setPressReleases(parsedPrs);\n\n    const filteredPrs = parsedPrs.filter((pressRelease: PressRelease) =>\n      shouldShowPressRelease(searchText, category, year, pressRelease)\n    );\n\n    setFilteredPressReleases(filteredPrs);\n  }, []);\n\n  useEffect(() => {\n    const filteredPrs = pressReleases.filter((pressRelease: PressRelease) =>\n      shouldShowPressRelease(searchText, category, year, pressRelease)\n    );\n\n    setFilteredPressReleases(filteredPrs);\n  }, [searchText, category, year, pressReleases, pageNumber]);\n\n  function resetPageNumber() {\n    setPageNumber(0);\n  }\n\n  function updateSearchText(event) {\n    setSearchText(event.target.value);\n    resetPageNumber();\n  }\n\n  function updateCategory(event) {\n    const eventValue = event.target.value;\n\n    setCategory(eventValue === 'none' ? null : eventValue);\n    resetPageNumber();\n  }\n\n  function updateYear(event) {\n    const parsedYear = parseInt(event.target.value, 10);\n\n    setYear(isNaN(parsedYear) ? null : parsedYear);\n    resetPageNumber();\n  }\n\n  function resetFilter() {\n    setSearchText('');\n    setCategory(null);\n    setYear(null);\n    resetPageNumber();\n  }\n\n  const dropDownIcon = (\n    <Icon\n      spritePath={spritePath}\n      iconName={'filter-dropdown-arrow'}\n      iconClassName={'cmp-pressreleaselisting__filter-form-arrow'}\n    />\n  );\n\n  const firstIndexToTake = pageNumber * paginationPageSize;\n\n  return (\n    <div className=\"cmp-pressreleaselisting\">\n      <div className=\"cmp-pressreleaselisting__counter\">\n        {filterInternationalization.showingOfString\n          .replace(\n            '{current}',\n            Math.min(\n              paginationPageSize,\n              filteredPressReleases.length - firstIndexToTake\n            ).toString()\n          )\n          .replace('{total}', pressReleases.length)}\n      </div>\n      <div className=\"cmp-pressreleaselisting__content\">\n        <form\n          className=\"cmp-pressreleaselisting__filter-form\"\n          onSubmit={preventSubmit}\n          onReset={resetFilter}\n        >\n          <div className=\"cmp-pressreleaselisting__filter-form-element-with-icon-container\">\n            <input\n              className=\"cmp-pressreleaselisting__filter-form-element\"\n              onChange={updateSearchText}\n              value={searchText}\n              placeholder={filterInternationalization.searchPlaceholder}\n              aria-label={filterInternationalization.searchLabel}\n            />\n            <Icon\n              spritePath={spritePath}\n              iconName={'filter-search'}\n              iconClassName={'cmp-pressreleaselisting__filter-form-search'}\n            />\n          </div>\n          <div className=\"cmp-pressreleaselisting__filter-form-element-with-icon-container\">\n            <select\n              className=\"cmp-pressreleaselisting__filter-form-element\"\n              onChange={updateCategory}\n              value={category === null ? 'none' : category}\n              aria-label={filterInternationalization.categoryLabel}\n            >\n              <option value=\"none\">\n                {filterInternationalization.categoryLabel}\n              </option>\n              <option value=\"corporate\">\n                {filterInternationalization.categoryCorporateLabel}\n              </option>\n              <option value=\"architectural-coatings\">\n                {filterInternationalization.categoryArchitecturalCoatingsLabel}\n              </option>\n              <option value=\"financial\">\n                {filterInternationalization.categoryFinancialLabel}\n              </option>\n              <option value=\"innovation\">\n                {filterInternationalization.categoryInnovationLabel}\n              </option>\n              <option value=\"industrial\">\n                {filterInternationalization.categoryIndustrialLabel}\n              </option>\n              <option value=\"sustainability\">\n                {filterInternationalization.categorySustainabilityLabel}\n              </option>\n              <option value=\"employee\">\n                {filterInternationalization.categoryEmployeeLabel}\n              </option>\n              <option value=\"culture\">\n                {filterInternationalization.categoryCultureLabel}\n              </option>\n              <option value=\"manufacturing-&-distribution\">\n                {\n                  filterInternationalization.categoryManufacturingAndDistributionLabel\n                }\n              </option>\n              <option value=\"industrial-coatings\">\n                {filterInternationalization.categoryIndustrialCoatingsLabel}\n              </option>\n              <option value=\"leadership\">\n                {filterInternationalization.categoryLeadershipLabel}\n              </option>\n              <option value=\"stores\">\n                {filterInternationalization.categoryStoresLabel}\n              </option>\n              <option value=\"inclusion,-diversity-&-equity\">\n                {\n                  filterInternationalization.categoryInclusionDiversityEquityLabel\n                }\n              </option>\n              <option value=\"community-engagement\">\n                {filterInternationalization.categoryCommunityEngagementLabel}\n              </option>\n              <option value=\"building-our-future\">\n                {filterInternationalization.categoryBuildingOurFutureLabel}\n              </option>\n            </select>\n            {dropDownIcon}\n          </div>\n          <div className=\"cmp-pressreleaselisting__filter-form-element-with-icon-container\">\n            <select\n              className=\"cmp-pressreleaselisting__filter-form-element\"\n              onChange={updateYear}\n              value={year === null ? 'None' : year.toString()}\n              aria-label={filterInternationalization.yearLabel}\n            >\n              <option value=\"None\">\n                {filterInternationalization.yearLabel}\n              </option>\n              {currentAndLastThreeYears().map((prYear) => {\n                const prYearString = prYear.toString();\n                return (\n                  <option key={prYearString} value={prYearString}>\n                    {prYearString}\n                  </option>\n                );\n              })}\n            </select>\n            {dropDownIcon}\n          </div>\n          <button\n            className=\"cmp-pressreleaselisting__filter-form-clear\"\n            type=\"reset\"\n          >\n            {filterInternationalization.clearLabel}\n          </button>\n        </form>\n        <PressReleaseListing\n          searchText={searchText}\n          category={category}\n          year={year}\n          pageNumber={pageNumber}\n          setPageNumber={setPageNumber}\n          pressReleases={pressReleases}\n          filteredPressReleases={filteredPressReleases}\n          i18nMessages={prInternationalization}\n          spritePath={spritePath}\n        />\n      </div>\n    </div>\n  );\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {Filter} from './Filter';\n\nconst reactElem = document.getElementById('pressReleaseReact');\n\nconst spritePath = reactElem.dataset.spriteSheetPath;\n\nReactDOM.render(\n  <React.StrictMode>\n    <Filter spritePath={spritePath} />\n  </React.StrictMode>,\n  reactElem\n);\n","import {useState} from 'react';\n\nexport interface FilterStartingValues {\n  searchText?: string;\n  category?: string;\n  year?: number;\n}\n\nexport function useFilter(startingValues?: FilterStartingValues) {\n  const [searchText, setSearchText] = useState<string>(\n    startingValues?.searchText !== undefined ? startingValues.searchText : ''\n  );\n  const [category, setCategory] = useState<string | null>(\n    startingValues?.category !== undefined ? startingValues.category : null\n  );\n  const [year, setYear] = useState<number | null>(\n    startingValues?.year !== undefined ? startingValues.year : null\n  );\n\n  return [searchText, setSearchText, category, setCategory, year, setYear];\n}\n"],"names":["currentPage","pageSize","numberOfItems","i18nLabel","setPage","pages","useMemo","Array","Math","ceil","fill","className","role","map","_","i","page","key","replace","onClick","bind","type","disabled","Icon","spritePath","iconName","iconClassName","xlinkHref","pressReleaseDateFormattingOptions","month","year","day","PressReleaseListing","searchText","category","pageNumber","setPageNumber","pressReleases","filteredPressReleases","i18nMessages","pressReleaseListingHtml","length","noPrsFound","noFilteredPrsFound","firstIndexToTake","pressRelease","date","toLocaleDateString","href","link","title","I","slice","escapeRegex","string","isNullOrWhitespace","input","trim","transformPressRelease","prCategoryArr","split","pressReleaseCategory","body","Date","shouldShowPressRelease","getFullYear","match","RegExp","preventSubmit","e","preventDefault","reactElem","document","getElementById","dataset","spriteSheetPath","filterStartingValues","prInternationalization","filterInternationalization","showingOfString","searchPlaceholder","yearLabel","searchLabel","categoryLabel","clearLabel","categoryCorporateLabel","categoryArchitecturalCoatingsLabel","categoryFinancialLabel","categoryInnovationLabel","categoryIndustrialLabel","categorySustainabilityLabel","categoryEmployeeLabel","categoryCultureLabel","categoryManufacturingAndDistributionLabel","categoryIndustrialCoatingsLabel","categoryLeadershipLabel","categoryStoresLabel","categoryInclusionDiversityEquityLabel","categoryCommunityEngagementLabel","categoryBuildingOurFutureLabel","filter","useFilter","setSearchText","setCategory","setYear","setPressReleases","useState","setFilteredPressReleases","resetPageNumber","useEffect","jsonScript","parsedPressReleases","JSON","parse","innerHTML","error","isArray","parsedPrs","filteredPrs","dropDownIcon","min","toString","onSubmit","onReset","onChange","event","target","value","placeholder","eventValue","parsedYear","parseInt","isNaN","currentYear","years","push","currentAndLastThreeYears","prYear","prYearString","startingValues","undefined"],"sourceRoot":""}