{"version":3,"sources":["webpack:///./public/pages/Home/components/ListPosts.tsx","webpack:///./public/pages/Home/components/SimilarPosts.tsx","webpack:///./public/pages/Home/components/PostInput.tsx","webpack:///./public/pages/Home/components/PostFilter.tsx","webpack:///./public/pages/Home/components/TagsFilter.tsx","webpack:///./public/pages/Home/components/PostsContainer.tsx","webpack:///./public/pages/Home/Home.page.tsx"],"names":["ListPostItem","props","post","className","commentsCount","href","number","slug","title","text","description","style","showUser","status","response","tags","map","tag","key","id","size","posts","length","emptyText","divided","filter","indexOf","loadSimilarPosts","state","loading","searchPosts","query","then","x","ok","setState","data","getDerivedStateFromProps","nextProps","prevState","componentDidMount","this","componentDidUpdate","window","clearTimeout","timer","setTimeout","render","subtitle","icon","dividing","Component","PostInput","getCachedValue","fider","session","isAuthenticated","get","titleRef","setTitle","setDescription","isSignInModalOpen","setIsSignInModalOpen","attachments","setAttachments","error","setError","onTitleChanged","handleDescriptionChange","value","set","submit","event","createPost","result","undefined","remove","location","preventEnable","isOpen","onClose","field","noTabFocus","inputRef","onFocus","current","blur","maxLength","onChange","placeholder","minRows","maxUploads","previewMaxWidth","type","color","onClick","options","label","push","All","s","filterable","countPerStatus","forEach","activeView","header","inline","items","defaultValue","item","viewChanged","selected","idx","splice","concat","selectionChanged","renderText","defaultSelection","t","name","ShowTag","circular","highlightSelected","handleViewChanged","view","changeFilterCriteria","handleTagsFilterChanged","handleSearchFilterChanged","clearSearch","showMore","preventDefault","limit","getShowMoreLink","getArray","getNumber","obj","reset","trim","toLowerCase","replaceState","stringify","showMoreLink","onIconClick","onTouchEnd","Lonely","permanentCloseKey","condition","user","isAdministrator","len","tenant","welcomeMessage","invitation","Object","keys","Deleted"],"mappings":"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","file":"js/Home.page.b902fbc5abaa3d51e0fb.js","sourcesContent":["import \"./ListPosts.scss\";\n\nimport React from \"react\";\nimport { Post, Tag, CurrentUser } from \"@fider/models\";\nimport { ShowTag, ShowPostResponse, VoteCounter, MultiLineText, ListItem, List } from \"@fider/components\";\nimport { FaRegComments } from \"react-icons/fa\";\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 {props.post.commentsCount > 0 && (\n
\n {props.post.commentsCount} \n
\n )}\n \n {props.post.title}\n \n \n \n {props.tags.map(tag => (\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 { Heading, Loader } from \"@fider/components\";\nimport { ListPosts } from \"./ListPosts\";\nimport { actions } from \"@fider/services\";\nimport { FaRegLightbulb } from \"react-icons/fa\";\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 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\";\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 \"./PostFilter.scss\";\n\nimport React from \"react\";\nimport { PostStatus } from \"@fider/models\";\nimport { DropDown, DropDownItem } from \"@fider/components\";\nimport { useFider } from \"@fider/hooks\";\n\ninterface PostFilterProps {\n activeView: string;\n countPerStatus: { [key: string]: number };\n viewChanged: (name: string) => void;\n}\n\nexport const PostFilter = (props: PostFilterProps) => {\n const fider = useFider();\n\n const handleChangeView = (item: DropDownItem) => {\n props.viewChanged(item.value as string);\n };\n\n const options: DropDownItem[] = [\n { value: \"trending\", label: \"Trending\" },\n { value: \"recent\", label: \"Recent\" },\n { value: \"most-wanted\", label: \"Most Wanted\" },\n { value: \"most-discussed\", label: \"Most Discussed\" }\n ];\n\n if (fider.session.isAuthenticated) {\n options.push({ value: \"my-votes\", label: \"My Votes\" });\n }\n\n PostStatus.All.filter(s => s.filterable && props.countPerStatus[s.value]).forEach(s => {\n options.push({\n label: s.title,\n value: s.value,\n render: (\n \n {s.title} {props.countPerStatus[s.value]}\n \n )\n });\n });\n\n const viewExists = options.filter(x => x.value === props.activeView).length > 0;\n const activeView = viewExists ? props.activeView : \"trending\";\n\n return (\n
\n View\n \n
\n );\n};\n","import \"./TagsFilter.scss\";\n\nimport React from \"react\";\nimport { Tag } from \"@fider/models\";\nimport { ShowTag } from \"@fider/components/ShowTag\";\nimport { DropDown, DropDownItem } from \"@fider/components\";\nimport { FaCheck } from \"react-icons/fa\";\n\ninterface TagsFilterProps {\n tags: Tag[];\n defaultSelection: string[];\n selectionChanged: (selected: string[]) => void;\n}\n\ninterface TagsFilterState {\n selected: string[];\n}\n\nexport class TagsFilter extends React.Component {\n constructor(props: TagsFilterProps) {\n super(props);\n this.state = {\n selected: props.defaultSelection\n };\n }\n\n private onChange = (item: DropDownItem) => {\n let selected = [];\n const idx = this.state.selected.indexOf(item.value as string);\n if (idx >= 0) {\n selected = this.state.selected.splice(idx, 1) && this.state.selected;\n } else {\n selected = this.state.selected.concat(item.value as string);\n }\n this.setState({ selected });\n this.props.selectionChanged(selected);\n };\n\n private renderText = () => {\n const text =\n this.state.selected.length === 0\n ? \"any tag\"\n : this.state.selected.length === 1\n ? \"1 tag\"\n : `${this.state.selected.length} tags`;\n return <>{text};\n };\n\n public render() {\n if (this.props.tags.length === 0) {\n return null;\n }\n\n const items = this.props.tags.map(t => {\n return {\n value: t.slug,\n label: t.name,\n render: (\n
= 0 ? \"selected-tag\" : \"\"}>\n \n \n {t.name}\n
\n )\n };\n });\n\n return (\n
\n with\n \n
\n );\n }\n}\n","import React from \"react\";\n\nimport { Post, Tag, CurrentUser } from \"@fider/models\";\nimport { Loader, Field, Input } from \"@fider/components\";\nimport { actions, navigator, querystring } from \"@fider/services\";\nimport { FaTimes, FaSearch } from \"react-icons/fa\";\nimport { PostFilter } from \"./PostFilter\";\nimport { ListPosts } from \"./ListPosts\";\nimport { TagsFilter } from \"./TagsFilter\";\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(\n obj: Pick,\n reset: boolean\n ): 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 return (\n <>\n
\n {!this.state.query && (\n
\n \n \n \n \n
\n )}\n
\n \n
\n
\n \n {this.state.loading && }\n {showMoreLink && (\n \n View more posts\n \n )}\n \n );\n }\n}\n","import \"./Home.page.scss\";\n\nimport React, { useState } from \"react\";\nimport { Post, Tag, PostStatus } from \"@fider/models\";\nimport { MultiLineText, Hint } from \"@fider/components\";\nimport { SimilarPosts } from \"./components/SimilarPosts\";\nimport { FaRegLightbulb } from \"react-icons/fa\";\nimport { PostInput } from \"./components/PostInput\";\nimport { PostsContainer } from \"./components/PostsContainer\";\nimport { useFider } from \"@fider/hooks\";\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 It's recommended that you post at least 3 suggestions here before sharing this site. The\n initial content is key to start the interactions with your audience.\n \n

\n \n

\n

It's lonely out here. Start by sharing a suggestion!

\n
\n );\n};\n\nconst defaultWelcomeMessage = `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\nconst HomePage = (props: HomePageProps) => {\n const fider = useFider();\n const [title, setTitle] = useState(\"\");\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 {isLonely() ? (\n \n ) : title ? (\n \n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default HomePage;\n"],"sourceRoot":""}