'use client' import { useRef, useState, useEffect, useContext } from 'react' import Image from 'next/image' import { useRecoilState } from 'recoil' import { v4 as uuidv4 } from 'uuid' import { FaAnglesUp } from 'react-icons/fa6' import { FaAnglesDown } from 'react-icons/fa6' import { Button } from '@nextui-org/react' import ColorPicker from './common/color-picker/ColorPicker' import { cadFileNameState, googleMapFileNameState, useCadFileState, useGoogleMapFileState } from '@/store/canvasAtom' import { useAxios } from '@/hooks/useAxios' import { useMessage } from '@/hooks/useMessage' import { useMasterController } from '@/hooks/common/useMasterController' import { useSwal } from '@/hooks/useSwal' import { convertDwgToPng } from '@/lib/cadAction' import { GlobalDataContext } from '@/app/GlobalDataProvider' import QInput from './common/input/Qinput' import QSelect from './common/select/QSelect' import QPagination from './common/pagination/QPagination' import QSelectBox from './common/select/QSelectBox' import SampleReducer from './sample/SampleReducer' import styles from './playground.module.css' import useSWR from 'swr' import useSWRMutation from 'swr/mutation' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' import { canvasPopupStatusStore } from '@/store/canvasPopupStatusAtom' import { moduleSelectionDataPlanListState } from '@/store/selectedModuleOptions' import { useRouter } from 'next/navigation' import { QcastContext } from '@/app/QcastProvider' export default function Playground() { const [useCadFile, setUseCadFile] = useRecoilState(useCadFileState) const [cadFileName, setCadFileName] = useRecoilState(cadFileNameState) const [useGoogleMapFile, setUseGoogleMapFile] = useRecoilState(useGoogleMapFileState) const [googleMapFileName, setGoogleMapFileName] = useRecoilState(googleMapFileNameState) const fileRef = useRef(null) const queryRef = useRef(null) const [zoom, setZoom] = useState(20) const { get, promiseGet, post, promisePost, getFetcher, postFetcher } = useAxios() const testVar = process.env.NEXT_PUBLIC_TEST const converterUrl = process.env.NEXT_PUBLIC_CONVERTER_API_URL const { getMessage } = useMessage() const { swalFire } = useSwal() const { getRoofMaterialList, getModuleTypeItemList, getTrestleList, getConstructionList, getTrestleDetailList } = useMasterController() const [color, setColor] = useState('#ff0000') const [textInput, setTextInput] = useState('') const [numberInput, setNumberInput] = useState('') const [radioInput, setRadioInput] = useState('') const [checkboxInput, setCheckboxInput] = useState([]) const [selectedValue, setSelectedValue] = useState('') const [users, setUsers] = useState([]) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const router = useRouter() const { setIsGlobalLoading } = useContext(QcastContext) useEffect(() => { setIsGlobalLoading(false) }, []) useEffect(() => { console.log('textInput:', textInput) }, [textInput]) useEffect(() => { console.log('numberInput:', numberInput) }, [numberInput]) useEffect(() => { console.log('radioInput:', radioInput) }, [radioInput]) useEffect(() => { console.log('checkboxInput:', checkboxInput) }, [checkboxInput]) useEffect(() => { console.log('selectedValue:', selectedValue) }, [selectedValue]) const handleUsers = async () => { // const users = await get('/api/user/find-all') const params = { url: '/api/user/find-all', } const users = await get(params) console.log('users', users) } const handleConvert = async () => { console.log('file', fileRef.current.files[0]) const formData = new FormData() formData.append('file', fileRef.current.files[0]) await promisePost({ url: converterUrl, data: formData }) .then((res) => { console.log('response: ', res) convertDwgToPng(res.data.Files[0].FileName, res.data.Files[0].FileData) setUseCadFile(true) setCadFileName(res.data.Files[0].FileName) swalFire({ text: '파일 변환 완료' }) }) .catch((err) => { console.error(err) swalFire({ text: '파일 변환 실패' }) }) } const handleDownImage = async (fileName = '') => { const fileNm = fileName === '' ? uuidv4() : fileName const queryString = queryRef.current.value === '' ? '서울시 서대문구 연세로5다길 22-3 발리빌라 3층' : queryRef.current.value const res = await get({ url: `http://localhost:3000/api/html2canvas?q=${queryString}&fileNm=${fileNm}&zoom=${zoom}` }) console.log('res', res) setGoogleMapFileName(res.fileNm) swalFire({ text: '이미지 저장 완료' }) setUseGoogleMapFile(true) } const handleZoom = async (type) => { if (type === 'up') { setZoom((prevState) => prevState + 1) } else { setZoom((prevState) => prevState - 1) } await handleDownImage() } const data = [ { id: 1, author: 'SWYOO', contents: '버튼 정리(템플릿 적용)', date: '2024.07.16', }, { id: 2, author: 'SWYOO', contents: 'README.md 파일 이미지 경로 수정', date: '2024.07.17', }, { id: 3, author: 'SWYOO', contents: '', date: '', }, ] const handleSwalAlert = () => { swalFire({ text: '알림 테스트입니다.', }) } const paginationProps = { pageNo: 1, pageSize: 10, pagePerBlock: 10, totalCount: 26, handleChangePage: (page) => { console.log('page', page) }, } useEffect(() => { console.log('users:', users) }, [users]) const codes = [ { clHeadCd: '203800', clCode: 'HEI_455', clCodeNm: '세로 455mm이하', clPriority: 1, name: '세로 455mm이하', id: 'HEI_455', }, { clHeadCd: '203800', clCode: 'HEI_500', clCodeNm: '세로 500mm이하', clPriority: 2, name: '세로 500mm이하', id: 'HEI_500', }, { clHeadCd: '203800', clCode: 'HEI_606', clCodeNm: '세로 606mm이하', clPriority: 3, name: '세로 606mm이하', id: 'HEI_606', }, { clHeadCd: '203800', clCode: 'WID_606', clCodeNm: '가로 606mm이하', clPriority: 4, name: '가로 606mm이하', id: 'WID_606', }, { clHeadCd: '203800', clCode: 'ETC', clCodeNm: '기타', clPriority: 5, name: '기타', id: 'ETC', }, ] const [myData, setMyData] = useState({ roofMatlCd: 'ROOF_ID_WA_53A', roofMatlNm: '화와 A', roofMatlNmJp: '和瓦A', widAuth: 'R', widBase: '265.000', lenAuth: 'R', lenBase: '235.000', roofPchAuth: null, roofPchBase: null, raftAuth: 'C', raftBaseCd: 'HEI_455', id: 'ROOF_ID_WA_53A', name: '화와 A', selected: true, nameJp: '和瓦A', length: 235, width: 265, layout: 'P', hajebichi: null, }) const handleChangeMyData = () => { setMyData({ ...myData, raftBaseCd: 'HEI_500' }) } const [myData2, setMyData2] = useState({}) const handleChangeMyData2 = () => { setMyData2({ roofMatlCd: 'ROOF_ID_WA_53A', roofMatlNm: '화와 A', roofMatlNmJp: '和瓦A', widAuth: 'R', widBase: '265.000', lenAuth: 'R', lenBase: '235.000', roofPchAuth: null, roofPchBase: null, raftAuth: 'C', raftBaseCd: 'HEI_455', id: 'ROOF_ID_WA_53A', name: '화와 A', selected: true, nameJp: '和瓦A', length: 235, width: 265, layout: 'P', hajebichi: null, }) } // const [callFlag, setCallFlag] = useState(false) // const { data: tutoData, error, isLoading } = useSWR('http://localhost:8080/api/tutorial', getFetcher) // const { data: tutoData, error, isLoading } = useSWR(callFlag ? 'http://localhost:8080/api/tutorial' : null, getFetcher) // const { trigger, isMutating } = useSWRMutation('http://localhost:8080/api/tutorial', postFetcher) // if (isLoading) { // return
Loading...
// } // if (error) { // return
Error...
// } // const [moduleSelectionDataPlanListStore, setModuleSelectionDataPlanListStore] = useRecoilState(moduleSelectionDataPlanListState) // useEffect(() => { // console.log('🚀 ~ Playground ~ moduleSelectionDataPlanListStore:', moduleSelectionDataPlanListStore) // }, [moduleSelectionDataPlanListStore]) // const { trigger: canvasPopupStatusTrigger } = useCanvasPopupStatusController({ objectNo: 'R201T01241120001', planNo: 2, popupType: 2 }) return ( <>
이 영역은 테스트입니다.
{' '} {' '} {' '} {' '}




{testVar}

Sass 테스트입니다.

test']) }}>

React ColorPicker

{color}

캐드 파일 이미지 사용

구글 맵 이미지 사용

{useGoogleMapFile && ( <>

Zoom Controller : {zoom}

)}
{/*

{managementStateLoaded?.objectNo}

*/}
{/*
{tutoData && tutoData.map((item) => (
{item.name} / {item.email}
))}
*/}
) }