apps/Standalone/src/dataMapperV1/app/DataMapperStandaloneDesignerV1.tsx (105 lines of code) (raw):

import { DevToolbox } from '../components/DevToolbox'; import { dataMapDataLoaderSlice } from '../state/DataMapDataLoader'; import type { AppDispatch, RootState } from '../state/Store'; import { AzureThemeDark } from '@fluentui/azure-themes/lib/azure/AzureThemeDark'; import { AzureThemeLight } from '@fluentui/azure-themes/lib/azure/AzureThemeLight'; import { ThemeProvider } from '@fluentui/react'; import { FluentProvider, webDarkTheme, webLightTheme } from '@fluentui/react-components'; import { PortalCompatProvider } from '@fluentui/react-portal-compat'; import { DataMapDataProvider, DataMapperDesigner, DataMapperDesignerProvider, InitDataMapperApiService, defaultDataMapperApiServiceOptions, getFunctions, } from '@microsoft/logic-apps-data-mapper'; import { Theme as ThemeType } from '@microsoft/logic-apps-shared'; import { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; const workflowSchemaFilenames = [ 'Source.xsd', 'Target.xsd', 'SourceJson.json', 'folder/TargetJson.json', 'folder 2/file.json', 'a/a.json', 'a/b.json', 'a/b/c.json', ]; const customXsltPath = ['folder/file.xslt', 'file2.xslt']; export const DataMapperStandaloneDesignerV1 = () => { const dispatch = useDispatch<AppDispatch>(); const theme = useSelector((state: RootState) => state.dataMapDataLoader.theme); const armToken = useSelector((state: RootState) => state.dataMapDataLoader.armToken); const xsltFilename = useSelector((state: RootState) => state.dataMapDataLoader.xsltFilename); const xsltContent = useSelector((state: RootState) => state.dataMapDataLoader.xsltContent); const mapDefinition = useSelector((state: RootState) => state.dataMapDataLoader.mapDefinition); const mapMetadata = useSelector((state: RootState) => state.dataMapDataLoader.mapMetadata); const fetchedFunctions = useSelector((state: RootState) => state.dataMapDataLoader.fetchedFunctions); const sourceSchema = useSelector((state: RootState) => state.schemaDataLoader.sourceSchema); const targetSchema = useSelector((state: RootState) => state.schemaDataLoader.targetSchema); const [functionDisplay, setFunctionDisplayExpanded] = useState<boolean>(true); // Standalone uses default/dev runtime settings - can just run 'func host start' in the workflow root InitDataMapperApiService({ ...defaultDataMapperApiServiceOptions, accessToken: armToken, }); const saveMapDefinitionCall = (dataMapDefinition: string, mapMetadata: string) => { console.log('Map Definition\n==============='); console.log(dataMapDefinition); console.log('Map Metadata\n==============='); console.log(mapMetadata); }; const saveXsltCall = (dataMapXslt: string) => { console.log('\nXSLT\n==============='); console.log(dataMapXslt); }; useEffect(() => { const fetchFunctionList = async () => { const fnManifest = await getFunctions(); if (typeof fnManifest !== 'string') { dispatch(dataMapDataLoaderSlice.actions.changeFetchedFunctions(fnManifest)); } }; fetchFunctionList(); }, [dispatch, armToken]); const isLightMode = theme === ThemeType.Light; return ( <div style={{ flex: '1 1 1px', display: 'flex', flexDirection: 'column', height: '100vh' }}> <div style={{ flex: '0 1 1px' }}> <ThemeProvider theme={isLightMode ? AzureThemeLight : AzureThemeDark}> <FluentProvider theme={isLightMode ? webLightTheme : webDarkTheme}> {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */} {/* @ts-ignore */} <PortalCompatProvider> <DevToolbox /> </PortalCompatProvider> </FluentProvider> </ThemeProvider> </div> <div style={{ flex: '1 1 1px', display: 'flex', flexDirection: 'column' }}> <DataMapperDesignerProvider locale="en-US" theme={theme} options={{}}> <DataMapDataProvider xsltFilename={xsltFilename} xsltContent={xsltContent} mapDefinition={mapDefinition} dataMapMetadata={mapMetadata} sourceSchema={sourceSchema} targetSchema={targetSchema} availableSchemas={workflowSchemaFilenames} customXsltPaths={customXsltPath} fetchedFunctions={fetchedFunctions} theme={theme} > <DataMapperDesigner saveMapDefinitionCall={saveMapDefinitionCall} saveXsltCall={saveXsltCall} setFunctionDisplayExpanded={setFunctionDisplayExpanded} useExpandedFunctionCards={functionDisplay} /> </DataMapDataProvider> </DataMapperDesignerProvider> </div> </div> ); };