From 58144f34267f0a811ee9be8f69826f1c407236a8 Mon Sep 17 00:00:00 2001 From: MikeFuster Date: Mon, 24 Oct 2022 14:18:59 -0300 Subject: [PATCH 01/12] support array of source data --- .../src/TransformedTable.tsx | 3 ++- src/objectmap-utils/src/sdk.ts | 22 +++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/objectmap-jsonforms/src/TransformedTable.tsx b/src/objectmap-jsonforms/src/TransformedTable.tsx index 6c668cc..41eadfa 100644 --- a/src/objectmap-jsonforms/src/TransformedTable.tsx +++ b/src/objectmap-jsonforms/src/TransformedTable.tsx @@ -9,7 +9,8 @@ const TransformedTableVanillaRenderer = ({ data }: ControlProps) => { const ctx = useJsonForms(); const tranformedTable: any = useMemo(() => { - return dot.dot(objectMap.transformData(ctx.core.data, data)) || []; + const transformedData = objectMap.transformData(ctx.core.data, [data])?.[0]; + return dot.dot(transformedData) || []; }, [ctx.core.data, data]); return ( diff --git a/src/objectmap-utils/src/sdk.ts b/src/objectmap-utils/src/sdk.ts index 3e637a4..4907956 100644 --- a/src/objectmap-utils/src/sdk.ts +++ b/src/objectmap-utils/src/sdk.ts @@ -124,17 +124,21 @@ export const createRecipe = (data: any) => { ); }; -export const transformData = (data: any, sourceData: any) => { +export const transformData = (data: any, sourceData: [{ [key: string]: any }]) => { try { const recipe = createRecipe(data); - const transformedData = Object.keys(recipe || []).reduce((acc: any, curr) => { - const sourceKey = recipe[curr]; - const sourceValue = dot.pick(sourceKey, sourceData); - acc[curr] = sourceValue; - return dot.object(acc); - }, {}); - - return transformedData; + const transformations = sourceData.map((source) => { + const transformedData = Object.keys(recipe || []).reduce((acc: any, curr) => { + const sourceKey = recipe[curr]; + const sourceValue = dot.pick(sourceKey, source); + acc[curr] = sourceValue; + return dot.object(acc); + }, {}); + + return transformedData; + }); + + return transformations; } catch (e) { console.error(e); } From 2e43832d172dd8bb65777be9a924637b0a119c5a Mon Sep 17 00:00:00 2001 From: MikeFuster Date: Mon, 24 Oct 2022 15:36:34 -0300 Subject: [PATCH 02/12] create fallback source data --- src/objectmap-jsonforms/src/SourceTable.tsx | 2 +- src/objectmap-utils/src/sdk.ts | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/objectmap-jsonforms/src/SourceTable.tsx b/src/objectmap-jsonforms/src/SourceTable.tsx index 20b9104..f66e431 100644 --- a/src/objectmap-jsonforms/src/SourceTable.tsx +++ b/src/objectmap-jsonforms/src/SourceTable.tsx @@ -26,7 +26,7 @@ const SourceTableVanillaRenderer = ({ data }: ControlProps) => { {Object.keys(baseTable).map((val) => ( - {dot.pick(val, data)} + {baseTable[val]} ))} diff --git a/src/objectmap-utils/src/sdk.ts b/src/objectmap-utils/src/sdk.ts index 3e637a4..6e4d3cd 100644 --- a/src/objectmap-utils/src/sdk.ts +++ b/src/objectmap-utils/src/sdk.ts @@ -54,7 +54,7 @@ export const createSchema = ({ source: any; target: any; uischema: any; - dataToTransform: any; + dataToTransform?: any; }) => { const objectMapKey: any = getKeyByUiSchemaType(uischema, 'ObjectMap'); const sourceTableKey: any = getKeyByUiSchemaType(uischema, 'SourceTable'); @@ -89,12 +89,18 @@ export const createSchema = ({ }, }; + const fallbackDataToTransform = sourceEnum.reduce((acc: { [key: string]: any }, curr: { [key: string]: any }) => { + return { ...acc, [curr.value]: 'null' }; + }, {}); + + const sourceData = Object.keys(dataToTransform || {}).length > 0 ? dataToTransform : fallbackDataToTransform; + return { - schema: schema, + schema, data: { [objectMapKey]: targetEnum.map((target: any) => ({ target })), - [sourceTableKey]: dataToTransform, - [TransformedTableKey]: dataToTransform, + [sourceTableKey]: sourceData, + [TransformedTableKey]: sourceData, baseKeys: { objectMapKey, sourceTableKey, From 886d15f0d2f31af26489d6dcacf4edac94a542bd Mon Sep 17 00:00:00 2001 From: MikeFuster Date: Mon, 24 Oct 2022 15:57:55 -0300 Subject: [PATCH 03/12] add dot.object --- src/objectmap-jsonforms/src/TransformedTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objectmap-jsonforms/src/TransformedTable.tsx b/src/objectmap-jsonforms/src/TransformedTable.tsx index 6c668cc..2b19fbf 100644 --- a/src/objectmap-jsonforms/src/TransformedTable.tsx +++ b/src/objectmap-jsonforms/src/TransformedTable.tsx @@ -9,7 +9,7 @@ const TransformedTableVanillaRenderer = ({ data }: ControlProps) => { const ctx = useJsonForms(); const tranformedTable: any = useMemo(() => { - return dot.dot(objectMap.transformData(ctx.core.data, data)) || []; + return dot.dot(objectMap.transformData(ctx.core.data, dot.object(data))) || []; }, [ctx.core.data, data]); return ( From 972548fcb97d8847ec1d75034a7e204c30764577 Mon Sep 17 00:00:00 2001 From: MikeFuster Date: Mon, 24 Oct 2022 16:01:24 -0300 Subject: [PATCH 04/12] add dot.object --- src/objectmap-jsonforms/src/TransformedTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objectmap-jsonforms/src/TransformedTable.tsx b/src/objectmap-jsonforms/src/TransformedTable.tsx index 41eadfa..65134de 100644 --- a/src/objectmap-jsonforms/src/TransformedTable.tsx +++ b/src/objectmap-jsonforms/src/TransformedTable.tsx @@ -9,7 +9,7 @@ const TransformedTableVanillaRenderer = ({ data }: ControlProps) => { const ctx = useJsonForms(); const tranformedTable: any = useMemo(() => { - const transformedData = objectMap.transformData(ctx.core.data, [data])?.[0]; + const transformedData = objectMap.transformData(ctx.core.data, [dot.object(data)])?.[0]; return dot.dot(transformedData) || []; }, [ctx.core.data, data]); From f769484b231e1321793db26f68277624ac47e4ea Mon Sep 17 00:00:00 2001 From: MikeFuster Date: Tue, 25 Oct 2022 10:10:36 -0300 Subject: [PATCH 05/12] remove any --- src/objectmap-utils/src/sdk.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/objectmap-utils/src/sdk.ts b/src/objectmap-utils/src/sdk.ts index 4907956..363715f 100644 --- a/src/objectmap-utils/src/sdk.ts +++ b/src/objectmap-utils/src/sdk.ts @@ -12,8 +12,8 @@ const parseKey = (key: string) => { return objectKey; }; -const generateEnum = (schema: any) => { - const schemaEnum: any = []; +const generateEnum = (schema: { [key: string]: any }) => { + const schemaEnum: { [key: string]: any }[] = []; Object.keys(dot.dot(schema.properties)).forEach((key) => { const value = parseKey(key); @@ -29,15 +29,15 @@ const generateEnum = (schema: any) => { return schemaEnum; }; -export const getKeyByUiSchemaType = (uischema: any, type: string) => { - let objectKey = null; +export const getKeyByUiSchemaType = (uischema: { [key: string]: any }, type: string) => { + let objectKey = ''; Object.keys(dot.dot(uischema)).forEach((element) => { if (element.includes('type') && dot.pick(element, uischema) === type) { const scopePicker = element.replace('type', 'scope'); const scope = dot.pick(scopePicker, uischema); const splittedScope = scope.split('/'); - const key = splittedScope[splittedScope.length - 1]; + const key: string = splittedScope[splittedScope.length - 1]; objectKey = key; } }); @@ -51,14 +51,14 @@ export const createSchema = ({ uischema, dataToTransform, }: { - source: any; - target: any; - uischema: any; - dataToTransform: any; + source: { [key: string]: any }; + target: { [key: string]: any }; + uischema: { [key: string]: any }; + dataToTransform: { [key: string]: any }; }) => { - const objectMapKey: any = getKeyByUiSchemaType(uischema, 'ObjectMap'); - const sourceTableKey: any = getKeyByUiSchemaType(uischema, 'SourceTable'); - const TransformedTableKey: any = getKeyByUiSchemaType(uischema, 'TransformedTable'); + const objectMapKey = getKeyByUiSchemaType(uischema, 'ObjectMap'); + const sourceTableKey = getKeyByUiSchemaType(uischema, 'SourceTable'); + const TransformedTableKey = getKeyByUiSchemaType(uischema, 'TransformedTable'); const sourceEnum = generateEnum(source); const targetEnum = generateEnum(target); @@ -92,7 +92,7 @@ export const createSchema = ({ return { schema: schema, data: { - [objectMapKey]: targetEnum.map((target: any) => ({ target })), + [objectMapKey]: targetEnum.map((target: { [key: string]: any }) => ({ target })), [sourceTableKey]: dataToTransform, [TransformedTableKey]: dataToTransform, baseKeys: { @@ -104,7 +104,7 @@ export const createSchema = ({ }; }; -export const createRecipe = (data: any) => { +export const createRecipe = (data: { [key: string]: any }) => { if (!data.baseKeys.objectMapKey) { return; } @@ -124,11 +124,11 @@ export const createRecipe = (data: any) => { ); }; -export const transformData = (data: any, sourceData: [{ [key: string]: any }]) => { +export const transformData = (data: { [key: string]: any }, sourceData: { [key: string]: any }[]) => { try { const recipe = createRecipe(data); const transformations = sourceData.map((source) => { - const transformedData = Object.keys(recipe || []).reduce((acc: any, curr) => { + const transformedData = Object.keys(recipe || []).reduce((acc: { [key: string]: any }, curr) => { const sourceKey = recipe[curr]; const sourceValue = dot.pick(sourceKey, source); acc[curr] = sourceValue; From 7eb850a63ab959fff84697841b4ab3c6f6f6f5db Mon Sep 17 00:00:00 2001 From: MikeFuster Date: Tue, 25 Oct 2022 10:24:25 -0300 Subject: [PATCH 06/12] use generics --- src/objectmap-jsonforms/src/ObjectMap.tsx | 8 ++++++-- src/objectmap-jsonforms/src/Row.tsx | 4 ++-- src/objectmap-jsonforms/src/TransformedTable.tsx | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/objectmap-jsonforms/src/ObjectMap.tsx b/src/objectmap-jsonforms/src/ObjectMap.tsx index 61b42a7..ba6cf3b 100644 --- a/src/objectmap-jsonforms/src/ObjectMap.tsx +++ b/src/objectmap-jsonforms/src/ObjectMap.tsx @@ -4,6 +4,10 @@ import { rankWith, ControlProps, JsonSchema, and, uiTypeIs } from '@jsonforms/co import Row from './Row'; import { Typography } from '@material-ui/core'; +interface Row { + target: Enum; +} + interface Enum { value: string; label?: string; @@ -31,7 +35,7 @@ const ObjectMapControlVanillaRenderer = ({ data, handleChange, path, ...props }: const schema = props.schema as JsonSchemaWithCustomProps; const handleRowChange = (targetValue: string, source: Enum) => { - const i = data.findIndex((row: any) => row.target.value === targetValue); + const i = data.findIndex((row: Row) => row.target.value === targetValue); if (source.type === 'clearable') { data[i] = { target: data[i].target }; @@ -52,7 +56,7 @@ const ObjectMapControlVanillaRenderer = ({ data, handleChange, path, ...props }: {schema.items.properties.source.title} - {schema.items.properties.target.enum.map((e: any) => { + {schema.items.properties.target.enum.map((e: Enum) => { return ( ); diff --git a/src/objectmap-jsonforms/src/Row.tsx b/src/objectmap-jsonforms/src/Row.tsx index ad024ff..e6b4686 100644 --- a/src/objectmap-jsonforms/src/Row.tsx +++ b/src/objectmap-jsonforms/src/Row.tsx @@ -33,14 +33,14 @@ const Row = ({ target, sourceEnum, onChange }: Props) => {