{"version":3,"file":"js/Home-Home-page.bfd169f270974358c3e5.js","mappings":"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","sources":["webpack://fider/./public/assets/images/undraw-no-data.svg","webpack://fider/./public/assets/images/heroicons-chat-alt-2.svg","webpack://fider/./public/pages/Home/components/ListPosts.tsx","webpack://fider/./public/pages/Home/components/SimilarPosts.tsx","webpack://fider/./public/pages/Home/components/PostInput.tsx","webpack://fider/./public/assets/images/heroicons-filter.svg","webpack://fider/./public/pages/Home/components/PostFilter.tsx","webpack://fider/./public/pages/Home/components/PostsSort.tsx","webpack://fider/./public/pages/Home/components/PostsContainer.tsx","webpack://fider/./public/pages/Home/Home.page.tsx","webpack://fider/./public/assets/images/heroicons-search.svg"],"sourcesContent":["import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"undraw-no-data\",\n  \"use\": \"undraw-no-data-usage\",\n  \"viewBox\": \"0 0 647.636 632.174\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 647.636 632.174\\\" id=\\\"undraw-no-data\\\"><path d=\\\"M411.146 142.174h-174.51a15.018 15.018 0 0 0-15 15v387.85l-2 .61-42.81 13.11a8.007 8.007 0 0 1-9.99-5.31l-127.34-415.95a8.003 8.003 0 0 1 5.31-9.99l65.97-20.2 191.25-58.54 65.97-20.2a7.99 7.99 0 0 1 9.99 5.3l32.55 106.32Z\\\" fill=\\\"#f2f2f2\\\" /><path d=\\\"m449.226 140.174-39.23-128.14a16.994 16.994 0 0 0-21.23-11.28l-92.75 28.39-191.24 58.55-92.75 28.4a17.015 17.015 0 0 0-11.28 21.23l134.08 437.93a17.027 17.027 0 0 0 16.26 12.03 16.79 16.79 0 0 0 4.97-.75l63.58-19.46 2-.62v-2.09l-2 .61-64.17 19.65a15.015 15.015 0 0 1-18.73-9.95L2.666 136.734a14.98 14.98 0 0 1 9.95-18.73l92.75-28.4 191.24-58.54 92.75-28.4a15.156 15.156 0 0 1 4.41-.66 15.015 15.015 0 0 1 14.32 10.61l39.05 127.56.62 2h2.08Z\\\" fill=\\\"#3f3d56\\\" /><path d=\\\"M122.68 127.82a9.016 9.016 0 0 1-8.61-6.366l-12.88-42.072a8.999 8.999 0 0 1 5.97-11.24L283.1 14.278a9.009 9.009 0 0 1 11.24 5.971l12.88 42.072a9.01 9.01 0 0 1-5.97 11.241l-175.94 53.864a8.976 8.976 0 0 1-2.63.395Z\\\" fill=\\\"#4338ca\\\" /><circle cx=\\\"190.154\\\" cy=\\\"24.955\\\" r=\\\"20\\\" fill=\\\"#4338ca\\\" /><circle cx=\\\"190.154\\\" cy=\\\"24.955\\\" r=\\\"12.665\\\" fill=\\\"#fff\\\" /><path d=\\\"M602.636 582.174h-338a8.51 8.51 0 0 1-8.5-8.5v-405a8.51 8.51 0 0 1 8.5-8.5h338a8.51 8.51 0 0 1 8.5 8.5v405a8.51 8.51 0 0 1-8.5 8.5Z\\\" fill=\\\"#e6e6e6\\\" /><path d=\\\"M447.136 140.174h-210.5a17.024 17.024 0 0 0-17 17v407.8l2-.61v-407.19a15.018 15.018 0 0 1 15-15h211.12Zm183.5 0h-394a17.024 17.024 0 0 0-17 17v458a17.024 17.024 0 0 0 17 17h394a17.024 17.024 0 0 0 17-17v-458a17.024 17.024 0 0 0-17-17Zm15 475a15.018 15.018 0 0 1-15 15h-394a15.018 15.018 0 0 1-15-15v-458a15.018 15.018 0 0 1 15-15h394a15.018 15.018 0 0 1 15 15Z\\\" fill=\\\"#3f3d56\\\" /><path d=\\\"M525.636 184.174h-184a9.01 9.01 0 0 1-9-9v-44a9.01 9.01 0 0 1 9-9h184a9.01 9.01 0 0 1 9 9v44a9.01 9.01 0 0 1-9 9Z\\\" fill=\\\"#4338ca\\\" /><circle cx=\\\"433.636\\\" cy=\\\"105.174\\\" r=\\\"20\\\" fill=\\\"#4338ca\\\" /><circle cx=\\\"433.636\\\" cy=\\\"105.174\\\" r=\\\"12.182\\\" fill=\\\"#fff\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"heroicons-chat-alt-2\",\n  \"use\": \"heroicons-chat-alt-2-usage\",\n  \"viewBox\": \"0 0 24 24\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-chat-alt-2\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M17 8h2a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-2v4l-4-4H9a1.994 1.994 0 0 1-1.414-.586m0 0L11 14h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2v4l.586-.586z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from \"react\"\nimport { Post, Tag, CurrentUser } from \"@fider/models\"\nimport { ShowTag, VoteCounter, Markdown, Icon, ResponseLozenge } from \"@fider/components\"\nimport IconChatAlt2 from \"@fider/assets/images/heroicons-chat-alt-2.svg\"\nimport { HStack, VStack } from \"@fider/components/layout\"\n\ninterface ListPostsProps {\n  posts?: Post[]\n  tags: Tag[]\n  emptyText: string\n}\n\nconst ListPostItem = (props: { post: Post; user?: CurrentUser; tags: Tag[] }) => {\n  return (\n    <HStack spacing={4} align=\"start\" className=\"c-posts-container__post\">\n      <div>\n        <VoteCounter post={props.post} />\n      </div>\n      <VStack className=\"w-full\" spacing={2}>\n        {props.post.status !== \"open\" && (\n          <div className=\"mb-2 align-self-start\">\n            <ResponseLozenge status={props.post.status} response={props.post.response} small={true} />\n          </div>\n        )}\n        <HStack justify=\"between\">\n          <a className=\"text-title hover:text-primary-base\" href={`/posts/${props.post.number}/${props.post.slug}`}>\n            {props.post.title}\n          </a>\n          {props.post.commentsCount > 0 && (\n            <HStack className=\"text-muted\">\n              {props.post.commentsCount} <Icon sprite={IconChatAlt2} className=\"h-4 ml-1\" />\n            </HStack>\n          )}\n        </HStack>\n        <Markdown className=\"text-gray-700\" maxLength={300} text={props.post.description} style=\"plainText\" />\n        {props.tags.length >= 1 && (\n          <HStack spacing={0} className=\"gap-2 flex-wrap\">\n            {props.tags.map((tag) => (\n              <ShowTag key={tag.id} tag={tag} link />\n            ))}\n          </HStack>\n        )}\n      </VStack>\n    </HStack>\n  )\n}\n\nexport const ListPosts = (props: ListPostsProps) => {\n  if (!props.posts) {\n    return null\n  }\n\n  if (props.posts.length === 0) {\n    return <p className=\"text-center\">{props.emptyText}</p>\n  }\n\n  return (\n    <VStack spacing={4} divide>\n      {props.posts.map((post) => (\n        <ListPostItem key={post.id} post={post} tags={props.tags.filter((tag) => post.tags.indexOf(tag.slug) >= 0)} />\n      ))}\n    </VStack>\n  )\n}\n","import React from \"react\"\nimport { Post, Tag, CurrentUser } from \"@fider/models\"\nimport { PageTitle, Loader } from \"@fider/components\"\nimport { ListPosts } from \"./ListPosts\"\nimport { actions } from \"@fider/services\"\n\nimport { i18n } from \"@lingui/core\"\n\ninterface SimilarPostsProps {\n  title: string\n  tags: Tag[]\n  user?: CurrentUser\n}\n\ninterface SimilarPostsState {\n  title: string\n  posts: Post[]\n  loading: boolean\n}\n\nexport class SimilarPosts extends React.Component<SimilarPostsProps, SimilarPostsState> {\n  constructor(props: SimilarPostsProps) {\n    super(props)\n    this.state = {\n      title: props.title,\n      loading: !!props.title,\n      posts: [],\n    }\n  }\n\n  public static getDerivedStateFromProps(nextProps: SimilarPostsProps, prevState: SimilarPostsState) {\n    if (nextProps.title !== prevState.title) {\n      return {\n        loading: true,\n        title: nextProps.title,\n      }\n    }\n    return null\n  }\n  public componentDidMount() {\n    this.loadSimilarPosts()\n  }\n\n  private timer?: number\n  public componentDidUpdate() {\n    window.clearTimeout(this.timer)\n    this.timer = window.setTimeout(this.loadSimilarPosts, 500)\n  }\n\n  private loadSimilarPosts = () => {\n    if (this.state.loading) {\n      actions.searchPosts({ query: this.state.title }).then((x) => {\n        if (x.ok) {\n          this.setState({ loading: false, posts: x.data })\n        }\n      })\n    }\n  }\n\n  public render() {\n    const title = i18n._(\"home.similar.title\", { message: \"Similar posts\" })\n    const subtitle = i18n._(\"home.similar.subtitle\", { message: \"Consider voting on existing posts instead.\" })\n\n    return (\n      <>\n        <PageTitle title={title} subtitle={subtitle} />\n        {this.state.loading ? (\n          <Loader />\n        ) : (\n          <ListPosts posts={this.state.posts} tags={this.props.tags} emptyText={`No similar posts matched '${this.props.title}'.`} />\n        )}\n      </>\n    )\n  }\n}\n","import React, { useState, useEffect, useRef } from \"react\"\nimport { Button, ButtonClickEvent, Input, Form, TextArea, MultiImageUploader } from \"@fider/components\"\nimport { SignInModal } from \"@fider/components\"\nimport { cache, actions, Failure } from \"@fider/services\"\nimport { ImageUpload } from \"@fider/models\"\nimport { useFider } from \"@fider/hooks\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface PostInputProps {\n  placeholder: string\n  onTitleChanged: (title: string) => void\n}\n\nconst CACHE_TITLE_KEY = \"PostInput-Title\"\nconst CACHE_DESCRIPTION_KEY = \"PostInput-Description\"\n\nexport const PostInput = (props: PostInputProps) => {\n  const getCachedValue = (key: string): string => {\n    if (fider.session.isAuthenticated) {\n      return cache.session.get(key) || \"\"\n    }\n    return \"\"\n  }\n\n  const fider = useFider()\n  const titleRef = useRef<HTMLInputElement>()\n  const [title, setTitle] = useState(getCachedValue(CACHE_TITLE_KEY))\n  const [description, setDescription] = useState(getCachedValue(CACHE_DESCRIPTION_KEY))\n  const [isSignInModalOpen, setIsSignInModalOpen] = useState(false)\n  const [attachments, setAttachments] = useState<ImageUpload[]>([])\n  const [error, setError] = useState<Failure | undefined>(undefined)\n\n  useEffect(() => {\n    props.onTitleChanged(title)\n  }, [title])\n\n  const handleTitleFocus = () => {\n    if (!fider.session.isAuthenticated && titleRef.current) {\n      titleRef.current.blur()\n      setIsSignInModalOpen(true)\n    }\n  }\n\n  const handleTitleChange = (value: string) => {\n    cache.session.set(CACHE_TITLE_KEY, value)\n    setTitle(value)\n    props.onTitleChanged(value)\n  }\n\n  const hideModal = () => setIsSignInModalOpen(false)\n  const clearError = () => setError(undefined)\n\n  const handleDescriptionChange = (value: string) => {\n    cache.session.set(CACHE_DESCRIPTION_KEY, value)\n    setDescription(value)\n  }\n\n  const submit = async (event: ButtonClickEvent) => {\n    if (title) {\n      const result = await actions.createPost(title, description, attachments)\n      if (result.ok) {\n        clearError()\n        cache.session.remove(CACHE_TITLE_KEY, CACHE_DESCRIPTION_KEY)\n        location.href = `/posts/${result.data.number}/${result.data.slug}`\n        event.preventEnable()\n      } else if (result.error) {\n        setError(result.error)\n      }\n    }\n  }\n\n  const details = () => (\n    <>\n      <TextArea\n        field=\"description\"\n        onChange={handleDescriptionChange}\n        value={description}\n        minRows={5}\n        placeholder={i18n._(\"home.postinput.description.placeholder\", { message: \"Describe your suggestion (optional)\" })}\n      />\n      <MultiImageUploader field=\"attachments\" maxUploads={3} onChange={setAttachments} />\n      <Button type=\"submit\" variant=\"primary\" onClick={submit}>\n        <Trans id=\"action.submit\">Submit</Trans>\n      </Button>\n    </>\n  )\n\n  return (\n    <>\n      <SignInModal isOpen={isSignInModalOpen} onClose={hideModal} />\n      <Form error={error}>\n        <Input\n          field=\"title\"\n          disabled={fider.isReadOnly}\n          noTabFocus={!fider.session.isAuthenticated}\n          inputRef={titleRef}\n          onFocus={handleTitleFocus}\n          maxLength={100}\n          value={title}\n          onChange={handleTitleChange}\n          placeholder={props.placeholder}\n        />\n        {title && details()}\n      </Form>\n    </>\n  )\n}\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"heroicons-filter\",\n  \"use\": \"heroicons-filter-usage\",\n  \"viewBox\": \"0 0 24 24\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke-width=\\\"1.5\\\" stroke=\\\"currentColor\\\" class=\\\"size-6\\\" id=\\\"heroicons-filter\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" d=\\\"M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from \"react\"\nimport { PostStatus, Tag } from \"@fider/models\"\nimport { Checkbox, Dropdown, Icon } from \"@fider/components\"\nimport { HStack } from \"@fider/components/layout\"\nimport HeroIconFilter from \"@fider/assets/images/heroicons-filter.svg\"\n\nimport { useFider } from \"@fider/hooks\"\nimport { i18n } from \"@lingui/core\"\n\nimport { FilterState } from \"./PostsContainer\"\n\ntype FilterType = \"tag\" | \"status\" | \"myVotes\"\n\ninterface OptionItem {\n  value: string | boolean\n  label: string\n  count?: number\n  type: FilterType\n}\n\ninterface PostFilterProps {\n  activeFilter: FilterState\n  countPerStatus: { [key: string]: number }\n  filtersChanged: (filter: FilterState) => void\n  tags: Tag[]\n}\n\nexport interface FilterItem {\n  type: FilterType\n  value: string | boolean\n}\n\nconst FilterStateToFilterItems = (filterState: FilterState): FilterItem[] => {\n  const filterItems: FilterItem[] = []\n  filterState.statuses.forEach((s) => {\n    filterItems.push({ type: \"status\", value: s })\n  })\n  filterState.tags.forEach((t) => {\n    filterItems.push({ type: \"tag\", value: t })\n  })\n  if (filterState.myVotes) {\n    filterItems.push({ type: \"myVotes\", value: true })\n  }\n  return filterItems\n}\n\nconst FilterItemsToFilterState = (filterItems: FilterItem[]): FilterState => {\n  const filterState: FilterState = { tags: [], statuses: [], myVotes: false }\n  filterItems.forEach((i) => {\n    if (i.type === \"tag\") {\n      filterState.tags.push(i.value as string)\n    } else if (i.type === \"status\") {\n      filterState.statuses.push(i.value as string)\n    } else if (i.type === \"myVotes\") {\n      filterState.myVotes = true\n    }\n  })\n  return filterState\n}\n\nexport const PostFilter = (props: PostFilterProps) => {\n  const fider = useFider()\n\n  const filterItems: FilterItem[] = FilterStateToFilterItems(props.activeFilter)\n\n  const handleChangeFilter = (item: OptionItem) => () => {\n    const exists = filterItems.find((i) => i.type === item.type && i.value === item.value)\n    const newFilter = exists\n      ? filterItems.filter((i) => !(i.type === item.type && i.value === item.value))\n      : [...filterItems, { type: item.type, value: item.value }]\n\n    props.filtersChanged(FilterItemsToFilterState(newFilter))\n  }\n  const options: OptionItem[] = []\n\n  if (fider.session.isAuthenticated) {\n    options.push({ value: true, label: i18n._(\"home.postfilter.option.myvotes\", { message: \"My Votes\" }), type: \"myVotes\" })\n  }\n\n  PostStatus.All.filter((s) => s.filterable && props.countPerStatus[s.value]).forEach((s) => {\n    const id = `enum.poststatus.${s.value.toString()}`\n    options.push({\n      label: i18n._(id, { message: s.title }),\n      value: s.value,\n      count: props.countPerStatus[s.value],\n      type: \"status\",\n    })\n  })\n\n  props.tags.forEach((t) => {\n    options.push({\n      label: t.name,\n      value: t.slug,\n      type: \"tag\",\n    })\n  })\n\n  const filterCount = filterItems.length\n\n  return (\n    <HStack className=\"mr-4\">\n      <Dropdown\n        renderHandle={\n          <HStack className=\"h-10 text-medium text-xs rounded-md uppercase border border-gray-400 text-gray-800 p-2 px-3\">\n            <Icon sprite={HeroIconFilter} className=\"h-5 pr-1\" />\n            {i18n._(\"home.filter.label\", { message: \"Filter\" })}\n            {filterCount > 0 && <div className=\"bg-gray-200 inline-block rounded-full px-2 py-1 w-min-4 text-2xs text-center\">{filterCount}</div>}\n          </HStack>\n        }\n      >\n        {options.map((o) => {\n          const isChecked = filterItems.find((f) => f.type === o.type && f.value === o.value) !== undefined\n\n          return (\n            <Dropdown.ListItem onClick={handleChangeFilter(o)} key={o.value.toString()}>\n              <Checkbox field={o.value.toString()} checked={isChecked}>\n                <HStack spacing={2}>\n                  <span className={isChecked ? \"text-semibold\" : \"\"}>{o.label}</span>\n                  <div className=\"\">\n                    {o.count && o.count > 0 && <span className=\"bg-gray-200 inline-block rounded-full px-1 w-min-4 text-2xs text-center\">{o.count}</span>}\n                  </div>\n                </HStack>\n              </Checkbox>\n            </Dropdown.ListItem>\n          )\n        })}\n      </Dropdown>\n    </HStack>\n  )\n}\n","import React from \"react\"\nimport { Dropdown } from \"@fider/components\"\nimport { HStack } from \"@fider/components/layout\"\nimport { i18n } from \"@lingui/core\"\n\ninterface PostsSortProps {\n  value: string\n  onChange: (value: string) => void\n}\n\nexport const PostsSort: React.FC<PostsSortProps> = ({ value = \"trending\", onChange }) => {\n  const options = [\n    { value: \"trending\", label: i18n._(\"home.postfilter.option.trending\", { message: \"Trending\" }) },\n    { value: \"most-wanted\", label: i18n._(\"home.postfilter.option.mostwanted\", { message: \"Most Wanted\" }) },\n    { value: \"most-discussed\", label: i18n._(\"home.postfilter.option.mostdiscussed\", { message: \"Most Discussed\" }) },\n    { value: \"recent\", label: i18n._(\"home.postfilter.option.recent\", { message: \"Recent\" }) },\n  ]\n\n  const selectedItem = options.find((x) => x.value === value) || options[0]\n\n  return (\n    <HStack>\n      <Dropdown\n        renderHandle={\n          <div className=\"h-10 flex flex-items-center text-medium text-xs rounded-md uppercase border border-gray-400 text-gray-800 p-2 px-3\">\n            {i18n._(\"home.postsort.label\", { message: \"Sort by:\" })} {selectedItem.label}\n          </div>\n        }\n      >\n        {options.map((o) => (\n          <Dropdown.ListItem key={o.value} onClick={() => onChange(o.value)}>\n            <span className={value === o.value ? \"text-semibold\" : \"\"}>{o.label}</span>\n          </Dropdown.ListItem>\n        ))}\n      </Dropdown>\n    </HStack>\n  )\n}\n","import \"./PostsContainer.scss\"\n\nimport React from \"react\"\n\nimport { Post, Tag, CurrentUser } from \"@fider/models\"\nimport { Loader, Input } from \"@fider/components\"\nimport { actions, navigator, querystring } from \"@fider/services\"\nimport IconSearch from \"@fider/assets/images/heroicons-search.svg\"\nimport IconX from \"@fider/assets/images/heroicons-x.svg\"\nimport { PostFilter } from \"./PostFilter\"\nimport { ListPosts } from \"./ListPosts\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { PostsSort } from \"./PostsSort\"\n\ninterface PostsContainerProps {\n  user?: CurrentUser\n  posts: Post[]\n  tags: Tag[]\n  countPerStatus: { [key: string]: number }\n}\n\ninterface PostsContainerState {\n  loading: boolean\n  posts?: Post[] // All posts\n  view: string\n  filterState: FilterState // Filter state\n  query: string // Seach query\n  limit?: number // Limit\n}\n\nexport interface FilterState {\n  tags: string[]\n  statuses: string[]\n  myVotes: boolean\n}\n\nexport class PostsContainer extends React.Component<PostsContainerProps, PostsContainerState> {\n  constructor(props: PostsContainerProps) {\n    super(props)\n\n    const view = querystring.get(\"view\")\n\n    this.state = {\n      posts: this.props.posts,\n      loading: false,\n      view,\n      query: querystring.get(\"query\"),\n      filterState: { tags: querystring.getArray(\"tags\"), statuses: querystring.getArray(\"statuses\"), myVotes: querystring.get(\"myvotes\") === \"true\" },\n      limit: querystring.getNumber(\"limit\"),\n    }\n  }\n\n  private changeFilterCriteria<K extends keyof PostsContainerState>(obj: Pick<PostsContainerState, K>, reset: boolean): void {\n    this.setState(obj, () => {\n      const query = this.state.query.trim().toLowerCase()\n      navigator.replaceState(\n        querystring.stringify({\n          statuses: this.state.filterState.statuses,\n          tags: this.state.filterState.tags,\n          myvotes: this.state.filterState.myVotes ? \"true\" : undefined,\n          query,\n          view: this.state.view,\n          limit: this.state.limit,\n        })\n      )\n\n      this.searchPosts(\n        query,\n        this.state.view || \"trending\",\n        this.state.limit,\n        this.state.filterState.tags,\n        this.state.filterState.statuses,\n        this.state.filterState.myVotes,\n        reset\n      )\n    })\n  }\n\n  private timer?: number\n  private async searchPosts(query: string, view: string, limit: number | undefined, tags: string[], statuses: string[], myVotes: boolean, reset: boolean) {\n    window.clearTimeout(this.timer)\n    this.setState({ posts: reset ? undefined : this.state.posts, loading: true })\n    this.timer = window.setTimeout(() => {\n      actions.searchPosts({ query, view: view, limit, tags, statuses, myVotes }).then((response) => {\n        if (response.ok && this.state.loading) {\n          this.setState({ loading: false, posts: response.data })\n        }\n      })\n    }, 500)\n  }\n\n  private handleFilterChanged = (filterState: FilterState) => {\n    this.changeFilterCriteria({ filterState }, true)\n  }\n\n  private handleSearchFilterChanged = (query: string) => {\n    this.changeFilterCriteria({ query }, true)\n  }\n\n  private handleSortChanged = (view: string) => {\n    this.changeFilterCriteria({ view }, true)\n  }\n\n  private clearSearch = () => {\n    this.changeFilterCriteria({ query: \"\" }, true)\n  }\n\n  private showMore = (event: React.MouseEvent<HTMLElement> | React.TouchEvent<HTMLElement>): void => {\n    event.preventDefault()\n    this.changeFilterCriteria({ limit: (this.state.limit || 30) + 10 }, false)\n  }\n\n  private getShowMoreLink = (): string | undefined => {\n    if (this.state.posts && this.state.posts.length >= (this.state.limit || 30)) {\n      return querystring.set(\"limit\", (this.state.limit || 30) + 10)\n    }\n  }\n\n  public render() {\n    const showMoreLink = this.getShowMoreLink()\n\n    return (\n      <div className=\"c-posts-container\">\n        <div className=\"c-posts-container__header mb-5\">\n          {!this.state.query && (\n            <div className=\"c-posts-container__filter-col\">\n              <PostFilter\n                tags={this.props.tags}\n                activeFilter={this.state.filterState}\n                filtersChanged={this.handleFilterChanged}\n                countPerStatus={this.props.countPerStatus}\n              />\n              <PostsSort onChange={this.handleSortChanged} value={this.state.view} />\n            </div>\n          )}\n          <div className=\"c-posts-container__search-col\">\n            <Input\n              field=\"query\"\n              icon={this.state.query ? IconX : IconSearch}\n              onIconClick={this.state.query ? this.clearSearch : undefined}\n              placeholder={i18n._(\"home.postscontainer.query.placeholder\", { message: \"Search\" })}\n              value={this.state.query}\n              onChange={this.handleSearchFilterChanged}\n            />\n          </div>\n        </div>\n        <ListPosts\n          posts={this.state.posts}\n          tags={this.props.tags}\n          emptyText={i18n._(\"home.postscontainer.label.noresults\", { message: \"No results matched your search, try something different.\" })}\n        />\n        {this.state.loading && <Loader />}\n        {showMoreLink && (\n          <div className=\"my-4 ml-4\">\n            <a href={showMoreLink} className=\"text-primary-base text-medium hover:underline\" onClick={this.showMore}>\n              <Trans id=\"home.postscontainer.label.viewmore\">View more posts</Trans>\n            </a>\n          </div>\n        )}\n      </div>\n    )\n  }\n}\n","import \"./Home.page.scss\"\nimport NoDataIllustration from \"@fider/assets/images/undraw-no-data.svg\"\n\nimport React, { useState } from \"react\"\nimport { Post, Tag, PostStatus } from \"@fider/models\"\nimport { Markdown, Hint, PoweredByFider, Icon, Header } from \"@fider/components\"\nimport { SimilarPosts } from \"./components/SimilarPosts\"\nimport { PostInput } from \"./components/PostInput\"\nimport { PostsContainer } from \"./components/PostsContainer\"\nimport { useFider } from \"@fider/hooks\"\nimport { VStack } from \"@fider/components/layout\"\n\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\nexport interface HomePageProps {\n  posts: Post[]\n  tags: Tag[]\n  countPerStatus: { [key: string]: number }\n}\n\nexport interface HomePageState {\n  title: string\n}\n\nconst Lonely = () => {\n  const fider = useFider()\n\n  return (\n    <div className=\"text-center\">\n      <Hint permanentCloseKey=\"at-least-3-posts\" condition={fider.session.isAuthenticated && fider.session.user.isAdministrator}>\n        <p>\n          <Trans id=\"home.lonely.suggestion\">\n            It&apos;s recommended that you create <strong>at least 3</strong> suggestions here before sharing this site. The initial content is important to\n            start engaging your audience.\n          </Trans>\n        </p>\n      </Hint>\n      <Icon sprite={NoDataIllustration} height=\"120\" className=\"mt-6 mb-2\" />\n      <p className=\"text-muted\">\n        <Trans id=\"home.lonely.text\">No posts have been created yet.</Trans>\n      </p>\n    </div>\n  )\n}\n\nconst HomePage = (props: HomePageProps) => {\n  const fider = useFider()\n  const [title, setTitle] = useState(\"\")\n\n  const defaultWelcomeMessage = i18n._(\"home.form.defaultwelcomemessage\", {\n    message: `We'd love to hear what you're thinking about.\n\nWhat can we do better? This is the place for you to vote, discuss and share ideas.`,\n  })\n\n  const defaultInvitation = i18n._(\"home.form.defaultinvitation\", {\n    message: \"Enter your suggestion here...\",\n  })\n\n  const isLonely = () => {\n    const len = Object.keys(props.countPerStatus).length\n    if (len === 0) {\n      return true\n    }\n\n    if (len === 1 && PostStatus.Deleted.value in props.countPerStatus) {\n      return true\n    }\n\n    return false\n  }\n\n  return (\n    <>\n      <Header />\n      <div id=\"p-home\" className=\"page container\">\n        <div className=\"p-home__welcome-col\">\n          <VStack spacing={2} className=\"p-4\">\n            <Markdown text={fider.session.tenant.welcomeMessage || defaultWelcomeMessage} style=\"full\" />\n            <PostInput placeholder={fider.session.tenant.invitation || defaultInvitation} onTitleChanged={setTitle} />\n          </VStack>\n          <PoweredByFider slot=\"home-input\" className=\"sm:hidden md:hidden lg:block mt-3\" />\n        </div>\n        <div className=\"p-home__posts-col p-4\">\n          {isLonely() ? (\n            <Lonely />\n          ) : title ? (\n            <SimilarPosts title={title} tags={props.tags} />\n          ) : (\n            <PostsContainer posts={props.posts} tags={props.tags} countPerStatus={props.countPerStatus} />\n          )}\n          <PoweredByFider slot=\"home-footer\" className=\"lg:hidden xl:hidden mt-8\" />\n        </div>\n      </div>\n    </>\n  )\n}\n\nexport default HomePage\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"heroicons-search\",\n  \"use\": \"heroicons-search-usage\",\n  \"viewBox\": \"0 0 24 24\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-search\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21 21-6-6m2-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol"],"names":["symbol","ListPostItem","props","React","HStack","spacing","align","className","VoteCounter","post","VStack","status","ResponseLozenge","response","small","justify","href","number","slug","title","commentsCount","Icon","sprite","IconChatAlt2","Markdown","maxLength","text","description","style","tags","length","map","tag","ShowTag","key","id","link","ListPosts","posts","emptyText","divide","filter","indexOf","SimilarPosts","constructor","super","_defineProperty","this","state","loading","actions","query","then","x","ok","setState","data","getDerivedStateFromProps","nextProps","prevState","componentDidMount","loadSimilarPosts","componentDidUpdate","window","clearTimeout","timer","setTimeout","render","i18n","_","message","subtitle","PageTitle","Loader","CACHE_TITLE_KEY","CACHE_DESCRIPTION_KEY","PostInput","getCachedValue","fider","session","isAuthenticated","cache","get","useFider","titleRef","useRef","setTitle","useState","setDescription","isSignInModalOpen","setIsSignInModalOpen","attachments","setAttachments","error","setError","undefined","useEffect","onTitleChanged","SignInModal","isOpen","onClose","hideModal","Form","Input","field","disabled","isReadOnly","noTabFocus","inputRef","onFocus","handleTitleFocus","current","blur","value","onChange","set","placeholder","TextArea","minRows","MultiImageUploader","maxUploads","Button","type","variant","onClick","async","result","remove","location","event","preventEnable","_Trans","PostFilter","filterItems","filterState","statuses","forEach","s","push","t","myVotes","FilterStateToFilterItems","activeFilter","options","label","PostStatus","All","filterable","countPerStatus","toString","count","name","filterCount","Dropdown","renderHandle","HeroIconFilter","o","isChecked","find","f","ListItem","item","newFilter","i","filtersChanged","FilterItemsToFilterState","Checkbox","checked","PostsSort","selectedItem","PostsContainer","changeFilterCriteria","view","preventDefault","limit","querystring","obj","reset","trim","toLowerCase","navigator","replaceState","myvotes","searchPosts","showMoreLink","getShowMoreLink","handleFilterChanged","handleSortChanged","icon","IconX","IconSearch","onIconClick","clearSearch","handleSearchFilterChanged","showMore","Lonely","Hint","permanentCloseKey","condition","user","isAdministrator","components","0","NoDataIllustration","height","defaultWelcomeMessage","defaultInvitation","Header","tenant","welcomeMessage","invitation","PoweredByFider","slot","isLonely","len","Object","keys","Deleted"],"sourceRoot":""}