From 4bb74ebb8820c6cb8d0119a8050e1d022dfe14a1 Mon Sep 17 00:00:00 2001 From: "Kamshory, MT" Date: Fri, 19 Sep 2025 13:36:36 +0700 Subject: [PATCH] Add entity and column selection --- js/Main.js | 8 ++++++++ js/Main.min.js | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/js/Main.js b/js/Main.js index e090481..c0b07fa 100644 --- a/js/Main.js +++ b/js/Main.js @@ -321,6 +321,14 @@ function checkAllColumns(source) { const checkboxes = source.closest('table').querySelectorAll('.check-column'); if(checkboxes?.length) { + if(!source.checked) + { + let wrapper = source.closest('table').closest('div'); + if(wrapper) + { + wrapper.querySelector('h5 input').checked = false; + } + } checkboxes.forEach(checkbox => { checkbox.checked = source.checked; }); diff --git a/js/Main.min.js b/js/Main.min.js index 34d910c..e532400 100644 --- a/js/Main.min.js +++ b/js/Main.min.js @@ -1 +1 @@ -let stringUtil=new StringUtil,generator=new GraphQLSpringGenerator,sqlParser=new SQLParser,util=new GraphQLSchemaUtils,entityRenderer,updatedWidth=600,drawRelationship=!0;function autopopulatePackage(e){let t=document.getElementById("groupId"),n=document.getElementById("artifactId"),i=document.getElementById("serviceName"),r=e.trim();if(!r){t.value="",n.value="",i.value="";return}t.value=r;let a=r.split("."),l=a[a.length-1];n.value=l,i.value=l.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function applyModel(e){let t=document.getElementById("maxRelationDepth"),n=Math.max(...e.entities.map(e=>e.depth))-1;t.value=n,generator.setModel(e)}function cloneEntity(e,t){let n=JSON.parse(JSON.stringify(e));if(t){let i=t.querySelectorAll("input.check-column");if(i?.length){let r=[];i.forEach(e=>{e.checked&&r.push(e.value)}),r.length&&(n.columns=n.columns.filter(e=>r.includes(e.name)))}}return n}let resizeTimeout;function createSelector(e,t){e.innerHTML="",t?.entities&&t.entities.forEach(t=>{let n=document.createElement("tr"),i=document.createElement("td"),r=document.createElement("td"),a=document.createElement("input");a.setAttribute("type","checkbox"),a.setAttribute("checked","checked"),a.classList.add("selected-entity"),a.value=t.name,i.innerHTML=t.name;let l="",d=t.columns.filter(e=>e.primaryKey);d&&(l=d.map(e=>e.name).join(", ")),r.innerHTML=l,n.appendChild(i),n.appendChild(r),e.appendChild(n)})}function updateDbConfig(e){let{driver:t,dialect:n}=generator.getDriverAndDialect(e),i=document.getElementById("dbDriver"),r=document.getElementById("dbDialect");t&&n?(i.value=t,r.value=n,i.classList.remove("invalid"),r.classList.remove("invalid")):(i.value="",r.value="",i.classList.add("invalid"),r.classList.add("invalid"))}function checkAllColumns(e){let t=e.closest("table").querySelectorAll(".check-column");t?.length&&t.forEach(t=>{t.checked=e.checked})}window.addEventListener("resize",()=>{clearTimeout(resizeTimeout),resizeTimeout=setTimeout(()=>{let e=document.querySelector(".erd-wrapper"),t=document.querySelector("#entity-selection-body");if(e){let n=e.clientWidth;n<480&&(n=480),entityRenderer.createERD(generator.getModel(),n,drawRelationship),entityRenderer.createDescription(generator.getModel(),"#erd-selection"),createSelector(t,generator.getModel())}},30)}),document.addEventListener("DOMContentLoaded",()=>{let e=document.getElementById("configForm"),t=document.getElementById("packageName"),n=document.getElementById("dbUrl"),i=document.getElementById("sqlFile");(entityRenderer=new EntityRenderer(".erd-svg")).initIconEvent(generator);let r=document.querySelector(".erd-wrapper");r&&(updatedWidth=r.clientWidth),t.addEventListener("change",function(e){autopopulatePackage(e.target.value)}),t.addEventListener("keyup",function(e){autopopulatePackage(e.target.value)}),n.addEventListener("change",function(e){updateDbConfig(e.target.value)}),n.addEventListener("keyup",function(e){updateDbConfig(e.target.value)}),i.addEventListener("change",function(t){let n=new FormData(e),i=n.get("sqlFile");if(i){console.log("test");let r=document.querySelector("#entity-primary-key-body");console.log("tbody",r),generator.status("Import SQL file"),sqlParser.importSQLFile(i,e=>{e.entities=e.entities.filter(e=>"sqlite_sequence"!==e.name),applyModel(e),updatedWidth<480&&(updatedWidth=480),entityRenderer.createERD(e,updatedWidth,drawRelationship),entityRenderer.createDescription(e,"#erd-selection"),createSelector(r,e),generator.status("Finish")})}});let a=new FormData(e),l=a.get("sqlFile");if(l){let d=document.querySelector("#entity-primary-key-body");generator.status("Import SQL file"),sqlParser.importSQLFile(l,e=>{e.entities=e.entities.filter(e=>"sqlite_sequence"!==e.name),applyModel(e),updatedWidth<480&&(updatedWidth=480),entityRenderer.createERD(e,updatedWidth,drawRelationship),entityRenderer.createDescription(e,"#erd-selection"),createSelector(d,e),generator.status("Finish")})}e.addEventListener("submit",t=>{t.preventDefault();let n=new Date;generator.status("Get information given in the form");let i=new FormData(e),r={packageName:i.get("packageName"),groupId:i.get("groupId"),artifactId:i.get("artifactId"),serviceName:i.get("serviceName"),serviceDescription:i.get("serviceDescription"),javaVersion:i.get("javaVersion"),version:i.get("version"),maxRelationDepth:parseInt(i.get("maxRelationDepth"))||3,startTime:n},a={entities:[]},l=document.querySelectorAll('input[type="checkbox"].entity-selector');if(l.length){let d=[];l.forEach(e=>{e.checked&&d.push(e.value)});let o=generator.getModel();generator.status("Apply selected entities"),o?.entities&&o.entities.forEach(e=>{if(d.includes(e.name)){let t=cloneEntity(e,document.querySelector(`table[data-entity="${e.name}"]`));a.entities.push(t)}})}generator.createZipFile(a,r,document.querySelector("#artifactId").value+".zip")});let o=document.getElementById("configForm"),c="formConfigData";function s(){let e=localStorage.getItem(c);if(!e)return;let t=JSON.parse(e);Object.keys(t).forEach(e=>{let n=o.querySelector(`[name="${e}"]`);n&&(n.value=t[e])})}function u(){let t={},n=e.querySelectorAll("input[type=text], input[type=number], select");n.forEach(e=>{t[e.name]=e.value}),localStorage.setItem(c,JSON.stringify(t))}o.addEventListener("input",u),o.addEventListener("change",u),s()}); \ No newline at end of file +let stringUtil=new StringUtil,generator=new GraphQLSpringGenerator,sqlParser=new SQLParser,util=new GraphQLSchemaUtils,entityRenderer,updatedWidth=600,drawRelationship=!0;function autopopulatePackage(e){let t=document.getElementById("groupId"),n=document.getElementById("artifactId"),i=document.getElementById("serviceName"),r=e.trim();if(!r){t.value="",n.value="",i.value="";return}t.value=r;let a=r.split("."),l=a[a.length-1];n.value=l,i.value=l.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function applyModel(e){let t=document.getElementById("maxRelationDepth"),n=Math.max(...e.entities.map(e=>e.depth))-1;t.value=n,generator.setModel(e)}function cloneEntity(e,t){let n=JSON.parse(JSON.stringify(e));if(t){let i=t.querySelectorAll("input.check-column");if(i?.length){let r=[];i.forEach(e=>{e.checked&&r.push(e.value)}),r.length&&(n.columns=n.columns.filter(e=>r.includes(e.name)))}}return n}let resizeTimeout;function createSelector(e,t){e.innerHTML="",t?.entities&&t.entities.forEach(t=>{let n=document.createElement("tr"),i=document.createElement("td"),r=document.createElement("td"),a=document.createElement("input");a.setAttribute("type","checkbox"),a.setAttribute("checked","checked"),a.classList.add("selected-entity"),a.value=t.name,i.innerHTML=t.name;let l="",c=t.columns.filter(e=>e.primaryKey);c&&(l=c.map(e=>e.name).join(", ")),r.innerHTML=l,n.appendChild(i),n.appendChild(r),e.appendChild(n)})}function updateDbConfig(e){let{driver:t,dialect:n}=generator.getDriverAndDialect(e),i=document.getElementById("dbDriver"),r=document.getElementById("dbDialect");t&&n?(i.value=t,r.value=n,i.classList.remove("invalid"),r.classList.remove("invalid")):(i.value="",r.value="",i.classList.add("invalid"),r.classList.add("invalid"))}function checkAllColumns(e){let t=e.closest("table").querySelectorAll(".check-column");if(t?.length){if(!e.checked){let n=e.closest("table").closest("div");n&&(n.querySelector("h5 input").checked=!1)}t.forEach(t=>{t.checked=e.checked})}}window.addEventListener("resize",()=>{clearTimeout(resizeTimeout),resizeTimeout=setTimeout(()=>{let e=document.querySelector(".erd-wrapper"),t=document.querySelector("#entity-selection-body");if(e){let n=e.clientWidth;n<480&&(n=480),entityRenderer.createERD(generator.getModel(),n,drawRelationship),entityRenderer.createDescription(generator.getModel(),"#erd-selection"),createSelector(t,generator.getModel())}},30)}),document.addEventListener("DOMContentLoaded",()=>{let e=document.getElementById("configForm"),t=document.getElementById("packageName"),n=document.getElementById("dbUrl"),i=document.getElementById("sqlFile");(entityRenderer=new EntityRenderer(".erd-svg")).initIconEvent(generator);let r=document.querySelector(".erd-wrapper");r&&(updatedWidth=r.clientWidth),t.addEventListener("change",function(e){autopopulatePackage(e.target.value)}),t.addEventListener("keyup",function(e){autopopulatePackage(e.target.value)}),n.addEventListener("change",function(e){updateDbConfig(e.target.value)}),n.addEventListener("keyup",function(e){updateDbConfig(e.target.value)}),i.addEventListener("change",function(t){let n=new FormData(e),i=n.get("sqlFile");if(i){let r=document.querySelector("#entity-primary-key-body");generator.status("Import SQL file"),sqlParser.importSQLFile(i,e=>{e.entities=e.entities.filter(e=>"sqlite_sequence"!==e.name),applyModel(e),updatedWidth<480&&(updatedWidth=480),entityRenderer.createERD(e,updatedWidth,drawRelationship),entityRenderer.createDescription(e,"#erd-selection"),createSelector(r,e),generator.status("Finish")})}});let a=new FormData(e),l=a.get("sqlFile");if(l){let c=document.querySelector("#entity-primary-key-body");generator.status("Import SQL file"),sqlParser.importSQLFile(l,e=>{e.entities=e.entities.filter(e=>"sqlite_sequence"!==e.name),applyModel(e),updatedWidth<480&&(updatedWidth=480),entityRenderer.createERD(e,updatedWidth,drawRelationship),entityRenderer.createDescription(e,"#erd-selection"),createSelector(c,e),generator.status("Finish")})}e.addEventListener("submit",t=>{t.preventDefault();let n=new Date;generator.status("Get information given in the form");let i=new FormData(e),r={packageName:i.get("packageName"),groupId:i.get("groupId"),artifactId:i.get("artifactId"),serviceName:i.get("serviceName"),serviceDescription:i.get("serviceDescription"),javaVersion:i.get("javaVersion"),version:i.get("version"),maxRelationDepth:parseInt(i.get("maxRelationDepth"))||3,startTime:n},a={entities:[]},l=document.querySelectorAll('input[type="checkbox"].entity-selector');if(l.length){let c=[];l.forEach(e=>{e.checked&&c.push(e.value)});let d=generator.getModel();generator.status("Apply selected entities"),d?.entities&&d.entities.forEach(e=>{if(c.includes(e.name)){let t=cloneEntity(e,document.querySelector(`table[data-entity="${e.name}"]`));a.entities.push(t)}})}generator.createZipFile(a,r,document.querySelector("#artifactId").value+".zip")});let d=document.getElementById("configForm"),o="formConfigData";function s(){let e=localStorage.getItem(o);if(!e)return;let t=JSON.parse(e);Object.keys(t).forEach(e=>{let n=d.querySelector(`[name="${e}"]`);n&&(n.value=t[e])})}function u(){let t={},n=e.querySelectorAll("input[type=text], input[type=number], select");n.forEach(e=>{t[e.name]=e.value}),localStorage.setItem(o,JSON.stringify(t))}d.addEventListener("input",u),d.addEventListener("change",u),s()}); \ No newline at end of file