{"version":3,"file":"main.DyqNYg.js","sources":["theme-45/virtual:theme","theme-45/discourse/components/unanswered-filter-dropdown.gjs","theme-45/discourse/initializers/unanswered-filter.js","theme-45/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(45);\n\nexport function themePrefix(key) {\n  return `theme_translations.45.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport { AUTO_GROUPS } from \"discourse/lib/constants\";\nimport ComboBox from \"discourse/select-kit/components/combo-box\";\nimport { i18n } from \"discourse-i18n\";\n\nconst STATUS_TO_QUERY_PARAMS = {\n  answered: { min_posts: \"2\", max_posts: undefined },\n  unanswered: { max_posts: \"1\", min_posts: undefined },\n  all: { max_posts: undefined, min_posts: undefined },\n};\n\nexport default class UnansweredFilterDropdown extends Component {\n  @service router;\n  @service currentUser;\n\n  statuses = [\"all\", \"answered\", \"unanswered\"].map((status) => ({\n    name: i18n(themePrefix(`topic_answered_filter.${status}`)),\n    value: status,\n  }));\n\n  get currentStatus() {\n    const { queryParams } = this.router.currentRoute;\n    const includesParams = (a, b) =>\n      Object.entries(b).every(([k, v]) => a[k] === v);\n\n    for (const [key, value] of Object.entries(STATUS_TO_QUERY_PARAMS)) {\n      if (includesParams(queryParams, value)) {\n        return key;\n      }\n    }\n  }\n\n  get isGroupMember() {\n    if (Object.hasOwn(settings, \"user_in_limit_to_groups\")) {\n      return settings.user_in_limit_to_groups;\n    }\n\n    // TODO (martin) Remove this fallback after resolve_group_membership\n    // from core is available everywhere\n    const groupInclusions = settings.limit_to_groups\n      .split(\"|\")\n      .map((id) => parseInt(id, 10));\n\n    // NOTE: The default for this setting was changed to \"4|5\" in the theme settings,\n    // since that is what now represents all anon + logged in users, so this fallback is\n    // for backwards compatibility.\n    const noLimitToGroups =\n      !settings.limit_to_groups || settings.limit_to_groups === \"4|5\";\n\n    return (\n      this.currentUser?.groups?.some((group) =>\n        groupInclusions.includes(group.id)\n      ) ||\n      groupInclusions.includes(AUTO_GROUPS.everyone.id) ||\n      noLimitToGroups\n    );\n  }\n\n  get shouldRender() {\n    return (\n      this.router.currentRouteName !== \"editCategory.tabs\" &&\n      this.router.currentRouteName !== \"discovery.categories\" &&\n      !settings.exclusions.split(\"|\").includes(this.router.currentURL) &&\n      this.isGroupMember\n    );\n  }\n\n  @action\n  changeStatus(newStatus) {\n    this.router.transitionTo({\n      queryParams: STATUS_TO_QUERY_PARAMS[newStatus],\n    });\n  }\n\n  <template>\n    {{#if this.shouldRender}}\n      <li>\n        <ComboBox\n          @content={{this.statuses}}\n          @value={{this.currentStatus}}\n          @onSelect={{this.changeStatus}}\n          @valueAttribute=\"value\"\n          class=\"topic-unanswered-filter-dropdown\"\n        />\n      </li>\n    {{/if}}\n  </template>\n}\n","import { apiInitializer } from \"discourse/lib/api\";\nimport { AUTO_GROUPS } from \"discourse/lib/constants\";\nimport { i18n } from \"discourse-i18n\";\nimport UnansweredFilterDropdown from \"../components/unanswered-filter-dropdown\";\n\nexport default apiInitializer((api) => {\n  if (settings.filter_mode === \"dropdown\") {\n    api.renderInOutlet(\"bread-crumbs-right\", UnansweredFilterDropdown);\n    return;\n  }\n\n  const exclusionList = settings.exclusions.split(\"|\");\n\n  let isGroupMember = false;\n  if (Object.hasOwn(settings, \"user_in_limit_to_groups\")) {\n    isGroupMember = settings.user_in_limit_to_groups;\n  } else {\n    const currentUser = api.getCurrentUser();\n    const groupInclusions = settings.limit_to_groups\n      .split(\"|\")\n      .map((id) => parseInt(id, 10));\n    // TODO (martin) Remove this fallback after resolve_group_membership\n    // from core is available everywhere\n    isGroupMember =\n      currentUser?.groups?.some((group) =>\n        groupInclusions.includes(group.id)\n      ) || groupInclusions.includes(AUTO_GROUPS.everyone.id);\n  }\n\n  api.addNavigationBarItem({\n    name: \"unanswered\",\n    displayName: i18n(themePrefix(\"unanswered.title\")),\n    title: i18n(themePrefix(\"unanswered.help\")),\n\n    customFilter: (category, args, router) => {\n      if (Object.hasOwn(settings, \"user_in_limit_to_groups\")) {\n        return !exclusionList.includes(router.currentURL) && isGroupMember;\n      } else {\n        // NOTE: The default for this setting was changed to \"4|5\" in the theme settings,\n        // since that is what now represents all anon + logged in users, so this fallback is\n        // for backwards compatibility.\n        //\n        // settings.limit_to_groups is undefined if user_in_limit_to_groups is defined\n        const noLimitToGroups =\n          !settings.limit_to_groups || settings.limit_to_groups === \"4|5\";\n        return (\n          !exclusionList.includes(router.currentURL) &&\n          (isGroupMember || noLimitToGroups)\n        );\n      }\n    },\n\n    customHref: function (category, args, router) {\n      if (category) {\n        if (router.currentRoute.queryParams.max_posts) {\n          return category.url;\n        } else {\n          return `${category.url}?max_posts=1`;\n        }\n      } else {\n        const routeName =\n          args.filterType === \"categories\"\n            ? \"discovery.latest\"\n            : router.currentRouteName;\n        const queryParams = router.currentRoute.queryParams.max_posts\n          ? {}\n          : { max_posts: 1 };\n\n        return router.urlFor(routeName, { queryParams });\n      }\n    },\n\n    forceActive: (category, args) => {\n      return args.currentRouteQueryParams?.max_posts === \"1\";\n    },\n  });\n});\n","import * as Mod1 from \"./discourse/components/unanswered-filter-dropdown\";\nimport * as Mod2 from \"./discourse/initializers/unanswered-filter\";\nconst compatModules = {\n  \"discourse/components/unanswered-filter-dropdown\": Mod1,\n  \"discourse/initializers/unanswered-filter\": Mod2,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","themePrefix","key","STATUS_TO_QUERY_PARAMS","answered","min_posts","max_posts","undefined","unanswered","all","UnansweredFilterDropdown","Component","dt7948","g","this","prototype","service","router","i","currentUser","statuses","map","status","name","i18n","value","currentStatus","queryParams","currentRoute","includesParams","a","b","Object","entries","every","k","v","isGroupMember","hasOwn","user_in_limit_to_groups","groupInclusions","limit_to_groups","split","id","parseInt","noLimitToGroups","groups","some","group","includes","AUTO_GROUPS","everyone","shouldRender","currentRouteName","exclusions","currentURL","changeStatus","newStatus","transitionTo","n","action","setComponentTemplate","createTemplateFactory","block","moduleName","scope","ComboBox","isStrictMode","unansweredFilter","apiInitializer","api","filter_mode","renderInOutlet","exclusionList","getCurrentUser","addNavigationBarItem","displayName","title","customFilter","category","args","customHref","url","routeName","filterType","urlFor","forceActive","currentRouteQueryParams","compatModules","Mod1"],"mappings":"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"}