From 76c104302fd5a1e4178bd46a654ba2880e55d93a Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 30 Dec 2024 16:07:49 +0900 Subject: [PATCH 01/10] =?UTF-8?q?contextMenu=20=EC=A7=80=EB=B6=95=EC=9E=AC?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C,=20=EC=A7=80=EB=B6=95=EC=9E=AC=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=82=AD=EC=A0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useRoofFn.js | 23 +++++++++++++++++++++-- src/hooks/useContextMenu.js | 4 ++++ src/store/settingAtom.js | 10 ---------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/hooks/common/useRoofFn.js b/src/hooks/common/useRoofFn.js index afe1c71e..eb932106 100644 --- a/src/hooks/common/useRoofFn.js +++ b/src/hooks/common/useRoofFn.js @@ -1,11 +1,13 @@ import { useRecoilValue } from 'recoil' -import { canvasState } from '@/store/canvasAtom' +import { canvasState, currentObjectState } from '@/store/canvasAtom' import { selectedRoofMaterialSelector } from '@/store/settingAtom' import { ROOF_MATERIAL_LAYOUT } from '@/components/floor-plan/modal/placementShape/PlacementShapeSetting' +import { POLYGON_TYPE } from '@/common/common' export function useRoofFn() { const canvas = useRecoilValue(canvasState) const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) + const currentObject = useRecoilValue(currentObjectState) //면형상 선택 클릭시 지붕 패턴 입히기 function setSurfaceShapePattern(polygon, mode = 'onlyBorder', trestleMode = false, roofMaterial = selectedRoofMaterial) { @@ -141,5 +143,22 @@ export function useRoofFn() { polygon.roofMaterial = roofMaterial polygon.canvas?.renderAll() } - return { setSurfaceShapePattern } + + function removeRoofMaterial(roof = currentObject) { + if (roof === null || roof.name !== POLYGON_TYPE.ROOF) { + return + } + roof.set('fill', null) + roof.roofMaterial = null + canvas?.renderAll() + } + + function removeAllRoofMaterial() { + const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) + roofBases.forEach((roofBase) => { + removeRoofMaterial(roofBase) + }) + } + + return { setSurfaceShapePattern, removeRoofMaterial, removeAllRoofMaterial } } diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index ad662534..e0a2cf0f 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -36,6 +36,7 @@ import { fontSelector, globalFontAtom } from '@/store/fontAtom' import { useLine } from '@/hooks/useLine' import { useSwal } from '@/hooks/useSwal' import ContextRoofAllocationSetting from '@/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting' +import { useRoofFn } from '@/hooks/common/useRoofFn' export function useContextMenu() { const canvas = useRecoilValue(canvasState) @@ -59,6 +60,7 @@ export function useContextMenu() { const { addLine, removeLine } = useLine() const commonTextFont = useRecoilValue(fontSelector('commonText')) const { swalFire } = useSwal() + const { removeRoofMaterial, removeAllRoofMaterial } = useRoofFn() const currentMenuSetting = () => { switch (currentMenu) { @@ -110,10 +112,12 @@ export function useContextMenu() { { id: 'roofMaterialRemove', name: getMessage('contextmenu.roof.material.remove'), + fn: () => removeRoofMaterial(), }, { id: 'roofMaterialRemoveAll', name: getMessage('contextmenu.roof.material.remove.all'), + fn: () => removeAllRoofMaterial(), }, { id: 'selectMove', diff --git a/src/store/settingAtom.js b/src/store/settingAtom.js index df5022a7..1b837fdd 100644 --- a/src/store/settingAtom.js +++ b/src/store/settingAtom.js @@ -239,16 +239,6 @@ export const roofMaterialsSelector = selector({ }, }) -// 지붕면 할당에서 추가된 지붕재 목록 -export const addedRoofsSelector = selector({ - key: 'addedRoofsSelector', - get: ({ get }) => { - const basicSetting = get(basicSettingState) - return basicSetting.roofs - }, - dangerouslyAllowMutability: true, -}) - /** * 현재 선택된 물건 번호 */ From e9fd8531386e6cbc503035ecdcc789f515ff81a7 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 30 Dec 2024 18:06:34 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=EC=9C=A1=EC=A7=80=EB=B6=95=EC=9D=B8=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20disabled=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/placementShape/PlacementShapeSetting.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index 77d49d5e..a36f0cb4 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -247,6 +247,7 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, set sourceKey="id" targetKey="id" showKey="name" + disabled={basicSetting.roofSizeSet === '3'} /> {/* {raftCodes.map((raft, index) => { From 28589aefb39cb52efe2da9dc2c23a7e9d2f1c6a6 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Mon, 30 Dec 2024 18:21:34 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=EB=A9=94=EB=89=B4=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A7=80=EB=B6=95=EC=9E=AC=20=EC=84=A0=ED=83=9D=20=EC=8B=9C=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=ED=95=9C=20=EC=A7=80=EB=B6=95=20default?= =?UTF-8?q?=EB=A1=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasMenu.jsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index b211b420..34a7b6c4 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -79,7 +79,7 @@ export default function CanvasMenu(props) { const { floorPlanState, setFloorPlanState } = useContext(FloorPlanContext) const { restoreModuleInstArea } = useModuleBasicSetting() - const addedRoofs = useRecoilValue(addedRoofsState) + const [addedRoofs, setAddedRoofsState] = useRecoilState(addedRoofsState) const [basicSetting, setBasicSetting] = useRecoilState(basicSettingState) const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) @@ -118,6 +118,16 @@ export default function CanvasMenu(props) { const changeSelectedRoofMaterial = (e) => { setBasicSetting({ ...basicSetting, selectedRoofMaterial: e }) + + const newAddedRoofs = addedRoofs.map((roof) => { + if (roof.index === e.index) { + return { ...roof, selected: true } + } else { + return { ...roof, selected: false } + } + }) + + setAddedRoofsState(newAddedRoofs) } const settingsModalOptions = useRecoilState(settingModalFirstOptionsState) From 6d1ea3cfe17cdbfd7f5e693893a80cbdefebe208 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 31 Dec 2024 09:39:10 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=EC=9C=A1=EC=A7=80=EB=B6=95=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=EC=8B=9C=20=EC=A7=80=EB=B6=95=EC=9E=AC=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=EC=9C=A1=EC=A7=80=EB=B6=95=20=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/placementShape/PlacementShapeSetting.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index a36f0cb4..7ed4e56e 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -238,11 +238,12 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, set
{ return { ...roof, name: globalLocale === 'ko' ? roof.roofMatlNm : roof.roofMatlNmJp } })} - value={currentRoofMaterial} + value={basicSetting.roofSizeSet === '3' ? null : currentRoofMaterial} onChange={(e) => handleRoofTypeChange(e.roofMatlCd)} sourceKey="id" targetKey="id" From ba32deeb99f30b00b39d127f33d016df29532452 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 31 Dec 2024 10:13:27 +0900 Subject: [PATCH 05/10] =?UTF-8?q?contextmenu=20=EC=A7=80=EB=B6=95=EC=9E=AC?= =?UTF-8?q?=20=EB=B0=B0=EC=B9=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useContextMenu.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/useContextMenu.js b/src/hooks/useContextMenu.js index e0a2cf0f..7f0ba147 100644 --- a/src/hooks/useContextMenu.js +++ b/src/hooks/useContextMenu.js @@ -108,6 +108,7 @@ export function useContextMenu() { { id: 'roofMaterialPlacement', name: getMessage('contextmenu.roof.material.placement'), + component: , }, { id: 'roofMaterialRemove', From 37e3b940e58c082dfdbe6531addfc3be42692813 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 31 Dec 2024 10:52:34 +0900 Subject: [PATCH 06/10] =?UTF-8?q?=EC=A7=80=EB=B6=95=ED=98=95=EC=83=81=20?= =?UTF-8?q?=EC=88=98=EB=8F=99=20=EC=84=A4=EC=A0=95-=20=EC=9D=BC=EB=B3=80?= =?UTF-8?q?=EC=A0=84=EC=9C=BC=EB=A1=9C=EB=8F=8C=EC=95=84=EA=B0=80=EA=B8=B0?= =?UTF-8?q?=20=ED=81=B4=EB=A6=AD=20=EC=8B=9C=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/fabric/QLine.js | 4 ---- src/hooks/roofcover/useRoofShapePassivitySetting.js | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/components/fabric/QLine.js b/src/components/fabric/QLine.js index 2a0bbca0..65575731 100644 --- a/src/components/fabric/QLine.js +++ b/src/components/fabric/QLine.js @@ -35,10 +35,6 @@ export const QLine = fabric.util.createClass(fabric.Line, { this.startPoint = { x: this.x1, y: this.y1 } this.endPoint = { x: this.x2, y: this.y2 } - - if (canvas) { - this.canvas = canvas - } }, init: function () { diff --git a/src/hooks/roofcover/useRoofShapePassivitySetting.js b/src/hooks/roofcover/useRoofShapePassivitySetting.js index f054e23e..02f56fa7 100644 --- a/src/hooks/roofcover/useRoofShapePassivitySetting.js +++ b/src/hooks/roofcover/useRoofShapePassivitySetting.js @@ -88,10 +88,10 @@ export function useRoofShapePassivitySetting(id) { const lines = canvas.getObjects().filter((obj) => obj.name === 'outerLine') let stroke, strokeWidth lines.forEach((line) => { - if (line.attributes.type === LINE_TYPE.WALLLINE.EAVES || line.attributes.type === LINE_TYPE.WALLLINE.HIPANDGABLE) { + if (line.attributes?.type === LINE_TYPE.WALLLINE.EAVES || line.attributes?.type === LINE_TYPE.WALLLINE.HIPANDGABLE) { stroke = '#45CD7D' strokeWidth = 4 - } else if (line.attributes.type === LINE_TYPE.WALLLINE.GABLE || line.attributes.type === LINE_TYPE.WALLLINE.JERKINHEAD) { + } else if (line.attributes?.type === LINE_TYPE.WALLLINE.GABLE || line.attributes?.type === LINE_TYPE.WALLLINE.JERKINHEAD) { stroke = '#3FBAE6' strokeWidth = 4 } else { @@ -136,7 +136,7 @@ export function useRoofShapePassivitySetting(id) { const index = lines.findIndex((line) => line === selectedLine) const nextLine = lines[index + 1] || lines[0] - if (nextLine.attributes.isFixed) { + if (nextLine.attributes?.isFixed) { canvas.discardActiveObject() return } From dbaddfd5d98e74e45613dcb15bd396b34e699472 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Tue, 31 Dec 2024 13:28:34 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=EC=A7=80=EB=B6=95=EB=A9=B4=20=EC=83=89?= =?UTF-8?q?=EA=B9=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useRoofFn.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/hooks/common/useRoofFn.js b/src/hooks/common/useRoofFn.js index eb932106..a35ef9fc 100644 --- a/src/hooks/common/useRoofFn.js +++ b/src/hooks/common/useRoofFn.js @@ -3,7 +3,12 @@ import { canvasState, currentObjectState } from '@/store/canvasAtom' import { selectedRoofMaterialSelector } from '@/store/settingAtom' import { ROOF_MATERIAL_LAYOUT } from '@/components/floor-plan/modal/placementShape/PlacementShapeSetting' import { POLYGON_TYPE } from '@/common/common' - +const ROOF_COLOR = { + 0: 'rgb(199,240,213)', + 1: 'rgb(178,238,255)', + 2: 'rgb(187,204,255)', + 3: 'rgb(228,202,255)', +} export function useRoofFn() { const canvas = useRecoilValue(canvasState) const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) @@ -16,6 +21,7 @@ export function useRoofFn() { let width = (roofMaterial.width ?? 226) / 10 let height = (roofMaterial.length ?? 158) / 10 + const index = roofMaterial.index ?? 0 let roofStyle = 2 const inputPatternSize = { width: width, height: height } //임시 사이즈 const patternSize = { ...inputPatternSize } // 입력된 값을 뒤집기 위해 @@ -35,7 +41,7 @@ export function useRoofFn() { const rows = Math.floor(patternSourceCanvas.height / patternSize.height) const cols = Math.floor(patternSourceCanvas.width / patternSize.width) - ctx.strokeStyle = mode === 'allPainted' ? 'black' : 'blue' + ctx.strokeStyle = mode === 'allPainted' ? 'black' : ROOF_COLOR[index] ctx.lineWidth = mode === 'allPainted' ? 1 : 0.4 ctx.fillStyle = mode === 'allPainted' ? 'rgba(0, 159, 64, 0.7)' : 'white' From cdfdea635662bf028de80636f3b78f3f83b385ef Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Tue, 31 Dec 2024 14:31:53 +0900 Subject: [PATCH 08/10] =?UTF-8?q?=F0=9F=93=8Cchore:=20Add=20GlobalDataProv?= =?UTF-8?q?ider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ManagementProvider 내용 주석 처리 - GlobalDataProvider 추가 및 내용 이동 --- src/app/GlobalDataProvider.js | 16 ++++++++ src/app/layout.js | 43 +++++++++++--------- src/app/management/ManagementProvider.js | 18 ++++---- src/components/management/StuffDetail.jsx | 5 ++- src/components/management/StuffHeader.jsx | 5 ++- src/components/management/StuffSubHeader.jsx | 5 ++- src/components/sample/SampleReducer.jsx | 2 +- 7 files changed, 57 insertions(+), 37 deletions(-) create mode 100644 src/app/GlobalDataProvider.js diff --git a/src/app/GlobalDataProvider.js b/src/app/GlobalDataProvider.js new file mode 100644 index 00000000..ee7bf4e3 --- /dev/null +++ b/src/app/GlobalDataProvider.js @@ -0,0 +1,16 @@ +'use client' + +import { createContext, useState } from 'react' + +export const GlobalDataContext = createContext({ + managementState: {}, + setManagementState: () => {}, +}) + +const GlobalDataProvider = ({ children }) => { + const [managementState, setManagementState] = useState({}) + + return {children} +} + +export default GlobalDataProvider diff --git a/src/app/layout.js b/src/app/layout.js index 0f688eea..4385f2f8 100644 --- a/src/app/layout.js +++ b/src/app/layout.js @@ -4,10 +4,11 @@ import { getSession } from '@/lib/authActions' import RecoilRootWrapper from './RecoilWrapper' import { QcastProvider } from './QcastProvider' +import SessionProvider from './SessionProvider' +import GlobalDataProvider from './GlobalDataProvider' import Header from '@/components/header/Header' import QModal from '@/components/common/modal/QModal' import Dimmed from '@/components/ui/Dimmed' -import SessionProvider from './SessionProvider' import PopupManager from '@/components/common/popupManager/PopupManager' import './globals.css' @@ -60,26 +61,28 @@ export default async function RootLayout({ children }) { return ( - - - {headerPathname === '/login' || headerPathname === '/join' ? ( - {children} - ) : ( - -
-
-
- - {children} + + + + {headerPathname === '/login' || headerPathname === '/join' ? ( + {children} + ) : ( + +
+
+
+ + {children} +
+
-
-
- - )} - - - - + + )} + + + + + ) } diff --git a/src/app/management/ManagementProvider.js b/src/app/management/ManagementProvider.js index 197b30c0..fb57e948 100644 --- a/src/app/management/ManagementProvider.js +++ b/src/app/management/ManagementProvider.js @@ -1,20 +1,18 @@ 'ues client' -import { createContext, useEffect, useState } from 'react' +import { createContext } from 'react' -export const ManagementContext = createContext({ - managementState: {}, - setManagementState: () => {}, -}) +export const ManagementContext = createContext({}) const ManagementProvider = ({ children }) => { - const [managementState, setManagementState] = useState({}) + // const [managementState, setManagementState] = useState({}) - useEffect(() => { - console.log('🚀 ~ managementState:', managementState) - }, [managementState]) + // useEffect(() => { + // console.log('🚀 ~ managementState:', managementState) + // }, [managementState]) - return {children} + // return {children} + return {children} } export default ManagementProvider diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 95cb2fef..001530a8 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -18,7 +18,8 @@ import WindSelectPop from './popup/WindSelectPop' import { useCommonCode } from '@/hooks/common/useCommonCode' import StuffPlanQGrid from './StuffPlanQGrid' import { floorPlanObjectState } from '@/store/floorPlanObjectAtom' -import { ManagementContext } from '@/app/management/ManagementProvider' +import { GlobalDataContext } from '@/app/GlobalDataProvider' +// import { ManagementContext } from '@/app/management/ManagementProvider' import DocDownOptionPop from '../estimate/popup/DocDownOptionPop' import { stuffSearchState } from '@/store/stuffAtom' import { QcastContext } from '@/app/QcastProvider' @@ -106,7 +107,7 @@ export default function StuffDetail() { const objectNo = searchParams.get('objectNo') //url에서 물건번호 꺼내서 바로 set const [editMode, setEditMode] = useState('NEW') - const { managementState, setManagementState } = useContext(ManagementContext) + const { managementState, setManagementState } = useContext(GlobalDataContext) const [planGridProps, setPlanGridProps] = useState({ planGridData: [], isPageable: false, diff --git a/src/components/management/StuffHeader.jsx b/src/components/management/StuffHeader.jsx index f32c971c..142a15a5 100644 --- a/src/components/management/StuffHeader.jsx +++ b/src/components/management/StuffHeader.jsx @@ -3,11 +3,12 @@ import { useContext } from 'react' import { useMessage } from '@/hooks/useMessage' import dayjs from 'dayjs' -import { ManagementContext } from '@/app/management/ManagementProvider' +import { GlobalDataContext } from '@/app/GlobalDataProvider' +// import { ManagementContext } from '@/app/management/ManagementProvider' export default function StuffHeader() { const { getMessage } = useMessage() - const { managementState } = useContext(ManagementContext) + const { managementState } = useContext(GlobalDataContext) //물건번호 복사 const copyObjectNo = async (objectNo) => { diff --git a/src/components/management/StuffSubHeader.jsx b/src/components/management/StuffSubHeader.jsx index 27acf615..c92b4616 100644 --- a/src/components/management/StuffSubHeader.jsx +++ b/src/components/management/StuffSubHeader.jsx @@ -13,7 +13,8 @@ import { useMessage } from '@/hooks/useMessage' import { floorPlanObjectState } from '@/store/floorPlanObjectAtom' import { isObjectNotEmpty, queryStringFormatter } from '@/util/common-utils' -import { ManagementContext } from '@/app/management/ManagementProvider' +import { GlobalDataContext } from '@/app/GlobalDataProvider' +// import { ManagementContext } from '@/app/management/ManagementProvider' import { SessionContext } from '@/app/SessionProvider' export default function StuffSubHeader({ type }) { @@ -25,7 +26,7 @@ export default function StuffSubHeader({ type }) { const { isGlobalLoading } = useContext(QcastContext) - const { managementState } = useContext(ManagementContext) + const { managementState } = useContext(GlobalDataContext) const [buttonStyle, setButtonStyle] = useState('') useEffect(() => { diff --git a/src/components/sample/SampleReducer.jsx b/src/components/sample/SampleReducer.jsx index 26150fea..c7403c25 100644 --- a/src/components/sample/SampleReducer.jsx +++ b/src/components/sample/SampleReducer.jsx @@ -54,7 +54,7 @@ export default function SampleReducer() { return t } }) - setSampleState({ ...sampleState, tabs: newTabs }) + setSampleState({ tabs: newTabs }) } useEffect(() => { From 974a380e75d229c84bbbd7f2826af5c6a47f8803 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Thu, 2 Jan 2025 10:13:24 +0900 Subject: [PATCH 09/10] =?UTF-8?q?=F0=9F=9A=A8chore:=20GlobalDataProvider?= =?UTF-8?q?=20context=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20=EC=9E=84?= =?UTF-8?q?=EC=8B=9C=EB=A1=9C=20localStorage=EB=A1=9C=20=EB=B3=B5=EC=82=AC?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 임시조치이며 개발 완료 시점에 삭제 예정 --- src/app/GlobalDataProvider.js | 12 ++++++++++-- src/components/Playground.jsx | 14 +++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/app/GlobalDataProvider.js b/src/app/GlobalDataProvider.js index ee7bf4e3..e4162cd1 100644 --- a/src/app/GlobalDataProvider.js +++ b/src/app/GlobalDataProvider.js @@ -1,16 +1,24 @@ 'use client' -import { createContext, useState } from 'react' +import { createContext, useEffect, useState } from 'react' +import { useLocalStorage } from 'usehooks-ts' export const GlobalDataContext = createContext({ managementState: {}, setManagementState: () => {}, + managementStateLoaded: null, }) const GlobalDataProvider = ({ children }) => { const [managementState, setManagementState] = useState({}) + // TODO: 임시 조치이며 개발 완료시 삭제 예정 -> 잊지말기... + const [managementStateLoaded, setManagementStateLoaded] = useLocalStorage('managementStateLoaded', null) - return {children} + useEffect(() => { + setManagementStateLoaded(managementState) + }, [managementState]) + + return {children} } export default GlobalDataProvider diff --git a/src/components/Playground.jsx b/src/components/Playground.jsx index fcc5468d..ef1adab2 100644 --- a/src/components/Playground.jsx +++ b/src/components/Playground.jsx @@ -1,6 +1,6 @@ 'use client' -import { useRef, useState, useEffect } from 'react' +import { useRef, useState, useEffect, useContext } from 'react' import { useRecoilState } from 'recoil' import { v4 as uuidv4 } from 'uuid' import { FaAnglesUp } from 'react-icons/fa6' @@ -26,6 +26,7 @@ import QPagination from './common/pagination/QPagination' import { trestleRequestModels, constructionRequestModels, trestleDetailRequestModels } from '@/models/apiModels' import QSelectBox from './common/select/QSelectBox' import SampleReducer from './sample/SampleReducer' +import { GlobalDataContext } from '@/app/GlobalDataProvider' export default function Playground() { const [useCadFile, setUseCadFile] = useRecoilState(useCadFileState) @@ -52,6 +53,8 @@ export default function Playground() { const [users, setUsers] = useState([]) + const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) + useEffect(() => { console.log('textInput:', textInput) }, [textInput]) @@ -508,6 +511,15 @@ export default function Playground() {
+
+ +
+
+ +
+
+

{managementStateLoaded?.objectNo}

+
) From a7365b98e4bd003c653b004095dbeac20834a361 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Thu, 2 Jan 2025 10:58:54 +0900 Subject: [PATCH 10/10] =?UTF-8?q?=F0=9F=9A=A8chore:=20swalFire=20alert=20?= =?UTF-8?q?=EC=9D=BC=EA=B2=BD=EC=9A=B0=20=EB=A6=AC=ED=84=B4=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Playground.jsx | 5 +++++ src/hooks/useSwal.js | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/components/Playground.jsx b/src/components/Playground.jsx index ef1adab2..2f3e2ab5 100644 --- a/src/components/Playground.jsx +++ b/src/components/Playground.jsx @@ -520,6 +520,11 @@ export default function Playground() {

{managementStateLoaded?.objectNo}

+
+ +
) diff --git a/src/hooks/useSwal.js b/src/hooks/useSwal.js index cb18e6a7..018d8f32 100644 --- a/src/hooks/useSwal.js +++ b/src/hooks/useSwal.js @@ -21,6 +21,8 @@ export const useSwal = () => { text, icon: icon === '' ? 'success' : icon, confirmButtonText: '확인', + }).then(() => { + confirmFn() }) } else if (type === 'confirm') { MySwal.fire({