'use client' import React, { useEffect, useState, useRef } from 'react' import { useRouter, usePathname } from 'next/navigation' import { Button } from '@nextui-org/react' import { useAxios } from '@/hooks/useAxios' import { QToast } from '@/hooks/useToast' import StuffQGrid from './StuffQGrid' import { useI18n } from '@/locales/client' import { useRecoilValue } from 'recoil' import { stuffSearchState } from '@/store/stuffAtom' import { queryStringFormatter } from '@/util/common-utils' import dayjs from 'dayjs' import isLeapYear from 'dayjs/plugin/isLeapYear' // 윤년 판단 플러그인 dayjs.extend(isLeapYear) export default function Stuff() { const stuffSearchParams = useRecoilValue(stuffSearchState) const { get, del } = useAxios() const gridRef = useRef() const lang = useI18n() const [gridCount, setGridCount] = useState(0) const [selectedRowData, setSelectedRowData] = useState([]) const [selectedRowDataCount, setSelectedRowDataCount] = useState(0) const router = useRouter() const pathname = usePathname() //그리드 내부 복사버튼 const copyNo = async (value) => { try { await navigator.clipboard.writeText(value) QToast({ message: `${value}물건번호가 복사되었습니다`, type: 'info', }) } catch (error) { QToast({ message: `클립보드 복사에 실패하였습니다`, type: 'error', }) } } const [gridProps, setGridProps] = useState({ gridData: [], isPageable: false, // sets 10 rows per page (default is 100) paginationPageSize: 100, // allows the user to select the page size from a predefined list of page sizes paginationPageSizeSelector: [100, 200, 300, 400], gridColumns: [ { field: 'lastEditDatetime', headerName: lang('stuff.gridHeader.lastEditDatetime'), headerCheckboxSelection: true, headerCheckboxSelectionCurrentPageOnly: true, //페이징시 현재 페이지만 체크되도록 checkboxSelection: true, showDisabledCheckboxes: true, // headerClass: 'centered', //_test.scss에 추가 테스트 // .centered { // .ag-header-cell-label { // justify-content: center !important; // } // } cellStyle: { textAlign: 'center' }, //suppressMovable: true, //헤더 못움직이게 // width : 100 // minWidth : 100 // maxWidth : 100 valueFormatter: function (params) { if (params.value) { return dayjs(params?.value).format('YYYY.MM.DD HH:mm:ss') } else { return null } }, }, { field: 'objectNo', headerName: lang('stuff.gridHeader.objectNo'), // headerClass: 'centered', //_test.scss에 추가 테스트 cellRenderer: function (params) { if (params.data.objectNo) { return (
{params.value}
) } }, cellRendererParams: { onPress: copyNo, }, }, { field: 'planTotCnt', headerName: lang('stuff.gridHeader.planTotCnt'), cellStyle: { textAlign: 'right' }, }, { field: 'objectName', headerName: lang('stuff.gridHeader.objectName'), cellStyle: { textAlign: 'left' } }, { field: 'saleStoreId', headerName: lang('stuff.gridHeader.saleStoreId'), cellStyle: { textAlign: 'left' }, }, { field: 'saleStoreName', headerName: lang('stuff.gridHeader.saleStoreName'), cellStyle: { textAlign: 'left' } }, { field: 'address', headerName: lang('stuff.gridHeader.address'), cellStyle: { textAlign: 'left' } }, { field: 'dispCompanyName', headerName: lang('stuff.gridHeader.dispCompanyName'), cellStyle: { textAlign: 'left' } }, { field: 'receiveUser', headerName: lang('stuff.gridHeader.receiveUser'), cellStyle: { textAlign: 'left' } }, { field: 'specDate', headerName: lang('stuff.gridHeader.specDate'), valueFormatter: function (params) { if (params.value) { return dayjs(params?.value).format('YYYY.MM.DD') } else { return null } }, cellStyle: { textAlign: 'center' }, }, { field: 'createDatetime', headerName: lang('stuff.gridHeader.createDatetime'), valueFormatter: function (params) { if (params.value) { return dayjs(params?.value).format('YYYY.MM.DD') } else { return null } }, cellStyle: { textAlign: 'center' }, }, ], gridCount: 0, }) //그리드 더블클릭 const getCellDoubleClicked = (event) => { if (event.column.colId === 'objectNo') { return } else { console.log(' 상세이동::::::::', event.data) if (event.data.objectNo) { router.push(`${pathname}/detail?objectNo=${event.data.objectNo.toString()}`) } else { QToast({ message: '물건정보가 없습니다', type: 'error', }) } } } //그리드 체크박스 선택시 const getSelectedRowdata = (data) => { // console.log('data:::', data) // let delData = data.map((row) => { // return row.objectNo // }) // console.log('delData::', delData) setSelectedRowData(data) setSelectedRowDataCount(data.length) } //물건삭제 const fnDeleteRowData = (data) => { console.log('물건삭제:::::::::::') if (data.length === 0) { QToast({ message: '삭제할 데이터를 선택하세요', type: 'error', }) return false } let errCount = 0 data.forEach((cell) => { if (!cell.objectNo) { // if (errCount === 0) { // QToast({ // message: `물건정보가 있는 행만 삭제 됩니다`, // type: 'error', // }) // } errCount++ } }) async function fetchDelete(data) { console.log('물건삭제API호출!!!!!!!!!', data) //행추가말고 api데이터만 보냄 // let newData = data.filter((item) => item.company != null) // console.log('삭제에 전송되는 데이타::', newData) // await del({ url: '', data:newData }) await get({ url: 'https://www.ag-grid.com/example-assets/space-mission-data.json' }) // try { // const res = await del({url:'', data:newData}) // if(!res || res.length === 0) { // } else { fetchData() // } // } catch (error) { // console.error('Data Delete error:', error); // } } // 삭제API 완료 후 fetchData Api호출 async function fetchData() { console.log('물건삭제후 조회API호출!!!!!!!!!!!!!', stuffSearchParams) const data = await get({ url: 'https://www.ag-grid.com/example-assets/space-mission-data.json' }) setGridProps({ ...gridProps, gridData: data, count: data.length }) setGridCount(data.length) //data.length = 10 //setGridProps({ ...gridProps, gridData: data, count: data.length-1}) //setGridCount(data.length - 1 ) } if (errCount === 0) { // console.log('errCount::::::::', errCount) fetchDelete(data) // fetchData() } else { QToast({ message: `물건정보가 있는 행만 선택해주세요`, type: 'error', }) } } //행추가 let newCount = 0 const addRowItems = () => { // console.log('girdRef::::::', gridRef.current.api) const newItems = [ { mission: newCount + 1, successful: true, }, ] gridRef.current.api.applyTransaction({ add: newItems, addIndex: newCount, }) newCount++ } //행삭제 const removeRowItems = () => { // console.log('selectedRowData::', selectedRowData) let errCount = 0 selectedRowData.forEach((cell) => { if (!cell.company) { let newSelectedRowData = selectedRowData.filter((item) => item.company == null) gridRef.current.api.applyTransaction({ remove: newSelectedRowData }) } else { if (errCount === 0) { QToast({ message: `행추가로 추가 한 행만 삭제됩니다.`, type: 'error', }) } errCount++ } }) } // 진입시 그리드 데이터 조회 useEffect(() => { if (stuffSearchParams?.code === 'S') { const params = { schObjectNo: '', schSaleStoreId: '', schAddress: '', schObjectName: '', schSaleStoreName: '', schSpecDateYn: '', schReceiveUser: '', schDispCompanyName: '', schDateType: 'U', schFromDt: dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'), schToDt: dayjs(new Date()).format('YYYY-MM-DD'), } async function fetchData() { console.log('화면진입:::::::::::::', params) const apiUrl = `/api/object/v1.0/object?saleStoreId=201TES01&${queryStringFormatter(params)}` // console.log('apiUrl::', apiUrl) await get({ url: apiUrl, }).then((res) => { if (res.length > 0) { console.log('API결과:::::::', res) setGridProps({ ...gridProps, gridData: res, count: res.length }) setGridCount(res.length) } }) } fetchData() } }, []) useEffect(() => { if (stuffSearchParams?.code === 'E') { console.log('조회 눌럿을때 ::::::::::::::', stuffSearchParams) async function fetchData() { const apiUrl = `/api/object/v1.0/object?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}` await get({ url: apiUrl }).then((res) => { console.log('API결과:::::::', res) setGridProps({ ...gridProps, gridData: res, count: res.length }) setGridCount(res.length) }) } fetchData() } }, [stuffSearchParams]) return ( <>
물건목록 전체 : {gridCount} // 선택 : {selectedRowDataCount}
{/* */} {/* */}
) }