{"version":3,"file":"js/Home-Home-page.38143255ee7c4f287e65.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/pages/Home/components/PostFilter.tsx","webpack://fider/./public/pages/Home/components/TagsFilter.tsx","webpack://fider/./public/pages/Home/components/PostsContainer.tsx","webpack://fider/./public/pages/Home/Home.page.tsx","webpack://fider/./public/assets/images/heroicons-check.svg","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\": \"\"\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\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from \"react\"\nimport { Post, Tag, CurrentUser } from \"@fider/models\"\nimport { ShowTag, ShowPostResponse, VoteCounter, Markdown, Icon } 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 \n
\n \n
\n \n \n \n {props.post.title}\n \n {props.post.commentsCount > 0 && (\n \n {props.post.commentsCount} \n \n )}\n \n \n \n {props.tags.length >= 1 && (\n \n {props.tags.map((tag) => (\n \n ))}\n \n )}\n \n
\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

{props.emptyText}

\n }\n\n return (\n \n {props.posts.map((post) => (\n post.tags.indexOf(tag.slug) >= 0)} />\n ))}\n \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 { t } from \"@lingui/macro\"\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 {\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 = t({ id: \"home.similar.title\", message: \"Similar posts\" })\n const subtitle = t({ id: \"home.similar.subtitle\", message: \"Consider voting on existing posts instead.\" })\n\n return (\n <>\n \n {this.state.loading ? (\n \n ) : (\n \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 { t } from \"@lingui/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()\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([])\n const [error, setError] = useState(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 \n \n \n \n )\n\n return (\n <>\n \n
\n \n {title && details()}\n \n \n )\n}\n","import React, { useState } from \"react\"\nimport { PostStatus } from \"@fider/models\"\nimport { Dropdown } from \"@fider/components\"\nimport { HStack } from \"@fider/components/layout\"\nimport { useFider } from \"@fider/hooks\"\nimport { t, Trans } from \"@lingui/macro\"\n\ninterface PostFilterProps {\n activeView: string\n countPerStatus: { [key: string]: number }\n viewChanged: (name: string) => void\n}\n\ninterface OptionItem {\n value: string\n label: string\n count?: number\n}\n\nexport const PostFilter = (props: PostFilterProps) => {\n const fider = useFider()\n const [view, setView] = useState(props.activeView)\n\n const handleChangeView = (item: OptionItem) => () => {\n setView(item.value)\n props.viewChanged(item.value)\n }\n\n const options: OptionItem[] = [\n { value: \"trending\", label: t({ id: \"home.postfilter.option.trending\", message: \"Trending\" }) },\n { value: \"recent\", label: t({ id: \"home.postfilter.option.recent\", message: \"Recent\" }) },\n { value: \"most-wanted\", label: t({ id: \"home.postfilter.option.mostwanted\", message: \"Most Wanted\" }) },\n { value: \"most-discussed\", label: t({ id: \"home.postfilter.option.mostdiscussed\", message: \"Most Discussed\" }) },\n ]\n\n if (fider.session.isAuthenticated) {\n options.push({ value: \"my-votes\", label: t({ id: \"home.postfilter.option.myvotes\", message: \"My Votes\" }) })\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: t({ id, message: s.title }),\n value: s.value,\n count: props.countPerStatus[s.value],\n })\n })\n\n const selectedItem = options.filter((x) => x.value === view)\n const label = selectedItem.length > 0 ? selectedItem[0].label : options[0].label\n\n return (\n \n \n View\n \n {label}}>\n {options.map((o) => (\n \n \n {o.label}\n
{o.count && o.count > 0 && {o.count}}
\n
\n
\n ))}\n
\n
\n )\n}\n","import React, { useState } from \"react\"\nimport { Tag } from \"@fider/models\"\nimport { Dropdown, Icon, ShowTag } from \"@fider/components\"\nimport IconCheck from \"@fider/assets/images/heroicons-check.svg\"\nimport { HStack } from \"@fider/components/layout\"\nimport { plural, t, Trans } from \"@lingui/macro\"\n\ninterface TagsFilterProps {\n tags: Tag[]\n selected: string[]\n selectionChanged: (selected: string[]) => void\n}\n\nexport const TagsFilter = (props: TagsFilterProps) => {\n const [selected, setSelected] = useState(props.selected)\n\n const toggle = (item: Tag) => () => {\n const idx = selected.indexOf(item.slug)\n const next = idx >= 0 ? selected.splice(idx, 1) && selected : selected.concat(item.slug)\n setSelected(next)\n props.selectionChanged(next)\n }\n\n const count = selected.length\n const label =\n count >= 1\n ? plural(count, {\n one: `# tag`,\n other: `# tags`,\n })\n : t({ id: \"home.tagsfilter.selected.none\", message: \"Any tag\" })\n\n return (\n \n with\n {label}}>\n {props.tags.map((t) => (\n \n \n \n \n {t.name}\n \n \n ))}\n \n \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 { TagsFilter } from \"./TagsFilter\"\nimport { t, Trans } from \"@lingui/macro\"\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[]\n view: string\n tags: string[]\n query: string\n limit?: number\n}\n\nexport class PostsContainer extends React.Component {\n constructor(props: PostsContainerProps) {\n super(props)\n\n this.state = {\n posts: this.props.posts,\n loading: false,\n view: querystring.get(\"view\"),\n query: querystring.get(\"query\"),\n tags: querystring.getArray(\"tags\"),\n limit: querystring.getNumber(\"limit\"),\n }\n }\n\n private changeFilterCriteria(obj: Pick, reset: boolean): void {\n this.setState(obj, () => {\n const query = this.state.query.trim().toLowerCase()\n navigator.replaceState(\n querystring.stringify({\n tags: this.state.tags,\n query,\n view: this.state.view,\n limit: this.state.limit,\n })\n )\n\n this.searchPosts(query, this.state.view, this.state.limit, this.state.tags, reset)\n })\n }\n\n private timer?: number\n private async searchPosts(query: string, view: string, limit: number | undefined, tags: string[], 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, limit, tags }).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 handleViewChanged = (view: string) => {\n this.changeFilterCriteria({ view }, true)\n }\n\n private handleTagsFilterChanged = (tags: string[]) => {\n this.changeFilterCriteria({ tags }, true)\n }\n\n private handleSearchFilterChanged = (query: string) => {\n this.changeFilterCriteria({ query }, true)\n }\n\n private clearSearch = () => {\n this.changeFilterCriteria({ query: \"\" }, true)\n }\n\n private showMore = (event: React.MouseEvent | React.TouchEvent): 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
\n
\n {!this.state.query && (\n
\n \n {this.props.tags.length > 0 && }\n
\n )}\n
\n \n
\n
\n \n {this.state.loading && }\n {showMoreLink && (\n \n )}\n
\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 { t, Trans } from \"@lingui/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
\n \n

