{"version":3,"sources":["webpack:///./public/pages/ShowPost/components/PostSearch.tsx","webpack:///./public/pages/ShowPost/components/ResponseForm.tsx","webpack:///./public/pages/ShowPost/components/TagListItem.tsx","webpack:///./public/pages/ShowPost/components/TagsPanel.tsx","webpack:///./public/pages/ShowPost/components/NotificationsPanel.tsx","webpack:///./public/pages/ShowPost/components/ModerationPanel.tsx","webpack:///./public/pages/ShowPost/components/ShowComment.tsx","webpack:///./public/pages/ShowPost/components/CommentInput.tsx","webpack:///./public/pages/ShowPost/components/DiscussionPanel.tsx","webpack:///./public/pages/ShowPost/components/VotesModal.tsx","webpack:///./public/pages/ShowPost/components/VotesPanel.tsx","webpack:///./public/pages/ShowPost/ShowPost.page.tsx"],"names":["props","onSearchChange","e","search","currentTarget","value","onChange","item","onChanged","searchQuery","window","clearTimeout","timer","setTimeout","searchPosts","query","then","res","ok","posts","exclude","length","data","filter","i","indexOf","number","setState","state","componentDidMount","this","render","items","map","p","status","Get","label","title","className","votesCount","searchable","placeholder","Component","submit","respond","post","result","location","reload","error","showModal","closeModal","setStatus","opt","setOriginalNumber","originalNumber","setText","text","response","button","fluid","onClick","options","All","s","toString","modal","Window","isOpen","onClose","center","size","Content","field","defaultValue","Duplicate","fields","minRows","Footer","color","TagListItem","tag","assigned","circular","name","TagsPanel","fider","canEdit","session","isAuthenticated","user","isCollaborator","tags","isEditing","setIsEditing","assignedTags","setAssignedTags","assignOrUnassignTag","idx","nextAssignedTags","unassignTag","slug","splice","assignTag","tagsList","key","id","editTagsList","subtitleClasses","icon","NotificationsPanel","subscribed","setSubscribed","subscribeOrUnsubscribe","unsubscribe","subscribe","ModerationPanel","showConfirmation","setShowConfirmation","setError","hideModal","isAdministrator","closed","deletePost","goHome","ShowComment","newContent","setNewContent","isDeleteConfirmationModalOpen","setIsDeleteConfirmationModalOpen","attachments","setAttachments","clearError","undefined","deleteComment","comment","editedMetadata","editedAt","editedBy","Header","date","createdAt","direction","inline","style","highlightSelected","content","renderControl","bkeys","maxUploads","previewMaxWidth","updateComment","x","bkey","CommentInput","getCacheKey","inputRef","setContent","isSignInModalOpen","setIsSignInModalOpen","set","onFocus","current","blur","createComment","remove","DiscussionPanel","comments","c","clearSearch","handleSearchFilterChanged","votes","allVotes","toLowerCase","filteredVotes","searchText","isLoading","componentDidUpdate","prevProps","listVotes","onIconClick","hover","email","useRelative","format","isVotesModalOpen","setIsVotesModalOpen","openModal","canShowAll","extraVotesCount","moreVotesClassName","clickable","saveChanges","updatePost","newTitle","newDescription","setNewTitle","setNewDescription","cancelEdit","editMode","startEdit","description","maxLength","showUser"],"mappings":"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","file":"js/ShowPost.page.8a65bf05d92b0650640f.js","sourcesContent":["import React from \"react\";\nimport { Post, PostStatus } from \"@fider/models\";\nimport { actions } from \"@fider/services\";\nimport { DropDown, DropDownItem } from \"@fider/components\";\nimport { FaCaretUp } from \"react-icons/fa\";\n\ninterface PostSearchProps {\n exclude?: number[];\n onChanged(postNumber: number): void;\n}\n\ninterface PostSearchState {\n posts: Post[];\n}\n\nexport class PostSearch extends React.Component {\n private timer?: number;\n\n constructor(props: PostSearchProps) {\n super(props);\n this.state = {\n posts: []\n };\n }\n\n public componentDidMount() {\n this.search(\"\");\n }\n\n private onSearchChange = (e: React.SyntheticEvent) => {\n this.search(e.currentTarget.value);\n };\n\n private onChange = (item: DropDownItem) => {\n this.props.onChanged(item.value as number);\n };\n\n private search = (searchQuery: string) => {\n window.clearTimeout(this.timer);\n this.timer = window.setTimeout(() => {\n actions.searchPosts({ query: searchQuery }).then(res => {\n if (res.ok) {\n const posts =\n this.props.exclude && this.props.exclude.length > 0\n ? res.data.filter(i => this.props.exclude!.indexOf(i.number) === -1)\n : res.data;\n this.setState({ posts });\n }\n });\n }, 500);\n };\n\n public render() {\n const items = this.state.posts.map(p => {\n const status = PostStatus.Get(p.status);\n return {\n label: p.title,\n value: p.number,\n render: (\n <>\n \n \n {p.votesCount}\n \n {status.title}\n {p.title}\n \n )\n };\n });\n\n return (\n \n );\n }\n}\n","import React from \"react\";\n\nimport { Modal, Button, DisplayError, Select, Form, TextArea, Field, SelectOption } from \"@fider/components\";\nimport { Post, PostStatus } from \"@fider/models\";\n\nimport { actions, Failure } from \"@fider/services\";\nimport { FaBullhorn } from \"react-icons/fa\";\nimport { PostSearch } from \"./PostSearch\";\n\ninterface ResponseFormProps {\n post: Post;\n}\n\ninterface ResponseFormState {\n showModal: boolean;\n status: string;\n text: string;\n originalNumber: number;\n error?: Failure;\n}\n\nexport class ResponseForm extends React.Component {\n constructor(props: ResponseFormProps) {\n super(props);\n\n this.state = {\n showModal: false,\n status: this.props.post.status,\n originalNumber: 0,\n text: this.props.post.response ? this.props.post.response.text : \"\"\n };\n }\n\n private submit = async () => {\n const result = await actions.respond(this.props.post.number, this.state);\n if (result.ok) {\n location.reload();\n } else {\n this.setState({\n error: result.error\n });\n }\n };\n\n private showModal = async () => {\n this.setState({ showModal: true });\n };\n\n private closeModal = async () => {\n this.setState({ showModal: false });\n };\n\n private setStatus = (opt?: SelectOption) => {\n if (opt) {\n this.setState({ status: opt.value });\n }\n };\n\n private setOriginalNumber = (originalNumber: number) => {\n this.setState({ originalNumber });\n };\n\n private setText = (text: string) => {\n this.setState({ text });\n };\n\n public render() {\n const button = (\n \n );\n\n const options = PostStatus.All.map(s => ({\n value: s.value.toString(),\n label: s.title\n }));\n\n const modal = (\n \n \n
\n \n {this.state.status === PostStatus.Duplicate.value ? (\n <>\n \n \n \n \n Votes from this post will be merged into original post.\n \n ) : (\n \n )}\n \n
\n\n \n \n \n \n
\n );\n\n return (\n <>\n {button}\n {modal}\n \n );\n }\n}\n","import React from \"react\";\nimport { Tag } from \"@fider/models\";\nimport { ListItem, ShowTag } from \"@fider/components\";\nimport { FaCheck } from \"react-icons/fa\";\n\ninterface TagListItemProps {\n tag: Tag;\n assigned: boolean;\n onClick: (tag: Tag) => void;\n}\n\nexport const TagListItem = (props: TagListItemProps) => {\n const onClick = () => {\n props.onClick(props.tag);\n };\n\n return (\n \n {props.assigned ? : }\n \n {props.tag.name}\n \n );\n};\n","import React, { useState } from \"react\";\nimport { Tag, Post } from \"@fider/models\";\nimport { actions } from \"@fider/services\";\nimport { ShowTag, List, ListItem } from \"@fider/components\";\nimport { TagListItem } from \"./TagListItem\";\nimport { FaCheckCircle, FaCog } from \"react-icons/fa\";\nimport { useFider } from \"@fider/hooks\";\n\ninterface TagsPanelProps {\n post: Post;\n tags: Tag[];\n}\n\nexport const TagsPanel = (props: TagsPanelProps) => {\n const fider = useFider();\n const canEdit = fider.session.isAuthenticated && fider.session.user.isCollaborator && props.tags.length > 0;\n\n const [isEditing, setIsEditing] = useState(false);\n const [assignedTags, setAssignedTags] = useState(props.tags.filter(t => props.post.tags.indexOf(t.slug) >= 0));\n\n const assignOrUnassignTag = async (tag: Tag) => {\n const idx = assignedTags.indexOf(tag);\n let nextAssignedTags: Tag[] = [];\n\n if (idx >= 0) {\n const response = await actions.unassignTag(tag.slug, props.post.number);\n if (response.ok) {\n nextAssignedTags = [...assignedTags];\n nextAssignedTags.splice(idx, 1);\n }\n } else {\n const response = await actions.assignTag(tag.slug, props.post.number);\n if (response.ok) {\n nextAssignedTags = [...assignedTags, tag];\n }\n }\n\n setAssignedTags(nextAssignedTags);\n };\n\n const onSubtitleClick = () => {\n if (canEdit) {\n setIsEditing(!isEditing);\n }\n };\n\n if (!canEdit && assignedTags.length === 0) {\n return null;\n }\n\n const tagsList =\n assignedTags.length > 0 ? (\n \n {assignedTags.map(tag => (\n \n \n \n ))}\n \n ) : (\n None yet\n );\n\n const editTagsList = props.tags.length > 0 && (\n \n {props.tags.map(tag => (\n = 0} onClick={assignOrUnassignTag} />\n ))}\n \n );\n\n const subtitleClasses = `subtitle ${canEdit && \"active\"}`;\n const icon = canEdit && (isEditing ? : );\n\n return (\n <>\n \n Tags {icon}\n \n\n {!isEditing && tagsList}\n {isEditing && editTagsList}\n \n );\n};\n","import React, { useState } from \"react\";\nimport { Post } from \"@fider/models\";\nimport { Button, List, ListItem } from \"@fider/components\";\nimport { actions } from \"@fider/services\";\nimport { FaVolumeUp, FaVolumeMute } from \"react-icons/fa\";\nimport { useFider } from \"@fider/hooks\";\n\ninterface NotificationsPanelProps {\n post: Post;\n subscribed: boolean;\n}\n\nexport const NotificationsPanel = (props: NotificationsPanelProps) => {\n const fider = useFider();\n const [subscribed, setSubscribed] = useState(props.subscribed);\n\n const subscribeOrUnsubscribe = async () => {\n const action = subscribed ? actions.unsubscribe : actions.subscribe;\n\n const response = await action(props.post.number);\n if (response.ok) {\n setSubscribed(!subscribed);\n }\n };\n\n if (!fider.session.isAuthenticated) {\n return null;\n }\n\n const button = subscribed ? (\n \n ) : (\n \n );\n\n const text = subscribed ? (\n You’re receiving notifications about activity on this post.\n ) : (\n You'll not receive any notification about this post.\n );\n\n return (\n <>\n Notifications\n \n \n {button}\n {text}\n \n \n \n );\n};\n","import React, { useState } from \"react\";\nimport { PostStatus, Post } from \"@fider/models\";\nimport { actions, navigator, Failure } from \"@fider/services\";\nimport { Form, Modal, Button, List, ListItem, TextArea } from \"@fider/components\";\nimport { useFider } from \"@fider/hooks\";\n\ninterface ModerationPanelProps {\n post: Post;\n}\n\nexport const ModerationPanel = (props: ModerationPanelProps) => {\n const fider = useFider();\n const [showConfirmation, setShowConfirmation] = useState(false);\n const [text, setText] = useState(\"\");\n const [error, setError] = useState();\n\n const hideModal = async () => setShowConfirmation(false);\n const showModal = async () => setShowConfirmation(true);\n\n const handleDelete = async () => {\n const response = await actions.deletePost(props.post.number, text);\n if (response.ok) {\n hideModal();\n navigator.goHome();\n } else if (response.error) {\n setError(response.error);\n }\n };\n\n const status = PostStatus.Get(props.post.status);\n if (!fider.session.isAuthenticated || !fider.session.user.isAdministrator || status.closed) {\n return null;\n }\n\n const modal = (\n \n \n
\n \n \n This operation cannot be undone.\n \n \n \n
\n\n \n \n \n \n
\n );\n\n return (\n <>\n {modal}\n Moderation\n \n \n \n \n \n \n );\n};\n","import React, { useState } from \"react\";\nimport { Comment, Post, ImageUpload } from \"@fider/models\";\nimport {\n Avatar,\n UserName,\n Moment,\n Form,\n TextArea,\n Button,\n MultiLineText,\n DropDown,\n DropDownItem,\n Modal,\n ImageViewer,\n MultiImageUploader\n} from \"@fider/components\";\nimport { formatDate, Failure, actions } from \"@fider/services\";\nimport { FaEllipsisH } from \"react-icons/fa\";\nimport { useFider } from \"@fider/hooks\";\n\ninterface ShowCommentProps {\n post: Post;\n comment: Comment;\n}\n\nexport const ShowComment = (props: ShowCommentProps) => {\n const fider = useFider();\n const [isEditing, setIsEditing] = useState(false);\n const [newContent, setNewContent] = useState(\"\");\n const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = useState(false);\n const [attachments, setAttachments] = useState([]);\n const [error, setError] = useState();\n\n const canEditComment = (): boolean => {\n if (fider.session.isAuthenticated) {\n return fider.session.user.isCollaborator || props.comment.user.id === fider.session.user.id;\n }\n return false;\n };\n\n const clearError = () => setError(undefined);\n\n const cancelEdit = async () => {\n setIsEditing(false);\n setNewContent(\"\");\n clearError();\n };\n\n const saveEdit = async () => {\n const response = await actions.updateComment(props.post.number, props.comment.id, newContent, attachments);\n if (response.ok) {\n location.reload();\n } else {\n setError(response.error);\n }\n };\n\n const renderEllipsis = () => {\n return ;\n };\n\n const closeModal = async () => {\n setIsDeleteConfirmationModalOpen(false);\n };\n\n const deleteComment = async () => {\n const response = await actions.deleteComment(props.post.number, props.comment.id);\n if (response.ok) {\n location.reload();\n }\n };\n\n const onActionSelected = (item: DropDownItem) => {\n if (item.value === \"edit\") {\n setIsEditing(true);\n setNewContent(props.comment.content);\n clearError();\n } else if (item.value === \"delete\") {\n setIsDeleteConfirmationModalOpen(true);\n }\n };\n\n const modal = () => {\n return (\n \n Delete Comment\n \n

