{"version":3,"file":"js/explore-by-work.min.js","mappings":"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","sources":["webpack:///./src/js/helpers/page/common/error.ts","webpack:///./src/js/wc/explore-by/work/NFBExploreByWorkHeader.ts","webpack:///./src/js/wc/explore-by/work/NFBExploreByWorkFilter.ts","webpack:///./src/js/wc/explore-by/work/NFBExploreByWorkList.ts","webpack:///./src/sass/wc/NFBAlphaFilter.sass","webpack:///./src/js/wc/NFBAlphabetFilter.ts"],"sourcesContent":["import { html } from 'lit/static-html.js'\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js'\n\nexport const getNoResultFoundMessage = (isDark: boolean) => {\n  return html`\n    <div data-cy=\"no-result-error\" class=\"nfb-error-message ${isDark ? 'nfb-error-message--dark' : ''}\">\n      <p>${window.pgettext('No result found error message', 'Sorry, none of our films matched your search criteria.')}</p>\n      <ul>\n          <li>${window.pgettext('No result found error message', 'Please check to make sure you checked off the correct filters at the top of the page.')}</li>\n          <li>${window.pgettext('No result found error message', 'Try a more general search.')}</li>\n      </ul>\n      <p>${window.pgettext('No result found error message', 'Not all films from our collection are available online.')}</p>\n      <p>\n        ${window.pgettext('No result found error message', 'It’s possible that the film you’re searching for is not on NFB.ca.')}\n        <br/>\n        ${unsafeHTML(window.interpolate(window.pgettext('No result found error message', 'Please consult the <a href=\"%s\">complete NFB Collection.</a>'), [window.gettext('https://collection.nfb.ca/')]))}\n      </p>\n    </div>`\n}\n","import { LitElement, html, nothing } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\n\nimport { store } from '@src/js/redux/store'\nimport { ExploreByWorkPageState } from '@src/js/redux/exploreByWorkPageReducer'\n\n// @ts-expect-error Lit Sass import\nimport style from '@web-nfb/frontend-static/design-system/sass/elements/page.sass?lit'\n\n@customElement('nfb-explore-by-work-header')\nexport class NFBExploreByWorkHeader extends LitElement {\n  @state()\n  _count: number\n\n  @state()\n  _titleLetter: string\n\n  _pageState: ExploreByWorkPageState\n\n  static get styles () {\n    return [style]\n  }\n\n  constructor () {\n    super()\n    this.onStateChanged = this.onStateChanged.bind(this)\n    this._pageState = store.getState().exploreByWorkPage\n\n    store.subscribe(this.onStateChanged)\n  }\n\n  onStateChanged () {\n    const oldTotal = this._pageState.total\n    const oldTitleLetter = this._pageState.titleLetter\n\n    this._pageState = store.getState().exploreByWorkPage\n\n    if (oldTotal !== this._pageState.total && !this._pageState.isLoading) {\n      this._count = this._pageState.total\n    }\n\n    if (oldTitleLetter !== this._pageState.titleLetter) {\n      this._titleLetter = this._pageState.titleLetter\n    }\n  }\n\n  render () {\n    return html`\n    <div class=\"nfb-page__title\">\n      <h1>\n        ${this._titleLetter ? html`${this._titleLetter.toUpperCase()}` : html`${window.pgettext('Explore by title header', 'Explore all films')}`}\n        ${this._count >= 0 ? html`(${this._count})` : nothing}\n      </h1>\n    </div>\n    `\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'nfb-explore-by-work-header': NFBExploreByWorkHeader\n  }\n}\n","/* ==========================================================================\n  NFBExploreByWorkFilter Web Component\n  ========================================================================== */\nimport { css, LitElement, nothing } from 'lit'\nimport { html } from 'lit/static-html.js'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nimport '@web-nfb/frontend-static/design-system/wc/form/NFBSelect'\nimport '@web-nfb/frontend-static/design-system/wc/form/NFBSelectMultiple'\nimport '@web-nfb/frontend-static/design-system/wc/form/NFBCheckbox'\nimport '@web-nfb/frontend-static/design-system/wc/slider/NFBSlider'\n\nimport { store } from '@src/js/redux/store'\nimport {\n  setGenre,\n  setLanguage,\n  setAvailability,\n  setSort,\n  setCC,\n  setSafeSearch,\n  setDV,\n  initialFilterList,\n  ExploreByWorkFilterList,\n  setAllFilters,\n  setYearMin,\n  setYearMax,\n  setDurationMin,\n  setDurationMax,\n  ExploreByWorkPageState,\n  setTitleLetter,\n  SortOrder,\n  SORT_ORDER\n} from '@src/js/redux/exploreByWorkPageReducer'\nimport { secondsToMinutes, minutesToSeconds } from '@src/js/helpers/format'\n\n// @ts-expect-error Lit Sass import\nimport filtersStyle from '@web-nfb/frontend-static/design-system/sass/elements/filters.sass?lit'\n\n@customElement('nfb-explore-by-work-filter')\nexport default class NFBExploreByWorkFilter extends LitElement {\n  @property({ type: Number, attribute: 'year-min' })\n  yearMin: number\n\n  @property({ type: Number, attribute: 'year-max' })\n  yearMax: number\n\n  @property({ type: Number, attribute: 'duration-min' })\n  durationMin: number\n\n  @property({ type: Number, attribute: 'duration-max' })\n  durationMax: number\n\n  @state()\n  _filters: ExploreByWorkFilterList = initialFilterList\n\n  @state()\n  _languageOptionList: Record<string, string>[] = []\n\n  @state()\n  _genreOptionList: Record<string, string>[] = []\n\n  @state()\n  _availabilityOptionList: Record<string, string>[] = []\n\n  @state()\n  _sortOptionList: Record<string, string>[] = []\n\n  @state()\n  _letterList: object\n\n  _pageState: ExploreByWorkPageState\n\n  static get styles () {\n    return [\n      filtersStyle,\n      css`\n        nfb-checkbox {\n          font-size: .875rem;\n          padding: 0 0.25rem;\n        }\n        \n        nfb-checkbox, nfb-slider {\n          min-height: 38px; /* we want same height as nfb-select */\n          display: flex;\n          align-items: center;\n        }\n      `\n    ]\n  }\n\n  getClasses (): Record<string, boolean> {\n    return {\n      'nfb-form': true,\n      'nfb-filters': true,\n      'nfb-form--dark': true,\n      'nfb-filters--dark': true\n    }\n  }\n\n  constructor () {\n    super()\n    this.onStateChanged = this.onStateChanged.bind(this)\n    this.onAlphaFilterClick = this.onAlphaFilterClick.bind(this)\n\n    this._pageState = store.getState().exploreByWorkPage\n    store.subscribe(this.onStateChanged)\n  }\n\n  connectedCallback (): void {\n    super.connectedCallback()\n    this.initFilters()\n  }\n\n  initFilters () {\n    // Get values from URL\n    const urlParams = new URLSearchParams(window.location.search)\n\n    // Language\n    this._languageOptionList = this.getLanguageList()\n    let defaultLanguage = initialFilterList.language\n    const languageFromURL = urlParams.get('language')\n    if (languageFromURL && this._languageOptionList.map(item => item.value).includes(languageFromURL)) {\n      defaultLanguage = languageFromURL\n    }\n\n    // Genre\n    this._genreOptionList = this.getGenreList()\n    const defaultGenreList = urlParams.getAll('genre')\n      .filter((value: string) => this._genreOptionList.find(item => item.value === value)) ??\n      initialFilterList.genre\n\n    // Availability\n    this._availabilityOptionList = this.getAvailabilityList()\n\n    const defaultAvailabilityList = this.getAvailabilityFromURL(urlParams) ??\n      initialFilterList.availability\n\n    // Sort\n    this._sortOptionList = this.getSortList()\n    let defaultSort = initialFilterList.sort\n    const sortFromURL = urlParams.get('sort_order')\n    if (sortFromURL && this._sortOptionList.map(item => item.value).includes(sortFromURL)) {\n      defaultSort = sortFromURL as SortOrder\n    }\n\n    // CC, DV, Safe search\n    const defaultCC = this.getCCFromURL(urlParams)\n    const defaultDV = this.getDVFromURL(urlParams)\n    const defaultSafeSearch = this.getSafeSearchFromURL(urlParams)\n\n    // Year\n    const defaultYearMin = urlParams.get('production_year_min')\n      ? parseInt(urlParams.get('production_year_min')!)\n      : initialFilterList.yearMin\n    const defaultYearMax = urlParams.get('production_year_max')\n      ? parseInt(urlParams.get('production_year_max')!)\n      : initialFilterList.yearMax\n\n    // Duration\n    const defaultDurationMin = urlParams.get('duration_min')\n      ? parseInt(urlParams.get('duration_min')!)\n      : initialFilterList.durationMin\n    const defaultDurationMax = urlParams.get('duration_max')\n      ? parseInt(urlParams.get('duration_max')!)\n      : initialFilterList.durationMax\n\n    // Letter\n    const defaultTitleLetter = urlParams.get('alpha_filter')\n      ? urlParams.get('alpha_filter')!.toLowerCase()\n      : initialFilterList.titleLetter\n\n    this._filters = {\n      language: defaultLanguage,\n      genre: defaultGenreList,\n      availability: defaultAvailabilityList,\n      sort: defaultSort,\n      cc: defaultCC,\n      dv: defaultDV,\n      safeSearch: defaultSafeSearch,\n      yearMin: defaultYearMin,\n      yearMax: defaultYearMax,\n      durationMin: defaultDurationMin,\n      durationMax: defaultDurationMax,\n      titleLetter: defaultTitleLetter\n    }\n    store.dispatch(setAllFilters(this._filters))\n  }\n\n  getLanguageList () {\n    let languageList = []\n    const scriptEl = document.querySelector('#languages-data')\n    if (scriptEl?.textContent) {\n      languageList = JSON.parse(scriptEl.textContent)\n    }\n\n    return languageList\n  }\n\n  getGenreList () {\n    let genreList = []\n    const scriptEl = document.querySelector('#genres-data')\n    if (scriptEl?.textContent) {\n      genreList = JSON.parse(scriptEl.textContent).map((value: string) => {\n        return {\n          label: value,\n          value\n        }\n      })\n    }\n\n    return genreList\n  }\n\n  getAvailabilityList () {\n    let availabilityList = []\n    const scriptEl = document.querySelector('#availabilities-data')\n    if (scriptEl?.textContent) {\n      availabilityList = JSON.parse(scriptEl.textContent)\n    }\n\n    return availabilityList\n  }\n\n  getSortList () {\n    let sortList = []\n    const scriptEl = document.querySelector('#sort-orders-data')\n    if (scriptEl?.textContent) {\n      sortList = JSON.parse(scriptEl.textContent)\n    }\n\n    return sortList\n  }\n\n  getAvailabilityFromURL (urlParams: URLSearchParams): string[] {\n    const availabilityList: string[] = urlParams.getAll('availability')\n\n    const legacyMapping: Record<string, string> = {\n      vod: 'rental',\n      dto: 'download'\n    }\n\n    const filteredList = availabilityList\n      .filter((value: string) => {\n        // check if value is in valid option\n        if (this._availabilityOptionList.find(item => item.value === value)) {\n          return true\n        }\n\n        // check it it's legacy value for retrocompatibilty\n        if (Object.keys(legacyMapping).includes(value)) {\n          return true\n        }\n\n        return false\n      })\n\n    // make sure to transform legacy value\n    return filteredList.map(value => {\n      for (const oldValue in legacyMapping) {\n        if (value === oldValue) {\n          return legacyMapping[oldValue]\n        }\n      }\n      return value\n    })\n  }\n\n  getCCFromURL (urlParams: URLSearchParams): boolean {\n    const oldAccessibilityList: string[] = urlParams.getAll('accessibility')\n    // legacy value for retro compatibility\n    if (oldAccessibilityList.includes('CC')) {\n      return true\n    }\n\n    return urlParams.get('cc') === 'true'\n  }\n\n  getDVFromURL (urlParams: URLSearchParams): boolean {\n    const oldAccessibilityList: string[] = urlParams.getAll('accessibility')\n    // legacy value for retro compatibility\n    if (oldAccessibilityList.includes('DV')) {\n      return true\n    }\n\n    return urlParams.get('dv') === 'true'\n  }\n\n  getSafeSearchFromURL (urlParams: URLSearchParams): boolean {\n    const safeSearch: string|null = urlParams.get('safe_search')\n\n    // legacy value for retro compatibility\n    if (safeSearch === 'on') {\n      return true\n    }\n\n    return safeSearch === 'true'\n  }\n\n  onStateChanged (): void {\n    const oldLetterList = JSON.stringify(this._letterList)\n    const oldTitleLetter = this._pageState.titleLetter\n\n    this._pageState = store.getState().exploreByWorkPage\n\n    // Update letter list\n    if (oldLetterList !== JSON.stringify(this._pageState.letterList)) {\n      this._letterList = this._pageState.letterList\n    }\n\n    // Updata title letter (if we just change sort and it was forced in reducer)\n    if (\n      oldTitleLetter !== this._filters.titleLetter &&\n      this._filters.titleLetter !== this._pageState.titleLetter) {\n      this._filters.titleLetter = this._pageState.titleLetter\n    }\n  }\n\n  onLanguageChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      language: e.detail\n    }\n    store.dispatch(setLanguage(e.detail))\n  }\n\n  onGenreChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      genre: e.detail\n    }\n    store.dispatch(setGenre(e.detail))\n  }\n\n  onAvailabilityChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      availability: e.detail\n    }\n    store.dispatch(setAvailability(e.detail))\n  }\n\n  onSortChange (e: CustomEvent): void {\n    const sort = (e.detail as SortOrder) ?? SORT_ORDER.PRODUCTION_DATE\n    this._filters = {\n      ...this._filters,\n      sort\n    }\n    store.dispatch(setSort(sort))\n  }\n\n  onCCChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      cc: e.detail\n    }\n    store.dispatch(setCC(e.detail))\n  }\n\n  onDVChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      dv: e.detail\n    }\n    store.dispatch(setDV(e.detail))\n  }\n\n  onSafeSearchChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      safeSearch: e.detail\n    }\n    store.dispatch(setSafeSearch(e.detail))\n  }\n\n  onYearMinChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      yearMin: e.detail\n    }\n    store.dispatch(setYearMin(e.detail))\n  }\n\n  onYearMaxChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      yearMax: e.detail\n    }\n    store.dispatch(setYearMax(e.detail))\n  }\n\n  onDurationMinChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      durationMin: minutesToSeconds(e.detail)\n    }\n    store.dispatch(setDurationMin(this._filters.durationMin!))\n  }\n\n  onDurationMaxChange (e: CustomEvent): void {\n    this._filters = {\n      ...this._filters,\n      durationMax: minutesToSeconds(e.detail)\n    }\n    store.dispatch(setDurationMax(this._filters.durationMax!))\n  }\n\n  showAlphaFilter (): boolean {\n    if (this._filters.sort === SORT_ORDER.ALPHABETICAL) {\n      return true\n    }\n\n    return false\n  }\n\n  onAlphaFilterClick (e: Event): void {\n    e.preventDefault()\n    const letter = (e.currentTarget as HTMLElement).dataset.value\n\n    if (letter) {\n      this._filters = {\n        ...this._filters,\n        titleLetter: letter\n      }\n      store.dispatch(setTitleLetter(letter))\n    }\n  }\n\n  showResetFilters (): boolean {\n    return JSON.stringify(this._filters) !== JSON.stringify(initialFilterList)\n  }\n\n  resetFilters (): void {\n    this._filters = {\n      ...initialFilterList\n    }\n    store.dispatch(setAllFilters(this._filters))\n  }\n\n  render () {\n    return html`\n      <div>\n        <div class=\"${classMap(this.getClasses())}\">\n          <nfb-select\n            field-name=\"language\"\n            selected-value=\"${this._filters.language}\"\n            list-id=\"language-list\"\n            option-list=\"${JSON.stringify(this._languageOptionList)}\"\n            is-dark=\"true\"\n            is-compact=\"true\"\n            placeholder=\"${window.pgettext('Explore by title filters', 'Language')}\"\n            @select-change=\"${this.onLanguageChange}\"\n          >\n          </nfb-select>\n          \n          <nfb-select-multiple\n            field-name=\"genre\"\n            selected-value-list=\"${JSON.stringify(this._filters.genre)}\"\n            list-id=\"genre-list\"\n            option-list=\"${JSON.stringify(this._genreOptionList)}\"\n            is-dark=\"true\"\n            is-compact=\"true\"\n            placeholder=\"${window.pgettext('Explore by title filters', 'Genre')}\"\n            @select-change=\"${this.onGenreChange}\"\n          >\n          </nfb-select-multiple>\n\n          <nfb-select-multiple\n            field-name=\"availability\"\n            selected-value-list=\"${JSON.stringify(this._filters.availability)}\"\n            list-id=\"availability-list\"\n            option-list=\"${JSON.stringify(this._availabilityOptionList)}\"\n            is-dark=\"true\"\n            is-compact=\"true\"\n            placeholder=\"${window.pgettext('Explore by title filters', 'Availability')}\"\n            @select-change=\"${this.onAvailabilityChange}\"\n          >\n          </nfb-select-multiple>\n\n          <nfb-select\n            field-name=\"sort\"\n            selected-value=\"${this._filters.sort}\"\n            list-id=\"sort-list\"\n            option-list=\"${JSON.stringify(this._sortOptionList)}\"\n            is-dark=\"true\"\n            is-compact=\"true\"\n            placeholder=\"${window.pgettext('Explore by title filters', 'Order by')}\"\n            @select-change=\"${this.onSortChange}\"\n          >\n          </nfb-select>\n\n          <nfb-checkbox\n            label=\"${window.pgettext('Explore by title filters', 'CC')}\"\n            name=\"cc\"\n            tooltip=\"${window.pgettext('Explore by title filters', 'Closed captioned for the hearing impaired')}\"\n            is-dark=\"true\"\n            ?checked=\"${this._filters.cc}\"\n            @input-change=\"${this.onCCChange}\"\n          ></nfb-checkbox>\n\n          <nfb-checkbox\n            label=\"${window.pgettext('Explore by title filters', 'DV')}\"\n            name=\"dv\"\n            tooltip=\"${window.pgettext('Explore by title filters', 'Described video for the visually impaired')}\"\n            is-dark=\"true\"\n            ?checked=\"${this._filters.dv}\"\n            @input-change=\"${this.onDVChange}\"\n          ></nfb-checkbox>\n\n          <nfb-checkbox\n            label=\"${window.pgettext('Explore by title filters', 'Safe search')}\"\n            name=\"safe_search\"\n            tooltip=\"${window.pgettext('Explore by title filters', 'Only show films suitable for the general public')}\"\n            is-dark=\"true\"\n            ?checked=\"${this._filters.safeSearch}\"\n            @input-change=\"${this.onSafeSearchChange}\"\n          ></nfb-checkbox>\n\n          <nfb-slider\n            slider-min=\"${this.yearMin}\"\n            slider-max=\"${this.yearMax}\"\n            knob-start=\"${this._filters.yearMin ?? this.yearMin}\"\n            knob-end=\"${this._filters.yearMax ?? this.yearMax}\"\n            input-length-max=\"4\"\n            input-length-min=\"4\"\n            slider-id=\"production-year\"\n            is-dark=\"true\"\n            @nfbslider:minvaluechange=\"${this.onYearMinChange}\"\n            @nfbslider:maxvaluechange=\"${this.onYearMaxChange}\"\n          >\n          </nfb-slider>\n\n          <nfb-slider\n            slider-min=\"${secondsToMinutes(this.durationMin)}\"\n            slider-max=\"${secondsToMinutes(this.durationMax)}\"\n            knob-start=\"${secondsToMinutes(this._filters.durationMin ?? this.durationMin)}\"\n            knob-end=\"${secondsToMinutes(this._filters.durationMax ?? this.durationMax)}\"\n            input-length-max=\"3\"\n            input-length-min=\"3\"\n            slider-id=\"duration\"\n            min-label=\"${window.pgettext('Explore by title filters', 'min.')}\"\n            max-label=\"${window.pgettext('Explore by title filters', 'min.')}\"\n            is-dark=\"true\"\n            @nfbslider:minvaluechange=\"${this.onDurationMinChange}\"\n            @nfbslider:maxvaluechange=\"${this.onDurationMaxChange}\"\n          >\n          </nfb-slider>\n\n          ${this.showResetFilters()\n    ? html`<nfb-button\n            text=\"${window.pgettext('Explore by title filters', 'Clear filters')}\"\n            is-dark=\"true\"\n            icon-name=\"revert\"\n            primary-variant=\"pill\"\n            secondary-variant=\"discreet\"\n            size=\"sm\"\n            @click=\"${this.resetFilters}\"\n            data-cy=\"reset-filter\"\n          ></nfb-button>`\n    : nothing}\n      \n        </div>\n       \n        ${this.showAlphaFilter()\n    ? html`\n        <nfb-alpha-filter\n          include-number=\"true\"\n          selected-letter=\"${this._filters.titleLetter}\"\n          is-dark=\"true\"\n          .onClick=${this.onAlphaFilterClick}\n        ></nfb-alpha-filter>`\n    : nothing}\n\n      </div>`\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'nfb-explore-by-work-filter': NFBExploreByWorkFilter\n  }\n}\n","/**\n * Class NFBExploreByWorkList\n */\n\nimport { css, LitElement, nothing } from 'lit'\nimport { html } from 'lit/static-html.js'\nimport { customElement, state } from 'lit/decorators.js'\nimport pick from 'lodash/pick'\n\nimport {\n  GTM_LIST_TYPE,\n  GTM_LIST_CATEGORY,\n  GTM_EVENTS,\n  DEFAULT_GRID_LIST_LENGTH,\n  GTM_LIST_ID\n} from '@src/js/constants'\nimport { getNoResultFoundMessage } from '@src/js/helpers/page/common/error'\nimport { GTMSelectWork } from '@src/js/types/GTM'\nimport { store, RootState } from '@src/js/redux/store'\nimport { selectWorkById } from '@src/js/redux/worksReducer'\nimport {\n  ExploreByWorkPageState,\n  fetchExploreByWork,\n  initialFilterList,\n  resetSearchResult,\n  setCurrentPage\n} from '@src/js/redux/exploreByWorkPageReducer'\nimport { bookmarkButtonType } from '@src/js/wc/cards/NFBDisplayWorkCard'\n\n// @ts-expect-error Lit Sass import\nimport gridListStyle from '@web-nfb/frontend-static/design-system/sass/layout/grid-list.sass?lit'\n\nconst filterListToObserve = Object.keys(initialFilterList)\n\n@customElement('nfb-explore-by-work-list')\nexport default class NFBExploreByWorkList extends LitElement {\n  @state()\n  _isLoading: boolean = true\n\n  @state()\n  _workIdList: number[] | null\n\n  @state()\n  _showSeeMore = false\n\n  @state()\n  _seeMoreLoading = false\n\n  @state()\n  _errorMessage: string | null = null\n\n  _rootState: RootState\n  _pageState: ExploreByWorkPageState\n\n  static get styles () {\n    return [\n      gridListStyle,\n      css`\n        .nfb-error-message a {\n          color: var(--nfb-page-link-color)\n        }\n      `\n    ]\n  }\n\n  constructor () {\n    super()\n    this.onStateChanged = this.onStateChanged.bind(this)\n    this.loadMore = this.loadMore.bind(this)\n\n    this._rootState = store.getState()\n    this._pageState = this._rootState.exploreByWorkPage\n\n    store.subscribe(this.onStateChanged)\n  }\n\n  connectedCallback (): void {\n    super.connectedCallback()\n\n    let size = DEFAULT_GRID_LIST_LENGTH\n\n    const urlParams = new URLSearchParams(window.location.search)\n    const pageFromUrl = urlParams.get('page') ? parseInt(urlParams.get('page')!) : 1\n    if (pageFromUrl > 1) {\n      size = pageFromUrl * DEFAULT_GRID_LIST_LENGTH\n    }\n\n    this.searchWorks(1, size)\n    store.dispatch(setCurrentPage(pageFromUrl))\n  }\n\n  onStateChanged (): void {\n    const oldValues = JSON.stringify(pick(this._pageState, filterListToObserve))\n    this._rootState = store.getState()\n    this._pageState = this._rootState.exploreByWorkPage\n    const newValues = JSON.stringify(pick(this._pageState, filterListToObserve))\n\n    // check if there is a change in filters\n    if (oldValues !== newValues) {\n      store.dispatch(resetSearchResult())\n      this._isLoading = true\n      this.searchWorks(1)\n    }\n  }\n\n  async searchWorks (page: number = 1, size: number = DEFAULT_GRID_LIST_LENGTH): Promise<void> {\n    await store.dispatch(fetchExploreByWork({ page, size }))\n\n    this._workIdList = this._pageState.workIdList\n\n    if (this._workIdList.length < this._pageState.total) {\n      this._showSeeMore = true\n    } else {\n      this._showSeeMore = false\n    }\n\n    this._errorMessage = this._pageState.apiError\n\n    this._seeMoreLoading = false\n    this._isLoading = false\n\n    this.updateURL()\n  }\n\n  loadMore (): void {\n    this._seeMoreLoading = true\n    const newPage = this._pageState.currentPage + 1\n    store.dispatch(setCurrentPage(newPage))\n    this.searchWorks(newPage)\n  }\n\n  updateURL (): void {\n    const urlParams = new URLSearchParams()\n    urlParams.append('language', this._pageState.language)\n    this._pageState.genre.forEach(val => {\n      urlParams.append('genre', val)\n    })\n    this._pageState.availability.forEach(val => {\n      urlParams.append('availability', val)\n    })\n    urlParams.append('sort_order', this._pageState.sort)\n    if (this._pageState.cc) {\n      urlParams.append('cc', this._pageState.cc.toString())\n    }\n    if (this._pageState.dv) {\n      urlParams.append('dv', this._pageState.dv.toString())\n    }\n    if (this._pageState.safeSearch) {\n      urlParams.append('safe_search', this._pageState.safeSearch.toString())\n    }\n    if (this._pageState.yearMin) {\n      urlParams.append('production_year_min', this._pageState.yearMin.toString())\n    }\n    if (this._pageState.yearMax) {\n      urlParams.append('production_year_max', this._pageState.yearMax.toString())\n    }\n    if (this._pageState.durationMin) {\n      urlParams.append('duration_min', this._pageState.durationMin.toString())\n    }\n    if (this._pageState.durationMax) {\n      urlParams.append('duration_max', this._pageState.durationMax.toString())\n    }\n    if (this._pageState.titleLetter) {\n      urlParams.append('alpha_filter', this._pageState.titleLetter)\n    }\n    if (this._pageState.currentPage) {\n      urlParams.append('page', this._pageState.currentPage.toString())\n    }\n    window.history.pushState(null, '', `?${urlParams.toString()}`)\n  }\n\n  buildGTMAttributes (id: number, index: number) {\n    const gtmAttrs: GTMSelectWork = {\n      event: GTM_EVENTS.SELECT_WORK,\n      nfb_list_type: GTM_LIST_TYPE.GRID,\n      nfb_list_category: GTM_LIST_CATEGORY.EXPLORE,\n      nfb_list_id: GTM_LIST_ID.EXPLORE_BY_WORKS,\n      nfb_list_name: 'explore by title',\n      nfb_version_title: selectWorkById(this._rootState.works, id)?.title,\n      nfb_position: (index + 1).toString()\n    }\n\n    return JSON.stringify(gtmAttrs)\n  }\n\n  renderLoadMore () {\n    if (!this._workIdList?.length || !this._showSeeMore) {\n      return nothing\n    }\n\n    return html`\n      <nfb-see-more\n        is-loading=\"${this._seeMoreLoading}\"\n        .seeMoreClick=\"${this.loadMore}\"\n        text=\"${window.pgettext('Explore by title', 'Load More')}\"\n        is-dark=\"true\"\n        is-rounded=\"true\"\n      ></nfb-see-more>`\n  }\n\n  render () {\n    if (this._errorMessage) {\n      return html`\n        <div\n          class=\"nfb-error\" \n          data-cy=\"error-message\"\n        >\n          ${this._errorMessage}\n        </div>\n        `\n    } else if (this._workIdList?.length === 0 && !this._isLoading) {\n      return html`${getNoResultFoundMessage(true)}`\n    }\n\n    if (this._isLoading) {\n      return html`<nfb-spinner is-loading=\"true\" size=\"sm\"></nfb-spinner>`\n    }\n\n    return html`\n      <div class=\"nfb-grid-list nfb-grid-list--dark\">\n        ${this._workIdList?.map((id, index) => html`\n        <nfb-display-work-card\n          registry-id=\"${id}\"\n          bookmark-button-type=\"${bookmarkButtonType.add}\"\n          is-dark=\"true\"\n          is-rounded=\"true\"\n          gtm-attributes=\"${this.buildGTMAttributes(id, index)}\"\n        >\n        </nfb-display-work-card>\n        `)}\n        \n        ${this.renderLoadMore()}\n      </div>`\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'nfb-explore-by-work-list': NFBExploreByWorkList\n  }\n}\n","import {css} from 'lit';\nexport const styles = css`.nfb-alpha-filter {\n  --nfb-alpha-filter-hover-color: #1C7A3E;\n  --nfb-alpha-filter-text-color: #000000;\n  --nfb-alpha-filter-disabled-color: #B3B2B6;\n  font-family: \"Public Sans\", Georgia, serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 1.5rem;\n  color: #000;\n  text-align: center;\n}\n\n.nfb-alpha-filter ul {\n  list-style-type: none;\n  padding: 0;\n  margin: 0;\n}\n\n.nfb-alpha-filter li {\n  display: inline-block;\n  list-style-type: none;\n}\n\n.nfb-alpha-filter__letter {\n  text-transform: uppercase;\n  display: inline-block;\n  margin: 0;\n  cursor: pointer;\n  text-decoration: none;\n  outline: none;\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n  color: var(--nfb-alpha-filter-text-color);\n}\n\n.nfb-alpha-filter__letter:hover {\n  color: var(--nfb-alpha-filter-hover-color);\n  text-decoration: underline;\n}\n\n.nfb-alpha-filter__letter:focus-visible {\n  color: var(--nfb-alpha-filter-hover-color);\n}\n\n.nfb-alpha-filter__letter--selected, .nfb-alpha-filter__letter:focus-visible {\n  text-decoration: underline;\n  text-decoration-thickness: 3px;\n}\n\n.nfb-alpha-filter__letter--disabled {\n  pointer-events: none;\n  cursor: not-allowed;\n  text-decoration: none;\n  color: var(--nfb-alpha-filter-disabled-color);\n}\n\n.nfb-alpha-filter.nfb-alpha-filter--dark {\n  --nfb-alpha-filter-hover-color: #05EE80;\n  --nfb-alpha-filter-text-color: #FFFFFF;\n  --nfb-alpha-filter-disabled-color: #626065;\n}`;\nexport default styles;\n","/* ==========================================================================\n  NFBAlphaFilter Web Component\n  ========================================================================== */\n\nimport { LitElement, nothing } from 'lit'\nimport { html } from 'lit/static-html.js'\nimport { customElement, property } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nimport { stringToBooleanConverter } from '@web-nfb/frontend-static/design-system/wc/_utils'\n\n// @ts-expect-error Lit Sass import\nimport style from '@src/sass/wc/NFBAlphaFilter.sass?lit'\n\ninterface AlphaObject {\n  [key: string]: string | undefined\n}\n\n@customElement('nfb-alpha-filter')\nexport default class NFBAlphaFilter extends LitElement {\n  @property({ converter: stringToBooleanConverter, attribute: 'is-dark' })\n  isDark = false\n\n  @property({ type: String, attribute: 'selected-letter' })\n  selectedLetter = ''\n\n  @property({ converter: stringToBooleanConverter, attribute: 'include-number' })\n  includeNumber = false\n\n  @property({ type: Object, attribute: 'list' })\n  list: AlphaObject\n\n  @property()\n  onClick: (e: Event) => void = () => {}\n\n  static styles = [style]\n\n  _alphabet: string[] = 'abcdefghijklmnopqrstuvwxyz'.split('')\n\n  connectedCallback (): void {\n    super.connectedCallback()\n    if (this.includeNumber) {\n      this._alphabet = '#abcdefghijklmnopqrstuvwxyz'.split('')\n    }\n  }\n\n  getClasses (): Record<string, boolean> {\n    return {\n      'nfb-alpha-filter': true,\n      'nfb-alpha-filter--dark': this.isDark\n    }\n  }\n\n  getLetterClasses (letter: string): Record<string, boolean> {\n    return {\n      'nfb-alpha-filter__letter': true,\n      'nfb-alpha-filter__letter--selected': letter === this.selectedLetter,\n      'nfb-alpha-filter__letter--disabled': this.isLetterDisabled(letter)\n    }\n  }\n\n  isLetterDisabled (letter: string): boolean {\n    // If list is not defined, all letters should be active\n    if (!this.list) {\n      return false\n    }\n\n    return this.list[letter] === undefined\n  }\n\n  onKeydown (e: KeyboardEvent): void {\n    // Mimic onClick for Enter and Space event\n    const key: string = e.key\n\n    switch (key) {\n    case 'Enter':\n    case ' ':\n      this.onClick(e)\n      break\n    }\n  }\n\n  render () {\n    return html`\n      <div class=\"${classMap(this.getClasses())}\">\n        <ul>\n          ${this._alphabet.map((letter) => html`\n            <li>\n              <span\n                class=\"${classMap(this.getLetterClasses(letter))}\"\n                tabindex=\"${this.isLetterDisabled(letter) ? nothing : '0'}\"\n                @click=${this.onClick}\n                @keydown=\"${this.onKeydown}\"\n                data-value=\"${letter}\"\n              >\n                ${letter}\n              </span>\n            </li>\n          `)}\n        </ul>\n      </div>`\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'nfb-alpha-filter': NFBAlphaFilter\n  }\n}\n"],"names":["getNoResultFoundMessage","isDark","NFBExploreByWorkHeader","store","oldTotal","oldTitleLetter","NFBExploreByWorkFilter","urlParams","defaultLanguage","languageFromURL","item","defaultGenreList","value","defaultAvailabilityList","defaultSort","sortFromURL","defaultCC","defaultDV","defaultSafeSearch","defaultYearMin","defaultYearMax","defaultDurationMin","defaultDurationMax","defaultTitleLetter","languageList","scriptEl","genreList","availabilityList","sortList","legacyMapping","oldValue","safeSearch","oldLetterList","e","sort","letter","filterListToObserve","NFBExploreByWorkList","size","pageFromUrl","oldValues","newValues","page","newPage","val","id","index","gtmAttrs","NFBAlphaFilter"],"sourceRoot":""}