{"version":3,"sources":["assets/images/kakaochatead@x4.png","components/ModalConfirm.jsx","components/SimpleText.jsx","components/ModalSetImg.jsx","components/ImgUpload.jsx","components/ModalConfirmImg.jsx","components/SimpleImage.jsx","components/ItemHeader.jsx","components/ModalSetButton.jsx","components/ItemButtonListItem.jsx","components/ItemButtonList.jsx","components/BasicCard.jsx","components/TextCard.jsx","components/ImageCard.jsx","components/Carousel.jsx","components/ResWrapper.jsx","components/QuickRepliesItem.jsx","components/QuickReplies.jsx","store/jsonData.js","components/UiContents.jsx","components/JsonContents.jsx","ErrorBoundary.jsx","App.js","index.js"],"names":["module","exports","ModalConfirm","callBackConfirmAction","addAtion","confirmAction","e","action","target","dataset","className","type","onClick","data-action","defaultProps","SimpleText","outputsEl","index","callbackFromParent","useState","value","setValue","isOpenModal","setIsOpenModal","setAddAtion","useEffect","simpleText","text","substring","onClickAdd","name","modalNode","useRef","closeSet","current","contains","document","addEventListener","removeEventListener","TextareaAutosize","rowsMin","rowsMax","spellCheck","placeholder","onChange","textObj","onKeyUp","valueLength","length","maxlength","getAttribute","substr","maxLength","Icon","ref","changedValue","carousel","random","items","description","buttons","label","webLinkUrl","ModalSetImg","el","changeImgUrl","isOverflowModal","isCarousel","selectType","setSelectType","loading","setLoading","UpdatedImglinkList","thumbnail","link","imgLinkList","onSubmit","preventDefault","htmlFor","style","backgroundColor","color","id","files","size","formData","FormData","append","axios","post","then","res","data","result","imgUrl","url","console","log","err","catch","alert","accept","web","mobile","win","mac","ios","android","ImgUpload","node","setOverflowModal","bgImgUrl","simpleImage","imageUrl","btnBgStyle","backgroundImage","ItemSetButtonPos","getBoundingClientRect","offsetParent","right","src","alt","altText","ModalConfirmImg","SimpleImage","imgNode","imgCardObj","ItemHeader","itemsIdx","callBackhandleItem","hasItem","handleItem","title","ModalSetButton","button","changeBtn","buttonIdx","isBottomModal","isQuick","delBtn","delAfterClose","fixedRatio","buttonsLength","SetSelectType","buttonObj","buttonLabelMax","changedLabelValue","changedMsgValue","messageText","changedPhoneValue","phoneNumber","handleChangeInp","actionValue","currentValue","slice","replace","handleChangeOsInp","osLinkType","osLinkValue","newOsLink","osLink","onFocus","select","selectedType","blockId","pc","ItemButtonListItem","childDate","ItemButtonList","changeBtnList","buttonsMaxLength","setButtonsMaxLength","buttonsList","filter","num","map","i","key","newData","push","forEach","btn","BasicCard","onChangeTxt","maxLengthValueB","changedTitleValue","changedDesValue","data-idx","TextCard","maxLengthValue","checkMaxLength","onBlur","ImageCard","Carousel","checkedType","setCheckedType","carouselItems","carouselType","updatedItems","idx","carouselObj","carouselItemIdx","selectedItem","JSON","parse","stringify","splice","resultObj","cardtoText","cardtoImg","list","Object","keys","ResWrapper","obj","itemWrapperCallback","setFixedRatio","parentCallback","dataFromChild","updatedData","template","outputs","version","quickReplies","handleItemWrapper","resNum","resType","handleImgSize","item","checked","QuickRepliesItem","setIsBottomModal","contentsWrap","bodyHeight","body","clientHeight","top","QuickReplies","quickRepliesList","assign","sampleText","sampleCarousel","UiContents","onClickAddData","concat","outputsObj","moveItem","resList","onClickSample","window","confirm","href","rel","data-type","isQuickReplies","JsonContents","setObjJson","isDf","setIsDf","dfValue","trValue","jsonTxt","undefined","dfJsonTxt","trJsonTxt","handleToggleJson","textAreaRef","jsonObj","execCommand","focus","getSelection","removeAllRanges","ErrorBoundary","state","error","info","this","setState","props","children","Component","defaultValue","App","setObj","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.42d1b88a.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/kakaochatead@x4.2134e0c4.png\";","import React from 'react';\n\nconst ModalConfirm = ({ callBackConfirmAction, addAtion }) => {\n // 심플 텍스트, 텍스트 카드 글자수 변경\n // addAction: 버튼 추가 or 아이탬 추가\n const confirmAction = e => {\n const action = e.target.dataset.action;\n callBackConfirmAction(action, addAtion);\n };\n\n return (\n
\n

응답 설정 변경

\n

\n {addAtion === 'addBtn' ? '버튼을 추가할 경우' : '응답을 케로셀로 변경할 경우'}\n
\n 최대 글자수가 {addAtion === 'addBtn' ? '400' : '128'}자로\n 제한되고\n
\n {addAtion === 'addBtn' ? '400' : '128'}자 이상의 텍스트는\n 삭제됩니다.\n
\n
\n 설정을 변경하시겠습니까?\n

\n
\n \n 확인\n \n \n 취소\n \n
\n
\n );\n};\n\nModalConfirm.defaultProps = {\n // bla: 'test',\n};\n\nexport default ModalConfirm;\n","import React, { useState, useEffect, useRef } from 'react';\n// components\nimport ModalConfirm from './ModalConfirm';\nimport TextareaAutosize from '@material-ui/core/TextareaAutosize';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst SimpleText = ({ outputsEl, index, callbackFromParent }) => {\n // state\n const [value, setValue] = useState('');\n const [isOpenModal, setIsOpenModal] = useState(false);\n const [addAtion, setAddAtion] = useState('');\n\n // 텍스트 바뀔 때마다 넣음\n useEffect(() => {\n setValue(\n outputsEl.simpleText.text\n ? outputsEl.simpleText.text.substring(0, 1000)\n : ''\n );\n }, [outputsEl]);\n\n // maxLength keyup event\n const checkMaxLength = (e) => {\n const valueLength = e.target.value.length;\n const maxlength = e.target.getAttribute('maxlength');\n if (valueLength > maxlength) {\n setValue(e.target.value.substr(0, maxlength));\n }\n };\n\n // input change\n const onChangeValue = (e) => {\n // json > obj\n let textObj = {\n simpleText: {\n text: e.target.value.substring(0, 1000),\n },\n index: index,\n };\n callbackFromParent(textObj);\n setValue(e.target.value);\n };\n\n // 심플 > 텍스트카드 아ㅏㅏㅏㅏ 함수 좀 나눠야겠다..\n const callBackConfirmAction = (action, type) => {\n let changedValue = value;\n if (action === 'submit') {\n if (type === 'addBtn') {\n changedValue = value.substring(0, 400);\n //change carousel\n let textCardObj = {\n carousel: {\n type: 'textCard',\n random: false,\n items: [\n {\n description: changedValue,\n buttons: [\n {\n label: '버튼 설정',\n action: 'webLink',\n webLinkUrl: '',\n },\n ],\n },\n ],\n },\n index: index,\n };\n callbackFromParent(textCardObj);\n } else if (type === 'addItem') {\n changedValue = value.substring(0, 128);\n //change carousel\n let textCardObj = {\n carousel: {\n type: 'textCard',\n random: false,\n items: [\n {\n description: changedValue,\n },\n {\n description: '',\n },\n ],\n },\n index: index,\n };\n callbackFromParent(textCardObj);\n } else {\n setIsOpenModal(false);\n }\n } else {\n setIsOpenModal(false);\n }\n };\n\n // 버튼 추가, 아이템 추가 눌렀을때 글자 수 확인 모달\n const onClickAdd = (e) => {\n setAddAtion(e.target.name);\n setIsOpenModal(true);\n };\n\n // 모달\n const modalNode = useRef();\n // 모달 닫기\n const closeSet = (e) => {\n if (modalNode.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n // 모달 닫기\n useEffect(() => {\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, []);\n\n return (\n <>\n
\n
\n
\n \n \n {value.length}/1000\n \n ${!value.length && *}\n
\n \n + 버튼 추가\n \n
\n
\n
\n
\n \n
\n
\n
\n {isOpenModal && (\n \n )}\n
\n \n );\n};\n\nSimpleText.defaultProps = {\n // bla: 'test',\n};\n\nexport default SimpleText;\n","import React, { useState } from 'react';\nimport axios from 'axios';\n\nconst ModalSetImg = ({\n el,\n changeImgUrl,\n isOverflowModal,\n isCarousel,\n callbackFromParent,\n}) => {\n //state\n const [selectType, setSelectType] = useState('fileUpload');\n const [loading, setLoading] = useState(false);\n\n const loadingStyle = {\n backgroundColor: 'inherit',\n color: '#0f4b7f',\n };\n\n // form 기본 이벤트 막음\n const dialogForm = (e) => {\n e.preventDefault();\n };\n\n // select 변경\n const handleChangeSelect = (e) => {\n setSelectType(e.target.value);\n };\n\n // img url 변경\n const handleChangeUrl = (e) => {\n changeImgUrl(e.target.value);\n };\n\n // 이미지 업로드\n const handleChangeupload = (e) => {\n e.preventDefault();\n if (e.target.files[0].size < 3145728) {\n let formData = new FormData();\n formData.append('folderName', 'jsontobot');\n formData.append('file', e.target.files[0]);\n setLoading(true);\n axios\n .post('https://fileupload.cloudturing.com/upload', formData)\n .then((res) => {\n setLoading(false);\n if (res.data.result) {\n let imgUrl = res.data.data[0].url;\n changeImgUrl(imgUrl);\n } else {\n console.log('res.err', res.err);\n }\n })\n .catch((err) => {\n setLoading(false);\n alert('파일 업로드에 실패했습니다. 다시 시도해주세요.');\n console.log('Error', err);\n });\n } else {\n alert('이미지 최대 용량은 3MB 입니다.');\n }\n };\n\n // 이미지 링크 리스트\n let UpdatedImglinkList = {};\n // 이미지 링크 있으면 넣음\n if (el && el.thumbnail && el.thumbnail.link) {\n UpdatedImglinkList = el.thumbnail.link;\n }\n // 이미지 링크 입력\n const imgLinkList = (e) => {\n if (el && el.thumbnail && el.thumbnail.link) {\n UpdatedImglinkList = el.thumbnail.link;\n } else {\n el.thumbnail = {\n ...el.thumbnail,\n link: {},\n };\n UpdatedImglinkList = el.thumbnail.link;\n }\n\n let value = e.target.value;\n let label = e.target.name;\n if (value === '') {\n delete UpdatedImglinkList[label];\n } else {\n UpdatedImglinkList[label] = value;\n }\n callbackFromParent(UpdatedImglinkList);\n };\n\n return (\n
\n

이미지 등록

\n \n
\n {/* 이미지 업로드 */}\n
\n
\n 이미지 업로드 *\n (3MB 이하의 jpg, jpeg, png 이미지 파일)\n
\n
\n \n {selectType === 'imgUrl' ? (\n \n ) : (\n
\n \n {!loading\n ? '여기를 클릭해서 파일을 선택'\n : '업로드중입니다.'}\n \n \n
\n )}\n
\n
\n {isCarousel && (\n <>\n {/* 링크 설정 */}\n
\n
링크 설정 (web link)
\n \n
\n
\n
\n {/* 링크 */}\n
\n
\n 링크 (선택사항)\n
\n
    \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
\n
\n
\n \n )}\n
\n
\n );\n};\n\nexport default ModalSetImg;\n","import React, { useState, useEffect } from 'react';\n// components\nimport ModalSetImg from './ModalSetImg';\n\nconst ImgUpload = ({ outputsEl, node, index, callbackFromParent }) => {\n // state\n const [isOpenModal, setIsOpenModal] = useState(false);\n const [isOverflowModal, setOverflowModal] = useState(false);\n\n // 모달 열기\n const openModal = () => {\n let ItemSetButtonPos = node.current.getBoundingClientRect();\n let contentsWrap = node.current.offsetParent.offsetParent.getBoundingClientRect();\n if (contentsWrap.right - ItemSetButtonPos.right < 241) {\n setOverflowModal(true);\n }\n setIsOpenModal(!isOpenModal);\n };\n // 모달 닫기 (이거 왜 안에 넣었지??ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ큐ㅠㅠ)\n useEffect(() => {\n const closeSet = (e) => {\n if (node.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, [node]);\n\n // 이미지 url\n let bgImgUrl = outputsEl.simpleImage.imageUrl;\n // 이미지 url 콜백\n const changeImgUrl = (imgUrl) => {\n bgImgUrl = imgUrl;\n\n let imgObj = {\n simpleImage: {\n imageUrl: bgImgUrl,\n altText: '',\n },\n index: index,\n };\n callbackFromParent(imgObj);\n };\n // 버튼 백그라운드 이미지\n const btnBgStyle = {\n backgroundImage: `url(${bgImgUrl})`,\n };\n\n return (\n <>\n \n {bgImgUrl === '' && '+ 이미지 등록 '}\n {!bgImgUrl && *}\n \"\"\n \n {isOpenModal && (\n \n )}\n \n );\n};\n\nexport default ImgUpload;\n","import React from 'react';\n\nconst ModalConfirmImg = ({ callBackConfirmAction }) => {\n // 심플 이미지 > 이미지 카드\n const confirmAction = e => {\n const action = e.target.dataset.action;\n callBackConfirmAction(action);\n };\n\n return (\n
\n

