{"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":""}