From 0c35372ee03a651a92facef998cc7463ed16176a Mon Sep 17 00:00:00 2001 From: Andrew Hopkinson <64254061+toxophilist@users.noreply.github.com> Date: Wed, 19 Feb 2025 12:02:35 +0000 Subject: [PATCH 1/2] chore: remove dynamic group --- ocd/library/c3/OKENetworkInfrastructure.okit | 18 +----------------- ocd/library/pca/OKENetworkInfrastructure.okit | 18 +----------------- 2 files changed, 2 insertions(+), 34 deletions(-) diff --git a/ocd/library/c3/OKENetworkInfrastructure.okit b/ocd/library/c3/OKENetworkInfrastructure.okit index 6ab12c12f..6700cbd3e 100644 --- a/ocd/library/c3/OKENetworkInfrastructure.okit +++ b/ocd/library/c3/OKENetworkInfrastructure.okit @@ -937,23 +937,7 @@ "vcnId": "okit.vcn.81346ca4-8738-446a-861e-76a66333e15f" } ], - "dynamic_group": [ - { - "provider": "oci", - "locked": false, - "terraformResourceName": "OkitDynamicGroup1713431305858", - "okitReference": "okit-6166659f-5cd6-4e4b-8b6a-4470d96de17a", - "resourceType": "DynamicGroup", - "resourceTypeName": "Dynamic Group", - "id": "okit.dynamic_group.be91810e-d732-4ac0-ae6e-f1b700b2677b", - "region": "", - "compartmentId": "okit.compartment.c373a27c-dc58-4cde-9dce-db3de0ca8056", - "displayName": "Dynamic Group bed0", - "documentation": "", - "description": "", - "matchingRule": "" - } - ] + "dynamic_group": [] } } }, diff --git a/ocd/library/pca/OKENetworkInfrastructure.okit b/ocd/library/pca/OKENetworkInfrastructure.okit index 6ab12c12f..6700cbd3e 100644 --- a/ocd/library/pca/OKENetworkInfrastructure.okit +++ b/ocd/library/pca/OKENetworkInfrastructure.okit @@ -937,23 +937,7 @@ "vcnId": "okit.vcn.81346ca4-8738-446a-861e-76a66333e15f" } ], - "dynamic_group": [ - { - "provider": "oci", - "locked": false, - "terraformResourceName": "OkitDynamicGroup1713431305858", - "okitReference": "okit-6166659f-5cd6-4e4b-8b6a-4470d96de17a", - "resourceType": "DynamicGroup", - "resourceTypeName": "Dynamic Group", - "id": "okit.dynamic_group.be91810e-d732-4ac0-ae6e-f1b700b2677b", - "region": "", - "compartmentId": "okit.compartment.c373a27c-dc58-4cde-9dce-db3de0ca8056", - "displayName": "Dynamic Group bed0", - "documentation": "", - "description": "", - "matchingRule": "" - } - ] + "dynamic_group": [] } } }, From c81a9c3667d5be7d2571e5c4d346d59d96a7a469 Mon Sep 17 00:00:00 2001 From: Andrew Hopkinson <64254061+toxophilist@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:19:17 +0000 Subject: [PATCH 2/2] refactor: Switch all save dialogs to use electton/native dialog --- ocd/library/c3/OKENetworkInfrastructure.okit | 2 +- ocd/packages/cli/package.json | 2 +- ocd/packages/codegen-cli/package.json | 2 +- .../src/generator/OcdSvgCssGenerator.ts | 16 ++ ocd/packages/desktop/package.json | 2 +- ocd/packages/desktop/src/main.ts | 48 ++++- ocd/packages/desktop/src/preload.ts | 1 + ocd/packages/export/src/svg/OcdSVGExporter.ts | 3 +- ocd/packages/react/src/components/Menu.ts | 176 ++++++++++-------- ocd/packages/react/src/data/OcdSvgCssData.ts | 78 ++++++-- .../react/src/facade/OcdDesignFacade.ts | 3 + .../react/src/facade/OcdElectronAPI.ts | 1 + ocd/packages/react/src/pages/OcdMarkdown.tsx | 9 +- 13 files changed, 243 insertions(+), 100 deletions(-) diff --git a/ocd/library/c3/OKENetworkInfrastructure.okit b/ocd/library/c3/OKENetworkInfrastructure.okit index 6700cbd3e..12ff7e079 100644 --- a/ocd/library/c3/OKENetworkInfrastructure.okit +++ b/ocd/library/c3/OKENetworkInfrastructure.okit @@ -4,7 +4,7 @@ "ocdSchemaVersion": "0.1.0", "ocdModelId": "ocd-model-b229c12b-895f-4317-aae0-9b9c2a7d8232", "platform": "oci", - "title": "OKE Networking for PCA", + "title": "OKE Networking for C3", "documentation": "", "created": "2024-3-20 15:17:4", "updated": "" diff --git a/ocd/packages/cli/package.json b/ocd/packages/cli/package.json index 799591510..1b7370f39 100644 --- a/ocd/packages/cli/package.json +++ b/ocd/packages/cli/package.json @@ -27,7 +27,7 @@ "pack": "mkdir -p dist && npm pack --pack-destination dist", "compile": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json", "build": "npm run compile && npm run pack", - "generate-oci-reference-data": "node lib/esm/ocd-generate-default-cache.js -d ../desktop/src/data", + "generate-oci-reference-data": "node lib/esm/ocd-generate-default-cache.js -d ../react/src/data", "test-export-to-md": "node lib/esm/ocd.js export markdown -d ../../test/design.okit -o ../../test/export/md/okit.md -C ../desktop/src/css/oci-theme.css -C ../desktop/src/css/ocd-svg.css", "test-export-to-svg": "node lib/esm/ocd.js export svg -d ../../test/design.okit -O ../../test/export/svg -C ../desktop/src/css/oci-theme.css -C ../desktop/src/css/ocd-svg.css", "test-export-to-tf": "node lib/esm/ocd.js export terraform -d ../../test/design.okit -O ../../test/export/tf", diff --git a/ocd/packages/codegen-cli/package.json b/ocd/packages/codegen-cli/package.json index 15a7e2666..d8917bd22 100644 --- a/ocd/packages/codegen-cli/package.json +++ b/ocd/packages/codegen-cli/package.json @@ -29,7 +29,7 @@ "compile": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json", "build": "npm run compile && npm run pack", - "generate-ocd-svg-css-desktop": "node lib/esm/ocd-build-svg-css.js -d ../react/src/data -i ../react/src/css", + "generate-ocd-svg-css-desktop": "node lib/esm/ocd-build-svg-css.js -d ../react/src/data -i ../desktop/src/css", "generate-ocd-build-date-desktop": "node lib/esm/ocd-set-build-date.js -d ../react/src/data -p ../desktop/package.json", "generate-ocd-build-date-export": "node lib/esm/ocd-set-build-date.js -d ../export/src/data -p ../desktop/package.json", diff --git a/ocd/packages/codegen/src/generator/OcdSvgCssGenerator.ts b/ocd/packages/codegen/src/generator/OcdSvgCssGenerator.ts index 9628bb13a..5a395b3bf 100644 --- a/ocd/packages/codegen/src/generator/OcdSvgCssGenerator.ts +++ b/ocd/packages/codegen/src/generator/OcdSvgCssGenerator.ts @@ -26,10 +26,26 @@ export class OcdSvgCssGenerator extends OcdCodeGenerator { const content = `${this.copyright()} ${this.autoGeneratedWarning()} +import { OcdDesign } from "@ocd/model" + export const svgCssData: Record = { ${cssFiles.map((f) => `'${f}': String.raw\`${fs.readFileSync(path.join(resource, f), 'utf8')}\``).join(',\n\n ')} } +export const ociSvgThemeCss = svgCssData['oci-theme.css'] +export const azureSvgThemeCss = svgCssData['azure-theme.css'] +export const generalSvgThemeCss = svgCssData['general-theme.css'] +export const googleSvgThemeCss = svgCssData['google-theme.css'] +export const svgSvgCss = svgCssData['ocd-svg.css'] + +export const getSvgCssData = (design: OcdDesign): string[] => { + let cssData = [ociSvgThemeCss, svgSvgCss] + if (design.model.general && Object.keys(design.model.general).length > 0) cssData = [...cssData, generalSvgThemeCss] + if (design.model.azure && Object.keys(design.model.azure).length > 0) cssData = [...cssData, azureSvgThemeCss] + if (design.model.google && Object.keys(design.model.google).length > 0) cssData = [...cssData, googleSvgThemeCss] + return cssData +} + export default svgCssData ` diff --git a/ocd/packages/desktop/package.json b/ocd/packages/desktop/package.json index 88f3a581e..cbeb3229f 100644 --- a/ocd/packages/desktop/package.json +++ b/ocd/packages/desktop/package.json @@ -27,7 +27,7 @@ "clean": "rm -rf lib dist .vite out", "purge": "npm run clean && rm -rf node_modules", "build": "npm run make", - "start": "NODE_OPTIONS=--max-old-space-size=8192 electron-forge start", + "start": "NODE_OPTIONS=--max-old-space-size=8192 electron-forge start -- --trace-warnings", "package": "NODE_OPTIONS=--max-old-space-size=8192 electron-forge package", "make": "electron-forge make ", "make-macos-universal": "NODE_OPTIONS=--max-old-space-size=8192 DEBUG=electron-installer-dmg* electron-forge make --arch='universal'", diff --git a/ocd/packages/desktop/src/main.ts b/ocd/packages/desktop/src/main.ts index ef56852cf..6c0ac4a1b 100644 --- a/ocd/packages/desktop/src/main.ts +++ b/ocd/packages/desktop/src/main.ts @@ -12,7 +12,7 @@ import common from 'oci-common' import { OciQuery, OciReferenceDataQuery, OciResourceManagerQuery } from '@ocd/query' import { OcdDesign, OcdResource, OciModelResources } from '@ocd/model' import { OcdCache, OcdConsoleConfiguration } from '@ocd/react' -import { OcdExcelExporter, OcdMarkdownExporter, OcdTerraformExporter } from '@ocd/export' +import { OcdExcelExporter, OcdMarkdownExporter, OcdSVGExporter, OcdTerraformExporter } from '@ocd/export' app.commandLine.appendSwitch('ignore-certificate-errors') // Temporary work around for not being able to add additional certificates process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' // Temporary work around for not being able to add additional certificates @@ -262,6 +262,7 @@ app.whenReady().then(() => { ipcMain.handle('ocdDesign:exportTerraform', handleExportTerraform) ipcMain.handle('ocdDesign:exportToExcel', handleExportToExcel) ipcMain.handle('ocdDesign:exportToMarkdown', handleExportToMarkdown) + ipcMain.handle('ocdDesign:exportToSvg', handleExportToSvg) ipcMain.handle('ocdDesign:exportToTerraform', handleExportToTerraform) // OCD Configuration ipcMain.handle('ocdConfig:loadConsoleConfig', handleLoadConsoleConfig) @@ -532,6 +533,51 @@ async function handleExportToMarkdown(event: any, design: OcdDesign, css: string }) } +async function handleExportToSvg(event: any, design: OcdDesign, css: string[] = [], directory: string = '', suggestedFilename = '') { + console.debug('Electron Main: exportToSvg') + if (design.view.pages.length > 1) { + const additionalFilename: string = suggestedFilename && suggestedFilename.length > 0 ? suggestedFilename : design.metadata.title.replaceAll(' ', '_') + return new Promise((resolve, reject) => { + dialog.showOpenDialog(mainWindow, { + properties: ['openDirectory', 'createDirectory'], + defaultPath: directory, + buttonLabel: 'Export' + }).then(result => { + if (!result.canceled) { + const exporter = new OcdSVGExporter(css) + const output = exporter.export(design) + console.debug('handleExportToSvg: ', result.filePaths) + const directory = result.filePaths[0] + Object.entries(output).forEach(([k, v]) => fs.writeFileSync(path.join(directory, `${k.replaceAll(' ', '_')}.svg`), v)) + } + resolve({canceled: false, filename: result.canceled ? '' : result.filePaths[0], design: design}) + }).catch(err => { + console.error(err) + reject(new Error(err)) + }) + }) + } else { + return new Promise((resolve, reject) => { + dialog.showSaveDialog(mainWindow, { + defaultPath: suggestedFilename, + properties: ['createDirectory'], + filters: [{name: 'Filetype', extensions: ['svg']}], + buttonLabel: 'Export' + }).then(result => { + if (!result.canceled) { + const exporter = new OcdSVGExporter(css) + const output = exporter.export(design) + fs.writeFileSync(result.filePath, Object.values(output)[0]) + } + resolve({canceled: false, filename: result.canceled ? '' : result.filePath, design: design}) + }).catch(err => { + console.error(err) + reject(new Error(err)) + }) + }) + } +} + async function handleExportToTerraform(event: any, design: OcdDesign, directory: string) { console.debug('Electron Main: handleExportTerraform') return new Promise((resolve, reject) => { diff --git a/ocd/packages/desktop/src/preload.ts b/ocd/packages/desktop/src/preload.ts index 2267c9c6d..be94427b7 100644 --- a/ocd/packages/desktop/src/preload.ts +++ b/ocd/packages/desktop/src/preload.ts @@ -34,6 +34,7 @@ contextBridge.exposeInMainWorld('ocdAPI', { exportTerraform: (design: OcdDesign, directory: string) => ipcRenderer.invoke('ocdDesign:exportTerraform', design, directory), exportToExcel: (design: OcdDesign, suggestedFilename = '') => ipcRenderer.invoke('ocdDesign:exportToExcel', design, suggestedFilename), exportToMarkdown: (design: OcdDesign, css: string[], suggestedFilename = '') => ipcRenderer.invoke('ocdDesign:exportToMarkdown', design, css, suggestedFilename), + exportToSvg: (design: OcdDesign, css: string[], directory: string, suggestedFilename = '') => ipcRenderer.invoke('ocdDesign:exportToSvg', design, css, directory, suggestedFilename), exportToTerraform: (design: OcdDesign, directory: string) => ipcRenderer.invoke('ocdDesign:exportToTerraform', design, directory), // OCD Configuration loadConsoleConfig: () => ipcRenderer.invoke('ocdConfig:loadConsoleConfig'), diff --git a/ocd/packages/export/src/svg/OcdSVGExporter.ts b/ocd/packages/export/src/svg/OcdSVGExporter.ts index 57f2f9b81..14cd62e3d 100644 --- a/ocd/packages/export/src/svg/OcdSVGExporter.ts +++ b/ocd/packages/export/src/svg/OcdSVGExporter.ts @@ -36,7 +36,8 @@ export class OcdSVGExporter extends OcdExporter { const height = this.calculateHeight(page.coords) // const svg = ` // const svg = ` - const svg = ` + // const svg = ` + const svg = `