{"version":3,"sources":["webpack:///./notes/components/mr_discussion_filter.vue","webpack:///notes/components/mr_discussion_filter.vue","webpack:///./notes/components/mr_discussion_filter.vue?c084","webpack:///./notes/components/mr_discussion_filter.vue?6170"],"names":["filterOptionToTrackingEventMap","comments","MR_FILTER_TRACKING_USER_COMMENTS","bot_comments","MR_FILTER_TRACKING_BOT_COMMENTS","allFilters","MR_FILTER_OPTIONS","map","f","value","components","GlCollapsibleListbox","GlButton","GlButtonGroup","GlIcon","GlSprintf","LocalStorageSync","mixins","InternalEvents","mixin","data","selectedFilters","previousFilters","computed","mapState","mergeRequestFilters","state","notes","discussionSortOrder","selectedFilterText","_this","length","__","firstSelected","find","text","isSortAsc","sortIcon","methods","mapActions","updateSortDirection","setDiscussionSortDirection","direction","filterListShown","trackEvent","MR_FILTER_TRACKING_OPENED","trackDropdownSelection","selectedItem","trackingEvent","applyFilters","updateMergeRequestFilters","localSyncFilters","filters","deselectAll","selectAll","select","allSelectedFilters","_this2","removedFilters","filter","filterValue","includes","addedFilters","concat","forEach","component","_vm","this","_c","_self","attrs","on","$event","_v","$options","scopedSlots","_u","key","fn","staticClass","content","_s","proxy","item","model","callback","$$v","expression"],"mappings":"6LAAA,I,wHCcA,MAAAA,EAAA,CACAC,SAAAC,mCACAC,aAAAC,mCAEAC,EAAAC,oBAAAC,KAAA,SAAAC,GAAA,OAAAA,EAAAC,SAEe,ICpBkR,EDoBlR,CACfC,WAAA,CACAC,yBACAC,aACAC,kBACAC,WACAC,cACAC,sBAEAC,OAAA,CAAAC,IAAAC,SACAC,UACA,CACAC,gBAAAhB,EACAiB,gBAAAjB,IAGAkB,SAAA,IACAC,YAAA,CACAC,oBAAA,SAAAC,GAAA,OAAAA,EAAAC,MAAAF,qBACAG,oBAAA,SAAAF,GAAA,OAAAA,EAAAC,MAAAC,uBAEAC,qBAAA,IAAAC,EAAA,KACA,aAAAC,GAAA,KAAAN,oBAEA,OAAAM,EAAA,OAAAC,aAAA,QAEA,MAAAC,EAAA3B,oBAAA4B,MACA,gBAAAzB,IAAA,OAAAqB,EAAAL,oBAAA,KAAAhB,KAGA,OAAAsB,IAAAzB,oBAAAyB,OACAC,aAAA,gBAEAD,EAAA,EACA,iBAAAE,EAAAE,qBAAAJ,EAAA,SAGAE,EAAAE,MAEAC,YACA,mBAAAR,qBAEAS,WACA,YAAAD,UAAA,+BAGAE,QAAA,IACAC,YAAA,4DACAC,sBACA,KAAAC,2BAAA,CACAC,UAAA,KAAAN,UAAA,gBAGAO,kBACA,KAAAC,WAAAC,8BAEAC,uBAAAC,GACA,MAAAC,EAAAhD,EAAA+C,GAEAC,GACA,KAAAJ,WAAAI,IAGAC,eACA,KAAAC,0BAAA,KAAA7B,kBAEA8B,iBAAAC,GACA,KAAAF,0BAAAE,GACA,KAAA/B,gBAAA+B,EACA,KAAA9B,gBAAA8B,GAEAC,cACA,KAAAhC,gBAAA,GACA,KAAAC,gBAAA,IAEAgC,YACA,KAAAjC,gBAAAhB,EACA,KAAAiB,gBAAAjB,GAEAkD,OAAAC,GAAA,IAAAC,EAAA,KACA,MAAAC,EAAA,KAAApC,gBAAAqC,QACA,SAAAC,GAAA,OAAAJ,EAAAK,SAAAD,MAEAE,EAAAN,EAAAG,QACA,SAAAC,GAAA,OAAAH,EAAAnC,gBAAAuC,SAAAD,MAEAF,EAAAK,OAAAD,GAEAE,SAAA,SAAAJ,GACAH,EAAAX,uBAAAc,MAGA,KAAAtC,gBAAAkC,IAGAlD,uC,YE5GI2D,EAAY,YACd,GHRW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACA,EAAG,qBAAqB,CAACE,MAAM,CAAC,MAAQJ,EAAItC,oBAAoB,cAAc,+BAA+B,YAAY,IAAI2C,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAON,EAAIzB,2BAA2B,CAAEC,UAAW8B,QAAcN,EAAIO,GAAG,KAAKL,EAAG,qBAAqB,CAACE,MAAM,CAAC,MAAQJ,EAAIzC,oBAAoB,cAAc,yBAAyB8C,GAAG,CAAC,MAAQL,EAAIf,oBAAoBe,EAAIO,GAAG,KAAKL,EAAG,kBAAkB,CAACA,EAAG,yBAAyB,CAACE,MAAM,CAAC,MAAQJ,EAAIQ,SAASpE,kBAAkB,cAAc4D,EAAIlC,GAAG,mBAAmB,+BAA+BkC,EAAIlC,GAAG,cAAc,qBAAqBkC,EAAIlC,GAAG,gBAAgB,SAAW,GAAG,UAAY,cAAcuC,GAAG,CAAC,MAAQL,EAAIvB,gBAAgB,OAASuB,EAAIjB,aAAa,MAAQiB,EAAIb,YAAY,aAAaa,EAAIZ,UAAU,OAASY,EAAIX,QAAQoB,YAAYT,EAAIU,GAAG,CAAC,CAACC,IAAI,SAASC,GAAG,WAAW,MAAO,CAACV,EAAG,YAAY,CAACW,YAAY,2CAA2C,CAACX,EAAG,aAAa,CAACE,MAAM,CAAC,QAAUJ,EAAIrC,oBAAoB8C,YAAYT,EAAIU,GAAG,CAAC,CAACC,IAAI,SAASC,GAAG,UAAS,QAAEE,IAAW,MAAO,CAACZ,EAAG,SAAS,CAACF,EAAIO,GAAGP,EAAIe,GAAGD,aAAmBd,EAAIO,GAAG,KAAKL,EAAG,UAAU,CAACE,MAAM,CAAC,KAAO,mBAAmB,KAAKY,OAAM,GAAM,CAACL,IAAI,YAAYC,GAAG,UAAS,KAAEK,IAAQ,MAAO,CAAiB,MAAfA,EAAK1E,MAAe2D,EAAG,SAAS,CAACF,EAAIO,GAAGP,EAAIe,GAAGE,EAAKhD,SAASiC,EAAG,OAAO,CAACF,EAAIO,GAAGP,EAAIe,GAAGE,EAAKhD,cAAciD,MAAM,CAAC3E,MAAOyD,EAAI7C,gBAAiBgE,SAAS,SAAUC,GAAMpB,EAAI7C,gBAAgBiE,GAAKC,WAAW,qBAAqBrB,EAAIO,GAAG,KAAKL,EAAG,YAAY,CAACE,MAAM,CAAC,KAAOJ,EAAI7B,UAAUkC,GAAG,CAAC,MAAQL,EAAI1B,wBAAwB,IAAI,KAEjjD,IGSpB,EACA,KACA,KACA,MAIa,UAAAyB,E","file":"1461.9a6e3892.chunk.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('local-storage-sync',{attrs:{\"value\":_vm.discussionSortOrder,\"storage-key\":\"sort_direction_merge_request\",\"as-string\":\"\"},on:{\"input\":function($event){return _vm.setDiscussionSortDirection({ direction: $event })}}}),_vm._v(\" \"),_c('local-storage-sync',{attrs:{\"value\":_vm.mergeRequestFilters,\"storage-key\":\"mr_activity_filters_2\"},on:{\"input\":_vm.localSyncFilters}}),_vm._v(\" \"),_c('gl-button-group',[_c('gl-collapsible-listbox',{attrs:{\"items\":_vm.$options.MR_FILTER_OPTIONS,\"header-text\":_vm.__('Filter activity'),\"show-select-all-button-label\":_vm.__('Select all'),\"reset-button-label\":_vm.__('Deselect all'),\"multiple\":\"\",\"placement\":\"bottom-end\"},on:{\"shown\":_vm.filterListShown,\"hidden\":_vm.applyFilters,\"reset\":_vm.deselectAll,\"select-all\":_vm.selectAll,\"select\":_vm.select},scopedSlots:_vm._u([{key:\"toggle\",fn:function(){return [_c('gl-button',{staticClass:\"!gl-rounded-br-none !gl-rounded-tr-none\"},[_c('gl-sprintf',{attrs:{\"message\":_vm.selectedFilterText},scopedSlots:_vm._u([{key:\"strong\",fn:function({ content }){return [_c('strong',[_vm._v(_vm._s(content))])]}}])}),_vm._v(\" \"),_c('gl-icon',{attrs:{\"name\":\"chevron-down\"}})],1)]},proxy:true},{key:\"list-item\",fn:function({ item }){return [(item.value === '*')?_c('strong',[_vm._v(_vm._s(item.text))]):_c('span',[_vm._v(_vm._s(item.text))])]}}]),model:{value:(_vm.selectedFilters),callback:function ($$v) {_vm.selectedFilters=$$v},expression:\"selectedFilters\"}}),_vm._v(\" \"),_c('gl-button',{attrs:{\"icon\":_vm.sortIcon},on:{\"click\":_vm.updateSortDirection}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<script>\nimport { GlCollapsibleListbox, GlButton, GlIcon, GlSprintf, GlButtonGroup } from '@gitlab/ui';\n// eslint-disable-next-line no-restricted-imports\nimport { mapActions, mapState } from 'vuex';\nimport { InternalEvents } from '~/tracking';\nimport LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';\nimport { __ } from '~/locale';\nimport {\n  MR_FILTER_OPTIONS,\n  MR_FILTER_TRACKING_OPENED,\n  MR_FILTER_TRACKING_USER_COMMENTS,\n  MR_FILTER_TRACKING_BOT_COMMENTS,\n} from '~/notes/constants';\n\nconst filterOptionToTrackingEventMap = {\n  comments: MR_FILTER_TRACKING_USER_COMMENTS,\n  bot_comments: MR_FILTER_TRACKING_BOT_COMMENTS,\n};\nconst allFilters = MR_FILTER_OPTIONS.map((f) => f.value);\n\nexport default {\n  components: {\n    GlCollapsibleListbox,\n    GlButton,\n    GlButtonGroup,\n    GlIcon,\n    GlSprintf,\n    LocalStorageSync,\n  },\n  mixins: [InternalEvents.mixin()],\n  data() {\n    return {\n      selectedFilters: allFilters,\n      previousFilters: allFilters,\n    };\n  },\n  computed: {\n    ...mapState({\n      mergeRequestFilters: (state) => state.notes.mergeRequestFilters,\n      discussionSortOrder: (state) => state.notes.discussionSortOrder,\n    }),\n    selectedFilterText() {\n      const { length } = this.mergeRequestFilters;\n\n      if (length === 0) return __('None');\n\n      const firstSelected = MR_FILTER_OPTIONS.find(\n        ({ value }) => this.mergeRequestFilters[0] === value,\n      );\n\n      if (length === MR_FILTER_OPTIONS.length) {\n        return __('All activity');\n      }\n      if (length > 1) {\n        return `%{strongStart}${firstSelected.text}%{strongEnd} +${length - 1} more`;\n      }\n\n      return firstSelected.text;\n    },\n    isSortAsc() {\n      return this.discussionSortOrder === 'asc';\n    },\n    sortIcon() {\n      return this.isSortAsc ? 'sort-lowest' : 'sort-highest';\n    },\n  },\n  methods: {\n    ...mapActions(['updateMergeRequestFilters', 'setDiscussionSortDirection']),\n    updateSortDirection() {\n      this.setDiscussionSortDirection({\n        direction: this.isSortAsc ? 'desc' : 'asc',\n      });\n    },\n    filterListShown() {\n      this.trackEvent(MR_FILTER_TRACKING_OPENED);\n    },\n    trackDropdownSelection(selectedItem) {\n      const trackingEvent = filterOptionToTrackingEventMap[selectedItem];\n\n      if (trackingEvent) {\n        this.trackEvent(trackingEvent);\n      }\n    },\n    applyFilters() {\n      this.updateMergeRequestFilters(this.selectedFilters);\n    },\n    localSyncFilters(filters) {\n      this.updateMergeRequestFilters(filters);\n      this.selectedFilters = filters;\n      this.previousFilters = filters;\n    },\n    deselectAll() {\n      this.selectedFilters = [];\n      this.previousFilters = [];\n    },\n    selectAll() {\n      this.selectedFilters = allFilters;\n      this.previousFilters = allFilters;\n    },\n    select(allSelectedFilters) {\n      const removedFilters = this.previousFilters.filter(\n        (filterValue) => !allSelectedFilters.includes(filterValue),\n      );\n      const addedFilters = allSelectedFilters.filter(\n        (filterValue) => !this.previousFilters.includes(filterValue),\n      );\n      const allInteractedItems = removedFilters.concat(addedFilters);\n\n      allInteractedItems.forEach((filterValue) => {\n        this.trackDropdownSelection(filterValue);\n      });\n\n      this.previousFilters = allSelectedFilters;\n    },\n  },\n  MR_FILTER_OPTIONS,\n};\n</script>\n\n<template>\n  <div>\n    <local-storage-sync\n      :value=\"discussionSortOrder\"\n      storage-key=\"sort_direction_merge_request\"\n      as-string\n      @input=\"setDiscussionSortDirection({ direction: $event })\"\n    />\n    <local-storage-sync\n      :value=\"mergeRequestFilters\"\n      storage-key=\"mr_activity_filters_2\"\n      @input=\"localSyncFilters\"\n    />\n    <gl-button-group>\n      <gl-collapsible-listbox\n        v-model=\"selectedFilters\"\n        :items=\"$options.MR_FILTER_OPTIONS\"\n        :header-text=\"__('Filter activity')\"\n        :show-select-all-button-label=\"__('Select all')\"\n        :reset-button-label=\"__('Deselect all')\"\n        multiple\n        placement=\"bottom-end\"\n        @shown=\"filterListShown\"\n        @hidden=\"applyFilters\"\n        @reset=\"deselectAll\"\n        @select-all=\"selectAll\"\n        @select=\"select\"\n      >\n        <template #toggle>\n          <gl-button class=\"!gl-rounded-br-none !gl-rounded-tr-none\">\n            <gl-sprintf :message=\"selectedFilterText\">\n              <template #strong=\"{ content }\">\n                <strong>{{ content }}</strong>\n              </template>\n            </gl-sprintf>\n            <gl-icon name=\"chevron-down\" />\n          </gl-button>\n        </template>\n        <template #list-item=\"{ item }\">\n          <strong v-if=\"item.value === '*'\">{{ item.text }}</strong>\n          <span v-else>{{ item.text }}</span>\n        </template>\n      </gl-collapsible-listbox>\n      <gl-button :icon=\"sortIcon\" @click=\"updateSortDirection\" />\n    </gl-button-group>\n  </div>\n</template>\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./mr_discussion_filter.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./mr_discussion_filter.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./mr_discussion_filter.vue?vue&type=template&id=120a906c\"\nimport script from \"./mr_discussion_filter.vue?vue&type=script&lang=js\"\nexport * from \"./mr_discussion_filter.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports"],"sourceRoot":""}