diff --git a/src/main/front/src/components/AgentConfigView.vue b/src/main/front/src/components/AgentConfigView.vue index 3d61814..82792bc 100644 --- a/src/main/front/src/components/AgentConfigView.vue +++ b/src/main/front/src/components/AgentConfigView.vue @@ -47,6 +47,14 @@ const agentConfig = reactive({ postmanList: [], }, }) +let originalDtoString = '' +const agentConfigDeleted = { + knownAgentList: [], + dataSourceConfig: [], + logging: { + packages: [], + }, +} onMounted(() => { if (modalEl.value) { @@ -59,35 +67,135 @@ onMounted(() => { }) onBeforeUnmount(() => { - if (bsModal) { - bsModal.hide() - // Bootstrap v5에서는 dispose 지원 - if (typeof bsModal.dispose === 'function') { - bsModal.dispose() - } - bsModal = null + if (!bsModal) return + const instance = bsModal + const el = instance._element || modalEl.value + if (el) { + el.addEventListener( + 'hidden.bs.modal', + () => { + if (typeof instance.dispose === 'function') { + instance.dispose() + } + }, + { once: true }, + ) + instance.hide() } + bsModal = null }) +// 부모 컴포넌트에서 AgentConfigView 팝업 호출(defineExpose에 추가됨) function open() { if (bsModal) { if (props.dto) { + originalDtoString = JSON.stringify(props.dto) Object.assign(agentConfig, props.dto) } bsModal.show() } } +// 부모 컴포넌트에서 AgentConfigView 팝업 닫기(defineExpose에 추가됨) function close() { if (bsModal) { bsModal.hide() } } +// props.dto 기준으로 agentConfig reload +function configReload() { + Object.assign(agentConfig, JSON.parse(originalDtoString)) +} + +// agentConfig의 내용을 json 파일로 다운로드 function configExport() {} +// agentConfig의 내용을 서버에 전송하여 저장 function configSave() {} +// knownAgent 한 줄 추가 +function addKnownAgent() { + const knownAgent = { + hostId: '', + hostName: '', + listenPort: '', + dropBoxIdList: [], + routingHostIdList: [], + added: true, + } + agentConfig.knownAgentList.push(knownAgent) +} + +// 선택된 knownAgent 삭제 +function deleteKnownAgent() { + for (let i = agentConfig.knownAgentList.length - 1; i >= 0; i--) { + if (agentConfig.knownAgentList[i].selected) { + let splicedList = agentConfig.knownAgentList.splice(i, 1) + if (Object.keys(splicedList[0]).indexOf('added') == -1) { + agentConfigDeleted.knownAgentList.push(splicedList) + } + } + } +} + +// dataSource 한 줄 추가 +function addDataSource() { + const dataSource = { + dataSourceId: '', + driverClassName: '', + url: '', + username: '', + password: '', + initialSize: 10, + minIdle: 10, + maxIdle: 30, + maxTotal: 300, + maximumRowForTransaction: 1000, + added: true, + } + agentConfig.dataSourceConfig.push(dataSource) +} + +// 선택된 dataSource 삭제 +function deleteDataSource() { + for (let i = agentConfig.dataSourceConfig.length - 1; i >= 0; i--) { + if (agentConfig.dataSourceConfig[i].selected) { + let splicedList = agentConfig.dataSourceConfig.splice(i, 1) + if (Object.keys(splicedList[0]).indexOf('added') == -1) { + agentConfigDeleted.dataSourceConfig.push(splicedList) + } + } + } +} + +function addLoggingPackage() { + agentConfig.logging.packages.push({ '': 'INFO' }) +} + +function deleteLoggingPackage() { + for (let i = agentConfig.dataSourceConfig.length - 1; i >= 0; i--) { + if (agentConfig.dataSourceConfig[i].selected) { + let splicedList = agentConfig.dataSourceConfig.splice(i, 1) + if (Object.keys(splicedList[0]).indexOf('added') == -1) { + agentConfigDeleted.dataSourceConfig.push(splicedList) + } + } + } +} + +function changeLoggingPackageName(loggingPackageObject, loggingPackageName, newLoggingPackageName) { + newLoggingPackageName = newLoggingPackageName.trim() + if (!newLoggingPackageName || loggingPackageName === newLoggingPackageName) { + return + } + if (Object.prototype.hasOwnProperty.call(loggingPackageObject, newLoggingPackageName)) { + return + } + loggingPackageObject[newLoggingPackageName] = loggingPackageObject[loggingPackageName] + delete loggingPackageObject[loggingPackageName] +} + defineExpose({ open, close, @@ -102,6 +210,7 @@ defineExpose({