\n \n It's recommended that you create at least 3 suggestions here before sharing this site. The initial content is important to\n start engaging your audience.\n \n

\n
\n \n

\n No posts have been created yet.\n

\n
\n )\n}\n\nconst HomePage = (props: HomePageProps) => {\n const fider = useFider()\n const [title, setTitle] = useState(\"\")\n\n const defaultWelcomeMessage = t({\n id: \"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 = t({\n id: \"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
\n
\n
\n \n \n \n \n \n
\n
\n {isLonely() ? (\n \n ) : title ? (\n \n ) : (\n \n )}\n \n
\n
\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-check\",\n \"use\": \"heroicons-check-usage\",\n \"viewBox\": \"0 0 24 24\",\n \"content\": \"\"\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-search\",\n \"use\": \"heroicons-search-usage\",\n \"viewBox\": \"0 0 24 24\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol"],"names":["symbol","ListPostItem","props","center","className","post","spacing","justify","href","number","slug","title","commentsCount","sprite","IconChatAlt2","maxLength","text","description","style","status","response","tags","length","map","tag","key","id","link","ListPosts","posts","emptyText","divide","filter","indexOf","SimilarPosts","React","constructor","super","this","state","loading","actions","query","then","x","ok","setState","data","nextProps","prevState","componentDidMount","loadSimilarPosts","componentDidUpdate","window","clearTimeout","timer","setTimeout","render","subtitle","CACHE_TITLE_KEY","CACHE_DESCRIPTION_KEY","PostInput","getCachedValue","fider","session","isAuthenticated","cache","useFider","titleRef","useRef","setTitle","useState","setDescription","isSignInModalOpen","setIsSignInModalOpen","attachments","setAttachments","error","setError","undefined","useEffect","onTitleChanged","isOpen","onClose","field","disabled","isReadOnly","noTabFocus","inputRef","onFocus","current","blur","value","onChange","placeholder","minRows","maxUploads","type","variant","onClick","async","result","location","event","preventEnable","PostFilter","view","setView","activeView","options","label","push","PostStatus","s","filterable","countPerStatus","forEach","toString","count","selectedItem","renderHandle","o","item","viewChanged","TagsFilter","selected","setSelected","t","idx","next","splice","concat","selectionChanged","IconCheck","includes","circular","name","PostsContainer","changeFilterCriteria","preventDefault","limit","querystring","obj","reset","trim","toLowerCase","navigator","searchPosts","showMoreLink","getShowMoreLink","handleViewChanged","handleTagsFilterChanged","icon","IconX","IconSearch","onIconClick","clearSearch","handleSearchFilterChanged","showMore","Lonely","permanentCloseKey","condition","user","isAdministrator","NoDataIllustration","height","defaultWelcomeMessage","defaultInvitation","tenant","welcomeMessage","invitation","slot","len","Object","keys","isLonely"],"sourceRoot":""}