From fdb7d5d704cb10a4eeb55fbe5866196cbc06ca9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Jesus?= Date: Tue, 25 Mar 2025 16:11:17 +0000 Subject: [PATCH] Initial setup of pages. Tool definition --- src/pages/tools/json/index.ts | 4 +- src/pages/tools/json/json-to-xml/index.tsx | 128 ++++++++++++++++++++ src/pages/tools/json/json-to-xml/meta.ts | 12 ++ src/pages/tools/json/json-to-xml/service.ts | 0 4 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/pages/tools/json/json-to-xml/index.tsx create mode 100644 src/pages/tools/json/json-to-xml/meta.ts create mode 100644 src/pages/tools/json/json-to-xml/service.ts diff --git a/src/pages/tools/json/index.ts b/src/pages/tools/json/index.ts index e1f0c67..6484d1b 100644 --- a/src/pages/tools/json/index.ts +++ b/src/pages/tools/json/index.ts @@ -2,10 +2,12 @@ import { tool as jsonPrettify } from './prettify/meta'; import { tool as jsonMinify } from './minify/meta'; import { tool as jsonStringify } from './stringify/meta'; import { tool as validateJson } from './validateJson/meta'; +import { tool as jsonToXml } from './json-to-xml/meta'; export const jsonTools = [ validateJson, jsonPrettify, jsonMinify, - jsonStringify + jsonStringify, + jsonToXml ]; diff --git a/src/pages/tools/json/json-to-xml/index.tsx b/src/pages/tools/json/json-to-xml/index.tsx new file mode 100644 index 0000000..3439e54 --- /dev/null +++ b/src/pages/tools/json/json-to-xml/index.tsx @@ -0,0 +1,128 @@ +import React, { useState } from 'react'; +import ToolContent from '@components/ToolContent'; +import ToolTextInput from '@components/input/ToolTextInput'; +import ToolTextResult from '@components/result/ToolTextResult'; +// import { convertJsonToXml } from './service'; +import { CardExampleType } from '@components/examples/ToolExamples'; +import { ToolComponentProps } from '@tools/defineTool'; +import { Box } from '@mui/material'; +import CheckboxWithDesc from '@components/options/CheckboxWithDesc'; +import TextFieldWithDesc from '@components/options/TextFieldWithDesc'; + +type InitialValuesType = { + delimiter: string; + quote: string; + comment: string; + useHeaders: boolean; + skipEmptyLines: boolean; +}; + +const initialValues: InitialValuesType = { + delimiter: ',', + quote: '"', + comment: '#', + useHeaders: true, + skipEmptyLines: true +}; + +const exampleCards: CardExampleType[] = [ + { + title: 'Basic CSV to XML', + description: 'Convert a simple CSV file into an XML format.', + sampleText: 'name,age,city\nJohn,30,New York\nAlice,25,London', + sampleResult: ` + + John + 30 + New York + + + Alice + 25 + London + +`, + sampleOptions: { + ...initialValues, + useHeaders: true + } + } +]; + +export default function JsonToXml({ title }: ToolComponentProps) { + const [input, setInput] = useState(''); + const [result, setResult] = useState(''); + + const compute = (values: InitialValuesType, input: string) => { + if (input) { + try { + //const xmlResult = convertJsonToXml(input, values); + //setResult(xmlResult); + } catch (error) { + setResult( + `Error: ${ + error instanceof Error ? error.message : 'Invalid Json format' + }` + ); + } + } + }; + + return ( + + } + resultComponent={} + getGroups={({ values, updateField }) => [ + { + title: 'Input Json Format', + component: ( + + updateField('delimiter', val)} + /> + updateField('quote', val)} + value={values.quote} + /> + updateField('comment', val)} + /> + + ) + }, + { + title: 'Conversion Options', + component: ( + + updateField('useHeaders', value)} + title="Use Headers" + description="First row is treated as column headers" + /> + updateField('skipEmptyLines', value)} + title="Skip Empty Lines" + description="Don't process empty lines in the CSV" + /> + + ) + } + ]} + /> + ); +} diff --git a/src/pages/tools/json/json-to-xml/meta.ts b/src/pages/tools/json/json-to-xml/meta.ts new file mode 100644 index 0000000..a0f5f63 --- /dev/null +++ b/src/pages/tools/json/json-to-xml/meta.ts @@ -0,0 +1,12 @@ +import { defineTool } from '@tools/defineTool'; +import { lazy } from 'react'; + +export const tool = defineTool('json', { + name: 'Convert JSON to XML', + path: 'json-to-xml', + icon: 'mdi-light:xml', + description: 'Convert JSON files to XML format with customizable options.', + shortDescription: 'Convert JSON data to XML format', + keywords: ['json', 'xml', 'convert', 'transform', 'parse'], + component: lazy(() => import('./index')) +}); diff --git a/src/pages/tools/json/json-to-xml/service.ts b/src/pages/tools/json/json-to-xml/service.ts new file mode 100644 index 0000000..e69de29