{"version":3,"file":"js/9143-148bb3ae6940fe79fb22.js","mappings":"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","sources":["webpack:///./app/javascript/components/QuestionAndAnswer/style.js","webpack:///./app/javascript/components/QuestionAndAnswer/loading.jsx","webpack:///./app/javascript/components/QuestionAndAnswer/Question/style.js","webpack:///./app/javascript/components/QuestionAndAnswer/Answer/style.js","webpack:///./app/javascript/components/QuestionAndAnswer/Answer/index.jsx","webpack:///./app/javascript/components/QuestionAndAnswer/Question/QuestionSection.jsx","webpack:///./app/javascript/components/QuestionAndAnswer/Question/QuestionModal/style.js","webpack:///./app/javascript/context/questionAnswerContext/hooks/fragment.js","webpack:///./app/javascript/context/questionAnswerContext/hooks/mutations/index.js","webpack:///./app/javascript/context/questionAnswerContext/hooks/queries/index.js","webpack:///./app/javascript/context/questionAnswerContext/index.jsx","webpack:///./app/javascript/components/QuestionAndAnswer/Question/QuestionModal/index.jsx","webpack:///./app/javascript/components/QuestionAndAnswer/Question/index.jsx","webpack:///./app/javascript/components/QuestionAndAnswer/index.jsx","webpack:///./app/javascript/components/QuestionAndAnswer/translations.js"],"sourcesContent":["import { Button } from 'elements'\nimport { styled } from 'styled-components'\n\nexport const QuestionAndAnswerContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${props => props.$gap || '16px'};\n\n ${props => props.$customStyle}\n`\n\nexport const QATitleSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`\n\nexport const QATitle = styled.div`\n font-size: ${props => props.$size};\n font-weight: 600;\n margin: 0;\n`\n\nexport const QAHeaderSection = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nexport const QuestionCategoryList = styled.div`\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n`\n\nexport const LoadMoreButton = styled(Button)`\n align-self: center;\n`","import * as Styled from './style'\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Skeleton } from 'elements'\n\nexport const QuestionAndAnswerLoading = ({ customStyle }) => {\n return (\n <Styled.QuestionAndAnswerContainer $customStyle={customStyle}>\n <Skeleton type='image' height='118px' rounded />\n </Styled.QuestionAndAnswerContainer>\n )\n}\n\nQuestionAndAnswerLoading.propTypes = {\n customStyle: PropTypes.any\n}\n","import { styled } from 'styled-components'\n\nexport const NoQuestionContainer = styled.div`\n display: flex;\n padding: 24px 12px;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n border-radius: 16px;\n background: ${props => props.theme.colors.zinc50};\n font-size: 14px;\n color: ${props => props.theme.colors.textSubHeading};\n font-weight: 600;\n`\n\nexport const QuestionsContainer = styled.div`\n background-color: ${props => props.theme.colors.white};\n\n display: flex;\n flex-direction: column;\n gap: ${props => props.$gap || '16px'};\n`\n\nexport const QuestionContainer = styled.div`\n overflow: hidden;\n\n display: flex;\n flex-direction: column;\n gap: 8px;\n`\n\nexport const QuestionSection = styled.div`\n display: flex;\n gap: 8px;\n align-items: flex-start;\n`\n\nexport const QuestionCard = styled.div`\n display: flex;\n flex: 1;\n padding: 8px 12px;\n flex-direction: column;\n gap: 4px;\n border-radius: 16px;\n background: ${props => props.theme.colors.zinc50};\n`\n\nexport const QuestionOwner = styled.div`\n font-size: 14px;\n`\n\nexport const QuestionText = styled.p`\n font-size: 14px;\n font-weight: 600;\n margin: 0;\n white-space: pre-line;\n`\n\nexport const QuestionIconContainer = styled.div`\n background-color: ${props => props.theme.colors.white};\n padding-bottom: 16px;\n z-index: 1;\n`\n\nexport const QuestionIcon = styled.div`\n width: 36px;\n height: 36px;\n background-color: ${props => props.theme.colors.blue100};\n border-radius: 50%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n img {\n width: 16px;\n height: 16px;\n }\n`\n\nexport const UpdatedAt = styled.div`\n font-size: 12px;\n color: ${props => props.theme.colors.textSubHeading};\n`\n\nexport const FooterSection = styled.div`\n display: flex;\n gap: 16px;\n align-items: center;\n padding: 8px 0px;\n\n > div + div {\n border-left: 1px solid ${props => props.theme.colors.zinc300};\n padding-left: 16px;\n }\n`","import { styled } from 'styled-components'\n\nexport const AnswerSection = styled.div`\n display: flex;\n gap: 8px;\n`\n\nexport const AnswerCard = styled.div`\n display: flex;\n flex: 1;\n padding: 8px 12px;\n flex-direction: column;\n gap: 4px;\n border-radius: 16px;\n background: ${props => props.theme.colors.zinc50};\n`\n\nexport const AnswerOwner = styled.div`\n font-size: 14px;\n`\n\nexport const AnswerText = styled.p`\n font-size: 14px;\n font-weight: 600;\n margin: 0;\n`\n\nexport const IndentBlock = styled.div`\n width: 60px;\n position: relative;\n`\n\n// NOTE: Fix line height\n// So it could be bug if answer is too long\nexport const QALine = styled.div`\n position: absolute;\n border-left: 1px solid ${props => props.theme.colors.zinc300};\n border-bottom: 1px solid ${props => props.theme.colors.zinc300};\n border-bottom-left-radius: 8px;\n width: calc(100% - 24px);\n height: 100vh;\n bottom: calc(100% - 24px);\n left: 17px;\n`\n\nexport const UpdatedAt = styled.div`\n font-size: 12px;\n color: ${props => props.theme.colors.textSubHeading};\n`\n\nexport const FooterSection = styled.div`\n display: flex;\n gap: 16px;\n align-items: center;\n padding: 8px 0px;\n\n > div + div {\n border-left: 1px solid ${props => props.theme.colors.zinc300};\n padding-left: 16px;\n }\n`","import * as Styled from './style'\nimport { i18n } from '../../../utilities/i18n'\nimport { Vote } from 'elements'\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport dayjs from 'dayjs'\nimport 'dayjs/locale/th'\n\nexport const Answer = ({\n id,\n myVote,\n upVoteCount,\n downVoteCount,\n answer,\n answerOwner,\n answerUpdatedAt,\n index\n}) => {\n const updatedAtDateTime = dayjs(answerUpdatedAt).locale(i18n.locale).format('DD MMMM YYYY | HH:mm')\n\n return (\n <Styled.AnswerSection>\n <Styled.IndentBlock>\n <Styled.QALine $index={index} />\n </Styled.IndentBlock>\n <Styled.AnswerCard>\n <Styled.AnswerOwner>\n {answerOwner}\n </Styled.AnswerOwner>\n <Styled.AnswerText>\n {answer}\n </Styled.AnswerText>\n <Styled.FooterSection>\n <Vote\n type='answer'\n id={id}\n myVote={myVote}\n upVoteCount={upVoteCount} downVoteCount={downVoteCount}\n />\n <Styled.UpdatedAt>\n {updatedAtDateTime}\n </Styled.UpdatedAt>\n </Styled.FooterSection>\n </Styled.AnswerCard>\n </Styled.AnswerSection>\n )\n}\nAnswer.propTypes = {\n id: PropTypes.string.isRequired,\n myVote: PropTypes.object,\n upVoteCount: PropTypes.number.isRequired,\n downVoteCount: PropTypes.number.isRequired,\n answer: PropTypes.string.isRequired,\n answerOwner: PropTypes.string.isRequired,\n answerUpdatedAt: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired\n}","import * as Styled from './style'\nimport { Answer } from '../Answer'\nimport questionIcon from '../../../../assets/images/base/icons/icon-question-16px.png'\nimport { i18n } from '../../../utilities/i18n'\n\nimport { Vote } from 'elements'\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport dayjs from 'dayjs'\nimport 'dayjs/locale/th'\n\nexport const QuestionSection = ({ questionObj, index }) => {\n const {\n id,\n question,\n questionOwner,\n updatedAt,\n answers,\n upVoteCount,\n downVoteCount,\n myVote\n } = questionObj\n const updatedAtDateTime = dayjs(updatedAt).locale(i18n.locale).format('DD MMMM YYYY | HH:mm')\n return (\n <Styled.QuestionContainer key={index}>\n <Styled.QuestionSection>\n <Styled.QuestionIconContainer>\n <Styled.QuestionIcon>\n <img src={questionIcon} alt='Question icon' />\n </Styled.QuestionIcon>\n </Styled.QuestionIconContainer>\n <Styled.QuestionCard>\n <Styled.QuestionOwner>\n {questionOwner}\n </Styled.QuestionOwner>\n <Styled.QuestionText>\n {question}\n </Styled.QuestionText>\n <Styled.FooterSection>\n <Vote\n type='question'\n id={id}\n myVote={myVote}\n upVoteCount={upVoteCount} downVoteCount={downVoteCount}\n />\n <Styled.UpdatedAt>\n {updatedAtDateTime}\n </Styled.UpdatedAt>\n </Styled.FooterSection>\n </Styled.QuestionCard>\n </Styled.QuestionSection>\n {answers.map((answer, index) => {\n return (\n <Answer\n key={index}\n index={index}\n id={answer.id}\n myVote={answer.myVote}\n upVoteCount={answer.upVoteCount}\n downVoteCount={answer.downVoteCount}\n answer={answer.answer}\n answerOwner={answer.answerOwner}\n answerUpdatedAt={answer.updatedAt}\n />\n )\n })}\n </Styled.QuestionContainer>\n )\n}\nQuestionSection.propTypes = {\n questionObj: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired\n}","import { styled } from 'styled-components'\n\n\nexport const QuestionModal = styled.div`\n display: flex;\n flex-direction: column;\n gap: 24px;\n`\n\nexport const ModalHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nexport const IconClose = styled.div`\n cursor: pointer;\n i {\n color: ${props => props.theme.colors.zinc700};\n }\n`\n\nexport const QuestionCategoryContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`\n\nexport const QuestionCategoryList = styled.div`\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n`\n\nexport const SectionTitle = styled.h4`\n font-size: 16px;\n font-weight: 600;\n color: ${props => props.theme.colors.textHeading};\n margin: 0;\n`\n\nexport const QuestionOwnerContainer = styled.div`\n display: flex;\n gap: 24px;\n align-items: center;\n justify-content: space-between;\n`\n\nexport const QuestionOwnerInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n`\n\nexport const QuestionOwnerName = styled.div`\n font-size: 16px;\n color: ${props => props.theme.colors.textPlaceholder};\n`\n\nexport const ButtonSection = styled.div`\n display: flex;\n gap: 24px;\n`\n\nexport const ErrorMessage = styled.div`\n display: flex;\n justify-content: flex-end;\n color: ${props => props.theme.colors.error};\n font-size: 12px;\n`","import { gql } from '@apollo/client'\n\nexport const QUESTION_FRAGMENT = gql`\n fragment QuestionFragment on Question {\n id\n question\n questionCategory\n upVoteCount\n downVoteCount\n createdAt\n updatedAt\n questionOwner\n myVote {\n id\n voteType\n }\n answers {\n id\n answer\n answerOwner\n createdAt\n updatedAt\n upVoteCount\n downVoteCount\n myVote {\n id\n voteType\n }\n }\n }\n`","import { QUESTION_FRAGMENT } from '../fragment'\n\nimport { gql, useMutation } from '@apollo/client'\n\nconst CREATE_QUESTION_MUTATION = gql`\n ${QUESTION_FRAGMENT}\n mutation CreateQuestion(\n $questionableId: String!,\n $questionableType: String!,\n $question: String!,\n $questionCategory: String!,\n $anonymous: Boolean!\n ) {\n createQuestion(\n questionableId: $questionableId,\n questionableType: $questionableType,\n question: $question,\n questionCategory: $questionCategory,\n anonymous: $anonymous\n ) {\n errors {\n key\n message\n }\n question {\n ...QuestionFragment\n }\n }\n }\n`\n\nexport const useCreateQuestion = (type, id) => {\n const [createQuestion, { data, loading, error }] = useMutation(CREATE_QUESTION_MUTATION, {\n variables: { questionableId: id, questionableType: type },\n update(cache, { data: { createQuestion: { question } = {} } = {} }) {\n if (question) {\n const identify = cache.identify({\n id: { questionableId: id, questionableType: type, category: question.questionCategory },\n __typename: 'questionsConnection'\n })\n // ID for category all\n const identifyTypeAll = cache.identify({\n id: { questionableId: id, questionableType: type, category: 'all' },\n __typename: 'questionsConnection'\n })\n\n // We did not specify id in modify function because we want to use default ROOT_QUERY\n // To update a field with 2 cache keys\n cache.modify({\n fields: {\n questionsConnection(existingConnection = {}, { storeFieldName }) {\n // Case when we are creating a question in a specific category\n // We need to update the category for both category all and the specific category\n if (storeFieldName !== identify && storeFieldName !== identifyTypeAll) return existingConnection\n\n const { edges, pageInfo } = existingConnection\n // newEdges is to prevent the last question from being duplicated\n // when loading more questions\n const newEdges = pageInfo.hasNextPage ? edges.slice(0, -1) : edges\n\n return {\n ...existingConnection,\n edges: [{\n node: cache.writeFragment({ data: question, fragment: QUESTION_FRAGMENT }),\n __typename: 'QuestionEdge'\n }, ...newEdges]\n }\n }\n }\n })\n }\n }\n })\n \n\n const { createQuestion: { errors } = [] } = data || { createQuestion: {} }\n const graphQlError = errors?.[0]\n\n return { createQuestion, data, loading, error: graphQlError || error }\n}","import { QUESTION_FRAGMENT } from '../fragment'\n\nimport { gql, useQuery } from '@apollo/client'\n\nconst ALLOWED_TYPES = ['Item', 'ProductCategory']\nconst QUERY = gql`\n ${QUESTION_FRAGMENT}\n query QuestionAnswerContext($slug: ID!, $type: String!, $after: String, $questionCategory: String) {\n questionsConnection(\n first: 3\n after: $after\n questionableId: $slug\n questionableType: $type\n category: $questionCategory\n ) {\n edges {\n node {\n ...QuestionFragment\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`\n\n// questionData should be [] if there is no question\nexport const useQuestionsQuery = (type, id, questionCategory) => {\n const invalid = !ALLOWED_TYPES.includes(type)\n const { data, fetchMore, ...result } = useQuery(QUERY, {\n skip: invalid,\n variables: { slug: id, type, questionCategory: questionCategory }\n })\n\n if (invalid) return { error: 'Invalid type' }\n\n const { edges, pageInfo } = data?.questionsConnection || {}\n const questionData = edges?.map(({ node }) => node) || []\n const { hasNextPage, endCursor } = pageInfo || {}\n\n const loadMoreQuestions = () => {\n if (!hasNextPage) return null\n\n fetchMore({ variables: { after: endCursor }})\n }\n\n return {\n ...result,\n questionData: questionData,\n hasNextPage,\n loadMoreQuestions\n }\n}","import { useQuestionsQuery, useCreateQuestion } from './hooks'\n\nimport React, { createContext, useContext, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nconst QuestionAnswerContext = createContext()\n\nexport const QuestionAnswerContextProvider = ({ children, type, id }) => {\n const [questionCategory, setQuestionCategory] = useState('all')\n return (\n <QuestionAnswerContext.Provider value={{\n type,\n id,\n questionCategory,\n setQuestionCategory,\n useQuestionsQueryResult: useQuestionsQuery(type, id, questionCategory),\n useCreateQuestionResult: useCreateQuestion(type, id)\n }}>\n {children}\n </QuestionAnswerContext.Provider>\n )\n}\n\nQuestionAnswerContextProvider.propTypes = {\n children: PropTypes.node.isRequired,\n type: PropTypes.oneOf(['ProductCategory', 'Item']).isRequired,\n id: PropTypes.string.isRequired\n}\n\nexport const useQuestionAnswerContext = () => {\n const context = useContext(QuestionAnswerContext)\n if (!context) {\n throw new Error(\n 'useQuestionAnswerContext must be used within a QuestionAnswerContextProvider'\n )\n }\n return context\n}","import * as Styled from './style'\nimport { useQuestionAnswerContext } from '../../../../context/questionAnswerContext'\nimport { i18n } from '../../../../utilities/i18n'\nimport { useCurrentUser } from '../../../../utilities/currentUser'\n\nimport { Modal, InputArea, Button, Toggle } from 'elements'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nconst QUESTION_CATEGORIES = [\n 'item',\n 'delivery',\n 'promotion',\n 'others',\n]\n\nconst QuestionCategorySection = ({ currentCategory, onChange }) => {\n return (\n <Styled.QuestionCategoryContainer>\n <Styled.SectionTitle>\n {i18n.t('questionAnswer.questionCategory')}\n </Styled.SectionTitle>\n <Styled.QuestionCategoryList>\n {QUESTION_CATEGORIES.map((category, index) => {\n return (\n <Button\n htmlType={currentCategory === category ? 'primary' : 'default'}\n size='small'\n key={index}\n onClick={() => {\n // Dummy data for function onChangeQuestionParams\n const dummyData = {\n target: {\n name: 'questionCategory',\n value: category\n }\n }\n onChange(dummyData)\n }}\n >\n {i18n.t(`questionAnswer.category.${category}`)}\n </Button>\n )\n })}\n </Styled.QuestionCategoryList>\n </Styled.QuestionCategoryContainer>\n )\n}\nQuestionCategorySection.propTypes = {\n currentCategory: PropTypes.string,\n onChange: PropTypes.func.isRequired\n}\n\nconst QuestionOwner = ({ anonymous, onChange }) => {\n const { currentUser } = useCurrentUser()\n const { customer: { fullName }} = currentUser || { fullName: ''}\n return (\n <Styled.QuestionOwnerContainer>\n <Styled.QuestionOwnerInfo>\n <Styled.SectionTitle>\n {i18n.t('questionAnswer.displayFullName')}\n </Styled.SectionTitle>\n <Styled.QuestionOwnerName>\n {i18n.t('questionAnswer.example')}: { anonymous ? 'Anonymous' : fullName }\n </Styled.QuestionOwnerName>\n </Styled.QuestionOwnerInfo>\n <Toggle\n checked={!anonymous}\n onChange={() => {\n // Dummy data for function onChangeQuestionParams\n const dummyData = {\n target: {\n name: 'anonymous',\n value: !anonymous\n }\n }\n onChange(dummyData)\n }} />\n </Styled.QuestionOwnerContainer>\n )\n}\nQuestionOwner.propTypes = {\n anonymous: PropTypes.bool,\n onChange: PropTypes.func.isRequired\n}\n\n// TODO: Add support for editing question\n// TODO: Move questionParams state to context\nexport const QuestionModal = ({ visible, onCloseModal }) => {\n const { useCreateQuestionResult, questionCategory } = useQuestionAnswerContext()\n const DEFAULT_QUESTION_PARAMS = useMemo(() => {\n return {\n question: '',\n questionCategory: questionCategory === 'all' ? 'item' : questionCategory, // Default to category from context\n anonymous: false\n }\n }, [questionCategory])\n\n const [questionParams, setQuestionParams] = useState(DEFAULT_QUESTION_PARAMS)\n const [formError, setFormError] = useState('')\n const { createQuestion, data, loading, error } = useCreateQuestionResult\n\n const onChangeQuestionParams = useCallback((e) => {\n const { name, value } = e.target\n setQuestionParams(prevState => {\n return {\n ...prevState,\n [name]: value\n }\n })\n }, [])\n\n // Get default category from context\n // This is for after render\n // DEFAULT_QUESTION_PARAMS is for initial render\n useEffect(() => {\n setQuestionParams(prevState => {\n return {\n ...prevState,\n questionCategory: questionCategory === 'all' ? 'item' : questionCategory\n }\n })\n }, [questionCategory])\n\n const resetState = useCallback(() => {\n setQuestionParams({\n ...DEFAULT_QUESTION_PARAMS,\n questionCategory: questionCategory === 'all' ? 'item' : questionCategory\n })\n setFormError('')\n }, [questionCategory])\n\n // Handle create question\n useEffect(() => {\n if (!loading && data) {\n if (error) {\n setFormError(error.message || 'Something went wrong. Please contact admin')\n } else {\n // Create question success\n onCloseModal(resetState)\n }\n }\n }, [data, error, loading])\n\n return (\n <Modal\n width='724px'\n visible={visible}\n contentStyle={{ padding: '32px', borderRadius: '16px'}}\n onClose={() => onCloseModal(resetState)}>\n <Styled.QuestionModal>\n <Styled.ModalHeader>\n <Styled.SectionTitle>{i18n.t('questionAnswer.addQuestion')}</Styled.SectionTitle>\n <Styled.IconClose onClick={() => onCloseModal(resetState)}>\n <i className='fa fa-times' />\n </Styled.IconClose>\n </Styled.ModalHeader>\n <div>\n <InputArea\n value={questionParams.question}\n name='question'\n width='100%'\n rows='7'\n placeholder={i18n.t('questionAnswer.addQuestion')}\n customStyle={{\n resize: 'none',\n borderColor: formError ? 'red' : undefined\n }}\n onChange={onChangeQuestionParams}\n />\n {formError && <Styled.ErrorMessage>{formError}</Styled.ErrorMessage>}\n </div>\n <QuestionCategorySection\n currentCategory={questionParams.questionCategory}\n onChange={onChangeQuestionParams}\n />\n <QuestionOwner\n anonymous={questionParams.anonymous}\n onChange={onChangeQuestionParams}\n />\n <Styled.ButtonSection>\n <Button\n width='100%'\n htmlType='default'\n onClick={() => onCloseModal(resetState)}\n >\n {i18n.t('questionAnswer.cancel')}\n </Button>\n <Button\n width='100%'\n htmlType='primary'\n disabled={loading}\n onClick={() => {\n setFormError('') // Reset form error\n createQuestion({ variables: questionParams })\n }}\n >\n {loading\n ? <i className='fa-regular fa-spinner fa-spin' />\n : i18n.t('questionAnswer.addQuestion')\n }\n </Button>\n </Styled.ButtonSection>\n </Styled.QuestionModal>\n </Modal>\n )\n}\nQuestionModal.propTypes = {\n visible: PropTypes.bool,\n onCloseModal: PropTypes.func.isRequired\n}","import * as Styled from './style'\nimport { QuestionSection } from './QuestionSection'\nimport { QuestionModal } from './QuestionModal'\nimport { useAuthorizationContext } from '../../../context/authorizationContext'\nimport { i18n } from '../../../utilities/i18n'\n\nimport { Button } from 'elements'\nimport React, { useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\nexport const AddQuestionButton = () => {\n const [openQuestionModal, setOpenQuestionModal] = useState(false)\n const { onAuthorize } = useAuthorizationContext()\n\n const handleAddQuestion = useCallback(() => {\n onAuthorize(null, () => {\n setOpenQuestionModal(true)\n })\n }, [onAuthorize])\n\n return (\n <>\n <Button\n size='small'\n htmlType='default'\n prefix={<i className='fa fa-plus' />}\n customStyle={{ fontSize: '14px' }}\n onClick={() => handleAddQuestion()}\n >\n {i18n.t('questionAnswer.addQuestion')}\n </Button>\n <QuestionModal\n visible={openQuestionModal}\n onCloseModal={(callback = () => {}) => {\n setOpenQuestionModal(false)\n callback()\n }}\n />\n </>\n )\n}\n\nconst EmptyQuestion = () => {\n return (\n <Styled.NoQuestionContainer>\n {i18n.t('questionAnswer.noQuestion')}\n <AddQuestionButton />\n </Styled.NoQuestionContainer>\n )\n}\n\nexport const Questions = ({ questionData, isMobile = false }) => {\n if (!questionData || questionData.length === 0) return <EmptyQuestion />\n\n return (\n <Styled.QuestionsContainer $gap={isMobile && '8px'}>\n {questionData.map((question, index) => {\n return <QuestionSection key={index} questionObj={question} index={index} />\n })}\n </Styled.QuestionsContainer>\n )\n}\nQuestions.propTypes = {\n questionData: PropTypes.array.isRequired,\n isMobile: PropTypes.bool\n}","import * as Styled from './style'\nimport { QuestionAndAnswerLoading } from './loading'\nimport { Questions, AddQuestionButton } from './Question'\nimport QATranslations from './translations'\n\nimport { QuestionAnswerContextProvider, useQuestionAnswerContext } from '../../context/questionAnswerContext'\nimport { useViewPortContext } from '../../context/intersectionObserverContext'\n\nimport { initializeI18n, i18n } from '../../utilities/i18n'\n\nimport { Button } from 'elements'\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\ninitializeI18n({ localeFiles: QATranslations })\n\nconst QUESTION_CATEGORIES = [\n 'all',\n 'item',\n 'delivery',\n 'promotion',\n 'others',\n]\n\nconst QuestionCategorySection = ({ currentCategory, setQuestionCategory }) => {\n return (\n <Styled.QuestionCategoryList>\n {QUESTION_CATEGORIES.map((category, index) => {\n return (\n <Button\n htmlType={currentCategory === category ? 'primary' : 'default'}\n size='extraSmall'\n key={index}\n onClick={() => {\n if (currentCategory !== category) {\n setQuestionCategory(category)\n }\n }}\n >\n {i18n.t(`questionAnswer.category.${category}`)}\n </Button>\n )\n })}\n </Styled.QuestionCategoryList>\n )\n}\nQuestionCategorySection.propTypes = {\n currentCategory: PropTypes.string,\n setQuestionCategory: PropTypes.func.isRequired\n}\n\nconst QuestionAndAnswerComponent = ({\n titleAs = 'h3',\n titleSize = '16px',\n customStyle,\n isMobile = false,\n useInView = false\n}) => {\n const { ref } = useViewPortContext({ name: 'questionsAnswers', skip: !useInView })\n\n const {\n useQuestionsQueryResult,\n questionCategory,\n setQuestionCategory,\n } = useQuestionAnswerContext()\n const {\n questionData,\n loading,\n error,\n hasNextPage,\n loadMoreQuestions\n } = useQuestionsQueryResult\n\n if (error) return <QuestionAndAnswerLoading customStyle={customStyle} />\n\n return (\n <Styled.QuestionAndAnswerContainer $gap={isMobile && '8px'} ref={ref} $customStyle={customStyle}>\n <Styled.QAHeaderSection>\n <Styled.QATitleSection>\n <Styled.QATitle as={titleAs} $size={titleSize}>{i18n.t('questionAnswer.title')}</Styled.QATitle>\n {!isMobile && (\n <QuestionCategorySection\n currentCategory={questionCategory}\n setQuestionCategory={setQuestionCategory}\n />\n )}\n </Styled.QATitleSection>\n {(questionData && questionData.length > 0) && <AddQuestionButton />}\n </Styled.QAHeaderSection>\n {isMobile && (\n <QuestionCategorySection\n currentCategory={questionCategory}\n setQuestionCategory={setQuestionCategory}\n />\n )}\n {loading\n ? <QuestionAndAnswerLoading />\n : <Questions isMobile={isMobile} questionData={questionData} />\n }\n {hasNextPage && (\n <Styled.LoadMoreButton\n htmlType='default'\n size='small'\n onClick={() => loadMoreQuestions()}\n >\n {i18n.t('questionAnswer.loadMore')}\n </Styled.LoadMoreButton>\n )}\n </Styled.QuestionAndAnswerContainer>\n )\n}\nQuestionAndAnswerComponent.propTypes = {\n titleAs: PropTypes.string,\n titleSize: PropTypes.string,\n customStyle: PropTypes.any,\n isMobile: PropTypes.bool,\n useInView: PropTypes.bool\n}\n\n\n\nexport const QuestionAndAnswer = ({ type, id, ...props }) => {\n return (\n <QuestionAnswerContextProvider type={type} id={id}>\n <QuestionAndAnswerComponent {...props} />\n </QuestionAnswerContextProvider>\n )\n}\nQuestionAndAnswer.propTypes = {\n type: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n titleAs: PropTypes.string,\n titleSize: PropTypes.string,\n customStyle: PropTypes.any,\n isMobile: PropTypes.bool,\n useInView: PropTypes.bool\n}","export default {\n en: {\n questionAnswer: {\n title: 'Questions',\n noQuestion: 'No question available',\n addQuestion: 'Add new question',\n cancel: 'Cancel',\n questionCategory: 'Question category',\n category: {\n all: 'All',\n item: 'Item',\n delivery: 'Delivery',\n promotion: 'Promotion',\n others: 'Others'\n },\n displayFullName: 'Display name',\n example: 'Example',\n loadMore: 'Load more'\n }\n },\n th: {\n questionAnswer: {\n title: 'คำถาม',\n noQuestion: 'ยังไม่มีคำถามสำหรับสินค้านี้',\n addQuestion: 'เพิ่มคำถาม',\n cancel: 'ยà¸à¹€à¸¥à¸´à¸',\n questionCategory: 'หมวดหมู่คำถาม',\n category: {\n all: 'ทั้งหมด',\n item: 'สินค้า',\n delivery: 'à¸à¸²à¸£à¸ˆà¸±à¸”ส่ง',\n promotion: 'โปรโมชั่น',\n others: 'à¸à¸·à¹ˆà¸™à¹†'\n },\n displayFullName: 'à¹à¸ªà¸”งชื่à¸à¸œà¸¹à¹‰à¸–ามà¹à¸šà¸šà¹€à¸•à¹‡à¸¡',\n example: 'ตัวà¸à¸¢à¹ˆà¸²à¸‡',\n loadMore: 'ดูเพิ่มเติม'\n }\n }\n}"],"names":["QuestionAndAnswerContainer","styled","div","_templateObject","_taggedTemplateLiteral","props","$gap","$customStyle","QATitleSection","_templateObject2","QATitle","_templateObject3","$size","QAHeaderSection","_templateObject4","QuestionCategoryList","_templateObject5","LoadMoreButton","Button","_templateObject6","QuestionAndAnswerLoading","_ref","customStyle","React","Styled","Skeleton","type","height","rounded","NoQuestionContainer","theme","colors","zinc50","textSubHeading","QuestionsContainer","white","QuestionContainer","QuestionSection","QuestionCard","QuestionOwner","QuestionText","p","_templateObject7","QuestionIconContainer","_templateObject8","QuestionIcon","_templateObject9","blue100","UpdatedAt","_templateObject10","FooterSection","_templateObject11","zinc300","AnswerSection","AnswerCard","AnswerOwner","AnswerText","IndentBlock","QALine","Answer","id","myVote","upVoteCount","downVoteCount","answer","answerOwner","answerUpdatedAt","index","updatedAtDateTime","dayjs","locale","i18n","format","$index","Vote","questionObj","question","questionOwner","updatedAt","answers","key","src","questionIcon","alt","map","QuestionModal","ModalHeader","IconClose","zinc700","QuestionCategoryContainer","SectionTitle","h4","textHeading","QuestionOwnerContainer","QuestionOwnerInfo","QuestionOwnerName","textPlaceholder","ButtonSection","ErrorMessage","error","QUESTION_FRAGMENT","gql","CREATE_QUESTION_MUTATION","useCreateQuestion","_useMutation","useMutation","variables","questionableId","questionableType","update","cache","_ref$data","data","_ref$data2$createQues","createQuestion","identify","category","questionCategory","__typename","identifyTypeAll","modify","fields","questionsConnection","existingConnection","arguments","length","undefined","storeFieldName","edges","newEdges","pageInfo","hasNextPage","slice","_objectSpread","node","writeFragment","fragment","concat","_toConsumableArray","_useMutation2","_slicedToArray","_useMutation2$","loading","_ref3$createQuestion","errors","ALLOWED_TYPES","QUERY","useQuestionsQuery","invalid","includes","_useQuery","useQuery","skip","slug","fetchMore","result","_objectWithoutProperties","_excluded","questionData","_ref2","_ref3","endCursor","loadMoreQuestions","after","QuestionAnswerContext","createContext","QuestionAnswerContextProvider","children","_useState2","useState","setQuestionCategory","Provider","value","useQuestionsQueryResult","useCreateQuestionResult","useQuestionAnswerContext","context","useContext","Error","QUESTION_CATEGORIES","QuestionCategorySection","currentCategory","onChange","t","htmlType","size","onClick","target","name","anonymous","fullName","useCurrentUser","currentUser","customer","Toggle","checked","_ref4","visible","onCloseModal","_useQuestionAnswerCon","DEFAULT_QUESTION_PARAMS","useMemo","questionParams","setQuestionParams","_useState4","formError","setFormError","onChangeQuestionParams","useCallback","e","_e$target","prevState","_defineProperty","useEffect","resetState","message","Modal","width","contentStyle","padding","borderRadius","onClose","className","InputArea","rows","placeholder","resize","borderColor","disabled","AddQuestionButton","openQuestionModal","setOpenQuestionModal","onAuthorize","useAuthorizationContext","handleAddQuestion","prefix","fontSize","callback","EmptyQuestion","Questions","_ref$isMobile","isMobile","initializeI18n","localeFiles","en","questionAnswer","title","noQuestion","addQuestion","cancel","all","item","delivery","promotion","others","displayFullName","example","loadMore","th","QuestionAndAnswerComponent","_ref2$titleAs","titleAs","_ref2$titleSize","titleSize","_ref2$isMobile","_ref2$useInView","useInView","ref","useViewPortContext","as","QuestionAndAnswer"],"sourceRoot":""}