응답 설정 변경

\n

\n 이미지를 케로셀로 변경할 경우\n
\n 모든 이미지 비율이 2:1로 변경됩니다.\n
\n 정사각형 이미지는 카드를 이용해주세요.\n
\n
\n 설정을 변경하시겠습니까?\n

\n
\n \n 확인\n \n \n 취소\n \n
\n
\n );\n};\n\nModalConfirmImg.defaultProps = {\n // bla: 'test',\n};\n\nexport default ModalConfirmImg;\n","import React, { useRef, useState, useEffect } from 'react';\n// components\nimport ImgUpload from './ImgUpload';\nimport ModalConfirmImg from './ModalConfirmImg';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst SimpleImage = ({ el, outputsEl, index, callbackFromParent }) => {\n // state\n const [isOpenModal, setIsOpenModal] = useState(false);\n\n // 이미지 업로드 모달 위치 잡으려고 넘겨줌\n const imgNode = useRef();\n\n // 모달\n const modalNode = useRef();\n // 모달 닫기\n const closeSet = e => {\n if (modalNode.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n // 모달 닫기\n useEffect(() => {\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, []);\n\n // 아이템 추가시 확인 모달\n const onClickAdd = e => {\n setIsOpenModal(true);\n };\n const callBackConfirmAction = action => {\n if (action === 'submit') {\n // 아이템 추가\n // change carousel\n let imgCardObj = {\n carousel: {\n type: 'imageCard',\n items: [\n {\n thumbnail: {\n imageUrl: outputsEl.simpleImage.imageUrl\n }\n },\n {\n thumbnail: {\n imageUrl: ''\n }\n }\n ]\n },\n index: index\n };\n callbackFromParent(imgCardObj);\n } else {\n setIsOpenModal(false);\n }\n };\n\n return (\n <>\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n {isOpenModal && (\n \n )}\n
\n \n );\n};\n\nexport default SimpleImage;\n","import React from 'react';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst ItemHeader = ({ itemsIdx, callBackhandleItem, hasItem }) => {\n // 아이템 정렬, 복사, 삭제\n const handleItem = e => {\n const action = e.target.name;\n callBackhandleItem(action, itemsIdx);\n };\n\n return (\n
\n
\n \n \n
\n
\n \n {hasItem !== 1 && (\n \n delete_outline\n \n )}\n
\n
\n );\n};\n\nexport default ItemHeader;\n","import React, { useState } from 'react';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst ModalSetButton = ({\n button,\n changeBtn,\n buttonIdx,\n isOverflowModal,\n isBottomModal,\n isQuick,\n delBtn,\n delAfterClose,\n fixedRatio,\n buttonsLength,\n}) => {\n // state\n const [selectType, SetSelectType] = useState(button.action);\n\n // 버튼 obj\n let buttonObj = button;\n // 버튼명 maxLength\n const buttonLabelMax = fixedRatio && buttonsLength > 1 ? 8 : 14;\n // 버튼명 글자수\n const changedLabelValue = buttonObj.label\n ? buttonObj.label.substring(0, buttonLabelMax)\n : '';\n // 메세지 글자수\n const changedMsgValue = buttonObj.messageText\n ? buttonObj.messageText.substring(0, 14)\n : '';\n // 폰번호 글자수\n const changedPhoneValue = buttonObj.phoneNumber\n ? buttonObj.phoneNumber.substring(0, 20)\n : '';\n\n // 버튼명 전체 선택\n const handleFocusInp = (e) => {\n e.target.select();\n };\n\n // 버튼명 변경\n const handleChangeName = (e) => {\n let value = e.target.value;\n const valueLength = e.target.value.length;\n const maxlength = e.target.getAttribute('maxlength');\n if (valueLength > maxlength) {\n value = value.substr(0, maxlength);\n }\n\n buttonObj.label = value;\n\n buttonObj.label =\n buttonObj.label === '' ? '버튼 설정' : buttonObj.label;\n\n changeBtn(buttonObj, buttonIdx);\n };\n\n // 버튼 액션 변경\n const handleChangeInp = (e) => {\n let actionValue = e.target.name;\n let currentValue = e.target.value;\n\n if (actionValue === 'phoneNumber' || actionValue === 'messageText') {\n if (currentValue.length > e.target.maxLength) {\n currentValue = currentValue.slice(0, e.target.maxLength);\n }\n }\n\n // 전화번호 숫자만 받음\n if (actionValue === 'phoneNumber') {\n currentValue = currentValue.replace(/[^0-9]/g, '');\n }\n\n buttonObj = {\n label: buttonObj.label,\n action: selectType,\n [actionValue]: currentValue,\n };\n changeBtn(buttonObj, buttonIdx);\n };\n\n // 버튼 삭제\n const handleDelBtn = () => {\n delBtn(buttonIdx);\n delAfterClose(false);\n };\n\n // select 변경 이벤트\n const changeSelect = (e) => {\n let selectedType = e.target.value;\n SetSelectType(selectedType);\n buttonObj = {\n label: buttonObj.label,\n action: e.target.value,\n };\n switch (selectedType) {\n case 'webLink':\n buttonObj.webLinkUrl = '';\n break;\n case 'osLink':\n buttonObj.osLink = {};\n break;\n case 'message':\n buttonObj.messageText = '';\n break;\n case 'phone':\n buttonObj.phoneNumber = '';\n break;\n case 'block':\n buttonObj.blockId = '';\n //buttonObj.messageText = '';\n break;\n default:\n console.log('no select!');\n }\n changeBtn(buttonObj, buttonIdx);\n };\n\n // OsLink 설정\n const handleChangeOsInp = (e) => {\n let osLinkType = e.target.name;\n let osLinkValue = e.target.value;\n let newOsLink = {\n ...buttonObj.osLink,\n [osLinkType]: osLinkValue,\n };\n buttonObj = {\n label: buttonObj.label,\n action: 'osLink',\n osLink: newOsLink,\n };\n changeBtn(buttonObj, buttonIdx);\n };\n\n return (\n \n

버튼 설정

\n \n
\n {/* 버튼명 */}\n
\n
\n 버튼명 *\n
\n 1 ? 8 : 14\n }`}\n />\n \n \n {changedLabelValue !== '버튼 설정'\n ? changedLabelValue.length\n : 0}\n \n /{fixedRatio && buttonsLength > 1 ? 8 : 14}\n \n
\n {/* 버튼 기능 */}\n
\n
\n 버튼 기능 *\n
\n \n {(() => {\n if (selectType === 'webLink')\n return (\n \n );\n if (selectType === 'osLink')\n return (\n
    \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
  • \n \n \n
  • \n
\n );\n if (selectType === 'message')\n return (\n <>\n \n \n {changedMsgValue.length}\n /14\n \n \n );\n if (selectType === 'phone')\n return (\n <>\n \n \n {changedPhoneValue.length}\n /20\n \n \n );\n if (selectType === 'block')\n return (\n \n );\n })()}\n
\n
\n \n );\n};\n\nexport default ModalSetButton;\n","import React, { useState, useEffect, useRef } from 'react';\n// components\nimport ModalSetButton from './ModalSetButton';\n\nconst ItemButtonListItem = ({\n button,\n changeBtn,\n buttonIdx,\n delBtn,\n fixedRatio,\n buttonsLength\n}) => {\n // state\n const [isOpenModal, setIsOpenModal] = useState(false);\n const [isOverflowModal, setOverflowModal] = useState(false);\n // 버튼명 maxLength: 정사각형 단일 버튼 14자, 정사각형 다중 버튼 8자, 와이드 14자\n const buttonLabelMax = fixedRatio && buttonsLength > 1 ? 8 : 14;\n // 버튼명 maxLength 맞춰서 끊음\n const changedLabelValue = button.label\n ? button.label.substring(0, buttonLabelMax)\n : '';\n\n // 모달\n const modalNode = useRef();\n // 모달 열기\n const openModal = () => {\n let ItemSetButtonPos = modalNode.current.getBoundingClientRect();\n let contentsWrap = modalNode.current.offsetParent.offsetParent.getBoundingClientRect();\n if (contentsWrap.right - ItemSetButtonPos.right < 241) {\n setOverflowModal(true);\n }\n setIsOpenModal(!isOpenModal);\n };\n // 모달 닫기\n const closeSet = e => {\n if (modalNode.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n // 모달 닫기\n useEffect(() => {\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, []);\n // 버튼 삭제 후 모달 닫기 콜백\n const delAfterClose = childDate => {\n setIsOpenModal(childDate);\n };\n\n return (\n
  • \n \n {changedLabelValue}\n \n {/* 설정 팝업 */}\n {isOpenModal && (\n \n )}\n
  • \n );\n};\n\nexport default ItemButtonListItem;\n","import React, { useEffect, useState } from 'react';\n// components\nimport ItemButtonListItem from './ItemButtonListItem';\n\nconst ItemButtonList = ({ el, index, changeBtnList, fixedRatio }) => {\n //state\n const [buttonsMaxLength, setButtonsMaxLength] = useState(3);\n\n // 카드 이미지형에 따라 버튼 갯수 바꿈\n useEffect(() => {\n if (fixedRatio) {\n setButtonsMaxLength(2);\n } else {\n setButtonsMaxLength(3);\n }\n }, [fixedRatio]);\n\n // 버튼 리스트\n let buttonsList = el.buttons ? [...el.buttons] : [];\n\n // 버튼 추가\n const onClickAddButton = (e) => {\n if (buttonsList.length < buttonsMaxLength) {\n const newData = {\n label: '버튼 설정',\n action: 'webLink',\n webLinkUrl: '',\n };\n // 휴\n if (!el.buttons) {\n buttonsList = [newData];\n } else {\n buttonsList.push(newData);\n // 카드 정사각형 이미지일 경우 버튼명 8자\n if (fixedRatio) {\n buttonsList.forEach((btn) => {\n btn.label = btn.label.substr(0, 8);\n });\n }\n }\n // 버튼 리스트 보냄\n changeBtnList(buttonsList, index);\n }\n };\n\n // 버튼 변경, 모달에서 콜백\n const changeBtn = (buttonObj, buttonIdx) => {\n buttonsList[buttonIdx] = buttonObj;\n // 버튼 리스트 보냄\n changeBtnList(buttonsList, index);\n };\n\n // 버튼 삭제\n const delBtn = (buttonIdx) => {\n //delete buttonsList[buttonIdx]; 이건 왜 지우고나면 빈값으로 남아있는거..??\n buttonsList = buttonsList.filter(\n (num) => num !== buttonsList[buttonIdx]\n );\n // 버튼 리스트 보냄\n changeBtnList(buttonsList, index);\n };\n\n return (\n <>\n
      \n {el.buttons &&\n el.buttons.map((button, i) => (\n \n ))}\n
    \n {buttonsList && buttonsList.length < buttonsMaxLength && (\n \n )}\n \n );\n};\n\nexport default ItemButtonList;\n","import React, { useState, useEffect, useRef } from 'react';\n// components\nimport ItemHeader from './ItemHeader';\nimport ItemButtonList from './ItemButtonList';\nimport ModalSetImg from './ModalSetImg';\nimport TextareaAutosize from '@material-ui/core/TextareaAutosize';\n\nconst BasicCard = ({\n el,\n itemsIdx,\n onChangeTxt,\n changeBtnList,\n outputsEl,\n callbackFromParent,\n callBackhandleItem,\n maxLengthValueB,\n hasItem,\n fixedRatio,\n}) => {\n // state\n const [isOpenModal, setIsOpenModal] = useState(false);\n const [isOverflowModal, setOverflowModal] = useState(false);\n // title\n const changedTitleValue = el.title ? el.title.substring(0, 20) : '';\n // description\n if (hasItem > 1 && el.title) {\n maxLengthValueB = 40;\n }\n const changedDesValue = el.description\n ? el.description.substring(0, maxLengthValueB)\n : '';\n\n // 모달 위치\n const imgNode = useRef();\n // 모달 열기\n const openModal = () => {\n let ItemSetButtonPos = imgNode.current.getBoundingClientRect();\n let contentsWrap = imgNode.current.offsetParent.offsetParent.getBoundingClientRect();\n if (contentsWrap.right - ItemSetButtonPos.right < 241) {\n setOverflowModal(true);\n }\n setIsOpenModal(!isOpenModal);\n };\n // 모달 닫기\n const closeSet = (e) => {\n if (imgNode.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n // 모달 닫기\n useEffect(() => {\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, []);\n\n // 이미지\n let bgImgUrl = '';\n if (el.thumbnail) {\n bgImgUrl = el.thumbnail.imageUrl;\n }\n // 이미지 url 콜백\n const changeImgUrl = (imgUrl) => {\n bgImgUrl = imgUrl;\n if (!el.thumbnail) {\n el.thumbnail = {};\n }\n el.thumbnail.imageUrl = bgImgUrl;\n callbackFromParent(bgImgUrl);\n };\n // 버튼 백그라운드 이미지\n // const btnBg = {\n // backgroundImage: 'url(' + bgImgUrl + ')',\n // };\n\n return (\n
    \n \n
    \n
    \n \n {!bgImgUrl ? (\n '+ 이미지 등록 '\n ) : (\n \"카드\n )}\n {!bgImgUrl && *}\n \n {isOpenModal && (\n \n )}\n
    \n
    \n
    \n \n \n {changedTitleValue.length}/20\n \n
    \n
    \n {/* */}\n \n \n {changedDesValue.length}/\n {maxLengthValueB}\n \n
    \n \n
    \n
    \n
    \n );\n};\n\nexport default BasicCard;\n","import React from 'react';\n// components\nimport ItemHeader from './ItemHeader';\nimport ItemButtonList from './ItemButtonList';\nimport TextareaAutosize from '@material-ui/core/TextareaAutosize';\n\nconst TextCard = ({\n el,\n itemsIdx,\n onChangeTxt,\n changeBtnList,\n outputsEl,\n callBackhandleItem,\n maxLengthValue,\n hasItem,\n}) => {\n let changedValue = el.description\n ? el.description.substring(0, maxLengthValue)\n : '';\n\n // maxLength keyup\n const checkMaxLength = (e) => {\n const valueLength = e.target.value.length;\n if (valueLength > maxLengthValue) {\n changedValue = e.target.value.substr(0, maxLengthValue);\n }\n };\n\n return (\n
    \n \n
    \n
    \n {/* */}\n \n \n {changedValue.length}/{maxLengthValue}\n \n ${!changedValue.length && *}\n
    \n \n
    \n
    \n );\n};\n\nexport default TextCard;\n","import React, { useRef, useEffect, useState } from 'react';\n// components\nimport ItemHeader from './ItemHeader';\nimport ModalSetImg from './ModalSetImg';\n\nconst ImageCard = ({\n el,\n itemsIdx,\n outputsEl,\n callbackFromParent,\n callBackhandleItem,\n hasItem,\n}) => {\n // state\n const [isOpenModal, setIsOpenModal] = useState(false);\n const [isOverflowModal, setOverflowModal] = useState(false);\n\n // 모달\n const modalNode = useRef();\n // 모달 열기\n const openModal = () => {\n let ItemSetButtonPos = modalNode.current.getBoundingClientRect();\n let contentsWrap = modalNode.current.offsetParent.getBoundingClientRect();\n if (contentsWrap.right - ItemSetButtonPos.right < 241) {\n setOverflowModal(true);\n }\n setIsOpenModal(!isOpenModal);\n };\n // 모달 닫기\n const closeSet = (e) => {\n if (modalNode.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n // 모달 닫기\n useEffect(() => {\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, []);\n\n // 이미지 url\n let bgImgUrl = '';\n if (el.thumbnail) {\n bgImgUrl = el.thumbnail.imageUrl;\n }\n // 이미지 url 콜백\n const changeImgUrl = (imgUrl) => {\n bgImgUrl = imgUrl;\n if (!el.thumbnail) {\n el.thumbnail = {};\n }\n el.thumbnail.imageUrl = bgImgUrl;\n callbackFromParent(bgImgUrl);\n };\n // 버튼 백그라운드 이미지\n const btnBgStyle = {\n backgroundImage: 'url(' + bgImgUrl + ')',\n };\n\n return (\n
    \n \n
    \n \n {isOpenModal && (\n \n )}\n
    \n
    \n );\n};\n\nexport default ImageCard;\n","import React, { useState, useEffect, useRef } from 'react';\n// components\nimport BasicCard from './BasicCard';\nimport TextCard from './TextCard';\nimport ImageCard from './ImageCard';\nimport ModalConfirm from './ModalConfirm';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst Carousel = ({ outputsEl, index, callbackFromParent, fixedRatio }) => {\n // state\n const [isOpenModal, setIsOpenModal] = useState(false);\n const [checkedType, setCheckedType] = useState(true);\n\n // 케로셀 아이템 array\n let carouselItems = outputsEl.carousel.items\n ? outputsEl.carousel.items\n : null;\n const carouselType = outputsEl.carousel.type\n ? outputsEl.carousel.type\n : null;\n\n // 없는 타입일 경우 에러 표시\n useEffect(() => {\n if (\n !(\n carouselType === 'textCard' ||\n carouselType === 'basicCard' ||\n carouselType === 'imageCard'\n )\n ) {\n setCheckedType(false);\n } else {\n setCheckedType(true);\n }\n }, [carouselType]);\n\n // description maxLength\n // 카드 갯수 체크\n let hasItem =\n outputsEl.carousel.items && outputsEl.carousel.items.length\n ? outputsEl.carousel.items.length\n : null;\n // 텍스트 카드: 단일 400자, 다중 128자\n let maxLengthValue = 128;\n // 베이직 카드: 단일 230자, 다중 76자\n let maxLengthValueB = 76;\n // maxLength change\n if (hasItem === 1 && carouselType === 'textCard') {\n maxLengthValue = 400;\n } else if (hasItem === 1 && carouselType === 'basicCard') {\n maxLengthValueB = 230;\n }\n\n // title, description 콜백\n const onChangeTxt = (e) => {\n const updatedItems = [...carouselItems];\n updatedItems[e.target.dataset.idx][e.target.className] = e.target.value;\n\n const carouselObj = {\n carousel: {\n type: carouselType,\n random: outputsEl.carousel.random,\n items: updatedItems,\n },\n index: index,\n };\n callbackFromParent(carouselObj);\n };\n\n // 버튼 리스트 콜백\n const changeBtnList = (buttonsList, carouselItemIdx) => {\n carouselItems[carouselItemIdx].buttons = buttonsList;\n if (!buttonsList.length) {\n delete carouselItems[carouselItemIdx].buttons;\n }\n const carouselObj = {\n carousel: {\n type: carouselType,\n random: outputsEl.carousel.random,\n items: carouselItems,\n },\n index: index,\n };\n callbackFromParent(carouselObj);\n };\n\n // 카드 아이템 추가\n let newData = {};\n const onClickAddItem = () => {\n if (carouselType === 'basicCard') {\n if (!fixedRatio) {\n newData = {\n title: '',\n description: '',\n };\n } else {\n newData = {\n title: '',\n description: '',\n thumbnail: {\n fixedRatio: true,\n },\n };\n }\n } else if (carouselType === 'textCard') {\n if (hasItem === 1) {\n setIsOpenModal(true);\n } else {\n newData = {\n description: '',\n };\n }\n } else if (carouselType === 'imageCard') {\n newData = {\n thumbnail: {\n imageUrl: '',\n },\n };\n } else {\n alert('잘못된 응답 타입입니다.');\n return false;\n }\n\n // 빈 객체가 아닐때! (랜덤 걸어야하나)\n if (Object.keys(newData).length !== 0) {\n let carouselObj = {};\n if (carouselType !== 'textCard') {\n carouselObj = {\n carousel: {\n type: carouselType,\n items: [...carouselItems, newData],\n },\n index: index,\n };\n } else {\n carouselObj = {\n carousel: {\n type: carouselType,\n random: outputsEl.carousel.random,\n items: [...carouselItems, newData],\n },\n index: index,\n };\n }\n\n callbackFromParent(carouselObj);\n }\n };\n\n // 아이템 추가 확인, 모달에서 콜백\n const callBackConfirmAction = (action, type) => {\n if (action === 'submit') {\n let newData = {\n description: '',\n };\n const carouselObj = {\n carousel: {\n type: carouselType,\n random: outputsEl.carousel.random,\n items: [...carouselItems, newData],\n },\n index: index,\n };\n\n callbackFromParent(carouselObj);\n setIsOpenModal(false);\n } else {\n setIsOpenModal(false);\n }\n };\n\n // 순서 변경 및 제거\n const callBackhandleItem = (action, itemsIdx) => {\n // 순서 변경\n if (action) {\n // 해당 아이템 뽑음\n let selectedItem = carouselItems.filter(\n (num) => num === carouselItems[itemsIdx]\n );\n //selectedItem = [Object.assign({}, selectedItem[0])];\n\n selectedItem = JSON.parse(JSON.stringify(selectedItem[0]));\n\n // 핸들러\n if (action === 'up' && itemsIdx > 0) {\n carouselItems.splice(itemsIdx, 1);\n carouselItems.splice(itemsIdx - 1, 0, selectedItem);\n } else if (\n action === 'down' &&\n itemsIdx < carouselItems.length - 1\n ) {\n carouselItems.splice(itemsIdx, 1);\n carouselItems.splice(itemsIdx + 1, 0, selectedItem);\n } else if (action === 'copy') {\n if (hasItem < 10) {\n carouselItems.splice(itemsIdx + 1, 0, selectedItem);\n }\n } else if (action === 'del') {\n carouselItems = carouselItems.filter(\n (num) => num !== carouselItems[itemsIdx]\n );\n } else {\n console.log('no case');\n }\n }\n\n // 변경된 데이터 넣음\n let resultObj = {\n carousel: {\n type: carouselType,\n random: outputsEl.carousel.random,\n items: carouselItems,\n },\n index: index,\n };\n\n // 부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 텍스트 카드 > 심플 텍스트\n const cardtoText = () => {\n let resultObj;\n if (carouselType === 'textCard') {\n if (hasItem === 0) {\n resultObj = {\n simpleText: {},\n index: index,\n };\n // 부모한테 전달\n callbackFromParent(resultObj);\n } else if (hasItem === 1 && !outputsEl.carousel.items[0].buttons) {\n resultObj = {\n simpleText: {\n text: outputsEl.carousel.items[0].description,\n },\n index: index,\n };\n // 부모한테 전달\n callbackFromParent(resultObj);\n }\n }\n };\n\n // 이미지 카드 > 심플 이미지\n const cardtoImg = () => {\n let resultObj;\n if (carouselType === 'imageCard') {\n if (hasItem === 0) {\n resultObj = {\n simpleImage: {\n imageUrl: '',\n altText: '',\n },\n index: index,\n };\n // 부모한테 전달\n callbackFromParent(resultObj);\n } else if (hasItem === 1) {\n resultObj = {\n simpleImage: {\n imageUrl:\n outputsEl.carousel.items[0].thumbnail.imageUrl,\n altText: '',\n },\n index: index,\n };\n // 부모한테 전달\n callbackFromParent(resultObj);\n }\n }\n };\n\n // 일단.. 카드 > 심플 (여기서 자꾸 경고 뜸)\n useEffect(() => {\n cardtoText();\n cardtoImg();\n }, [outputsEl]);\n\n // 모달 위치\n const modalNode = useRef();\n // 모달 닫기\n const closeSet = (e) => {\n if (modalNode.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n // 모달 닫기\n useEffect(() => {\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, []);\n\n // 아이템 리스트\n let list;\n if (carouselItems) {\n list = carouselItems.map(function (el, itemsIdx) {\n if (carouselType === 'basicCard') {\n return (\n \n );\n } else if (carouselType === 'textCard') {\n return (\n \n );\n } else if (carouselType === 'imageCard') {\n return (\n \n );\n } else {\n return null;\n }\n });\n } else {\n return
    잘못된 응답 타입입니다.
    ;\n }\n\n return (\n <>\n {checkedType ? (\n list\n ) : (\n
    잘못된 응답 타입입니다.
    \n )}\n {checkedType && carouselItems.length < 10 && (\n
    \n
    \n \n
    \n
    \n )}\n
    \n {isOpenModal && (\n \n )}\n
    \n \n );\n};\n\nCarousel.defaultProps = {\n // bla: 'test',\n};\n\nexport default Carousel;\n","import React, { useState } from 'react';\n// components\nimport SimpleText from '../components/SimpleText';\nimport SimpleImage from '../components/SimpleImage';\nimport Carousel from '../components/Carousel';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst ResWrapper = ({\n obj,\n outputsEl,\n index,\n callbackFromParent,\n itemWrapperCallback\n}) => {\n // state\n const [fixedRatio, setFixedRatio] = useState(false);\n\n // obj 콜백\n const parentCallback = dataFromChild => {\n // 기존값 넣어서 업데이트!\n let updatedData = obj.template.outputs;\n\n updatedData[dataFromChild.index] = dataFromChild;\n delete dataFromChild.index;\n\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: updatedData,\n quickReplies: obj.template.quickReplies\n }\n };\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 순서 변경 및 제거\n const handleItemWrapper = e => {\n const action = e.target.name;\n itemWrapperCallback(index, action);\n };\n\n // 응답 넘버링\n let resNum = index;\n (() => {\n if (resNum === 0) resNum = '첫번째';\n if (resNum === 1) resNum = '두번째';\n if (resNum === 2) resNum = '세번째';\n })();\n\n // 응답 타입\n let resType = '';\n (() => {\n if (outputsEl.simpleText) resType = '텍스트';\n if (outputsEl.simpleImage) resType = '이미지';\n if (outputsEl.carousel) {\n if (outputsEl.carousel.type === 'basicCard') resType = '카드';\n if (outputsEl.carousel.type === 'textCard') resType = '텍스트 카드';\n if (outputsEl.carousel.type === 'imageCard')\n resType = '이미지 카드';\n }\n })();\n\n // 램덤 답변\n const randomCheck = e => {\n let data = outputsEl;\n data.carousel.random = !data.carousel.random;\n\n // 기존값 넣어서 업데이트!\n let updatedData = obj.template.outputs;\n\n updatedData[index] = data;\n\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: updatedData,\n quickReplies: obj.template.quickReplies\n }\n };\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 카드 이미지 사이즈 조절\n const handleImgSize = e => {\n let data = outputsEl;\n if (e.target.name === 'square') {\n setFixedRatio(true);\n\n data.carousel.items.forEach(item => {\n item.thumbnail = { ...item.thumbnail, fixedRatio: true };\n if (item.buttons) {\n const buttonsList = item.buttons.filter(\n (btn, idx) => idx !== 2\n );\n\n buttonsList.forEach((button, idx) => {\n item.buttons[idx].label = button.label.substr(0, 8);\n });\n\n item.buttons = buttonsList;\n }\n });\n } else {\n setFixedRatio(false);\n data.carousel.items.forEach(item => {\n delete item.thumbnail.fixedRatio;\n });\n }\n\n // 기존값 넣어서 업데이트!\n let updatedData = obj.template.outputs;\n\n updatedData[index] = data;\n\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: updatedData,\n quickReplies: obj.template.quickReplies\n }\n };\n\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // list\n let list;\n if (Object.keys(outputsEl)[0] === 'simpleText') {\n list = (\n \n );\n } else if (Object.keys(outputsEl)[0] === 'simpleImage') {\n list = (\n \n );\n } else if (Object.keys(outputsEl)[0] === 'carousel') {\n list = (\n \n );\n } else {\n list =
    잘못된 응답 타입입니다.
    ;\n }\n\n return (\n
    \n {/* 왼쪽 숫자 */}\n
    \n {index + 1}\n {index !== 0 && (\n \n keyboard_arrow_up\n \n )}\n\n {obj.template.outputs.length !== 1 && (\n \n keyboard_arrow_down\n \n )}\n\n {obj.template.outputs.length !== 1 && (\n \n delete_outline\n \n )}\n
    \n {/* 타이틀 */}\n

    \n {resNum} 응답 - {resType}\n

    \n {outputsEl.carousel && outputsEl.carousel.type === 'textCard' && (\n
    \n \n
    \n )}\n\n {outputsEl.carousel && outputsEl.carousel.type === 'basicCard' && (\n
    \n \n 2:1\n \n
    \n 이미지 비율을 2:1로 설정할 경우\n
    \n 버튼 배열이 세로형으로 변경되며 버튼의\n
    \n 최대 갯수는 3개로 변경됩니다.\n
    \n \n 1:1\n \n
    \n 이미지 비율을 1:1로 설정할 경우\n
    \n 버튼 배열이 가로형으로 변경되며 버튼의\n
    \n 최대 갯수는 2개, 글자수는 8자로 변경됩니다.\n
    \n
    \n )}\n\n {/* 아이템 감싸는 영역 */}\n
    {list}
    \n
    \n );\n};\n\nexport default ResWrapper;\n","import React, { useState, useEffect, useRef } from 'react';\n// components\nimport ModalSetButton from './ModalSetButton';\n\nconst QuickRepliesItem = ({ button, changeBtn, buttonIdx, delBtn }) => {\n // state\n const [isOpenModal, setIsOpenModal] = useState(false);\n const [isOverflowModal, setOverflowModal] = useState(false);\n const [isBottomModal, setIsBottomModal] = useState(false);\n\n // 버튼명\n const changedValue = button.label ? button.label.substring(0, 14) : '';\n\n // 모달\n const modalNode = useRef();\n // 모달 열기\n const openModal = () => {\n let ItemSetButtonPos = modalNode.current.getBoundingClientRect();\n let contentsWrap = modalNode.current.offsetParent.getBoundingClientRect();\n let bodyHeight = document.body.clientHeight;\n if (contentsWrap.right - ItemSetButtonPos.right < 241) {\n setOverflowModal(true);\n }\n setIsOpenModal(!isOpenModal);\n if (bodyHeight - contentsWrap.top < 300) {\n setIsBottomModal(true);\n }\n };\n // 모달 닫기\n const closeSet = e => {\n if (modalNode.current.contains(e.target)) {\n // inside click\n return;\n }\n setIsOpenModal(false);\n };\n // 모달 닫기\n useEffect(() => {\n // add when mounted\n document.addEventListener('mousedown', closeSet);\n // return function to be called when unmounted\n return () => {\n document.removeEventListener('mousedown', closeSet);\n };\n }, []);\n\n // 삭제 후 모달 닫기 콜백\n const delAfterClose = childDate => {\n setIsOpenModal(childDate);\n };\n\n return (\n
    \n \n {changedValue}\n \n {isOpenModal && (\n \n )}\n
    \n );\n};\n\nexport default QuickRepliesItem;\n","import React from 'react';\n// components\nimport ItemHeader from './ItemHeader';\nimport QuickRepliesItem from './QuickRepliesItem';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst QuickReplies = ({ obj, quickRepliesList, callbackFromParent }) => {\n // 아이템 갯수\n let hasItem = quickRepliesList.length;\n\n // 아이템 순서 변경 및 제거\n const callBackhandleItem = (action, itemsIdx) => {\n // 순서 변경\n if (action) {\n // 해당 아이템 뽑음\n let selectedItem = quickRepliesList.filter(\n num => num === quickRepliesList[itemsIdx]\n );\n selectedItem = [Object.assign({}, selectedItem[0])];\n\n // 핸들러\n if (action === 'up' && itemsIdx > 0) {\n quickRepliesList.splice(itemsIdx, 1);\n quickRepliesList.splice(itemsIdx - 1, 0, ...selectedItem);\n } else if (\n action === 'down' &&\n itemsIdx < quickRepliesList.length - 1\n ) {\n quickRepliesList.splice(itemsIdx, 1);\n quickRepliesList.splice(itemsIdx + 1, 0, ...selectedItem);\n } else if (action === 'copy') {\n if (hasItem < 10) {\n quickRepliesList.splice(itemsIdx + 1, 0, ...selectedItem);\n }\n } else if (action === 'del') {\n quickRepliesList = quickRepliesList.filter(\n num => num !== quickRepliesList[itemsIdx]\n );\n } else {\n console.log('no case');\n }\n }\n\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: obj.template.outputs,\n quickReplies: quickRepliesList\n }\n };\n\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 아이템 삭제\n const handleDelQuick = e => {\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: obj.template.outputs\n }\n };\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 아이템 버튼 변경\n let buttonsList = quickRepliesList ? [...quickRepliesList] : [];\n const changeBtn = (buttonObj, buttonIdx) => {\n buttonsList[buttonIdx] = buttonObj;\n\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: obj.template.outputs,\n quickReplies: buttonsList\n }\n };\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 아이템 버튼 삭제\n const delBtn = buttonIdx => {\n buttonsList = buttonsList.filter(num => num !== buttonsList[buttonIdx]);\n\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: obj.template.outputs,\n quickReplies: buttonsList\n }\n };\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 아이템 버튼 추가\n const handleAddQuickItem = e => {\n let newDate = {\n action: 'message',\n label: '버튼 설정',\n messageText: ''\n };\n //변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: obj.template.outputs,\n quickReplies: [...buttonsList, newDate]\n }\n };\n //부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 아이템 리스트\n let list;\n if (quickRepliesList) {\n list = quickRepliesList.map(function(el, itemsIdx) {\n return (\n
    \n \n \n
    \n );\n });\n }\n\n return (\n
    \n {/* 왼쪽 숫자 */}\n
    \n \n swap_calls\n \n \n
    \n {/* 타이틀 */}\n

    바로 연결

    \n {/* 아이템 감싸는 영역 */}\n
    \n {list}\n {/* 바로연결 추가 */}\n {hasItem < 10 && (\n
    \n \n add_circle_outline\n \n
    \n )}\n
    \n
    \n );\n};\n\nexport default QuickReplies;\n","const sampleText = {\n version: '2.0',\n template: {\n outputs: [\n {\n simpleText: {\n text:\n '텍스트형 답변입니다.\\n\\n텍스트형 답변은 최대 1000자까지 가능하며, 500자가 넘어가면 이후의 글자는 생략되고 전체 보기 버튼을 통해서 전체 내용을 확인할 수 있습니다.'\n }\n },\n {\n simpleImage: {\n imageUrl:\n 'https://file3.cloudturing.com/upload/sample/aa0a3cbc7e8599041585127125996.jpg',\n altText: 'sample600'\n }\n }\n ],\n quickReplies: [\n {\n action: 'message',\n label: '뒤로가기',\n messageText: '발화를 입력해주세요.'\n },\n {\n action: 'message',\n label: '처음으로',\n messageText: '발화를 입력해주세요.'\n }\n ]\n }\n};\n\nconst sampleCarousel = {\n version: '2.0',\n template: {\n outputs: [\n {\n simpleText: {\n text: '아래는 케로셀 카드 답변입니다. '\n }\n },\n {\n carousel: {\n type: 'basicCard',\n items: [\n {\n title: '첫 번째 카드 제목입니다. ',\n description: '첫 번째 카드 설명입니다. ',\n thumbnail: {\n imageUrl:\n 'https://file3.cloudturing.com/upload/sample/3e7e56ec4d8b4a021585127125955.jpg'\n },\n buttons: [\n {\n label: '버튼 1입니다.',\n action: 'message',\n messageText: '발화를 입력해주세요.'\n },\n {\n label: '버튼 2입니다.',\n action: 'message',\n messageText: '발화를 입력해주세요.'\n },\n {\n label: '버튼 3입니다.',\n action: 'message',\n messageText: '발화를 입력해주세요.'\n }\n ]\n },\n {\n title: '두 번째 카드 제목입니다. ',\n description: '두 번째 카드 설명입니다.',\n thumbnail: {\n imageUrl:\n 'https://file3.cloudturing.com/upload/sample/3e7e56ec4d8b4a021585127125955.jpg'\n },\n buttons: [\n {\n label: '버튼 1입니다.',\n action: 'message',\n messageText: '발화를 입력해주세요.'\n },\n {\n label: '버튼 2입니다.',\n action: 'message',\n messageText: '발화를 입력해주세요.'\n },\n {\n label: '버튼 3입니다.',\n action: 'message',\n messageText: '발화를 입력해주세요.'\n }\n ]\n }\n ]\n }\n }\n ],\n quickReplies: [\n {\n action: 'message',\n label: '뒤로가기',\n messageText: '발화를 입력해주세요.'\n },\n {\n action: 'message',\n label: '처음으로',\n messageText: '발화를 입력해주세요.'\n }\n ]\n }\n};\n\nexport { sampleText, sampleCarousel };\n","import React from 'react';\nimport PropTypes from 'prop-types';\n// components\nimport ResWrapper from '../components/ResWrapper';\nimport QuickReplies from '../components/QuickReplies';\n// data\nimport { sampleText, sampleCarousel } from '../store/jsonData';\n// ui\nimport Icon from '@material-ui/core/Icon';\n\nconst UiContents = ({ obj, callbackFromParent }) => {\n if (!obj || !obj.template || !obj.template.outputs) {\n alert('잘못된 응답 타입입니다.');\n return null;\n }\n\n // response wrapper 에서 받은 데이타\n const parentCallback = (dataFromChild) => {\n //아이템 컴포넌트 변경 시 부모한테 전달\n callbackFromParent(dataFromChild);\n };\n\n // 응답 추가\n let newData = {};\n const onClickAddData = (e) => {\n if (obj.template.outputs.length < 3) {\n let type = e.target.name;\n if (type === 'simpleImage') {\n newData = {\n simpleImage: {\n imageUrl: '',\n altText: '',\n },\n };\n } else if (type === 'simpleText') {\n newData = {\n simpleText: {\n text: '',\n },\n };\n } else {\n newData = {\n carousel: {\n type: 'basicCard',\n items: [\n {\n title: '',\n description: '',\n },\n ],\n },\n };\n }\n\n let resultOutputs = obj.template.outputs.concat(newData);\n\n let resultObj = {\n version: '2.0',\n template: {\n outputs: resultOutputs,\n quickReplies: obj.template.quickReplies,\n },\n };\n\n //부모한테 전달\n callbackFromParent(resultObj);\n } else {\n alert('응답은 3개까지 가능합니다.');\n }\n };\n\n // 순서 변경 및 제거\n const itemWrapperCallback = (index, action) => {\n // copy\n let outputsObj = obj.template.outputs;\n\n // 순서 변경\n if (action) {\n // 해당 아이템 뽑음\n const moveItem = outputsObj.filter(\n (num) => num === outputsObj[index]\n );\n //\n if (action === 'up' && index > 0) {\n outputsObj.splice(index, 1);\n outputsObj.splice(index - 1, 0, ...moveItem);\n } else if (action === 'down' && index < outputsObj.length - 1) {\n outputsObj.splice(index, 1);\n outputsObj.splice(index + 1, 0, ...moveItem);\n } else if (action === 'del') {\n outputsObj = obj.template.outputs.filter(\n (num) => num !== outputsObj[index]\n );\n } else {\n return alert('끝');\n }\n // 아니면 삭제 (인데 언디파인드로 받고 있는데 정확히 받을까여??!!!)\n } else {\n console.log('no action');\n }\n\n // 변경된 데이터 넣음\n let resultObj = {\n version: '2.0',\n template: {\n outputs: outputsObj,\n quickReplies: obj.template.quickReplies,\n },\n };\n\n // 부모한테 전달\n callbackFromParent(resultObj);\n };\n\n // 응답 리스트\n let resList = obj.template.outputs.map(function (outputsEl, index) {\n return (\n \n );\n });\n\n // 바로 연결 추가\n const onClickAddQuick = (e) => {\n // 바로 연결 없을 경우\n if (!obj.template.quickReplies) {\n let quickRepliesData = [\n {\n action: 'message',\n label: '버튼 설정',\n messageText: '',\n },\n ];\n\n let resultObj = {\n version: '2.0',\n template: {\n outputs: obj.template.outputs,\n quickReplies: quickRepliesData,\n },\n };\n\n //부모한테 전달\n callbackFromParent(resultObj);\n }\n };\n\n // 샘플\n const onClickSample = (e) => {\n //alert('챗봇 예제를 불러올 경우 현재 작업중인 내용이 모두 사라집니다.');\n const result = window.confirm(\n '챗봇 예제를 불러올 경우 현재 작업중인 내용이 모두 사라집니다.'\n );\n if (result) {\n const type = e.target.dataset.type;\n if (type === 'text') {\n callbackFromParent(JSON.parse(JSON.stringify(sampleText)));\n } else if (type === 'card') {\n callbackFromParent(JSON.parse(JSON.stringify(sampleCarousel)));\n } else {\n return;\n }\n } else {\n return;\n }\n };\n\n return (\n
    \n {/* 상단 */}\n
    \n {/* 로고, 응답 갯수*/}\n
    \n

    JSON2Bot

    \n \n 봇 응답 추가{obj.template.outputs.length} /\n 3\n \n
    \n \n help_outline도움말\n \n
    \n
    \n {/* 응답 추가 버튼 */}\n
    \n \n \n \n \n
    \n
    \n
    SAMPLE
    \n
    \n \n \n
    \n
    \n
    \n {/* 하단 */}\n
    \n {resList}\n {obj.template.quickReplies && (\n \n )}\n
    \n
    \n );\n};\n\nUiContents.propTypes = {\n obj: PropTypes.object,\n callbackFromParent: PropTypes.func,\n};\n\nUiContents.defaultProps = {\n // bla: 'test',\n};\n\nexport default UiContents;\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\nconst JsonContents = ({ obj, callbackFromParent }) => {\n // state\n const [objJson, setObjJson] = useState('');\n const [isDf, setIsDf] = useState(true);\n\n // DialogFlow\n const dfValue = {\n type: 'kakao',\n data: obj,\n };\n\n // 웹챗봇\n const trValue = {\n type: 'turingbot',\n data: obj,\n };\n\n // obj > json text\n let jsonTxt = JSON.stringify(obj, undefined, 4);\n let dfJsonTxt = JSON.stringify(dfValue, undefined, 4);\n let trJsonTxt = JSON.stringify(trValue, undefined, 4);\n\n useEffect(() => {\n setObjJson(jsonTxt);\n }, [jsonTxt]);\n\n // textarea event\n const onChangeValue = (e) => {\n setObjJson(e.target.value);\n let jsonObj = JSON.parse(e.target.value);\n // DialogFlow\n // if (isDf) {\n // jsonObj = jsonObj.data;\n // }\n // data만 가져옴\n jsonObj = jsonObj.data;\n // 해당 프로퍼티 없을 때\n if (!jsonObj || !jsonObj.template || !jsonObj.template.outputs) {\n // 기존 props로 변경\n jsonObj = obj;\n setObjJson(obj);\n }\n // 부모 전달\n callbackFromParent(jsonObj);\n };\n\n // tab toggle\n const handleToggleJson = () => {\n setIsDf(!isDf);\n };\n\n // textarea copy\n const textAreaRef = useRef();\n const copyJson = (e) => {\n textAreaRef.current.select();\n document.execCommand('copy');\n e.target.focus();\n window.getSelection().removeAllRanges();\n alert('복사되었습니다.');\n\n // let copyText = document.createElement('textarea');\n // copyText.className = 'copy-text-textarea';\n // document.body.appendChild(copyText);\n // copyText.value = textAreaRef.current.textContent.replace(/\\s+/g, '');\n // copyText.select();\n // document.execCommand('copy');\n // document.body.removeChild(copyText);\n // e.target.focus();\n // alert('복사되었습니다.');\n };\n\n return (\n
    \n {/* tab title */}\n
    \n \n 카카오톡\n \n \n 웹챗봇\n \n
    \n {/* tab cont */}\n
    \n \n \n
    \n
    \n );\n};\n\nJsonContents.propTypes = {\n obj: PropTypes.object,\n callbackFromParent: PropTypes.func,\n};\n\nJsonContents.defaultProps = {\n // bla: 'test',\n};\n\nexport default JsonContents;\n","import React, { Component } from 'react';\n\nclass ErrorBoundary extends Component {\n state = {\n error: false\n };\n\n componentDidCatch(error, info) {\n console.log('에러가 발생했습니다.');\n console.log({\n error,\n info\n });\n this.setState({\n error: true\n });\n }\n\n render() {\n if (this.state.error) {\n return (\n <>\n

    다시 시도해주세요.

    \n \n );\n }\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React, { useState } from 'react';\nimport './App.css';\nimport './styles/normalize.custom.css';\nimport './styles/styles.css';\nimport UiContents from './components/UiContents';\nimport JsonContents from './components/JsonContents';\nimport ErrorBoundary from './ErrorBoundary';\nimport kakaoBtn from './assets/images/kakaochatead@x4.png';\n\nconst defaultValue = {\n version: '2.0',\n template: {\n outputs: [\n {\n simpleText: {\n text: '꿈청 챗봇 JSON 생성기',\n },\n },\n ],\n },\n};\n\nfunction App() {\n const [obj, setObj] = useState(defaultValue);\n // 콜백\n const parentCallback = (dataFromChild) => {\n // 자식 컴포넌트에서 받은 값을 이용한 로직 처리\n setObj(dataFromChild);\n };\n\n return (\n <>\n \n
    \n \n \n {/* \n \"카카오톡\n */}\n
    \n
    \n \n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(, document.getElementById('root'));"],"sourceRoot":""}