udp-react-enterprise-component-library 25.14.1-beta.13 → 25.14.1-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ImportDataFromFileMapping-Cr-Yof-6.js → ImportDataFromFileMapping-b_i26ucy.js} +2 -5
- package/dist/ImportDataFromFileMapping-b_i26ucy.js.map +1 -0
- package/dist/{MenuPage-D4tvTXC3.js → MenuPage-DVVjB9dx.js} +1 -1
- package/dist/{MenuPage-DJGGAhH5.js → MenuPage-ubGSLrRu.js} +3 -3
- package/dist/MenuPage-ubGSLrRu.js.map +1 -0
- package/dist/{UdpRoutes-Bjfl5no0.js → UdpRoutes-KQam73g2.js} +2 -2
- package/dist/{UdpRoutes-Bjfl5no0.js.map → UdpRoutes-KQam73g2.js.map} +1 -1
- package/dist/index.js +11 -7
- package/dist/index.js.map +1 -1
- package/dist/menuPage/index.js +1 -1
- package/dist/routes/index.js +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/udp/fileImportMapping/index.js +1 -1
- package/dist/udp/pages/index.js +2 -2
- package/dist/{udpPages-D6t7REhp.js → udpPages-P-7udUnT.js} +2 -2
- package/dist/{udpPages-D6t7REhp.js.map → udpPages-P-7udUnT.js.map} +1 -1
- package/export-map.json +1 -1
- package/package.json +2 -2
- package/dist/ImportDataFromFileMapping-Cr-Yof-6.js.map +0 -1
- package/dist/MenuPage-DJGGAhH5.js.map +0 -1
package/dist/{ImportDataFromFileMapping-Cr-Yof-6.js → ImportDataFromFileMapping-b_i26ucy.js}
RENAMED
|
@@ -202,10 +202,7 @@ const handleExcelFileUpload = (fileObject, fileProperties) => {
|
|
|
202
202
|
const workbook = XLSX.read(data, { type: "array" });
|
|
203
203
|
const sheetName = workbook.SheetNames[fileProperties?.worksheetNumber?.value - 1];
|
|
204
204
|
const worksheet = workbook.Sheets[sheetName];
|
|
205
|
-
const json = XLSX.utils.sheet_to_json(worksheet, {
|
|
206
|
-
header: 1,
|
|
207
|
-
range: "A1:Z10"
|
|
208
|
-
});
|
|
205
|
+
const json = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
|
|
209
206
|
if (json.length > 1) {
|
|
210
207
|
const headers = json[0];
|
|
211
208
|
const firstDataLine = json[1];
|
|
@@ -742,4 +739,4 @@ const ImportDataFromFileMapping = (props) => {
|
|
|
742
739
|
|
|
743
740
|
//#endregion
|
|
744
741
|
export { AmbientStepper, FileImportConfigCard, ImportDataFromFileMapping, handleExcelFileUpload, handleJsonFileUpload, handleTextFileUpload };
|
|
745
|
-
//# sourceMappingURL=ImportDataFromFileMapping-
|
|
742
|
+
//# sourceMappingURL=ImportDataFromFileMapping-b_i26ucy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportDataFromFileMapping-b_i26ucy.js","names":["StepLabel","React","withStyles","StepConnector","makeStyles","Stepper","Step","StepLabel","apiMutate","Divider","apiMutate","FileImportMappingWizard"],"sources":["../src/UI/inputs/menus/AmbientStepper/StepLabel.jsx","../src/UI/inputs/menus/AmbientStepper/AmbientStepper.jsx","../src/udp/fileImportMapping/fileUtils.js","../src/udp/fileImportMapping/FileImportConfigCard.jsx","../src/udp/fileImportMapping/FileImportMappingWizard.jsx","../src/udp/fileImportMapping/ImportDataFromFileMapping.jsx"],"sourcesContent":["import * as React from 'react'\nimport PropTypes from 'prop-types'\nimport clsx from 'clsx'\nimport { withStyles, Typography } from '@material-ui/core'\n\nexport const styles = (theme) => ({\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n alignItems: 'center',\n '&$alternativeLabel': {\n flexDirection: 'column'\n },\n '&$disabled': {\n cursor: 'default'\n }\n },\n /* Styles applied to the root element if `orientation=\"horizontal\"`. */\n horizontal: {},\n /* Styles applied to the root element if `orientation=\"vertical\"`. */\n vertical: {},\n /* Styles applied to the `Typography` component which wraps `children`. */\n label: {\n color: theme.palette.text.secondary,\n '&$active': {\n color: theme.palette.text.primary,\n fontWeight: 500\n },\n '&$completed': {\n color: theme.palette.text.primary,\n fontWeight: 500\n },\n '&$alternativeLabel': {\n textAlign: 'center'\n // marginTop: 16,\n },\n '&$error': {\n color: theme.palette.error.main\n }\n },\n /* Pseudo-class applied to the `Typography` component if `active={true}`. */\n active: {},\n /* Pseudo-class applied to the `Typography` component if `completed={true}`. */\n completed: {},\n /* Pseudo-class applied to the root element and `Typography` component if `error={true}`. */\n error: {},\n /* Pseudo-class applied to the root element and `Typography` component if `disabled={true}`. */\n disabled: {},\n /* Styles applied to the `icon` container element. */\n iconContainer: {\n flexShrink: 0, // Fix IE 11 issue\n display: 'flex',\n paddingRight: 8,\n '&$alternativeLabel': {\n paddingRight: 0\n }\n },\n /* Pseudo-class applied to the root and icon container and `Typography` if `alternativeLabel={true}`. */\n alternativeLabel: {},\n /* Styles applied to the container element which wraps `Typography` and `optional`. */\n labelContainer: {\n width: '100%'\n }\n})\n\nconst StepLabel = React.forwardRef(function StepLabel(props, ref) {\n const {\n // eslint-disable-next-line react/prop-types\n active = false,\n // eslint-disable-next-line react/prop-types\n alternativeLabel = false,\n children,\n classes,\n className,\n // eslint-disable-next-line react/prop-types\n completed = false,\n disabled = false,\n error = false,\n // eslint-disable-next-line react/prop-types\n expanded,\n icon,\n // eslint-disable-next-line react/prop-types\n last,\n optional,\n // eslint-disable-next-line react/prop-types\n orientation = 'horizontal',\n StepIconComponent: StepIconComponentProp,\n StepIconProps,\n ...other\n } = props\n\n let StepIconComponent = StepIconComponentProp\n\n return (\n <span\n className={clsx(\n classes.root,\n classes[orientation],\n {\n [classes.disabled]: disabled,\n [classes.alternativeLabel]: alternativeLabel,\n [classes.error]: error\n },\n className\n )}\n ref={ref}\n {...other}\n >\n {icon || StepIconComponent ? (\n <span\n className={clsx(classes.iconContainer, {\n [classes.alternativeLabel]: alternativeLabel\n })}\n >\n <StepIconComponent\n completed={completed}\n active={active}\n error={error}\n icon={icon}\n {...StepIconProps}\n />\n </span>\n ) : null}\n <span className={classes.labelContainer}>\n {children ? (\n <Typography\n variant='body2'\n component='span'\n display='block'\n className={clsx(classes.label, {\n [classes.alternativeLabel]: alternativeLabel,\n [classes.completed]: completed,\n [classes.active]: active,\n [classes.error]: error\n })}\n >\n {children}\n </Typography>\n ) : null}\n {optional}\n </span>\n </span>\n )\n})\n\nStepLabel.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * In most cases will simply be a string containing a title for the label.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * Mark the step as disabled, will also disable the button if\n * `StepLabelButton` is a child of `StepLabel`. Is passed to child components.\n */\n disabled: PropTypes.bool,\n /**\n * Mark the step as failed.\n */\n error: PropTypes.bool,\n /**\n * Override the default label of the step icon.\n */\n icon: PropTypes.node,\n /**\n * The optional node to display.\n */\n optional: PropTypes.node,\n /**\n * The component to render in place of the [`StepIcon`](/api/step-icon/).\n */\n StepIconComponent: PropTypes.elementType,\n /**\n * Props applied to the [`StepIcon`](/api/step-icon/) element.\n */\n StepIconProps: PropTypes.object\n}\n\nStepLabel.muiName = 'StepLabel'\n\n/**\n * Explicit any export to avoid non-portable inferred React types in declaration output.\n * @type {any}\n */\nconst StepLabelExport = withStyles(styles, { name: 'MuiStepLabel' })(StepLabel)\n\nexport default StepLabelExport\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { makeStyles, withStyles } from '@material-ui/core/styles'\nimport clsx from 'clsx'\nimport Stepper from '@material-ui/core/Stepper'\nimport Step from '@material-ui/core/Step'\n// import StepLabel from '@material-ui/core/StepLabel';\nimport Check from '@material-ui/icons/esm/Check'\nimport StepConnector from '@material-ui/core/StepConnector'\nimport StepLabel from './StepLabel'\n\nconst QontoConnector = withStyles({\n alternativeLabel: {\n top: 10,\n left: 'calc(-50% + 16px)',\n right: 'calc(50% + 16px)'\n },\n active: {\n '& $line': {\n borderColor: '#09A58C'\n }\n },\n completed: {\n '& $line': {\n borderColor: '#09A58C'\n }\n },\n line: {\n borderColor: '#eaeaf0',\n borderTopWidth: 3,\n borderRadius: 1\n }\n})(StepConnector)\n\nconst useQontoStepIconStyles = makeStyles({\n root: {\n color: '#09A58C',\n display: 'flex',\n height: 22,\n alignItems: 'center'\n },\n active: {\n color: '#09A58C'\n },\n circle: {\n width: 16,\n height: 16,\n borderRadius: '50%',\n border: '2px solid currentColor'\n },\n completed: {\n color: '#09A58C',\n zIndex: 1,\n fontSize: 18\n },\n stepLabel: {\n display: 'none'\n },\n rootStepper: {\n background: 'blue'\n }\n})\n\nconst QontoStepIcon = (props) => {\n const classes = useQontoStepIconStyles()\n const { active, completed } = props\n\n return (\n <div\n className={clsx(classes.root, {\n [classes.active]: active\n })}\n >\n {completed ? (\n <Check className={classes.completed} />\n ) : (\n <div className={classes.circle} />\n )}\n </div>\n )\n}\n\nQontoStepIcon.propTypes = {\n /**\n * Whether this step is active.\n */\n active: PropTypes.bool,\n /**\n * Mark the step as completed. Is passed to child components.\n */\n completed: PropTypes.bool\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%'\n },\n button: {\n marginRight: theme.spacing(1)\n },\n instructions: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1)\n },\n rootStep: {\n marginTop: 0\n }\n}))\n\n// function getSteps() {\n// return [\n// 'Select campaign settings',\n// 'Create an ad group',\n// 'Create an ad',\n// 'another',\n// ];\n// }\n\nexport const AmbientStepper = ({ activeStep, steps, orientation }) => {\n const classes = useStyles()\n\n return (\n <div className={classes.root}>\n <Stepper\n style={{ background: 'transparent', padding: 0 }}\n classes={{ root: classes.rootStepper }}\n alternativeLabel\n activeStep={activeStep}\n connector={<QontoConnector />}\n orietation={orientation}\n >\n {steps.map((label) => (\n <Step classes={{ root: classes.rootStep }} key={label}>\n <StepLabel\n className={classes.stepLabel}\n StepIconComponent={QontoStepIcon}\n >\n <span style={{ fontSize: 14 }}>{label}</span>\n </StepLabel>\n </Step>\n ))}\n </Stepper>\n </div>\n )\n}\n","import * as XLSX from 'xlsx';\n\nexport const handleExcelFileUpload = (fileObject, fileProperties) => {\n return new Promise((resolve, reject) => {\n if (fileObject) {\n const reader = new FileReader();\n\n reader.onload = function (e) {\n const data = new Uint8Array(e.target.result);\n const workbook = XLSX.read(data, { type: 'array' });\n\n const sheetName = workbook.SheetNames[fileProperties?.worksheetNumber?.value - 1];\n const worksheet = workbook.Sheets[sheetName];\n\n // Get the headers (first row) and first data line\n const json = XLSX.utils.sheet_to_json(worksheet, {\n header: 1,\n });\n if (json.length > 1) {\n const headers = json[0]; // First row as headers\n const firstDataLine = json[1]; // Second row as the first data line\n resolve({ headers: headers, sampleData: firstDataLine });\n }\n else{\n reject(\"Could not get file headers\")\n }\n };\n reader.onerror = function () {\n reject('Error reading the file.');\n };\n\n reader.readAsArrayBuffer(fileObject); // Read the file as an ArrayBuffer\n } else {\n reject('No file provided');\n }\n });\n};\n\nexport const handleTextFileUpload = (fileObject, fileProperties) => {\n return new Promise((resolve, reject) => {\n if (fileObject) {\n const chunkSize = 1024; // Read 1024 bytes at a time\n let offset = 0; // Start reading at the beginning of the file\n let accumulatedData = '';\n\n const reader = new FileReader();\n\n reader.onload = function (e) {\n accumulatedData += e.target.result;\n\n const lines = accumulatedData.split('\\n');\n if (lines.length > 2) {\n const headers = lines[0].replace(/\\r/g, '').split(fileProperties?.delimiter?.value);\n const firstDataLine = lines[1].replace(/\\r/g, '').split(fileProperties?.delimiter?.value);\n resolve({ headers: headers, sampleData: firstDataLine });\n } else {\n // If the header is not found and there's more data to read\n if (offset < fileObject.size) {\n readNextChunk();\n }\n }\n };\n reader.onerror = function () {\n reject('Error reading the file.');\n };\n\n function readNextChunk() {\n // Read the next 1024 bytes\n const blob = fileObject.slice(offset, offset + chunkSize);\n reader.readAsText(blob);\n offset += chunkSize;\n }\n readNextChunk();\n } else {\n reject('No file provided');\n }\n });\n};\n\nexport const handleJsonFileUpload = (fileObject, fileProperties) => {\n return new Promise((resolve, reject) => {\n if (fileObject) {\n const reader = new FileReader();\n\n reader.onload = function (e) {\n try {\n const jsonData = JSON.parse(e.target.result);\n const dataAtPath = fileProperties?.jsonPath ? getValueByPath(jsonData, fileProperties?.jsonPath) : jsonData;\n\n if (Array.isArray(dataAtPath) && dataAtPath.length > 0) {\n const keys = Object.keys(dataAtPath[0]);\n resolve({ headers: keys, sampleData: dataAtPath[0] });\n } else {\n reject('The JSON file does not contain an array or is empty.');\n }\n } catch (err) {\n reject('Error parsing JSON file:', err);\n }\n };\n reader.onerror = function () {\n reject('Error reading the file.');\n };\n\n reader.readAsText(fileObject);\n } else {\n reject('No file provided');\n }\n });\n};\n\nconst getValueByPath = (obj, path) => {\n return path.split('.').reduce((acc, key) => acc && acc[key], obj);\n }\n","import React, { useState, useMemo } from 'react';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { CompactDataListItem } from '../../UI/dataDisplay/CompactDataListItem';\nimport { Typography, Divider } from '@material-ui/core';\nimport { FluentIcon } from '../../utilities/iconLibrary/FluentIcon';\nimport { ChromeBackMirroredIcon } from '@fluentui/react-icons';\n\nexport const FileImportConfigCard = (props) => {\n const { fileMappingRecord, domain } = props;\n const [showIndexNumbers, setShowIndexNumbers] = useState(false);\n\n const parsedProperties = useMemo(() => {\n if (fileMappingRecord) {\n let parsedObject = fileMappingRecord?.properties;\n if (typeof fileMappingRecord?.properties === 'string') {\n parsedObject = JSON.parse(fileMappingRecord?.properties);\n }\n if (\n 'includesHeader' in parsedObject &&\n parsedObject?.includesHeader === false\n ) {\n setShowIndexNumbers(true);\n } else {\n setShowIndexNumbers(false);\n }\n return Object.entries(parsedObject).map(([key, value]) => ({\n key,\n value\n }));\n }\n }, [fileMappingRecord]);\n\n const parsedFieldMappings = useMemo(() => {\n let parsedObject = fileMappingRecord?.mapping;\n if (typeof fileMappingRecord?.mapping === 'string') {\n parsedObject = JSON.parse(fileMappingRecord?.mapping);\n }\n if (fileMappingRecord) {\n return Object.entries(parsedObject);\n }\n }, [fileMappingRecord]);\n\n return (\n parsedFieldMappings && (\n <AmbientCard fullWidth title='Mapping Configuration' subtitle={domain}>\n {parsedProperties?.map((property) => (\n <CompactDataListItem\n label={property?.key\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/^./, function (char) {\n return char.toUpperCase();\n })}\n value={\n property?.value === false\n ? 'False'\n : property?.value === true\n ? 'True'\n : property?.value\n }\n />\n ))}\n\n <>\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingTop: 20\n }}\n >\n <Typography variant='caption'>\n {showIndexNumbers ? \"Column index's\" : 'File Headers'}\n </Typography>\n <Typography variant='caption'>Fields</Typography>\n </div>\n <Divider style={{ marginTop: 5, marginBottom: -14 }} />\n {parsedFieldMappings?.map((field) => (\n <div style={{ height: 42 }}>\n <div style={{ display: 'flex', flexDirection: 'row', gap: 10 }}>\n <Typography style={{ marginTop: 25, width: '50%' }}>\n {showIndexNumbers\n ? 'index ' + field[1]?.headerIndex\n : field[1]?.importFileField}\n </Typography>\n <FluentIcon\n style={{ marginTop: 28, width: '10%' }}\n component={ChromeBackMirroredIcon}\n />\n <Typography\n style={{ marginTop: 25, width: '50%', textAlign: 'right' }}\n >\n {field[1]?.udpField.replace(/([A-Z])/g, ' $1').trim()}\n </Typography>\n </div>\n <Divider style={{ margin: '5px 0px' }} />\n </div>\n ))}\n </>\n </AmbientCard>\n )\n );\n};\n","import React, { useMemo, useState, useCallback, useEffect } from 'react';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { AmbientAutoComplete } from '../../UI/inputs/textField/AmbientAutoComplete';\nimport { usePromotedMethodEntity } from '../../hooks/usePromotedMethodEntity';\nimport { executeQueryAdHoc } from '../utilities/methodUtils';\nimport { Form } from '../../utilities/form';\nimport { Field } from '../../utilities/form';\nimport { FormButtons } from '../../utilities/form';\nimport { SubmitButton } from '../../utilities/form';\nimport { FluentIcon } from '../../utilities/iconLibrary/FluentIcon';\nimport { AmbientStepper } from '../../UI/inputs/menus/AmbientStepper/AmbientStepper';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { DragDropFileUpload } from '../../uploader/DragDropFileUpload';\nimport { Typography } from '@material-ui/core';\nimport { ChromeBackMirroredIcon } from '@fluentui/react-icons';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { AmbientTextField } from '../../UI/inputs/textField/AmbientTextField';\nimport { Divider } from '../../UI/utilityDisplay/Divider';\nimport {\n handleExcelFileUpload,\n handleJsonFileUpload,\n handleTextFileUpload\n} from './fileUtils';\nimport { FileImportConfigCard } from './FileImportConfigCard';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst FileImportMappingWizard = (props) => {\n const { refetchMappings, setNewFileMappingSidesheetOpen, verifyRequiredFields } = props;\n const user = useUser();\n const [importHeaderData, setImportHeaderData] = useState();\n const [udpObjectList, setUdpObjectList] = useState();\n const [selectedDomain, setSelectedDomain] = useState();\n const [selectedFileType, setSelectedFileType] = useState();\n const [fileObject, setFileObject] = useState();\n const [fileImportMappingObject, setFileImportMappingObject] = useState({});\n const [activeStep, setActiveStep] = useState(0);\n const [showIndexNumbers, setShowIndexNumbers] = useState(false);\n const [errorText, setErrorText] = useState('');\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const executeCreateFileMapping = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpFileImportMapping`,\n {\n method: 'post'\n },\n { data }\n ),\n []\n );\n const { data: udpObjectEntity } = usePromotedMethodEntity(\n 'UdpObjectInfo',\n true\n );\n\n const [{ data: allowedFileTypesData }, refetchAllowedFileTypes] = useAxiosGet(\n ConfigService.productV1ApiUrl,\n `UdpFileImportType`,\n {},\n false\n );\n\n const searchUdpObjectData = useCallback(async () => {\n if (udpObjectEntity?.unityBaseSearchMethod?.apiMethodId && user?.id) {\n const sapUserRes = await executeQueryAdHoc(\n {\n data: {\n eagerLoad: true,\n pageSize: 200,\n filterElements: []\n }\n },\n udpObjectEntity?.unityBaseSearchMethod?.apiMethodId\n );\n if (sapUserRes?.data?.pageList.length > 0) {\n setUdpObjectList(sapUserRes?.data?.pageList);\n }\n }\n }, [udpObjectEntity, user]);\n\n const filterCatalogObjectList = useMemo(() => {\n return udpObjectList;\n }, [udpObjectList]);\n\n const getNameFormattedOptionLabel = (option) => {\n return option?.name.replace(/([A-Z])/g, ' $1').trim();\n };\n\n const getNameOptionLabel = (option) => {\n return option?.name;\n };\n\n const handleFileUpload = async (properties) => {\n let result;\n if (\n selectedFileType.extension === '.csv' ||\n selectedFileType.extension === '.txt'\n ) {\n result = await handleTextFileUpload(fileObject, properties);\n } else if (selectedFileType.extension === '.xlsx') {\n result = await handleExcelFileUpload(fileObject, properties);\n } else if (selectedFileType.extension === '.json') {\n result = await handleJsonFileUpload(fileObject, properties);\n }\n setImportHeaderData(result?.headers);\n };\n\n useEffect(() => {\n searchUdpObjectData();\n }, [searchUdpObjectData]);\n\n const handleCreateNewFieldMapping = useCallback(\n async (values) => {\n const response = await executeCreateFileMapping({\n name: values.name,\n objectInfoSanitizedName: getSanitizedName(selectedDomain.name),\n fileImportType: selectedFileType.id,\n mapping: JSON.stringify(fileImportMappingObject?.mapping),\n properties: JSON.stringify(fileImportMappingObject?.properties)\n }).catch((res) => {\n handleErrorSnackbar(res);\n });\n if (response?.status === 201) {\n handleSuccessSnackbar('Created Mapping');\n refetchMappings();\n setNewFileMappingSidesheetOpen(false);\n }\n },\n [\n executeCreateFileMapping,\n selectedDomain?.name,\n selectedFileType?.id,\n fileImportMappingObject?.mapping,\n fileImportMappingObject?.properties,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n refetchMappings,\n setNewFileMappingSidesheetOpen\n ]\n );\n\n const handleUpdateFieldMapping = (values) => {\n let valid = true;\n selectedDomain?.objectFieldInfo?.forEach((option) => {\n if (\n !option.dataType.endsWith('?') &&\n !option.isPrimaryKey &&\n !option.udpType\n ) {\n if (\n !Object.entries(values).some(\n (obj) => obj[1].businessObjectKey === option.businessObjectKey\n )\n ) {\n if(verifyRequiredFields){\n valid = false;\n }\n }\n }\n });\n if (!valid) {\n setErrorText('All required Udp fields must have a mapping');\n return;\n }\n const filteredMappings = Object.entries(values)\n .filter(([key, value]) => value !== null)\n .reduce((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n const mappedFieldIndexes = Object.keys(filteredMappings).map((key) =>\n parseInt(key.split('udpFieldMapping')[1], 10)\n );\n const fieldMappings = Object.values(filteredMappings).map(\n (selectedUdpField, index) => {\n return {\n udpField: selectedUdpField.name,\n importFileField: !showIndexNumbers\n ? importHeaderData[mappedFieldIndexes[index]]\n : null,\n headerIndex: !showIndexNumbers ? -1 : mappedFieldIndexes[index]\n };\n }\n );\n setFileImportMappingObject((prev) => {\n return { ...prev, mapping: fieldMappings };\n });\n setActiveStep((prev) => prev + 1);\n };\n\n const handleUpdateFileProperties = (values) => {\n setFileImportMappingObject((prev) => {\n let properties = {};\n Object.keys(values).forEach(\n (propKey) =>\n (properties[propKey] =\n 'value' in values[propKey]\n ? values[propKey]?.value\n : values[propKey])\n );\n return { ...prev, properties: properties };\n });\n if ('includesHeader' in values && values?.includesHeader.value === false) {\n setShowIndexNumbers(true);\n }\n handleFileUpload(values);\n setActiveStep((prev) => prev + 1);\n };\n\n const getUdpFieldOptionLabel = (option) => {\n if (\n !option.dataType.endsWith('?') &&\n !option.isPrimaryKey &&\n !option.udpType\n ) {\n return `${option.name.replace(/([A-Z])/g, ' $1').trim()}*`; //required field\n }\n return `${option.name} - ${option.dataType}`;\n };\n\n const handleAddFileToUpload = (fileObj) => {\n setFileObject(fileObj[0]);\n };\n\n const formattedFileTypeProperties = useMemo(() => {\n if (selectedFileType) {\n return JSON.parse(selectedFileType?.properties);\n }\n }, [selectedFileType]);\n\n return (\n <>\n <AmbientCard fullWidth>\n <div style={{ marginBottom: 20 }}>\n <AmbientStepper\n activeStep={activeStep}\n steps={['File', 'Domain', 'Field Mappings', 'Review']}\n orientation='vertical'\n />\n </div>\n {activeStep === 0 && (\n <>\n <AmbientAutoComplete\n isMultiple={false}\n id={'fileImportType'}\n name={'fileImportType'}\n label='File Type'\n onChange={(val) => setSelectedFileType(val)}\n options={allowedFileTypesData}\n size='small'\n getOptionLabelFunction={getNameOptionLabel}\n value={selectedFileType}\n required\n />\n {selectedFileType && (\n <div style={{ marginTop: 5 }}>\n <DragDropFileUpload\n handleUploadFile={handleAddFileToUpload}\n accept={{\n 'text/csv': ['.csv'],\n 'text/plain': ['.txt'],\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n ['.xlsx'],\n 'application/json': ['.json']\n }}\n />\n </div>\n )}\n <Form onSubmit={handleUpdateFileProperties}>\n {formattedFileTypeProperties?.map((property) =>\n property?.options ? (\n <Field\n component={AmbientAutoComplete}\n isMultiple={false}\n id={property.propertyName}\n name={property.propertyName}\n label={property.label}\n options={property.options}\n size='small'\n getOptionLabelFunction={getNameOptionLabel}\n required={property?.required}\n />\n ) : (\n <Field\n component={AmbientTextField}\n isMultiple={false}\n id={property.propertyName}\n name={property.propertyName}\n label={property.label}\n size='small'\n getOptionLabelFunction={getNameOptionLabel}\n required={property?.required}\n />\n )\n )}\n <FormButtons\n style={{\n display: 'flex',\n float: 'right',\n marginRight: -16\n }}\n >\n <SubmitButton\n variant='contained'\n color='secondary'\n disablePristine={false}\n disabled={!fileObject}\n >\n Next\n </SubmitButton>\n </FormButtons>\n </Form>\n </>\n )}\n {activeStep === 1 && (\n <>\n <AmbientAutoComplete\n isMultiple={false}\n id={'domain'}\n name={'domain'}\n label='Domain'\n onChange={(val) => setSelectedDomain(val)}\n options={filterCatalogObjectList}\n size='small'\n getOptionLabelFunction={getNameFormattedOptionLabel}\n value={selectedDomain}\n required\n />\n <div\n style={{ float: 'right', display: 'flex', gap: 8, marginTop: 8 }}\n >\n <FluentButton\n variant='contained'\n onClick={() => setActiveStep((prev) => prev - 1)}\n disabled={activeStep === 0}\n >\n Prev\n </FluentButton>\n <FluentButton\n variant='contained'\n onClick={() => setActiveStep((prev) => prev + 1)}\n color='secondary'\n disabled={!selectedDomain}\n >\n Next\n </FluentButton>\n </div>\n </>\n )}\n {activeStep === 2 && (\n <>\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingTop: 20\n }}\n >\n <Typography variant='caption'>\n {showIndexNumbers ? \"Column index's\" : 'File Headers'}\n </Typography>\n <Typography variant='caption'>UDP Fields</Typography>\n </div>\n <Divider style={{ margin: '5px 0px' }} />\n <Form\n onSubmit={handleUpdateFieldMapping}\n style={{ marginTop: -20 }}\n >\n {importHeaderData?.map((field, index) => (\n <div style={{ height: 42 }}>\n <div\n style={{ display: 'flex', flexDirection: 'row', gap: 10 }}\n >\n <Typography style={{ marginTop: 25, width: '50%' }}>\n {showIndexNumbers ? 'index ' + index : field}\n </Typography>\n <FluentIcon\n style={{ marginTop: 28, width: '10%' }}\n component={ChromeBackMirroredIcon}\n />\n <Field\n style={{ height: 30 }}\n component={AmbientAutoComplete}\n isMultiple={false}\n id={`udpFieldMapping${index}`}\n name={`udpFieldMapping${index}`}\n options={selectedDomain?.objectFieldInfo}\n size='small'\n getOptionLabelFunction={getUdpFieldOptionLabel}\n />\n </div>\n <Divider style={{ margin: '5px 0px' }} />\n </div>\n ))}\n <div style={{ paddingTop: 20, textAlign: 'right', color: 'red' }}>\n {errorText}\n </div>\n <FormButtons\n style={{\n display: 'flex',\n float: 'right',\n paddingTop: 16,\n marginRight: -16\n }}\n >\n <FluentButton\n variant='contained'\n onClick={() => setActiveStep((prev) => prev - 1)}\n disabled={activeStep === 0}\n >\n Prev\n </FluentButton>\n <SubmitButton\n variant='contained'\n color='secondary'\n disablePristine={false}\n >\n Next\n </SubmitButton>\n </FormButtons>\n </Form>\n </>\n )}\n {activeStep === 3 && (\n <Form onSubmit={handleCreateNewFieldMapping}>\n <Field\n component={AmbientTextField}\n id={`name`}\n name={`name`}\n label='Mapping Name'\n size='small'\n />\n <FormButtons\n style={{\n display: 'flex',\n float: 'right',\n marginRight: -16\n }}\n >\n <FluentButton\n variant='contained'\n onClick={() => setActiveStep((prev) => prev - 1)}\n disabled={activeStep === 0}\n >\n Prev\n </FluentButton>\n <SubmitButton\n variant='contained'\n color='secondary'\n disablePristine={false}\n >\n {'Create Mapping'}\n </SubmitButton>\n </FormButtons>\n </Form>\n )}\n </AmbientCard>\n {fileImportMappingObject?.mapping &&<div style={{ marginTop: 10 }}>\n <FileImportConfigCard\n fileMappingRecord={{\n mapping: fileImportMappingObject?.mapping,\n properties: fileImportMappingObject?.properties\n }}\n domain={selectedDomain?.name.replace(/([A-Z])/g, ' $1').trim()}\n />\n </div>}\n </>\n );\n};\n\nexport default FileImportMappingWizard;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { AmbientAutoComplete } from '../../UI/inputs/textField/AmbientAutoComplete';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { DragDropFileUpload } from '../../uploader/DragDropFileUpload';\nimport FileImportMappingWizard from './FileImportMappingWizard';\nimport { usePromotedMethodEntity } from '../../hooks/usePromotedMethodEntity';\nimport { executeQueryAdHoc } from '../utilities/methodUtils';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { FileImportConfigCard } from './FileImportConfigCard';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nexport const ImportDataFromFileMapping = (props) => {\n const {onImportSuccess, onImportFail, verifyRequiredFields = true} = props\n const user = useUser();\n const [selectedFileMapping, setSelectedFileMapping] = useState();\n const [udpImportMappingData, setUdpImportMappingData] = useState();\n const [newFileMappingSidesheetOpen, setNewFileMappingSidesheetOpen] =\n useState(false);\n const [fileObject, setFileObject] = useState();\n const [isLoading, setIsLoading] = useState(false)\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const { data: udpFileImportMappingEntity } = usePromotedMethodEntity(\n 'UdpFileImportMapping',\n true\n );\n\n const executeImportDataFromFile = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.productV1ApiUrl,\n `${selectedFileMapping?.objectInfoSanitizedName}/fileImportMapping`,\n {\n method: 'post'\n },\n { data }\n ),\n [selectedFileMapping]\n );\n\n const searchFileImportMappingData = useCallback(async () => {\n if (udpFileImportMappingEntity?.unityBaseSearchMethod?.apiMethodId) {\n const res = await executeQueryAdHoc(\n {\n data: {\n eagerLoad: true,\n pageSize: 200,\n filterElements: []\n }\n },\n udpFileImportMappingEntity?.unityBaseSearchMethod?.apiMethodId\n );\n if (res?.data?.pageList.length > 0) {\n setUdpImportMappingData(res?.data?.pageList);\n }\n }\n }, [udpFileImportMappingEntity?.unityBaseSearchMethod?.apiMethodId]);\n\n useEffect(() => {\n searchFileImportMappingData();\n }, [searchFileImportMappingData]);\n\n const handleImportDataFromFile = useCallback(async () => {\n setIsLoading(true)\n const file = fileObject;\n const blob = new Blob([file], { type: file.type });\n const formData = new FormData();\n formData.append('file', blob, file.name);\n formData.append('tenantId', user?.currentTenantId);\n formData.append('name', selectedFileMapping.name);\n formData.append('objectInfoSanitizedName', selectedFileMapping.objectInfoSanitizedName);\n formData.append('fileImportType', selectedFileMapping.fileImportType);\n formData.append('mapping', selectedFileMapping.mapping);\n formData.append('properties', selectedFileMapping.properties);\n formData.append('id', selectedFileMapping.id);\n const response = await executeImportDataFromFile(formData).catch((res) => {\n setIsLoading(false)\n handleErrorSnackbar(res);\n onImportFail()\n });\n if (response?.status === 201) {\n handleSuccessSnackbar('Imported Data');\n setIsLoading(false)\n onImportSuccess && onImportSuccess()\n }\n\n }, [\n fileObject,\n selectedFileMapping,\n executeImportDataFromFile,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n user,\n onImportSuccess,\n onImportFail\n ]);\n\n const getFileMappingOptionlabel = (option) => {\n return `${option.name} (${option?.udpFileImportMappingUdpFileImportType?.extension})`;\n };\n\n const handleAddFileToUpload = (fileObj) => {\n setFileObject(fileObj[0]);\n };\n\n return (\n <>\n <AmbientCard fullWidth>\n <div style={{ display: 'flex' }}>\n <AmbientAutoComplete\n isMultiple={false}\n id={'fileMapping'}\n name={'fileMapping'}\n label='File Mapping'\n onChange={(val) => setSelectedFileMapping(val)}\n options={udpImportMappingData}\n size='small'\n getOptionLabelFunction={getFileMappingOptionlabel}\n value={selectedFileMapping}\n required\n groupBy={(option) =>\n option?.udpFileImportMappingUdpObjectInfo?.sanitizedName\n }\n />\n </div>\n {selectedFileMapping && (\n <DragDropFileUpload\n handleUploadFile={handleAddFileToUpload}\n accept={{\n 'text/csv': ['.csv'],\n 'text/plain': ['.txt'],\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n ['.xlsx'],\n 'application/json': ['.json']\n }}\n />\n )}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n gap: 5,\n float: 'right',\n marginTop: 10\n }}\n >\n <FluentButton\n onClick={() => setNewFileMappingSidesheetOpen(true)}\n variant='outlined'\n >\n Create New Mapping\n </FluentButton>\n <FluentButton\n variant='contained'\n color='secondary'\n onClick={handleImportDataFromFile}\n progress={isLoading}\n disabled={!fileObject}\n >\n Import Data\n </FluentButton>\n </div>\n <SideSheet\n title='Create New File Mapping'\n open={newFileMappingSidesheetOpen}\n onClose={() => setNewFileMappingSidesheetOpen(false)}\n width={'60%'}\n >\n <FileImportMappingWizard\n refetchMappings={searchFileImportMappingData}\n setNewFileMappingSidesheetOpen={setNewFileMappingSidesheetOpen}\n verifyRequiredFields={verifyRequiredFields}\n />\n </SideSheet>\n </AmbientCard>\n <div style={{ marginTop: 10 }}>\n <FileImportConfigCard fileMappingRecord={selectedFileMapping} domain={selectedFileMapping?.udpFileImportMappingUdpObjectInfo?.sanitizedName.replace(/([A-Z])/g, ' $1').trim()}/>\n </div>\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -51,6 +51,6 @@ import "./AggregateChip-EN9-abal.js";
|
|
|
51
51
|
import "./UtilityBarInport-BZbPE650.js";
|
|
52
52
|
import "./UtilitySideBar-otYqGPhu.js";
|
|
53
53
|
import "./BaseTreeMenu-DHEMztjA.js";
|
|
54
|
-
import { MenuPage_default } from "./MenuPage-
|
|
54
|
+
import { MenuPage_default } from "./MenuPage-ubGSLrRu.js";
|
|
55
55
|
|
|
56
56
|
export { MenuPage_default as default };
|
|
@@ -68,7 +68,7 @@ const MenuPage = (props) => {
|
|
|
68
68
|
const user = useUser();
|
|
69
69
|
const { t } = useTranslation();
|
|
70
70
|
const setLocationState = useSetLocationState();
|
|
71
|
-
const { innerMenuOverride, mainContent } = props;
|
|
71
|
+
const { innerMenuOverride, mainContent, menuTitle } = props;
|
|
72
72
|
const [menuItemsList, setMenuItemsList] = useState([]);
|
|
73
73
|
const [selectedNode, setSelectedNode] = useState(null);
|
|
74
74
|
const [sidebarExpanded, setSidebarExpanded] = useState(true);
|
|
@@ -176,7 +176,7 @@ const MenuPage = (props) => {
|
|
|
176
176
|
when: hasUnsavedChanges,
|
|
177
177
|
message: "You have unsaved changes. Are you sure you want to leave this page?"
|
|
178
178
|
}), /* @__PURE__ */ React.createElement("div", { className: classes.root }, /* @__PURE__ */ React.createElement("div", { className: classes.sidebar }, /* @__PURE__ */ React.createElement(UtilitySideBar, {
|
|
179
|
-
title: innerMenu?.name,
|
|
179
|
+
title: innerMenu?.name || menuTitle,
|
|
180
180
|
isUsingChildren: true,
|
|
181
181
|
resizable: true,
|
|
182
182
|
removePadding: true,
|
|
@@ -224,4 +224,4 @@ var MenuPage_default = MenuPage;
|
|
|
224
224
|
|
|
225
225
|
//#endregion
|
|
226
226
|
export { MenuPage_default };
|
|
227
|
-
//# sourceMappingURL=MenuPage-
|
|
227
|
+
//# sourceMappingURL=MenuPage-ubGSLrRu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuPage-ubGSLrRu.js","names":[],"sources":["../src/menuPage/MenuPage.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useHistory, useLocation, Prompt } from 'react-router-dom';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { transformMenuPageTree } from '../utilities/tree/TreeUtilities';\nimport { BaseTreeMenu } from '../treeMenu/BaseTreeMenu';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useUser } from '../utilities/auth/useUser';\nimport { useShellStore } from '../stores/shellStore';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/EnvironmentRibbon';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flex: 1,\n minHeight: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n display: 'grid',\n gridTemplateAreas: ['sidebar content'].map((line) => `\"${line}\"`).join(' '),\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto 1fr'\n },\n sidebar: {\n gridArea: 'sidebar',\n marginRight: theme.spacing(1)\n },\n content: {\n gridArea: 'content',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 1,\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n overflowY: 'auto'\n },\n menuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 116}px)`,\n overflowX: 'hidden'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n }\n}));\n\nconst MenuPage = (props) => {\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const history = useHistory();\n const location = useLocation();\n const user = useUser();\n const { t } = useTranslation();\n const setLocationState = useSetLocationState();\n // Allow callers to provide an innerMenu directly (CustomMenuPage wrapper)\n const { innerMenuOverride, mainContent, menuTitle } = props;\n\n const [menuItemsList, setMenuItemsList] = useState([]); // holds a list of trees\n const [selectedNode, setSelectedNode] = useState(null);\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n // Just the menuInstanceId for an inner menu\n const innerMenuId = location.pathname.replace('/menupage/', '');\n\n const prevInnerMenuId = useRef(innerMenuId);\n\n const [{ data: fetchedInnerMenu, loading: menuLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus/${innerMenuId}`,\n {},\n !innerMenuId,\n false\n );\n\n const innerMenu = innerMenuOverride ?? fetchedInnerMenu;\n\n const { setSubHeaderActionHasChildren, setNavigationExpanded } =\n useShellStore();\n\n const [{ data: pageData, loading: pageLoading, error: pageError }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedNode?.properties?.page?.id}`,\n {},\n !selectedNode?.properties?.page?.id,\n false\n );\n\n const handleSelectedNode = useCallback(\n (node, menuIndex) => {\n const searchParams = new URLSearchParams(location.search);\n searchParams.set('page', node.id);\n\n history.push({\n pathname: location.pathname,\n search: searchParams.toString()\n });\n setSelectedNode(node);\n setHasUnsavedChanges(false);\n },\n [history, location]\n );\n\n const handleDropNode = useCallback(\n (sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {\n // TODO: Implement if we need to for next Phase\n },\n []\n );\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n const findNodeById = useCallback((node, id) => {\n if (!node) return null;\n if (node.id.toString() === id) return node;\n if (node.children) {\n for (const child of node.children) {\n const found = findNodeById(child, id);\n if (found) return found;\n }\n }\n return null;\n }, []);\n\n useEffect(() => {\n const searchParams = new URLSearchParams(location.search);\n const pageId = searchParams.get('page');\n if (pageId && menuItemsList.length > 0) {\n // Search all root menu trees for the node\n let node = null;\n for (const tree of menuItemsList) {\n node = findNodeById(tree, pageId);\n if (node) break;\n }\n if (node && node.id !== selectedNode?.id) {\n setSelectedNode(node);\n setHasUnsavedChanges(false);\n }\n }\n }, [location.search, menuItemsList, findNodeById, selectedNode]);\n\n useEffect(() => {\n const mainPageIdChanged = prevInnerMenuId.current !== innerMenuId;\n\n if (innerMenu) {\n const list = [];\n innerMenu.menuItemInstanceStructureViews.forEach((menuInstance) => {\n const updatedMenu = transformMenuPageTree(menuInstance);\n if (updatedMenu) {\n list.push(updatedMenu);\n }\n });\n setMenuItemsList(list);\n\n // Find the node matching the current page param\n const searchParams = new URLSearchParams(location.search);\n const pageId = searchParams.get('page');\n let nodeToSelect = null;\n\n if (pageId && list.length > 0) {\n // Try to find the node with this id\n for (const tree of list) {\n nodeToSelect = findNodeById(tree, pageId);\n if (nodeToSelect) break;\n }\n }\n\n // If we found a node, select it. If not, select the first node.\n if (nodeToSelect) {\n setSelectedNode(nodeToSelect);\n setHasUnsavedChanges(false);\n setNavigationExpanded(false);\n } else if (list.length > 0) {\n // No valid page param, select first node and update URL\n const firstNode = list[0];\n searchParams.set('page', firstNode.id);\n history.replace({\n pathname: location.pathname,\n search: searchParams.toString()\n });\n setSelectedNode(firstNode);\n setHasUnsavedChanges(false);\n setNavigationExpanded(false);\n }\n }\n prevInnerMenuId.current = innerMenuId;\n }, [\n innerMenu,\n setNavigationExpanded,\n history,\n location,\n innerMenuId,\n findNodeById\n ]);\n\n useEffect(() => {\n setSubHeaderActionHasChildren(false);\n }, [setSubHeaderActionHasChildren]);\n\n // Setting location state label so that if this page was saved to favorites\n // we can determine the bread crumb\n useEffect(() => {\n if (innerMenu) {\n setLocationState({ label: t(innerMenu?.name) });\n }\n }, [setLocationState, t, innerMenu]);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <Prompt\n when={hasUnsavedChanges}\n message='You have unsaved changes. Are you sure you want to leave this page?'\n />\n <div className={classes.root}>\n <div className={classes.sidebar}>\n <UtilitySideBar\n title={innerMenu?.name || menuTitle}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={64}\n >\n <div className={classes.menuContent} key={innerMenuId}>\n {menuItemsList?.length > 0 &&\n !menuLoading &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <BaseTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedNode?.id}\n selectedNodeParentId={selectedNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {menuLoading && (\n <div className={classes.loader}>\n <NodeLoader loading={menuLoading} />\n </div>\n )}\n </div>\n </UtilitySideBar>\n </div>\n <div className={classes.content}>\n {mainContent ? (\n typeof mainContent === 'function'\n ? mainContent({ selectedNode, menuItemsList })\n : mainContent\n ) : (\n selectedNode?.properties?.page?.id && (\n <PageContainer\n user={user}\n key={selectedNode?.id}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={{\n pageId: pageData?.pageId,\n entityName: selectedNode?.properties?.page?.entity?.entityName,\n pbiReportCode: selectedNode?.properties?.page?.pbiReportCode,\n requiredFieldsMap:\n selectedNode?.properties?.page?.requiredFieldMapping,\n udpTagId: selectedNode?.properties?.page?.udpTagId,\n queryId: selectedNode?.properties?.page?.queryId,\n inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId,\n setHasUnsavedChanges: setHasUnsavedChanges\n }}\n disableMargins={true}\n fromMenu={true}\n />\n )\n )}\n </div>\n </div>\n </DndProvider>\n );\n};\n\nexport default MenuPage;\n"],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ const PrivateRoute = ({ ...otherProps }) => {
|
|
|
49
49
|
//#endregion
|
|
50
50
|
//#region src/routes/UdpRoutes.jsx
|
|
51
51
|
const VirtualBrowser = lazy(() => import("./VirtualBrowser-B66Iyn4h.js"));
|
|
52
|
-
const MenuPage = lazy(() => import("./MenuPage-
|
|
52
|
+
const MenuPage = lazy(() => import("./MenuPage-DVVjB9dx.js"));
|
|
53
53
|
const UdpPublicForm = lazy(() => import("./UdpPublicForm-DnPkG5dr.js"));
|
|
54
54
|
const WorkflowContainer = lazy(() => import("./WorkflowContainer-D0Od__D5.js"));
|
|
55
55
|
const PasswordResetRedirect = lazy(() => import("./PasswordResetRedirect-BMDMHdhE.js"));
|
|
@@ -107,4 +107,4 @@ const UdpRoutes = (props) => {
|
|
|
107
107
|
|
|
108
108
|
//#endregion
|
|
109
109
|
export { PrivateRoute, UdpRoutes };
|
|
110
|
-
//# sourceMappingURL=UdpRoutes-
|
|
110
|
+
//# sourceMappingURL=UdpRoutes-KQam73g2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpRoutes-
|
|
1
|
+
{"version":3,"file":"UdpRoutes-KQam73g2.js","names":["Switch","props"],"sources":["../src/routes/components/PageForbiddenRoute.jsx","../src/routes/PrivateRoute.jsx","../src/routes/UdpRoutes.jsx"],"sourcesContent":["import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { PageStatus } from './PageStatus';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(4)\n }\n}));\n\nexport const PageForbiddenRoute = (props) => {\n const { title, statusCode, subheader, message, showButton } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <div className={classes.root}>\n <PageStatus\n title={title ?? t('Page Forbidden')}\n statusCode={statusCode ?? '403'}\n subheader={\n subheader ?? t('Sorry, you do not have permission to view this page.')\n }\n message={message ?? t('Please contact an administrator to get access.')}\n to='/'\n buttonLabel={t('Back to Home Page')}\n showButton={showButton}\n />\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { useIsUnityAuthenticated } from '../utilities/auth/useIsUnityAuthenticated';\nimport { useUser } from '../utilities/auth/useUser';\nimport { PageForbiddenRoute } from './components/PageForbiddenRoute';\n\nexport const PrivateRoute = ({ ...otherProps }) => {\n const isAuthenticated = useIsUnityAuthenticated();\n const user = useUser();\n const { t } = useTranslation();\n \n const userHasAccessToTenant = useMemo(() => {\n if (user?.tenantIds?.includes(user.currentTenantId)) {\n return true;\n }\n return false;\n }, [user]);\n\n if (!userHasAccessToTenant && isAuthenticated && user?.statusCode === 200) {\n return (\n <Route\n path='*'\n render={(props) => (\n <PageForbiddenRoute\n message={t('You do not have access to this tenant. Please select a different Tenant.')}\n showButton={false}\n />\n )}\n />\n );\n }\n\n if (isAuthenticated && user?.statusCode === 200) {\n return <Route {...otherProps} />;\n }\n\n return null;\n};\n","import React, { Suspense, lazy } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { PrivateRoute } from './PrivateRoute';\nimport { UdpPageEnums } from '../enums/pageEnums';\nimport { ConfigService } from 'udp-react-stencil-component-library';\nimport { PageLoading } from '../UI/feedback/PageLoading';\n\n// Lazy load route components\nconst VirtualBrowser = lazy(() =>\n import('../maintenanceEngine/virtualBrowser/VirtualBrowser')\n);\nconst MenuPage = lazy(() => import('../menuPage/MenuPage'));\nconst UdpPublicForm = lazy(() => import('../udp/pages/UdpPublicForm'));\nconst WorkflowContainer = lazy(() => import('../workflow/WorkflowContainer'));\nconst PasswordResetRedirect = lazy(() =>\n import('./components/PasswordResetRedirect')\n);\nconst MyExportsPage = lazy(() => import('../udp/export/MyExportsPage'));\nconst PageNotFoundRoute = lazy(() => import('./components/PageNotFoundRoute'));\nconst UdpMaintenanceConfigPage = lazy(() =>\n import('../udp/pages/UdpMaintenanceConfigPage')\n);\nconst UdpMaintenanceEnginePage = lazy(() =>\n import('../udp/pages/UdpMaintenanceEnginePage')\n);\n\nexport const UdpRoutes = (props) => {\n const { ...other } = props;\n return (\n <Suspense fallback={<PageLoading />}>\n <Switch>\n <PrivateRoute\n path='/virtual/:id'\n render={(props) => <VirtualBrowser {...props} {...other} />}\n />\n <PrivateRoute\n path='/menupage/:id'\n render={(props) => <MenuPage {...props} {...other} />}\n />\n\n <Route\n path={`/page/${UdpPageEnums.Udp_Public_Forms_Page}`}\n render={(props) => <UdpPublicForm {...props} {...other} />}\n />\n <Route\n path={`/passwordresetsuccess`}\n render={(props) => <PasswordResetRedirect props={props} />}\n />\n <PrivateRoute\n path='/workflowtask/:id'\n render={(props) => <WorkflowContainer {...props} {...other} />}\n />\n <PrivateRoute\n path='/myexports'\n render={(props) => (\n <MyExportsPage\n productId={ConfigService.config.UNITY_PRODUCT_ID}\n {...props}\n {...other}\n />\n )}\n />\n <PrivateRoute\n path='/crudbrowser'\n render={(props) => <UdpMaintenanceEnginePage {...props} />}\n />\n <PrivateRoute\n path='/tablebrowser'\n render={(props) => <UdpMaintenanceConfigPage {...props} />}\n />\n <PrivateRoute path='*' component={PageNotFoundRoute} />\n </Switch>\n </Suspense>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAKA,MAAM,YAAY,YAAY,WAAW,EACvC,MAAM,EACJ,WAAW,MAAM,QAAQ,EAAE,EAC5B,EACF,EAAE;AAEH,MAAa,sBAAsB,UAAU;CAC3C,MAAM,EAAE,OAAO,YAAY,WAAW,SAAS,eAAe;CAC9D,MAAM,UAAU,WAAW;CAC3B,MAAM,EAAE,MAAM,gBAAgB;AAE9B,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC;EACC,OAAO,SAAS,EAAE,iBAAiB;EACnC,YAAY,cAAc;EAC1B,WACE,aAAa,EAAE,uDAAuD;EAExE,SAAS,WAAW,EAAE,iDAAiD;EACvE,IAAG;EACH,aAAa,EAAE,oBAAoB;EACvB;GACZ,CACE;;;;;ACtBV,MAAa,gBAAgB,EAAE,GAAG,iBAAiB;CACjD,MAAM,kBAAkB,yBAAyB;CACjD,MAAM,OAAO,SAAS;CACtB,MAAM,EAAE,MAAM,gBAAgB;AAS9B,KAAI,CAP0B,cAAc;AAC1C,MAAI,MAAM,WAAW,SAAS,KAAK,gBAAgB,CACjD,QAAO;AAET,SAAO;IACN,CAAC,KAAK,CAAC,IAEoB,mBAAmB,MAAM,eAAe,IACpE,QACE,oCAAC;EACC,MAAK;EACL,SAAS,UACP,oCAAC;GACC,SAAS,EAAE,2EAA2E;GACtF,YAAY;IACZ;GAEJ;AAIN,KAAI,mBAAmB,MAAM,eAAe,IAC1C,QAAO,oCAAC,OAAU,WAAc;AAGlC,QAAO;;;;;AC7BT,MAAM,iBAAiB,WACrB,OAAO,gCACR;AACD,MAAM,WAAW,WAAW,OAAO,0BAAwB;AAC3D,MAAM,gBAAgB,WAAW,OAAO,+BAA8B;AACtE,MAAM,oBAAoB,WAAW,OAAO,mCAAiC;AAC7E,MAAM,wBAAwB,WAC5B,OAAO,uCACR;AACD,MAAM,gBAAgB,WAAW,OAAO,+BAA+B;AACvE,MAAM,oBAAoB,WAAW,OAAO,mCAAkC;AAC9E,MAAM,2BAA2B,WAC/B,OAAO,0CACR;AACD,MAAM,2BAA2B,WAC/B,OAAO,0CACR;AAED,MAAa,aAAa,UAAU;CAClC,MAAM,EAAE,GAAG,UAAU;AACrB,QACE,oCAAC,YAAS,UAAU,oCAAC,kBAAc,IACjC,oCAACA,gBACC,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAe,GAAIC;GAAO,GAAI;IAAS;GAC3D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAS,GAAIA;GAAO,GAAI;IAAS;GACrD,EAEF,oCAAC;EACC,MAAM,SAAS,aAAa;EAC5B,SAAS,YAAU,oCAAC;GAAc,GAAIA;GAAO,GAAI;IAAS;GAC1D,EACF,oCAAC;EACC,MAAM;EACN,SAAS,YAAU,oCAAC,yBAAsB,OAAOA,UAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAkB,GAAIA;GAAO,GAAI;IAAS;GAC9D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YACP,oCAAC;GACC,WAAW,cAAc,OAAO;GAChC,GAAIA;GACJ,GAAI;IACJ;GAEJ,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EACF,oCAAC;EAAa,MAAK;EAAI,WAAW;GAAqB,CAChD,CACA"}
|
package/dist/index.js
CHANGED
|
@@ -196,7 +196,7 @@ import { PageContent, PageHeader, PageSectionHeader, PageSectionSpacer } from ".
|
|
|
196
196
|
import { useIsUnityAuthenticated } from "./useIsUnityAuthenticated-n3QuDnIj.js";
|
|
197
197
|
import { PowerBIReport } from "./PowerBIReport-Bt0Fjlyw.js";
|
|
198
198
|
import { PageStatus } from "./PageStatus-CjupI8az.js";
|
|
199
|
-
import { PrivateRoute, UdpRoutes } from "./UdpRoutes-
|
|
199
|
+
import { PrivateRoute, UdpRoutes } from "./UdpRoutes-KQam73g2.js";
|
|
200
200
|
import { PageLoading } from "./PageLoading-DCoyVjWf.js";
|
|
201
201
|
import { AmbientProjectSwitcher, FluentProfileMenuCard, ShellDropdown } from "./FluentProfileMenuCard-FKdOEzYd.js";
|
|
202
202
|
import "./redirectToLink-B4Y9oH1K.js";
|
|
@@ -228,7 +228,7 @@ import "./tagEnums-BD6xUu3X.js";
|
|
|
228
228
|
import { CrudForm, UdpCrudFormFields } from "./CrudForm-DIlveZRg.js";
|
|
229
229
|
import "./CrudTableSidePanel-1A8qrCCX.js";
|
|
230
230
|
import { UdpMaintenanceEnginePage } from "./UdpMaintenanceEnginePage-DAioIeSf.js";
|
|
231
|
-
import { DonutChartWidget_exports, FluentPrimaryStatNumber_default, FluentSecondaryStatNumber_default, FluentStatNumber_default, FluentStatsSnippet_default, ProgressBarWidget_exports, RecentlyLoadedNodesWidget_exports, RemindersWidget_exports, SparklineWidget_exports, UdpPages, convertISODate } from "./udpPages-
|
|
231
|
+
import { DonutChartWidget_exports, FluentPrimaryStatNumber_default, FluentSecondaryStatNumber_default, FluentStatNumber_default, FluentStatsSnippet_default, ProgressBarWidget_exports, RecentlyLoadedNodesWidget_exports, RemindersWidget_exports, SparklineWidget_exports, UdpPages, convertISODate } from "./udpPages-P-7udUnT.js";
|
|
232
232
|
import { FluentCheckbox } from "./FluentCheckbox-DdPx94AF.js";
|
|
233
233
|
import "./FluentIconKey-DdoCGnzt.js";
|
|
234
234
|
import "./IconLibrary-DIc1kbJA.js";
|
|
@@ -238,7 +238,7 @@ import "./DataBrowserContainer-Bd2FU4Y4.js";
|
|
|
238
238
|
import "./RemindersCard-BrjYmZVz.js";
|
|
239
239
|
import { UdpPublicForm } from "./UdpPublicForm-C0SHN_iy.js";
|
|
240
240
|
import { AmbientAutoComplete } from "./AmbientAutoComplete-BmBgMVpv.js";
|
|
241
|
-
import { AmbientStepper, ImportDataFromFileMapping } from "./ImportDataFromFileMapping-
|
|
241
|
+
import { AmbientStepper, ImportDataFromFileMapping } from "./ImportDataFromFileMapping-b_i26ucy.js";
|
|
242
242
|
import { Divider } from "./Divider-BU1-Ll14.js";
|
|
243
243
|
import { CompactDataListItem } from "./CompactDataListItem-DMGFdFDP.js";
|
|
244
244
|
import { AlertContainer } from "./AlertContainer-nZR1BsF6.js";
|
|
@@ -332,7 +332,7 @@ import { UdpMap } from "./UdpMap-5NE3rUIS.js";
|
|
|
332
332
|
import { MyExportsPage, StatusCellRenderer } from "./MyExportsPage-Cq2MRoRf.js";
|
|
333
333
|
import { InputsExample } from "./InputsExample-BPDEWFXK.js";
|
|
334
334
|
import "./BaseTreeMenu-DHEMztjA.js";
|
|
335
|
-
import { MenuPage_default } from "./MenuPage-
|
|
335
|
+
import { MenuPage_default } from "./MenuPage-ubGSLrRu.js";
|
|
336
336
|
import * as React$1 from "react";
|
|
337
337
|
import React, { Fragment, forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
338
338
|
import { Avatar, Badge, Box as Box$1, Card, CardContent, Chip, Divider as Divider$1, FormControl as FormControl$1, FormControlLabel as FormControlLabel$1, FormGroup, Grid as Grid$1, Grow, IconButton, InputAdornment as InputAdornment$1, InputLabel, LinearProgress as LinearProgress$1, ListItemIcon, Menu, MenuItem, Select, Tab, Tabs, Tooltip, Typography as Typography$1, colors as colors$1, darken, lighten, makeStyles, styled, useTheme } from "@material-ui/core";
|
|
@@ -4098,7 +4098,7 @@ const InsightRenderer = (props) => {
|
|
|
4098
4098
|
//#region src/menuPage/CustomMenuPage.jsx
|
|
4099
4099
|
const useStyles$1 = makeStyles((theme) => ({ root: {
|
|
4100
4100
|
flexGrow: 1,
|
|
4101
|
-
padding: theme.spacing(
|
|
4101
|
+
padding: theme.spacing(1)
|
|
4102
4102
|
} }));
|
|
4103
4103
|
function buildInnerMenuFromItems(items = [], menuTitle, idPrefix = "custom", showItemCount = false, itemCountAccessor = null) {
|
|
4104
4104
|
const idMap = {};
|
|
@@ -4152,7 +4152,7 @@ function buildInnerMenuFromItems(items = [], menuTitle, idPrefix = "custom", sho
|
|
|
4152
4152
|
const CustomMenuPage = ({ items = [], className = "", menuTitle, mainContent: clientMainContent, idPrefix = "custom", showItemCount = false, itemCountAccessor = null }) => {
|
|
4153
4153
|
const classes = useStyles$1();
|
|
4154
4154
|
const { innerMenu, idMap } = buildInnerMenuFromItems(items, menuTitle, idPrefix, showItemCount, itemCountAccessor);
|
|
4155
|
-
const
|
|
4155
|
+
const clientContent = clientMainContent ? ({ selectedNode, menuItemsList }) => clientMainContent({
|
|
4156
4156
|
selectedNode,
|
|
4157
4157
|
menuItemsList,
|
|
4158
4158
|
idMap,
|
|
@@ -4160,9 +4160,13 @@ const CustomMenuPage = ({ items = [], className = "", menuTitle, mainContent: cl
|
|
|
4160
4160
|
classes,
|
|
4161
4161
|
className
|
|
4162
4162
|
}) : ({ selectedNode, menuItemsList }) => /* @__PURE__ */ React.createElement("div", { className: `${classes.root} ${className}` });
|
|
4163
|
+
const composedMainContent = ({ selectedNode, menuItemsList }) => /* @__PURE__ */ React.createElement("div", { className: `${classes.root} ${className}` }, clientContent({
|
|
4164
|
+
selectedNode,
|
|
4165
|
+
menuItemsList
|
|
4166
|
+
}));
|
|
4163
4167
|
return /* @__PURE__ */ React.createElement(MenuPage_default, {
|
|
4164
4168
|
innerMenuOverride: innerMenu,
|
|
4165
|
-
mainContent
|
|
4169
|
+
mainContent: composedMainContent
|
|
4166
4170
|
});
|
|
4167
4171
|
};
|
|
4168
4172
|
CustomMenuPage.propTypes = {
|