\n This process is irreversible. Are you sure?\n

\n
\n\n \n \n \n \n
\n );\n };\n\n const comment = props.comment;\n\n const editedMetadata = !!comment.editedAt && !!comment.editedBy && (\n
\n \n · edited\n \n
\n );\n\n return (\n
\n {modal()}\n \n
\n \n
\n · \n
\n {editedMetadata}\n {!isEditing && canEditComment() && (\n Delete }\n ]}\n onChange={onActionSelected}\n renderControl={renderEllipsis}\n />\n )}\n
\n {isEditing ? (\n
\n \n \n \n \n \n ) : (\n <>\n \n {comment.attachments && comment.attachments.map(x => )}\n \n )}\n
\n
\n
\n );\n};\n","import React, { useState, useRef } from \"react\";\n\nimport { Post, ImageUpload } from \"@fider/models\";\nimport { Avatar, UserName, Button, TextArea, Form, MultiImageUploader } from \"@fider/components/common\";\nimport { SignInModal } from \"@fider/components\";\n\nimport { cache, actions, Failure, Fider } from \"@fider/services\";\nimport { useFider } from \"@fider/hooks\";\n\ninterface CommentInputProps {\n post: Post;\n}\n\nconst CACHE_TITLE_KEY = \"CommentInput-Comment-\";\n\nexport const CommentInput = (props: CommentInputProps) => {\n const getCacheKey = () => `${CACHE_TITLE_KEY}${props.post.id}`;\n\n const fider = useFider();\n const inputRef = useRef();\n const [content, setContent] = useState((fider.session.isAuthenticated && cache.session.get(getCacheKey())) || \"\");\n const [isSignInModalOpen, setIsSignInModalOpen] = useState(false);\n const [attachments, setAttachments] = useState([]);\n const [error, setError] = useState(undefined);\n\n const commentChanged = (newContent: string) => {\n cache.session.set(getCacheKey(), newContent);\n setContent(newContent);\n };\n\n const hideModal = () => setIsSignInModalOpen(false);\n const clearError = () => setError(undefined);\n\n const submit = async () => {\n clearError();\n\n const result = await actions.createComment(props.post.number, content, attachments);\n if (result.ok) {\n cache.session.remove(getCacheKey());\n location.reload();\n } else {\n setError(result.error);\n }\n };\n\n const handleOnFocus = () => {\n if (!fider.session.isAuthenticated && inputRef.current) {\n inputRef.current.blur();\n setIsSignInModalOpen(true);\n }\n };\n\n return (\n <>\n \n
\n {Fider.session.isAuthenticated && }\n
\n {Fider.session.isAuthenticated && }\n \n {content && (\n <>\n \n \n \n )}\n \n
\n \n );\n};\n","import \"./Comments.scss\";\n\nimport React from \"react\";\nimport { CurrentUser, Comment, Post } from \"@fider/models\";\nimport { ShowComment } from \"./ShowComment\";\nimport { CommentInput } from \"./CommentInput\";\n\ninterface DiscussionPanelProps {\n user?: CurrentUser;\n post: Post;\n comments: Comment[];\n}\n\nexport const DiscussionPanel = (props: DiscussionPanelProps) => {\n return (\n
\n
\n Discussion\n {props.comments.map(c => (\n \n ))}\n \n
\n
\n );\n};\n","import \"./VotesModal.scss\";\n\nimport React from \"react\";\nimport { Post, Vote } from \"@fider/models\";\nimport { Modal, Button, Loader, List, ListItem, Avatar, UserName, Moment, Input } from \"@fider/components\";\nimport { actions } from \"@fider/services\";\nimport { FaTimes, FaSearch } from \"react-icons/fa\";\n\ninterface VotesModalProps {\n isOpen: boolean;\n post: Post;\n onClose?: () => void;\n}\n\ninterface VotesModalState {\n searchText: string;\n allVotes: Vote[];\n filteredVotes: Vote[];\n isLoading: boolean;\n query: string;\n}\n\nexport class VotesModal extends React.Component {\n constructor(props: VotesModalProps) {\n super(props);\n this.state = {\n searchText: \"\",\n query: \"\",\n allVotes: [],\n filteredVotes: [],\n isLoading: true\n };\n }\n\n public componentDidUpdate(prevProps: VotesModalProps) {\n if (this.props.isOpen && !prevProps.isOpen) {\n actions.listVotes(this.props.post.number).then(response => {\n if (response.ok) {\n this.setState({\n allVotes: response.data,\n filteredVotes: response.data,\n isLoading: false\n });\n }\n });\n }\n }\n\n private closeModal = async () => {\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private clearSearch = () => {\n this.handleSearchFilterChanged(\"\");\n };\n\n private handleSearchFilterChanged = (query: string) => {\n const votes = this.state.allVotes.filter(x => x.user.name.toLowerCase().indexOf(query.toLowerCase()) >= 0);\n this.setState({ query, filteredVotes: votes });\n };\n\n public render() {\n return (\n \n \n {this.state.isLoading && }\n {!this.state.isLoading && (\n <>\n \n \n {this.state.filteredVotes.map(x => (\n \n \n \n \n {x.user.email}\n \n \n \n \n \n ))}\n \n \n )}\n \n\n \n \n \n \n );\n }\n}\n","import \"./VotesPanel.scss\";\n\nimport React, { useState } from \"react\";\nimport { Post, Vote } from \"@fider/models\";\nimport { Avatar } from \"@fider/components\";\nimport { Fider, classSet } from \"@fider/services\";\nimport { useFider } from \"@fider/hooks\";\nimport { VotesModal } from \"./VotesModal\";\n\ninterface VotesPanelProps {\n post: Post;\n votes: Vote[];\n}\n\nexport const VotesPanel = (props: VotesPanelProps) => {\n const fider = useFider();\n const [isVotesModalOpen, setIsVotesModalOpen] = useState(false);\n\n const openModal = () => {\n if (canShowAll()) {\n setIsVotesModalOpen(true);\n }\n };\n\n const closeModal = () => setIsVotesModalOpen(false);\n const canShowAll = () => fider.session.isAuthenticated && Fider.session.user.isCollaborator;\n\n const extraVotesCount = props.post.votesCount - props.votes.length;\n const moreVotesClassName = classSet({\n \"l-votes-more\": true,\n clickable: canShowAll()\n });\n\n return (\n <>\n \n Voters\n
\n {props.votes.map(x => (\n \n ))}\n {extraVotesCount > 0 && (\n \n +{extraVotesCount} more\n \n )}\n {props.votes.length > 0 && extraVotesCount === 0 && canShowAll() && (\n \n see details\n \n )}\n {props.votes.length === 0 && None yet}\n
\n \n );\n};\n","import \"./ShowPost.page.scss\";\n\nimport React from \"react\";\n\nimport { Comment, Post, Tag, Vote, ImageUpload } from \"@fider/models\";\nimport { actions, Failure, Fider } from \"@fider/services\";\n\nimport {\n VoteCounter,\n ShowPostResponse,\n Button,\n UserName,\n Avatar,\n Moment,\n MultiLineText,\n List,\n ListItem,\n Input,\n Form,\n TextArea,\n MultiImageUploader,\n ImageViewer\n} from \"@fider/components\";\nimport { FaSave, FaTimes, FaEdit } from \"react-icons/fa\";\nimport { ResponseForm } from \"./components/ResponseForm\";\nimport { TagsPanel } from \"./components/TagsPanel\";\nimport { NotificationsPanel } from \"./components/NotificationsPanel\";\nimport { ModerationPanel } from \"./components/ModerationPanel\";\nimport { DiscussionPanel } from \"./components/DiscussionPanel\";\nimport { VotesPanel } from \"./components/VotesPanel\";\n\ninterface ShowPostPageProps {\n post: Post;\n subscribed: boolean;\n comments: Comment[];\n tags: Tag[];\n votes: Vote[];\n attachments: string[];\n}\n\ninterface ShowPostPageState {\n editMode: boolean;\n newTitle: string;\n attachments: ImageUpload[];\n newDescription: string;\n error?: Failure;\n}\n\nexport default class ShowPostPage extends React.Component {\n constructor(props: ShowPostPageProps) {\n super(props);\n\n this.state = {\n editMode: false,\n newTitle: this.props.post.title,\n newDescription: this.props.post.description,\n attachments: []\n };\n }\n\n private saveChanges = async () => {\n const result = await actions.updatePost(\n this.props.post.number,\n this.state.newTitle,\n this.state.newDescription,\n this.state.attachments\n );\n if (result.ok) {\n location.reload();\n } else {\n this.setState({\n error: result.error\n });\n }\n };\n\n private setNewTitle = (newTitle: string) => {\n this.setState({ newTitle });\n };\n\n private setNewDescription = (newDescription: string) => {\n this.setState({ newDescription });\n };\n\n private setAttachments = (attachments: ImageUpload[]) => {\n this.setState({ attachments });\n };\n\n private cancelEdit = async () => {\n this.setState({ error: undefined, editMode: false });\n };\n\n private startEdit = async () => {\n this.setState({ editMode: true });\n };\n\n public render() {\n return (\n
\n
\n \n \n \n\n
\n {this.state.editMode ? (\n
\n \n
\n ) : (\n

{this.props.post.title}

\n )}\n\n \n · {\" \"}\n \n \n
\n
\n
\n\n Description\n {this.state.editMode ? (\n
\n