{"version":3,"sources":["components/shared/tooltip.js","components/shared/action-button.js","components/shared/snack-bar.js","utils/http-client.js","utils/language-helper.js","services/template-service.js","components/shared/operation-progress.js","components/upload-configuration/upload-configuration.js","components/upload-configuration/index.js","components/shared/text-primary.js","components/filter/filter.js","components/filter/index.js","components/shared/text-sub-header.js","components/shared/dialog-box.js","components/home-alert/home-alert.js","components/home-alert/index.js","components/language/language.js","components/language/index.js","components/header/header.js","images/logo.png","images/logo@2x.png","images/logo@3x.png","components/header/index.js","components/side-bar/side-bar.js","components/side-bar/index.js","components/main/main.js","components/main/index.js","components/shared/progress.js","components/layout/layout.js","components/layout/index.js","utils/local-storage.js","components/open-template-dialog/open-template-dialog.js","components/open-template-dialog/index.js","components/template-selection-grid/template-selection-grid.js","components/template-selection-grid/index.js","components/shared/radio.js","components/shared/text-secondary.js","components/filter-radio/index.js","components/filter-radio/filter-radio.js","components/shared/checkbox.js","components/filter-checkbox/index.js","components/filter-checkbox/filter-checkbox.js","components/filter-bar/filter-bar.js","components/filter-bar/index.js","components/template-selection/template-selection.js","components/template-selection/index.js","utils/page-item-generator.js","components/parameter-editor/parameter-editor.js","components/parameter-editor/index.js","components/parameter/parameter.js","components/parameter/index.js","components/block-item/block-item.js","components/block-item/index.js","components/page-item-preview/page-item-preview.js","components/page-item-preview/index.js","components/shared/input-number.js","hooks/key-press.js","components/page/page.js","components/page/index.js","components/header-control/header-control.js","components/header-control/index.js","components/footer-control/index.js","components/footer-control/footer-control.js","components/shared/text-secondary-button.js","components/shared/secondary-button.js","components/reset/reset.js","components/reset/index.js","components/section-item-control/section-item-control.js","components/section-item-control/index.js","components/section-list-control/section-list-control.js","components/section-list-control/index.js","components/page-item-control/page-item-control.js","components/page-item-control/index.js","components/view-mode-control/view-mode-control.js","components/view-mode-control/index.js","components/template-list-control/template-list-control.js","components/template-list-control/index.js","components/download-configuration/download-configuration.js","components/download-configuration/index.js","components/error-page/error-page.js","components/error-page/index.js","components/choose-style/choose-style.js","components/choose-style/index.js","components/template/template.js","components/template/index.js","components/template-selection-private/index.js","components/template-selection-private/template-selection-private.js","components/app/app.js","components/app/index.js","components/error-boundary/error-boundary.js","components/error-boundary/index.js","index.js"],"names":["useStyles","makeStyles","theme","tooltip","wordBreak","CustomTooltip","props","classes","Tooltip","button","width","height","padding","borderRadius","boxShadow","backgroundColor","buttonText","fontFamily","fontSize","fontWeight","fontStretch","fontStyle","lineHeight","letterSpacing","textAlign","color","ActionButton","children","onClick","disabled","Button","variant","className","title","placement","Typography","noWrap","defaultProps","snackBar","top","CustomSnackBar","open","setOpen","message","horizontal","Snackbar","anchorOrigin","vertical","autoHideDuration","onClose","HttpClient","url","fetch","response","body","headers","requestOptions","method","LanguageHelper","this","languages","map","l","code","shortCode","find","navLang","getLangCode","navigator","language","isSupportedLanguage","defaultLanguage","sort","a","b","name","queryParams","queryLng","URLSearchParams","get","undefined","cookies","getDefaultLng","lngCode","getSupportedLngs","queryStr","has","delete","toString","i18n","use","initReactI18next","LanguageDetector","HttpApi","init","fallbackLng","supportedLngs","detection","order","caches","backend","loadPath","react","useSuspense","getTranslation","key","Translation","t","getTranslationString","getTranslationStringN","TemplateService","isPublic","lang","ok","Error","json","templateId","status","console","log","uploadconfigId","file","formData","FormData","append","post","config","JSON","stringify","content","position","left","OperationProgress","CircularProgress","fileInput","display","UploadConfiguration","history","useHistory","useTranslation","setDisableTemplateSelection","useState","openWarning","setOpenWarning","setDisable","loading","setLoading","warningMessage","setWarningMessage","useEffect","setDisableAction","document","getElementById","value","click","Input","id","type","inputProps","accept","onChange","event","selectedFile","target","files","split","pop","uploadFile","then","result","push","uploadInfo","templateName","catch","e","withStyles","root","summary","details","accordion","Filter","panel","React","expanded","setExpanded","Accordion","elevation","newExpanded","AccordionSummary","expandIcon","AccordionDetails","PaperComponent","handle","cancel","Paper","DialogBox","handleClose","handleApply","handleCancel","cancelText","applyText","apply","Dialog","DialogTitle","style","cursor","DialogContent","DialogActions","HomeAlert","languageBtn","languageList","marginTop","spacing","langBox","langCode","alignItems","textTransform","Language","getLanguages","currentLanguage","getCurrentLanguageAsync","anchorEl","setAnchorEl","Box","IconButton","currentTarget","Menu","keepMounted","Boolean","MenuItem","i18next","changeLanguage","replace","search","getQueryParamsWithoutLang","location","go","handleChange","selected","appBar","zIndex","drawer","toolBar","minWidth","boxLogo","header","justifyContent","headerText","margin","logo","objectFit","headerTitle","maxWidth","Header","useHomeAlert","AppBar","Toolbar","src","alt","srcSet","component","drawerPaper","flexDirection","paddingTop","uploadStickPanel","drawerWidth","drawerContainer","overflow","SideBar","actions","Drawer","paper","flexGrow","Main","test","Progress","contentLoader","createTheme","palette","secondary","main","typography","body1","textOverflow","whiteSpace","Layout","getLoader","sideBar","useLoader","CssBaseline","LocalStorage","state","updatedObj","deleteOldItem","level","newState","templateInfo","Date","now","removeOldestItem","localForage","setItem","setTemplateItem","filters","filterKey","getItem","getOldestItemKey","item","removeItem","minDate","iterate","i","keys","obj","templateIds","filter","k","OpenTemplateDialog","defaultTemplateAction","restoreTemplateAction","templateCard","marginBottom","opacity","templatePreview","border","landscapePreview","preview","thumbnailImg","TemplateSelectionGrid","setTemplateId","setTemplateName","templates","disabledTemplateSelection","openTemplateDialog","isTemplateExist","openTemplateById","openDefaultTemplate","openTemplate","Container","Grid","container","template","classPreview","orientation","description","thumbnailPath","checked","Radio","FilterRadio","items","FormControl","RadioGroup","FormControlLabel","control","label","Checkbox","FilterCheckbox","isChecked","selectedItems","FormGroup","getItems","heading","FilterBar","TemplateSelection","handleMachineTypeFilter","setState","selectedMachineType","setFiltersToLocalStorage","handleVersionFilter","selectedVersion","handleOrientationFilter","newSelectedOrientation","selectedOrientation","length","contentProgress","renderFilter","machineTypes","solidCamVersion","solidCamVersions","orientations","filterContent","renderWithLayout","controls","restoreButton","renderLoading","getFilteredTemplates","machineType","isSelectedOrientation","getDefaultMachineType","storageType","m","getDefaultSolidCamVersions","versions","storageVersion","maxVersionId","maxVersion","forEach","version","getDefaultOrientations","storageOrientations","st","selectedTemplate","getAllTemplates","orientationType","propName","getFiltersObj","setFilters","getFilters","storageFilters","currentLanguageCode","deleteNonExistingTemplate","getAllFilters","getStorageFilters","deleteNonExistingTemplates","Component","displayName","PageItemGenerator","pageSize","pages","nodes","blocksSize","currentPageSize","currentPage","addedHeader","pageItemList","getPageItemList","page","startWithPageBreak","section","forcePageBreak","blocks","block","getBlockHeight","headerBlock","footer","repeatOnEachPage","splice","enabled","p","blockId","sectionsMap","sections","s","sectionModel","selectedStyle","headerBlockId","footerBlockId","usePageBreak","sectionId","n","formControl","marginLeft","getParameterType","selectedItem","isUserDefined","ParameterEditor","parameter","handleChangeParameterItem","selectedItemId","getSelectedItem","predefinedSelected","getDefaultPredefinedItem","userDefItem","getUserDefinedItem","paramType","setParamType","setSelected","userValue","setUserValue","newSelectedItemId","handleTypeChange","Number","getDialogContent","parameterItems","size","Select","inputStyle","labelId","TextField","placeholder","getSelectedBoxShadow","Parameter","attributes","getReactElement","editStyle","boxSizing","BlockItem","parameterId","userDefValue","node","sectionTypeId","renderElements","parameters","parameterMode","getParameter","getSelectedItemValue","childNodes","child","cloneDeep","attributesMap","getStyleObjectFromString","isParameter","createElement","paramId","param","parameterBlock","isUserDef","blockitem","excelFormula","values","v","sectionLinks","useSectionId","contents","formatStringToCamelCase","str","splitted","slice","word","toUpperCase","join","el","property","formattedProperty","trim","paperHeader","alignSelf","pageItem","PageItemPreview","pageNumber","pageCount","settings","right","bottom","getWithUnitsWrap","units","paperHeaderStyle","paperStyle","paddingRight","paddingBottom","paddingLeft","pageItemStyle","minHeight","sectionParams","InputNumber","maxValue","currentValue","setCurrentValue","inputWidth","setInputWidth","newValue","useKeyPress","targetKey","keyPressed","setKeyPressed","downHandler","upHandler","window","addEventListener","removeEventListener","homeBtn","wrapper","zoomPanel","paginationPanel","zoomContent","gap","zoomBox","multiplePages","homeBtnBox","Page","paginationDisabled","fullHeight","fullWidth","openHome","setOpenHome","mainPageWidth","setMainPageWidth","mainPageHeight","setMainPageHeight","setPageCount","setCurrentPage","multipleMode","setMultipleMode","paginationMode","setPaginationMode","scale","setScale","countPerPage","setCountPerPage","leftPress","rightPress","zoomStep","ref","useRef","homeButtonRef","pageWidth","current","clientWidth","pageHeight","clientHeight","forward","back","recalculateCountPerPage","openHomePage","posibleCount","getPosiblePageCount","Math","floor","getWrapperWidth","disablePaginationMode","getScale","getPageCount","ceil","getWrapperStyle","MozUserSelect","WebkitUserSelect","msUserSelect","KhtmlUserSelect","WebkitTouchCallout","userSelect","count","getWrapperHeightMultiplePages","getWrapperWidthMultiplePages","zoomInScale","zoomOutScale","onZoomStop","ReactZoomPanPinchRef","calcScale","setTransform","customZoom","calcScaleFunc","zoomFunc","handleMultipleMode","renderSinglePages","number","renderMultiplePages","multipleContent","row","getActiveBtnStyle","isActive","getPaginationPanel","getZoomPanel","handlers","zoomIn","zoomOut","resetTransform","reset","mode","zoomScale","zoomToFit","showHomeButton","startIcon","onWheel","deltaY","renderPage","minScale","maxScale","initialPositionX","initialPositionY","pinch","panning","activationKeys","doubleClick","wheel","wheelDisabled","step","centerZoomedOut","Fragment","wrapperStyle","contentStyle","HeaderControl","handleRepeatHeader","handleHeaderEnable","FooterControl","handleFooterEnable","textDecoration","SecondaryButton","Reset","handleSectionReset","headerSectionBox","headerSection","resetBtn","sectionBox","selectLabel","chooseStyle","sectionTitle","stylesBtnBox","stylesBtnIcon","styleBox","styleList","sectionBtn","showBtn","SectionItemControl","handleSectionEnable","handleSectionForcePageBreak","styles","getStyles","stopPropagation","onFocus","to","InputLabel","handleChangeStyle","handleChooseStyle","SectionListControl","handleSectionPageBreak","flexWrap","pageTitle","summaryContent","PageItemControl","handlePageEnable","handlePageBreak","styleId","CustomSwitch","switchBase","track","Switch","ViewModeControl","viewMode","overflowY","overflowX","TemplateListControl","isExpanded","enabledEditMode","handleChangeParameterViewMode","DownloadConfiguration","saveConfiguration","blob","URL","createObjectURL","href","download","handleSave","handleOpen","notFound","ErrorPage","dialogRoot","actionsRoot","listItem","styleItems","styleItemText","ChooseStyle","handleOpenStyleWindow","configNodes","defaultStyle","downPress","upPress","enterPress","escape","selectedIndex","setSelectedIndex","idx","indexOf","getStyleItems","ListItem","detail","ListItemText","primary","getPreview","copySection","previewStyle","dividers","List","Template","pageId","updatePageProperty","getPage","getSection","getStyleSection","sect","currentStyle","setDefaultSectionProperties","selectedSection","selectedPageId","onPageSizeChange","parseInt","newParams","parameterItem","showParameterMessage","setToLocalStorage","handleReset","defaultPages","defaultParameters","defaultSection","newPages","sectionIdx","getSectionIndex","resetInfo","showMessage","Array","isArray","getObject","setProperty","findIndex","Object","pageSettings","renderControls","getParameterItems","downloadButton","showUploadMessage","setShowParameterMessage","setResetMessage","getSnackBars","uploadMessageBox","parameterMessageBox","resetMessageBox","renderError","errorMessage","getChooseStyleWindow","openChooseStyle","match","params","error","getConfigData","snackBars","rel","stylePath","msec","Promise","resolve","setTimeout","getUploadedConfiguration","uploadConfigurationId","storageState","storageConfig","getConfigurationWithProgress","getConfiguration","htmlConfiguration","templateLang","TemplateSelectionPrivate","App","exact","path","ErrorBoundary","hasError","errorInfo","rootElement","initializeI18n","ReactDOM","render"],"mappings":"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","file":"static/js/main.c3bc2f66.chunk.js","sourcesContent":["import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n tooltip: {\r\n wordBreak: 'break-all'\r\n } \r\n}));\r\n\r\nexport default function CustomTooltip(props) {\r\n const classes = useStyles();\r\n return ;\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport PropTypes from 'prop-types';\r\nimport CustomTooltip from '../shared/tooltip';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n width: '312px',\r\n height: '36px',\r\n padding: '10px 16px',\r\n borderRadius: '4px',\r\n boxShadow: '0 1px 1px 0 rgba(0, 0, 0, 0.05), 0 1px 5px 0 rgba(50, 50, 93, 0.12)',\r\n backgroundColor: '#a90e11',\r\n '&:hover': {\r\n backgroundColor: '#8e090c'\r\n },\r\n '&:clicked': {\r\n backgroundColor: '#e3c1c4'\r\n },\r\n '&:disabled': {\r\n backgroundColor: '#f1f3f5'\r\n }\r\n },\r\n buttonText: {\r\n width: '280px',\r\n height: '16px',\r\n fontFamily: 'Roboto',\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: '1.14',\r\n letterSpacing: '1.25px',\r\n textAlign: 'center',\r\n color: '#fff'\r\n }\r\n}));\r\n\r\nexport default function ActionButton(props) {\r\n const classes = useStyles();\r\n const { children, onClick, disabled } = props;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nActionButton.defaultProps = {\r\n children: '',\r\n onClick: () => { },\r\n disabled:false\r\n}\r\n\r\nActionButton.propTypes = {\r\n children: PropTypes.any,\r\n onClick: PropTypes.func,\r\n disabled: PropTypes.bool\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n snackBar: {\r\n top: '72px'\r\n }\r\n}));\r\n\r\nexport default function CustomSnackBar(props) {\r\n const classes = useStyles();\r\n const { open, setOpen, message } = props;\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const vertical = 'top';\r\n const horizontal = 'right';\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nCustomSnackBar.defaultProps = {\r\n open: false,\r\n message:'',\r\n setOpen: () => { }\r\n}\r\n\r\nCustomSnackBar.propTypes = {\r\n open: PropTypes.bool,\r\n message: PropTypes.any,\r\n setOpen: PropTypes.func\r\n}\r\n","export default class HttpClient{\r\n\r\n static async get(url) {\r\n const response = await fetch(url);\r\n return response;\r\n }\r\n\r\n static async post(url, body, headers = null) {\r\n const requestOptions = {\r\n method: 'POST',\r\n body: body\r\n }\r\n if (headers)\r\n requestOptions.headers = headers;\r\n\r\n const response = await fetch(\r\n url,\r\n requestOptions\r\n );\r\n\r\n return response;\r\n }\r\n}","import cookies from 'js-cookie'\r\nimport { Translation } from 'react-i18next';\r\nimport i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport HttpApi from 'i18next-http-backend';\r\n\r\nexport default class LanguageHelper {\r\n\r\n static defaultLanguage = {\r\n code: 'eng',\r\n name: 'English'\r\n }\r\n\r\n //The static language list is used to reduce API calls and improve performance.\r\n static languages =\r\n [\r\n {\r\n shortCode: \"en\",\r\n code: \"eng\",\r\n name: \"English\"\r\n },\r\n {\r\n shortCode: \"de\",\r\n code: \"ger\",\r\n name: \"Deutsch\"\r\n },\r\n {\r\n shortCode: \"fr\",\r\n code: \"fre\",\r\n name: \"Français\"\r\n },\r\n {\r\n shortCode: \"zh\",\r\n code: \"chi\",\r\n name: \"中文\"\r\n },\r\n {\r\n shortCode: \"zh\",\r\n code: \"chs\",\r\n name: \"简体中文\"\r\n },\r\n {\r\n shortCode: \"nl\",\r\n code: \"dut\",\r\n name: \"Nederlands\"\r\n },\r\n {\r\n shortCode: \"hu\",\r\n code: \"hun\",\r\n name: \"Magyar\"\r\n },\r\n {\r\n shortCode: \"it\",\r\n code: \"ita\",\r\n name: \"Italiano\"\r\n },\r\n {\r\n shortCode: \"ja\",\r\n code: \"jpn\",\r\n name: \"日本語\"\r\n },\r\n {\r\n shortCode: \"cs\",\r\n code: \"cze\",\r\n name: \"Česky\"\r\n },\r\n {\r\n shortCode: \"pt\",\r\n code: \"por\",\r\n name: \"Português\"\r\n },\r\n {\r\n shortCode: \"es\",\r\n code: \"spa\",\r\n name: \"Español\"\r\n },\r\n {\r\n shortCode: \"ko\",\r\n code: \"kor\",\r\n name: \"한국어\"\r\n },\r\n {\r\n shortCode: \"pl\",\r\n code: \"pol\",\r\n name: \"Polski\"\r\n },\r\n {\r\n shortCode: \"ru\",\r\n code: \"rus\",\r\n name: \"Русский\"\r\n },\r\n {\r\n shortCode: \"tr\",\r\n code: \"tur\",\r\n name: \"Türkçe\"\r\n },\r\n {\r\n shortCode: \"he\",\r\n code: \"heb\",\r\n name: \"‫עברית\"\r\n },\r\n {\r\n shortCode: \"da\",\r\n code: \"dan\",\r\n name: \"Dansk\"\r\n }\r\n ];\r\n\r\n static getSupportedLngs() {\r\n const lngs = this.languages.map(l => l.code);\r\n return lngs;\r\n }\r\n\r\n static getLangCode(shortCode) {\r\n const code = this.languages.find(l => l.shortCode === shortCode);\r\n return code?.code;\r\n }\r\n\r\n static getDefaultLng() {\r\n const navLang = this.getLangCode(navigator.language);\r\n return this.isSupportedLanguage(navLang) ? navLang : this.defaultLanguage.code;\r\n }\r\n\r\n static getLanguages() {\r\n return this.languages.sort((a, b) => {\r\n if (a.name > b.name) {\r\n return 1;\r\n }\r\n if (a.name < b.name) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n static getCurrentLanguageAsync(queryParams) {\r\n let queryLng = new URLSearchParams(queryParams).get(\"lng\");\r\n if (queryLng) {\r\n if (!this.isSupportedLanguage(queryLng)) {\r\n queryLng = undefined;\r\n }\r\n }\r\n\r\n return queryLng || cookies.get('i18next') || this.getDefaultLng();\r\n }\r\n\r\n static isSupportedLanguage(lngCode) {\r\n return this.getSupportedLngs().find(l => l === lngCode) !== undefined;\r\n }\r\n\r\n //Use this code to dynamically load languages from server-side\r\n //static async IsSupportedLanguage(lngCode) {\r\n // return (await LanguageService.getLanguageCodes()).find(l => l === lngCode) !== undefined;\r\n //}\r\n\r\n static getQueryParamsWithoutLang(queryStr) {\r\n let queryParams = new URLSearchParams(queryStr);\r\n if (queryParams.has(\"lng\")) {\r\n queryParams.delete('lng');\r\n }\r\n return queryParams.toString();\r\n }\r\n\r\n static getTranslation = (key) => {\r\n return (\r\n {(t) => t(key)}\r\n );\r\n }\r\n\r\n static getTranslationString = (key) => {\r\n return i18n.t(`${key}`);\r\n }\r\n\r\n static getTranslationStringN = (key) => {\r\n return i18n.t(key);\r\n }\r\n\r\n static async initializeI18n() {\r\n i18n\r\n .use(initReactI18next)\r\n .use(LanguageDetector)\r\n .use(HttpApi)\r\n .init({\r\n fallbackLng: this.getDefaultLng(),\r\n supportedLngs: this.getSupportedLngs(),\r\n detection: {\r\n order: ['querystring', 'cookie'],\r\n caches: ['cookie']\r\n\r\n },\r\n backend: {\r\n loadPath: '/assets/locales/{{lng}}/translation.json',\r\n },\r\n react: { useSuspense: false }\r\n });\r\n }\r\n}\r\n","import HttpClient from '../utils/http-client';\r\nimport LanguageHelper from '../utils/language-helper';\r\n\r\nexport default class TemplateService {\r\n\r\n static async getFilteredTemplates(isPublic, lang) {\r\n const response = await HttpClient.get(`template/get/${isPublic}/${lang}`);\r\n if (!response.ok)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_fetch_template'));\r\n return await response.json();\r\n }\r\n\r\n static async getAllTemplates(lang) {\r\n const response = await HttpClient.get(`template/get/all/${lang}`);\r\n if (!response.ok)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_fetch_template'));\r\n return await response.json();\r\n }\r\n\r\n static async getAllFilters(isPublic, lang) {\r\n const response = await HttpClient.get(`template/filters/${isPublic}/${lang}`);\r\n if (!response.ok)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_fetch_filters'));\r\n return await response.json();\r\n }\r\n\r\n static async getConfiguration(templateId, lang) {\r\n const response = await HttpClient.get(`template/configuration/${templateId}/${lang}`);\r\n if (response.status === 404)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_find_template'));\r\n console.log(response.status);\r\n if (!response.ok)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_fetch_template'));\r\n return await response.json();\r\n }\r\n\r\n static async getUploadedConfiguration(uploadconfigId) {\r\n const response = await HttpClient.get(`template/upload/${uploadconfigId}`);\r\n if (response.status === 404)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_find_template'));\r\n if (!response.ok)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_fetch_template'));\r\n return await response.json();\r\n }\r\n\r\n static async uploadFile(file) {\r\n const formData = new FormData();\r\n formData.append('File', file);\r\n const response = await HttpClient.post('template/upload', formData);\r\n if (response.status === 404)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_find_template'));\r\n if (!response.ok)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_upload'));\r\n return await response.json();\r\n }\r\n\r\n static async getConfigurationWithProgress(templateId, config, lang) {\r\n const body = JSON.stringify(config);\r\n const headers = { 'Content-Type': 'application/json' };\r\n const response = await HttpClient.post(`template/configuration/${templateId}/${lang}`, body, headers);\r\n if (response.status === 404)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_find_template'));\r\n if (!response.ok)\r\n throw new Error(LanguageHelper.getTranslationString('could_not_upload'));\r\n return await response.json();\r\n }\r\n\r\n static async saveConfiguration(templateId, config, lang) {\r\n const body = JSON.stringify(config);\r\n const headers = { 'Content-Type': 'application/json' };\r\n return await HttpClient.post(`template/save/${templateId}/${lang}`, body, headers);\r\n }\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n position: 'fixed',\r\n top: '50%',\r\n left: '50%'\r\n }\r\n}));\r\n\r\nexport default function OperationProgress(props) {\r\n const classes = useStyles()\r\n const { open } = props;\r\n\r\n return open ? (\r\n
\r\n \r\n
\r\n ): '';\r\n}\r\n\r\nOperationProgress.defaultProps = {\r\n open: false\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Input from '@material-ui/core/Input';\r\nimport ActionButton from '../shared/action-button';\r\nimport { useHistory } from 'react-router-dom';\r\nimport CustomSnackBar from '../shared/snack-bar';\r\nimport TemplateService from '../../services/template-service';\r\nimport PropTypes from 'prop-types';\r\nimport OperationProgress from '../shared/operation-progress';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n fileInput: {\r\n display: 'none'\r\n }\r\n}));\r\n\r\nexport default function UploadConfiguration(props) {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const { t } = useTranslation();\r\n const { setDisableTemplateSelection } = props;\r\n const [openWarning, setOpenWarning] = useState(false);\r\n const [disabled, setDisable] = useState(props.disabled);\r\n const [loading, setLoading] = useState(false);\r\n const [warningMessage, setWarningMessage] = useState('');\r\n\r\n useEffect(() => {\r\n setDisable(props.disabled);\r\n }, [props.disabled])\r\n\r\n const getExtension = (fileName) => {\r\n const ext = fileName.split('.').pop();\r\n return ext;\r\n }\r\n\r\n const setDisableAction = (disabled) => {\r\n setDisable(disabled);\r\n setDisableTemplateSelection(disabled);\r\n }\r\n\r\n const openFileFormatWarning = () => {\r\n setWarningMessage(t('incorrect_format_wrn'));\r\n setOpenWarning(true);\r\n }\r\n\r\n const handleSubmission = (event) => {\r\n const selectedFile = event.target.files[0];\r\n if (selectedFile === undefined || getExtension(selectedFile.name) !== 'sst') {\r\n openFileFormatWarning();\r\n return;\r\n }\r\n\r\n setDisableAction(true);\r\n setLoading(true);\r\n TemplateService.uploadFile(selectedFile).then((result) => {\r\n if (result) {\r\n history.push(`/template/${result.templateId}`, { uploadInfo: result, templateName: result.templateName });\r\n }\r\n }).catch((e) => {\r\n setWarningMessage(e.message);\r\n setOpenWarning(true);\r\n setLoading(false);\r\n setDisableAction(false);\r\n });\r\n\r\n };\r\n\r\n const openFileDialog = () => {\r\n setOpenWarning(false);\r\n document.getElementById('selectedFile').value = '';\r\n document.getElementById('selectedFile').click();\r\n }\r\n\r\n return (\r\n
\r\n {t('restore_btn')}\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nUploadConfiguration.defaultProps = {\r\n disabled: false,\r\n setDisableTemplateSelection: () => { }\r\n}\r\n\r\nUploadConfiguration.propTypes = {\r\n disabled: PropTypes.bool,\r\n setDisableTemplateSelection: PropTypes.func\r\n}","import UploadConfiguration from './upload-configuration';\r\nexport default UploadConfiguration;","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst styles = {\r\n root: {\r\n fontFamily: 'Roboto',\r\n fontSize: '16px',\r\n fontWeight: '500',\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: 1.5,\r\n letterSpacing: 'normal',\r\n color: '#23303f',\r\n //overflow: 'hidden',\r\n //whiteSpace: 'nowrap',\r\n //textOverflow: 'ellipsis'\r\n }\r\n};\r\n\r\nfunction TextPrimary(props) {\r\n const { classes } = props;\r\n return ;\r\n}\r\n\r\nexport default withStyles(styles)(TextPrimary);\r\n\r\nTextPrimary.propTypes = {\r\n classes: PropTypes.object.isRequired\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport TextPrimary from '../shared/text-primary';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n },\r\n summary: {\r\n padding:'0px 24px'\r\n },\r\n details: {\r\n padding: '0px 26px'\r\n },\r\n accordion:{\r\n position: 'inherit'\r\n }\r\n}));\r\n\r\nexport default function Filter(props) {\r\n const classes = useStyles();\r\n const { children, name, title } = props;\r\n\r\n const [expanded, setExpanded] = React.useState(name);\r\n\r\n const handleChange = (panel) => (event, newExpanded) => {\r\n setExpanded(newExpanded ? panel : false);\r\n };\r\n\r\n return (\r\n
\r\n \r\n }\r\n aria-controls='panel1a-content'\r\n id='panel1a-header'\r\n className={classes.summary}\r\n >\r\n {title}\r\n \r\n \r\n {children}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nFilter.propTypes = {\r\n children: PropTypes.element,\r\n title: PropTypes.object,\r\n name: PropTypes.string.isRequired,\r\n}","import Filter from './filter';\r\nexport default Filter;","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst styles = {\r\n root: {\r\n fontFamily: 'Roboto',\r\n fontSize: '20px',\r\n fontWeight: 500,\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: 1.4,\r\n letterSpacing: '0.15px',\r\n color: '#23303f'\r\n }\r\n};\r\n\r\nfunction TextSubHeader(props) {\r\n const { classes } = props;\r\n return ;\r\n}\r\n\r\nexport default withStyles(styles)(TextSubHeader);\r\n\r\nTextSubHeader.propTypes = {\r\n classes: PropTypes.object.isRequired\r\n}","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport TextSubHeader from '../shared/text-sub-header';\r\nimport PropTypes from 'prop-types';\r\nimport Draggable from 'react-draggable';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nfunction PaperComponent(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default function DialogBox(props) {\r\n const { t } = useTranslation();\r\n const { open, title, children, handleClose, handleApply, handleCancel, cancelText, applyText } = props;\r\n const cancel = cancelText ? cancelText : t('cancel');\r\n const apply = applyText ? applyText : t('apply');\r\n\r\n return (\r\n \r\n \r\n {title}\r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nDialogBox.defaultProps = {\r\n open: false,\r\n title: '',\r\n children: '',\r\n handleClose: () => { },\r\n handleApply: () => { },\r\n handleCancel: () => { },\r\n cancelText: null,\r\n applyText: null\r\n}\r\n\r\nDialogBox.propTypes = {\r\n open: PropTypes.bool,\r\n title: PropTypes.string,\r\n children: PropTypes.any,\r\n handleClose: PropTypes.func,\r\n handleCancel: PropTypes.func,\r\n handleApply: PropTypes.func,\r\n cancelText: PropTypes.string,\r\n applyText: PropTypes.string\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport DialogBox from '../shared/dialog-box';\r\nimport PropTypes from 'prop-types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n width: '280px'\r\n }\r\n}));\r\n\r\nexport default function HomeAlert(props) {\r\n const { t } = useTranslation();\r\n const history = useHistory();\r\n const classes = useStyles();\r\n\r\n const openHomePage = () => {\r\n setOpen(false);\r\n history.push('/');\r\n }\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n const { open, setOpen } = props;\r\n return (\r\n \r\n
\r\n {t('back_to_template_wrn')}\r\n
\r\n
\r\n );\r\n}\r\n\r\nHomeAlert.propTypes = {\r\n open: PropTypes.bool.isRequired,\r\n setOpen: PropTypes.func.isRequired\r\n}","import HomeAlert from './home-alert';\r\nexport default HomeAlert;","import React, { useState } from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router';\r\nimport TextPrimary from '../shared/text-primary';\r\nimport i18next from 'i18next'\r\nimport LanguageIcon from '@material-ui/icons/Language';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport Box from '@material-ui/core/Box';\r\nimport LanguageHelper from '../../utils/language-helper';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n languageBtn: {\r\n color: '#23303f'\r\n },\r\n languageList: {\r\n marginTop: theme.spacing(4)\r\n },\r\n langBox: {\r\n display: 'flex',\r\n },\r\n langCode: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n textTransform: 'capitalize'\r\n }\r\n}));\r\n\r\n\r\nexport default function Language() {\r\n //Use this code to dynamically load languages from server-side\r\n //const [languages, setLanguages] = useState([]);\r\n //const [currentLanguage, setCurrentLanguage] = useState(LanguageHelper.defaultLanguage);\r\n //useEffect(async () => {\r\n // const lngs = await LanguageService.getLanguages();\r\n // setLanguages(lngs);\r\n // const currentCode = LanguageHelper.getCurrentLanguageAsync();\r\n // const current = lngs.find(l => l.code === currentCode);\r\n // if (current)\r\n // setCurrentLanguage(current);\r\n //}, [])\r\n\r\n const history = useHistory();\r\n const classes = useStyles();\r\n const languages = LanguageHelper.getLanguages();\r\n const currentLanguage = languages.find(l => l.code === LanguageHelper.getCurrentLanguageAsync());\r\n const { t } = useTranslation()\r\n\r\n document.title = t('app_title');\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n\r\n const handleClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleChange = (code) => {\r\n i18next.changeLanguage(code);\r\n setAnchorEl(null);\r\n history.replace({\r\n search: LanguageHelper.getQueryParamsWithoutLang(history.location.search)\r\n })\r\n history.go(0);\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n {currentLanguage?.name ?? ''}\r\n
\r\n
\r\n \r\n {languages.map(({ code, name }) => (\r\n handleChange(code)}\r\n selected={currentLanguage?.code === code}>\r\n {name}\r\n \r\n ))}\r\n ;\r\n
\r\n );\r\n}\r\n","import Language from './language';\r\nexport default Language;","import React, { useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport logo from '../../images/logo.png';\r\nimport logo2x from '../../images/logo@2x.png';\r\nimport logo3x from '../../images/logo@3x.png';\r\nimport HomeAlert from '../home-alert';\r\nimport PropTypes from 'prop-types';\r\nimport CustomTooltip from '../shared/tooltip';\r\nimport Language from '../language';\r\n\r\nconst headerWidth = 360;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n appBar: {\r\n boxShadow: '1px 2px 1px 0 rgba(0, 0, 0, 0.05), 0 0 5px 0 rgba(50, 50, 93, 0.12), inset 0 0 0 0 #e0e6ed',\r\n zIndex: theme.zIndex.drawer + 1,\r\n backgroundColor:'#fff'\r\n },\r\n toolBar: {\r\n minWidth: '628px',\r\n height: '64px',\r\n backgroundColor: '#fff',\r\n padding: '0 16px 0 0',\r\n },\r\n boxLogo: {\r\n width: headerWidth,\r\n height: '64px',\r\n padding: '16px 211px 12px 24px',\r\n boxShadow: '1px 2px 1px 0 rgb(0 0 0 / 5%), 0 0 5px 0 rgb(50 50 93 / 12%), inset 0 0 0 0 #e0e6ed',\r\n backgroundColor: '#fff'\r\n },\r\n header: {\r\n display: 'flex',\r\n width: '100%',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n },\r\n headerText: {\r\n height: '32px',\r\n margin: '16px 0 16px 16px',\r\n fontFamily: 'Roboto',\r\n fontSize: '24px',\r\n fontWeight: 'bold',\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: '1.33',\r\n letterSpacing: 'normal',\r\n color: '#23303f'\r\n },\r\n logo: {\r\n width: '125px',\r\n height: '36px',\r\n objectFit: 'contain',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n languageBtn: {\r\n marginTop: theme.spacing(1),\r\n color:'#23303f'\r\n },\r\n headerTitle: {\r\n maxWidth:'600px'\r\n }\r\n}));\r\n\r\nexport default function Header(props) {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [open, setOpen] = useState(false);\r\n\r\n const openHomePage = () => {\r\n if(useHomeAlert)\r\n setOpen(true);\r\n else\r\n history.push('/');\r\n }\r\n\r\n const { children, useHomeAlert } = props;\r\n return (\r\n \r\n \r\n \r\n home\r\n \r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nHeader.defaultProps = {\r\n useHomeAlert: false\r\n}\r\n\r\nHeader.propTypes = {\r\n children: PropTypes.any,\r\n useHomeAlert: PropTypes.bool\r\n}","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import Header from './header';\r\nexport default Header;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst drawerWidth = 360;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n drawer: {\r\n width: drawerWidth,\r\n margin: '64px 0 0 0',\r\n },\r\n drawerPaper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: drawerWidth,\r\n paddingTop: theme.spacing(8),\r\n boxShadow: '0 2px 10px 0 rgba(0, 0, 0, 0.16), 0 2px 5px 0 rgba(0, 0, 0, 0.26)',\r\n backgroundColor: '#fff'\r\n },\r\n uploadStickPanel: {\r\n width: drawerWidth - 1,\r\n height: '60px',\r\n marginTop:'auto',\r\n padding: '12px 24px',\r\n boxShadow: '0 1px 1px 0 rgba(0, 0, 0, 0.05), 0 1px 5px 0 rgba(50, 50, 93, 0.12), inset 0 1px 0 0 #e0e6ed',\r\n backgroundColor: '#fff'\r\n },\r\n drawerContainer: {\r\n overflow: 'auto'\r\n }\r\n}));\r\n\r\nexport default function SideBar(props) {\r\n const classes = useStyles();\r\n\r\n const { actions, children } = props;\r\n return !children? '': (\r\n \r\n {children}\r\n
\r\n {actions}\r\n
\r\n \r\n );\r\n}\r\n\r\nSideBar.propTypes = {\r\n actions: PropTypes.any,\r\n children: PropTypes.any\r\n}","import SideBar from './side-bar';\r\nexport default SideBar;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n flexGrow: 1,\r\n overflow: 'auto',\r\n padding: theme.spacing(1, 0, 2, 2),\r\n marginTop: '64px',\r\n display: 'flex'\r\n }\r\n}));\r\n\r\nexport default function Main(props) {\r\n const classes = useStyles();\r\n\r\n const { children } = props;\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nMain.propTypes = {\r\n children: PropTypes.any,\r\n}","import Main from './main';\r\nexport default Main;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n display: 'flex',\r\n margin: theme.spacing(1),\r\n justifyContent: 'center',\r\n alignItems:'center'\r\n },\r\n test: {\r\n position: 'fixed',\r\n top: '50%',\r\n left: '50%'\r\n }\r\n}));\r\n\r\nexport default function Progress(props) {\r\n const classes = useStyles()\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nProgress.defaultProps = {\r\n open: false\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport Header from '../header';\r\nimport SideBar from '../side-bar';\r\nimport Main from '../main';\r\nimport PropTypes from 'prop-types';\r\nimport Progress from '../shared/progress';\r\nimport { MuiThemeProvider, createTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n height: '100vh'\r\n },\r\n content: {\r\n display:'flex'\r\n },\r\n contentLoader: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems:'center'\r\n },\r\n '@global': {\r\n '*': {\r\n 'scrollbar-width': 'thin',\r\n },\r\n '*::-webkit-scrollbar': {\r\n width: '8px',\r\n height: '8px'\r\n },\r\n '*::-webkit-scrollbar-track': {\r\n '-webkit-box-shadow': 'inset 0 0 6px rgba(0,0,0,0.00)'\r\n },\r\n '*:hover': {\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#B9B9B9'\r\n }\r\n },\r\n '*::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#d1d1d1',\r\n borderRadius: '4px',\r\n }\r\n }\r\n}));\r\n\r\nconst theme = createTheme({\r\n palette: {\r\n secondary: {\r\n main: '#a90e11'\r\n }\r\n },\r\n typography: {\r\n body1: {\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n }\r\n }\r\n});\r\n\r\nexport default function Layout(props) {\r\n const classes = useStyles();\r\n\r\n const getLoader = () => {\r\n return \r\n }\r\n\r\n const getContentLoader = () => {\r\n return
{getLoader()}
;\r\n }\r\n\r\n const { headerText, actions, children, sideBar, useHomeAlert, useLoader } = props;\r\n return (\r\n \r\n
\r\n \r\n
{headerText}
\r\n {useLoader ? getLoader() : sideBar}\r\n
{useLoader ? getContentLoader() : children}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nLayout.defaultProps = {\r\n useHomeAlert: false,\r\n useLoader: false,\r\n children: <>\r\n}\r\n\r\nLayout.propTypes = {\r\n headerText: PropTypes.any,\r\n actions: PropTypes.any,\r\n children: PropTypes.element,\r\n sideBar: PropTypes.element,\r\n useHomeAlert: PropTypes.bool,\r\n useLoader: PropTypes.bool\r\n}\r\n","import Layout from './layout';\r\nexport default Layout;","import localForage from \"localforage\";\r\n\r\nexport default class LocalStorage {\r\n static filterKey = 'filters';\r\n\r\n static async setTemplateItem(templateId, state, updatedObj, deleteOldItem = false, level = 0) {\r\n const newState = { ...state, ...updatedObj };\r\n const templateInfo = { state: newState, Date: Date.now() };\r\n try {\r\n if (deleteOldItem) {\r\n await this.removeOldestItem();\r\n }\r\n\r\n await localForage.setItem(templateId, templateInfo);\r\n }\r\n catch (e) {\r\n if (level < 10)\r\n await this.setTemplateItem(templateId, state, updatedObj, true, level + 1);\r\n }\r\n }\r\n\r\n static async setFilters(filters) {\r\n await localForage.setItem(this.filterKey, filters);\r\n }\r\n\r\n static async getFilters() {\r\n return await localForage.getItem(this.filterKey);\r\n }\r\n\r\n static async removeOldestItem() {\r\n const item = await this.getOldestItemKey();\r\n if (item !== null)\r\n await this.removeItem(item);\r\n }\r\n\r\n static async getOldestItemKey() {\r\n let minDate = Date.now();\r\n let templateId = null;\r\n await localForage.iterate((value, key, i) => {\r\n if (value.Date !== undefined && minDate > value.Date) {\r\n minDate = value.Date\r\n templateId = key;\r\n }\r\n });\r\n return templateId;\r\n }\r\n\r\n static async isTemplateExist(templateId) {\r\n const keys = await localForage.keys();\r\n return keys.find((item) => item === templateId) !== undefined;\r\n }\r\n\r\n static async getItem(templateId) {\r\n const obj = await localForage.getItem(templateId);\r\n return obj !== null ? obj.state : obj;\r\n }\r\n\r\n static async deleteNonExistingTemplate(templateIds) {\r\n const keys = await localForage.keys();\r\n const storageTemplates = keys.filter(k => k !== this.filterKey);\r\n storageTemplates.map(async t => {\r\n if (templateIds.find(id => id === t) === undefined)\r\n await this.removeItem(t);\r\n });\r\n }\r\n\r\n static async removeItem(templateId) {\r\n await localForage.removeItem(templateId);\r\n }\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport DialogBox from '../shared/dialog-box';\r\nimport PropTypes from 'prop-types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n width: '280px'\r\n }\r\n}));\r\n\r\nexport default function OpenTemplateDialog(props) {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const { open, setOpen, defaultTemplateAction, restoreTemplateAction } = props;\r\n\r\n const restore = () => {\r\n setOpen(false);\r\n restoreTemplateAction();\r\n }\r\n\r\n const openDefault = () => {\r\n setOpen(false);\r\n defaultTemplateAction();\r\n }\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n return (\r\n \r\n
\r\n {t('restore_wrn')}\r\n
\r\n \r\n );\r\n}\r\n\r\nOpenTemplateDialog.propTypes = {\r\n open: PropTypes.bool.isRequired,\r\n setOpen: PropTypes.func.isRequired,\r\n defaultTemplateAction: PropTypes.func.isRequired,\r\n restoreTemplateAction: PropTypes.func.isRequired\r\n}","import OpenTemplateDialog from './open-template-dialog';\r\nexport default OpenTemplateDialog;","import React, { useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { Container } from '@material-ui/core';\r\nimport Box from '@material-ui/core/Box';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport PropTypes from 'prop-types';\r\nimport LocalStorage from '../../utils/local-storage';\r\nimport OpenTemplateDialog from '../open-template-dialog';\r\nimport CustomTooltip from '../shared/tooltip';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n templateCard: {\r\n flexGrow: 1,\r\n width: '240px',\r\n height: '240px',\r\n marginBottom: '56px',\r\n opacity: 1,\r\n },\r\n templatePreview: {\r\n opacity: 1,\r\n width: '156px',\r\n height: '220px',\r\n borderRadius: '3px',\r\n border: 'solid 2px white',\r\n backgroundColor: 'white',\r\n '&:hover': {\r\n border: 'solid 2px #a90e11',\r\n borderRadius: '3px',\r\n cursor: 'pointer'\r\n }\r\n },\r\n landscapePreview: {\r\n opacity: 1,\r\n width: '220px',\r\n height: '156px',\r\n borderRadius: '3px',\r\n border: 'solid 2px white',\r\n backgroundColor: 'white',\r\n '&:hover': {\r\n border: 'solid 2px #a90e11',\r\n borderRadius: '3px',\r\n cursor: 'pointer'\r\n }\r\n },\r\n preview: {\r\n width: '220px',\r\n height: '220px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n templateName: {\r\n width: '208px',\r\n height: '16px',\r\n margin: '4px 0 0',\r\n fontFamily: 'Roboto',\r\n fontSize: '12px',\r\n fontWeight: 'normal',\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: '1.33',\r\n letterSpacing: 'normal',\r\n textAlign: 'center',\r\n color: '#23303f'\r\n },\r\n thumbnailImg: {\r\n objectFit: 'contain',\r\n width: '100%',\r\n height: '100%'\r\n }\r\n}));\r\n\r\nexport default function TemplateSelectionGrid(props) {\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(false);\r\n const [templateId, setTemplateId] = useState('');\r\n const [templateName, setTemplateName] = useState('');\r\n const { templates, disabledTemplateSelection } = props;\r\n const history = useHistory();\r\n\r\n const openTemplateDialog = async (id, name) => {\r\n if (disabledTemplateSelection)\r\n return;\r\n setTemplateName(name);\r\n setTemplateId(id);\r\n const isExist = await LocalStorage.isTemplateExist(id);\r\n if (isExist) {\r\n const storageTemplate = await LocalStorage.getItem(id);\r\n if (storageTemplate !== null)\r\n setOpen(true);\r\n else\r\n openTemplateById(id, name);\r\n }\r\n else\r\n openTemplateById(id, name);\r\n }\r\n\r\n const openDefaultTemplate = async () => {\r\n await LocalStorage.removeItem(templateId)\r\n openTemplate();\r\n }\r\n\r\n const openTemplateById = (templateId, templateName) => {\r\n history.push(`/template/${templateId}`, { templateId: templateId, templateName: templateName });\r\n }\r\n\r\n const openTemplate = () => {\r\n history.push(`/template/${templateId}`, { templateId: templateId, templateName: templateName });\r\n }\r\n\r\n const getDialogContent = () => {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {getDialogContent()}\r\n \r\n {templates.map(template => {\r\n const isPort = template.orientation.type === 0;\r\n const classPreview = isPort ? classes.templatePreview : classes.landscapePreview;\r\n return (\r\n \r\n
\r\n \r\n \r\n
openTemplateDialog(template.id, template.title)}>\r\n {template.title}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {template.title}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n );\r\n}\r\n\r\nTemplateSelectionGrid.defaultProps = {\r\n disabledTemplateSelection: false\r\n}\r\n\r\nTemplateSelectionGrid.propTypes = {\r\n templates: PropTypes.array.isRequired,\r\n disabledTemplateSelection: PropTypes.bool\r\n}","import TemplateSelectionGrid from './template-selection-grid';\r\nexport default TemplateSelectionGrid;","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst styles = {\r\n root: {\r\n color: '#a90e11',\r\n \r\n },\r\n checked: {},\r\n};\r\n\r\nfunction CustomRadio(props) {\r\n const { classes } = props;\r\n return ;\r\n}\r\n\r\nexport default withStyles(styles)(CustomRadio);\r\n\r\nCustomRadio.propTypes = {\r\n classes: PropTypes.object.isRequired\r\n}","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst styles = {\r\n root: {\r\n fontFamily: 'Roboto',\r\n fontSize: '14px',\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: 1.43,\r\n letterSpacing: 'normal',\r\n textTransform: 'none',\r\n color: '#414d5c'\r\n }\r\n};\r\n\r\nfunction TextSecondary(props) {\r\n const { classes } = props;\r\n return ;\r\n}\r\n\r\nexport default withStyles(styles)(TextSecondary);\r\n\r\nTextSecondary.propTypes = {\r\n classes: PropTypes.object.isRequired\r\n}","import FilterRadio from './filter-radio';\r\nexport default FilterRadio;","import React from 'react';\r\nimport CustomRadio from '../shared/radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default function FilterRadio(props) {\r\n const { children, selected, handleChange } = props;\r\n\r\n const getItems = (items) => {\r\n return items.map(i =>\r\n } label={{i.title}} />\r\n );\r\n }\r\n\r\n return (\r\n \r\n handleChange(e.target.value)}\r\n >\r\n {getItems(children)}\r\n \r\n \r\n );\r\n}\r\n\r\nFilterRadio.propTypes = {\r\n children: PropTypes.array.isRequired,\r\n selected: PropTypes.any,\r\n handleChange: PropTypes.func.isRequired\r\n}","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst styles = {\r\n root: {\r\n color: '#a90e11',\r\n \r\n },\r\n checked: {},\r\n};\r\n\r\nfunction CustomCheckbox(props) {\r\n const { classes } = props;\r\n return ;\r\n}\r\n\r\nexport default withStyles(styles)(CustomCheckbox);\r\n\r\nCustomCheckbox.propTypes = {\r\n classes: PropTypes.object.isRequired\r\n}","import FilterCheckbox from './filter-checkbox';\r\nexport default FilterCheckbox;","import React from 'react';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport CustomCheckbox from '../shared/checkbox';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default function FilterCheckbox(props) {\r\n const { children, selected, handleChange } = props;\r\n\r\n const getItems = (items, selectedItems, handleChange) => {\r\n return items.map(i =>\r\n handleChange(i.id, e.target.checked)} />}\r\n label={{i.title}}\r\n />\r\n );\r\n }\r\n\r\n const isChecked = (selectedItems, id) => {\r\n const checked = selectedItems.find(i => i === id) !== undefined;\r\n return checked;\r\n }\r\n\r\n return (\r\n \r\n \r\n {getItems(children, selected, handleChange)}\r\n \r\n \r\n );\r\n}\r\n\r\nFilterCheckbox.propTypes = {\r\n children: PropTypes.array.isRequired,\r\n selected: PropTypes.array.isRequired,\r\n handleChange: PropTypes.func.isRequired\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TextSubHeader from '../shared/text-sub-header';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n overflow:'auto'\r\n },\r\n heading: {\r\n margin: '14px 24px'\r\n }\r\n}));\r\n\r\nexport default function FilterBar(props) {\r\n const classes = useStyles();\r\n const { children, name } = props;\r\n return (\r\n
\r\n {name}\r\n {children}\r\n
\r\n );\r\n}\r\n\r\nFilterBar.propTypes = {\r\n children: PropTypes.object.isRequired,\r\n name: PropTypes.object.isRequired,\r\n}","import FilterBar from './filter-bar';\r\nexport default FilterBar;","import React, { Component } from 'react';\r\nimport UploadConfiguration from '../upload-configuration';\r\nimport Filter from '../filter';\r\nimport Layout from '../layout';\r\nimport TemplateSelectionGrid from '../template-selection-grid';\r\nimport FilterRadio from '../filter-radio';\r\nimport FilterCheckbox from '../filter-checkbox';\r\nimport FilterBar from '../filter-bar';\r\nimport Progress from '../shared/progress';\r\nimport TemplateService from '../../services/template-service';\r\nimport LocalStorage from '../../utils/local-storage';\r\nimport LanguageHelper from '../../utils/language-helper';\r\n\r\nexport default class TemplateSelection extends Component {\r\n static displayName = TemplateSelection.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isPublic: props.isPublic === undefined ? true : props.isPublic,\r\n loading: true,\r\n disabledTemplateSelection: false,\r\n templates: [],\r\n selectedTemplate: {},\r\n machineTypes: [],\r\n solidCamVersions: [],\r\n orientations: [],\r\n selectedMachineType: 0,\r\n selectedVersion: 0,\r\n selectedOrientation: []\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.getAllTemplates();\r\n }\r\n\r\n handleMachineTypeFilter = (value) => {\r\n this.setState({ selectedMachineType: value });\r\n this.setFiltersToLocalStorage('machineType', value);\r\n }\r\n\r\n handleVersionFilter = (value) => {\r\n this.setState({ selectedVersion: value });\r\n this.setFiltersToLocalStorage('version', value);\r\n }\r\n\r\n handleOrientationFilter = (id, checked) => {\r\n const newSelectedOrientation = [...this.state.selectedOrientation.filter(i => i !== id)];\r\n if (checked)\r\n newSelectedOrientation.push(id);\r\n if (newSelectedOrientation.length > 0) {\r\n this.setState({ selectedOrientation: newSelectedOrientation });\r\n this.setFiltersToLocalStorage('orientationType', newSelectedOrientation);\r\n }\r\n }\r\n\r\n setDisableTemplateSelection = (disabled) => {\r\n this.setState({ disabledTemplateSelection: disabled });\r\n }\r\n\r\n contentProgress = () => {\r\n const style = {\r\n display:'flex',\r\n width: '100%',\r\n justifyContent: 'center'\r\n }\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderFilter = () => {\r\n const { loading } = this.state;\r\n\r\n const filterContent = () => {\r\n const machineTypes = {this.state.machineTypes};\r\n const solidCamVersion = {this.state.solidCamVersions};\r\n const orientation = {this.state.orientations};\r\n\r\n return (\r\n <>\r\n {solidCamVersion}\r\n {machineTypes}\r\n {orientation}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {loading? : filterContent()}\r\n \r\n );\r\n }\r\n\r\n \r\n\r\n renderWithLayout = (templates) => {\r\n const { loading, disabledTemplateSelection } = this.state;\r\n const controls = this.renderFilter();\r\n const restoreButton = ;\r\n return (\r\n \r\n {loading\r\n ? this.contentProgress()\r\n : }\r\n \r\n );\r\n }\r\n\r\n renderLoading = () => {\r\n return (\r\n \r\n \r\n );\r\n }\r\n\r\n getFilteredTemplates = () => {\r\n const { templates, selectedMachineType, selectedVersion, selectedOrientation } = this.state;\r\n return templates.filter(t => (t.machineType.id === selectedMachineType || selectedMachineType === 0)\r\n && (t.solidCamVersion.id === selectedVersion || selectedVersion === 0)\r\n && this.isSelectedOrientation(selectedOrientation, t.orientation.id));\r\n }\r\n\r\n\r\n isSelectedOrientation = (selectedOrientation, id) => {\r\n return selectedOrientation.find(i => i === id) !== undefined;\r\n }\r\n\r\n render() {\r\n const content = this.renderWithLayout(this.getFilteredTemplates());\r\n\r\n return content;\r\n }\r\n\r\n getDefaultMachineType = (machineTypes, storageType) => {\r\n const selected = machineTypes.find(m => m.id === storageType)\r\n if (selected !== undefined)\r\n return selected.id;\r\n return machineTypes.length > 0 ? machineTypes[0].id : 0;\r\n }\r\n\r\n getDefaultSolidCamVersions = (versions, storageVersion) => {\r\n const selected = versions.find(m => m.id === storageVersion)\r\n if (selected !== undefined)\r\n return selected.id;\r\n\r\n let maxVersionId = 0;\r\n let maxVersion = 0;\r\n versions.forEach(item => {\r\n if (item.version > maxVersion) {\r\n maxVersionId = item.id;\r\n maxVersion = item.version;\r\n }\r\n });\r\n\r\n return maxVersionId;\r\n }\r\n\r\n getDefaultOrientations = (orientations, storageType) => {\r\n if (storageType.length > 0) {\r\n const storageOrientations = [];\r\n storageType.forEach(st => {\r\n if (orientations.find(item => item.id === st) !== undefined)\r\n storageOrientations.push(st);\r\n })\r\n if (storageOrientations.length > 0)\r\n return storageOrientations;\r\n }\r\n\r\n return orientations.map(item => item.id);\r\n }\r\n\r\n getFiltersObj() {\r\n const { selectedMachineType, selectedOrientation, selectedVersion } = this.state;\r\n return {\r\n machineType: selectedMachineType !== undefined ? selectedMachineType : 0,\r\n orientationType: selectedOrientation !== undefined ? selectedOrientation: [],\r\n version: selectedVersion !== undefined ? selectedVersion : 0\r\n }\r\n }\r\n\r\n async setFiltersToLocalStorage(propName, obj) {\r\n const filters = this.getFiltersObj()\r\n filters[propName] = obj;\r\n await LocalStorage.setFilters(filters);\r\n }\r\n\r\n async getStorageFilters() {\r\n const storageFilters = await LocalStorage.getFilters();\r\n return storageFilters !== null ? storageFilters : this.getFiltersObj();\r\n }\r\n\r\n async deleteNonExistingTemplates(currentLanguageCode) {\r\n const templates = await TemplateService.getAllTemplates(currentLanguageCode);\r\n const templateIds = templates.map(t => t.id);\r\n await LocalStorage.deleteNonExistingTemplate(templateIds);\r\n }\r\n\r\n async getAllTemplates() {\r\n const { isPublic } = this.state;\r\n const currentLanguageCode = LanguageHelper.getCurrentLanguageAsync(this.props.location?.search);\r\n const templates = await TemplateService.getFilteredTemplates(isPublic, currentLanguageCode);\r\n const filters = await TemplateService.getAllFilters(isPublic, currentLanguageCode);\r\n const storageFilters = await this.getStorageFilters();\r\n this.deleteNonExistingTemplates(currentLanguageCode);\r\n\r\n this.setState({\r\n templates: templates,\r\n machineTypes: filters.machineTypes,\r\n selectedMachineType: this.getDefaultMachineType(filters.machineTypes, storageFilters.machineType),\r\n solidCamVersions: filters.solidCamVersions,\r\n loading:false,\r\n selectedVersion: this.getDefaultSolidCamVersions(filters.solidCamVersions, storageFilters.version),\r\n orientations: filters.orientations,\r\n selectedOrientation: this.getDefaultOrientations(filters.orientations, storageFilters.orientationType)\r\n });\r\n }\r\n}","import TemplateSelection from './template-selection';\r\nexport default TemplateSelection;","export default class PageItemGenerator {\r\n\r\n blocksSize;\r\n nodes;\r\n pageSize;\r\n pages;\r\n currentPageSize = 0;\r\n currentPage = [];\r\n addedHeader = false;\r\n pageItemList = [];\r\n\r\n constructor(pageSize, pages, nodes, blocksSize) {\r\n this.blocksSize = blocksSize;\r\n this.nodes = nodes;\r\n this.pageSize = pageSize;\r\n this.currentPageSize = 0;\r\n this.pages = pages;\r\n this.currentPage = [];\r\n this.addedHeader = false;\r\n this.pageItemList = [];\r\n }\r\n\r\n getPageItemList = () => {\r\n this.#addPages(this.#getEnabledPages());\r\n return this.pageItemList;\r\n }\r\n\r\n #addPages = (pages) => {\r\n pages.forEach(page => {\r\n if (page.startWithPageBreak)\r\n this.#pushPageItem();\r\n\r\n this.#addSections(page);\r\n });\r\n\r\n this.#pushPageItem();\r\n }\r\n\r\n #addSections = (page) => {\r\n const sections = this.#getSections(page);\r\n sections.forEach(section => {\r\n this.addedHeader = false;\r\n //if (section.usePageBreak)\r\n // this.#pushPageItem();\r\n\r\n this.#addSectionBlocks(section);\r\n });\r\n }\r\n\r\n #addSectionBlocks = (section) => {\r\n if (section.forcePageBreak)\r\n this.#forcePageBreak(section);\r\n else\r\n this.#splitSectionBySize(section);\r\n }\r\n\r\n #splitSectionBySize = (section) => {\r\n section.blocks.forEach(block => {\r\n const blockSize = this.getBlockHeight(block.id);\r\n if (blockSize + this.currentPageSize >= this.pageSize)\r\n this.#pushPageItem();\r\n\r\n this.#addHeader(section.headerBlock, block);\r\n this.#addBlock(block);\r\n });\r\n\r\n this.#addFooter(section.footer);\r\n }\r\n\r\n #forcePageBreak = (section) => {\r\n section.blocks.forEach(block => {\r\n this.#pushPageItem();\r\n this.#addHeader(section.headerBlock, block);\r\n this.#addBlock(block);\r\n })\r\n this.#addFooter(section.footer);\r\n this.#pushPageItem();\r\n }\r\n\r\n #addHeader = (header, block) => {\r\n if (!this.#isUseHeader(header) || (this.addedHeader && this.currentPageSize > 0))\r\n return;\r\n\r\n if (!this.#isPlaceHeaderOnCurrentPage(header, block))\r\n this.#pushPageItem();\r\n\r\n if (!this.addedHeader || header.repeatOnEachPage) {\r\n this.#addBlock(header.block);\r\n this.addedHeader = true;\r\n }\r\n }\r\n\r\n #isPlaceHeaderOnCurrentPage = (header, block) => {\r\n const headerSize = this.getBlockHeight(header.block.id);\r\n const blockSize = this.getBlockHeight(block.id);\r\n\r\n return headerSize + blockSize + this.currentPageSize < this.pageSize;\r\n }\r\n\r\n #addFooter = (footer) => {\r\n if (!this.#isUseFooter(footer))\r\n return;\r\n\r\n const footerSize = this.getBlockHeight(footer.block.id);\r\n\r\n if (footerSize + this.currentPageSize >= this.pageSize)\r\n this.#pushPageItem();\r\n\r\n this.#addBlock(footer.block);\r\n }\r\n\r\n #addBlock = (block) => {\r\n this.currentPage.push(block);\r\n this.currentPageSize += this.getBlockHeight(block.id);\r\n }\r\n\r\n #pushPageItem = () => {\r\n if (this.currentPage.length !== 0) {\r\n this.pageItemList.push([...this.currentPage]);\r\n this.currentPage.splice(0);\r\n this.currentPageSize = 0;\r\n }\r\n }\r\n\r\n #isUseHeader = (header) =>\r\n header.enabled\r\n && header.block !== null\r\n && header.block !== undefined;\r\n\r\n #isUseFooter = (footer) =>\r\n footer.enabled\r\n && footer.block !== null\r\n && footer.block !== undefined;\r\n\r\n getBlockHeight(blockId) {\r\n return this.blocksSize[blockId] !== undefined ? this.blocksSize[blockId].height : 0;\r\n }\r\n\r\n #getEnabledPages = () => {\r\n return this.pages.filter(p => p.enabled);\r\n }\r\n\r\n #getSections(page) {\r\n let sectionsMap = [];\r\n\r\n page.sections.filter(s => s.enabled).forEach(section => {\r\n let sectionModel = this.#createSectionModel(section.selectedStyle);\r\n sectionsMap.push(sectionModel);\r\n })\r\n\r\n return sectionsMap;\r\n }\r\n\r\n #createSectionModel(section) {\r\n const header = {\r\n repeatOnEachPage: section.header.repeatOnEachPage,\r\n enabled: section.header.enabled,\r\n block: null\r\n };\r\n const footer = {\r\n enabled: section.footer.enabled,\r\n block: null\r\n }\r\n\r\n if (section.header.enabled && section.header.headerBlockId !== null)\r\n header.block = this.#getBlock(section.id, section.header.headerBlockId);\r\n\r\n if (section.footer.enabled && section.footer.footerBlockId !== null)\r\n footer.block = this.#getBlock(section.id, section.footer.footerBlockId);\r\n\r\n const blocks = this.#getBlocks(section.id).filter(b => b.id !== section.header.headerBlockId && b.id !== section.footer.footerBlockId);\r\n\r\n return { blocks: blocks, headerBlock: header, footer: footer, usePageBreak: section.usePageBreak, forcePageBreak: section.forcePageBreak };\r\n }\r\n\r\n #getBlock(sectionId, blockId) {\r\n return this.nodes.find(n => n.sectionId === sectionId && n.id === blockId);\r\n }\r\n\r\n #getBlocks(sectionId) {\r\n return this.nodes.filter(n => n.sectionId === sectionId);\r\n }\r\n}","import React, { useState } from 'react';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport CustomRadio from '../shared/radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport TextPrimary from '../shared/text-primary';\r\nimport DialogBox from '../shared/dialog-box';\r\nimport PropTypes from 'prop-types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n formControl: {\r\n marginLeft: '30px',\r\n width: '200px',\r\n '& .MuiFilledInput-input': {\r\n padding: '12px 24px 8px 8px'\r\n }\r\n }\r\n}));\r\n\r\nconst getSelectedItem = (parameter) => {\r\n return parameter.items.find(i => i.id === parameter.selectedItemId)\r\n}\r\n\r\nconst getDefaultPredefinedItem = (parameter) => {\r\n return parameter.items.find(i => !i.isUserDefined).id;\r\n}\r\n\r\nconst getUserDefinedItem = (parameter) => {\r\n return parameter.items.find(i => i.isUserDefined);\r\n}\r\n\r\nconst getParameterType = (selectedItem) => {\r\n return selectedItem.isUserDefined\r\n ? selectedItem.value === '' ? 2 : 1\r\n : 0;\r\n}\r\n\r\nconst getParameterItems = (items) => {\r\n return items.filter(i => !i.isUserDefined).map((item) =>\r\n {item.name}\r\n );\r\n}\r\n\r\nexport default function ParameterItem(props) {\r\n const { parameter, handleChangeParameterItem, open, setOpen } = props;\r\n const { t } = useTranslation();\r\n const selectedItem = getSelectedItem(parameter);\r\n const predefinedSelected = selectedItem.isUserDefined ? getDefaultPredefinedItem(parameter) : selectedItem.id;\r\n const userDefItem = getUserDefinedItem(parameter);\r\n\r\n const [paramType, setParamType] = useState(getParameterType(selectedItem));\r\n const [selected, setSelected] = useState(predefinedSelected);\r\n const [userValue, setUserValue] = useState(userDefItem.value);\r\n const classes = useStyles();\r\n\r\n \r\n const handleApply = () => {\r\n const newSelectedItemId = paramType === 0 ? selected : userDefItem.id;\r\n handleChangeParameterItem(parameter.id, newSelectedItemId, userValue);\r\n setOpen(false);\r\n }\r\n\r\n const handleClose = () => {\r\n setUserValue(userDefItem.value);\r\n setParamType(getParameterType(selectedItem));\r\n setSelected(predefinedSelected);\r\n setOpen(false);\r\n }\r\n\r\n const handleTypeChange = (e) => {\r\n const type = Number(e.target.value);\r\n setParamType(type);\r\n if (type === 2)\r\n setUserValue('');\r\n }\r\n\r\n const getDialogContent = () => {\r\n const parameterItems = getParameterItems(parameter.items);\r\n\r\n return (\r\n
\r\n \r\n
\r\n }\r\n label={{t('predefined_value')}}\r\n />\r\n \r\n setSelected(e.target.value)}\r\n value={selected}\r\n variant=\"filled\"\r\n disabled={paramType!==0}\r\n >\r\n {parameterItems}\r\n \r\n \r\n
\r\n
\r\n }\r\n label={{t('user_defined_value')}}\r\n />\r\n setUserValue(e.target.value)}\r\n value={userValue}\r\n className={classes.formControl}\r\n disabled={paramType !== 1}/>\r\n
\r\n }\r\n label={{t('empty_value')}}\r\n />\r\n
\r\n
\r\n )\r\n };\r\n\r\n const renderEditMode = () => {\r\n\r\n return (\r\n \r\n {getDialogContent()}\r\n \r\n );\r\n }\r\n\r\n return (\r\n renderEditMode()\r\n );\r\n}\r\n\r\nParameterItem.propTypes = {\r\n parameter: PropTypes.object.isRequired,\r\n handleChangeParameterItem: PropTypes.func.isRequired,\r\n open: PropTypes.bool.isRequired,\r\n setOpen: PropTypes.func.isRequired\r\n}","import ParameterEditor from './parameter-editor';\r\nexport default ParameterEditor;","import React, { useState } from 'react';\r\nimport ParameterEditor from '../parameter-editor';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst getEditParameterStyles = (selected) => {\r\n return {\r\n boxShadow: selected ? getSelectedBoxShadow() : 'inset 0px 0px 0px 2px #a90e11',\r\n boxSizing: 'border-box',\r\n cursor: 'pointer'\r\n };\r\n}\r\n\r\nconst getSelectedBoxShadow = () => {\r\n return 'inset 0px 0px 0px 2px #90ee90';\r\n}\r\n\r\nexport default function Parameter(props) {\r\n const [open, setOpen] = useState(false);\r\n\r\n const { name, attributes, parameter, handleChangeParameterItem, getReactElement, children } = props;\r\n const editStyle = getEditParameterStyles(open, children);\r\n attributes.style = { ...attributes.style, ...editStyle };\r\n attributes.onClick = () => setOpen(true);\r\n\r\n return (\r\n <>\r\n {getReactElement(name, attributes, children)}\r\n \r\n \r\n );\r\n}\r\n\r\nParameter.propTypes = {\r\n name: PropTypes.string.isRequired,\r\n attributes: PropTypes.object.isRequired,\r\n children: PropTypes.any.isRequired,\r\n parameter: PropTypes.object.isRequired,\r\n handleChangeParameterItem: PropTypes.func.isRequired,\r\n getReactElement: PropTypes.func.isRequired\r\n}\r\n","import Parameter from './parameter';\r\nexport default Parameter;","import React, { Component } from 'react';\r\nimport Parameter from '../parameter';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default class BlockItem extends Component {\r\n static displayName = BlockItem.name;\r\n\r\n //TODO: Delete after testing\r\n //getParameterInfo = (node) => {\r\n // if (node.name !== 'td')\r\n // return { isParam: false, paramId: '' };\r\n\r\n // return this.tryGetParameterInfo(node);\r\n //}\r\n\r\n //tryGetParameterInfo = (node) => {\r\n // if (node.type === 2)\r\n // return { isParam: true, paramId: node.id };;\r\n\r\n // for (let i = 0; i < node.childNodes.length; ++i) {\r\n // const paramInfo = this.tryGetParameterInfo(node.childNodes[i]);\r\n // if (paramInfo.isParam)\r\n // return paramInfo;\r\n // } \r\n\r\n // return { isParam: false, paramId: '' };;\r\n //}\r\n\r\n handleChangeParameterItem = (parameterId, selectedItemId, userDefValue) => {\r\n const { node, handleChangeParameterItem } = this.props;\r\n handleChangeParameterItem(node.sectionTypeId, parameterId, selectedItemId, userDefValue);\r\n }\r\n\r\n renderElements = (node) => {\r\n const { parameters, blockId, parameterMode} = this.props; \r\n\r\n if (node.type === 1 || node.type === 3)\r\n return node.value;\r\n\r\n if (node.type === 2) {\r\n const parameter = this.getParameter(node.id, parameters, blockId)\r\n return this.getSelectedItemValue(parameter);\r\n }\r\n \r\n let content = \r\n node.childNodes.map(child => \r\n this.renderElements(child)\r\n );\r\n\r\n //TODO: Delete after testing\r\n //const paramInfo = this.getParameterInfo(node);\r\n\r\n let attributes = cloneDeep(node.attributesMap);\r\n attributes.key = node.id;\r\n let style = attributes.style;\r\n if (style !== undefined)\r\n attributes.style = BlockItem.getStyleObjectFromString(attributes.style);\r\n\r\n if (node.isParameter) {\r\n attributes.title = `${content}`;\r\n if (parameterMode !== 0) {\r\n const parameter = this.getParameter(node.parameterId, parameters, blockId);\r\n return \r\n {content}\r\n ;\r\n }\r\n }\r\n\r\n return this.getReactElement(node.name, attributes, content);\r\n }\r\n\r\n getReactElement = (name, attributes, content) => {\r\n return content.length === 0 ? React.createElement(name, attributes) :\r\n React.createElement(name, attributes, content);\r\n }\r\n\r\n getSelectedItemValue = (parameter) => {\r\n return parameter.items.find(i => i.id === parameter.selectedItemId).value\r\n }\r\n\r\n getParameter = (paramId, parameters, blockId) => {\r\n const param = parameters.find(p => p.id === paramId);\r\n const parameterBlock = { id: param.id, selectedItemId: param.selectedItemId, items: [] };\r\n param.items.forEach(item => {\r\n const isUserDef = this.isUserDefined(item);\r\n const blockitem = { id: item.id, name: item.name, isUserDefined: isUserDef, value: isUserDef ? item.excelFormula : item.values.find(v => v.blockId === blockId).value };\r\n parameterBlock.items.push(blockitem);\r\n })\r\n return parameterBlock;\r\n }\r\n\r\n isUserDefined = (item) => {\r\n return item.name === '%userdefined%';\r\n }\r\n\r\n render() {\r\n const { node, sectionLinks } = this.props;\r\n const useSectionId = sectionLinks.find(s => s === node.sectionId) === undefined;\r\n sectionLinks.push(node.sectionId);\r\n const contents = this.renderElements(node);\r\n return useSectionId ? (\r\n
\r\n {contents}\r\n
\r\n ) :\r\n (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n static formatStringToCamelCase = str => {\r\n const splitted = str.split(\"-\");\r\n if (splitted.length === 1) return splitted[0];\r\n return (\r\n splitted[0] +\r\n splitted\r\n .slice(1)\r\n .map(word => word[0].toUpperCase() + word.slice(1))\r\n .join(\"\")\r\n );\r\n };\r\n\r\n static getStyleObjectFromString = str => {\r\n const style = {};\r\n str.split(\";\").forEach(el => {\r\n const [property, value] = el.split(\":\");\r\n if (!property) return;\r\n\r\n const formattedProperty = this.formatStringToCamelCase(property.trim());\r\n style[formattedProperty] = value.trim();\r\n });\r\n\r\n return style;\r\n };\r\n}\r\n\r\nBlockItem.defaultProps = {\r\n parameters: []\r\n}\r\n\r\nBlockItem.propTypes = {\r\n parameters: PropTypes.arrayOf(PropTypes.object),\r\n blockId: PropTypes.string.isRequired,\r\n handleChangeParameterItem: PropTypes.func.isRequired,\r\n parameterMode: PropTypes.number.isRequired,\r\n node: PropTypes.object.isRequired,\r\n sectionLinks: PropTypes.array\r\n}\r\n","import BlockItem from './block-item';\r\nexport default BlockItem;","import React from 'react';\r\nimport BlockItem from '../block-item';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport PropTypes from 'prop-types';\r\nimport TextSecondary from '../shared/text-secondary';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paper: {\r\n marginBottom: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center'\r\n },\r\n paperHeader: {\r\n alignSelf: 'flex-end',\r\n },\r\n pageItem: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center'\r\n }\r\n}));\r\n\r\nexport default function PageItemPreview(props) {\r\n const classes = useStyles();\r\n\r\n const { pageNumber, pageCount, blocks, settings, parameters, handleChangeParameterItem, parameterMode, sectionLinks} = props;\r\n\r\n const getPageItem = (items) => {\r\n const content =\r\n items.map(item => {\r\n const sectionParams = parameters[item.sectionTypeId];\r\n return \r\n });\r\n return content;\r\n };\r\n\r\n const { width, height, top, right, bottom, left } = settings;\r\n\r\n const getWithUnitsWrap = (value, units = 'pt') => {\r\n return `${value}${units}`;\r\n }\r\n\r\n const paperHeaderStyle = {\r\n height: getWithUnitsWrap(top),\r\n paddingTop: getWithUnitsWrap(top*0.3)\r\n }\r\n\r\n const paperStyle = {\r\n minWidth: getWithUnitsWrap(width),\r\n paddingRight: getWithUnitsWrap(right),\r\n paddingBottom: getWithUnitsWrap(bottom),\r\n paddingLeft: getWithUnitsWrap(left)\r\n }\r\n\r\n const pageItemStyle = {\r\n minWidth: getWithUnitsWrap(width),\r\n minHeight: getWithUnitsWrap(height)\r\n }\r\n\r\n return (\r\n \r\n
\r\n {pageNumber}/{pageCount}\r\n
\r\n
\r\n {getPageItem(blocks)}\r\n
\r\n
\r\n );\r\n}\r\nPageItemPreview.defaultProps = {\r\n pageNumber: 0,\r\n pageCount:0\r\n}\r\n\r\nPageItemPreview.propTypes = {\r\n pageNumber: PropTypes.number,\r\n pageCount: PropTypes.number,\r\n blocks: PropTypes.array.isRequired,\r\n settings: PropTypes.object.isRequired,\r\n parameters: PropTypes.any.isRequired,\r\n handleChangeParameterItem: PropTypes.func.isRequired,\r\n parameterMode: PropTypes.number.isRequired,\r\n sectionLinks: PropTypes.array\r\n}","import PageItemPreview from './page-item-preview';\r\nexport default PageItemPreview;","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nexport default function InputNumber(props) {\r\n const { value, maxValue, fontSize, handleChange } = props;\r\n const [currentValue, setCurrentValue] = useState(value);\r\n const [inputWidth, setInputWidth] = useState(20);\r\n\r\n useEffect(() => {\r\n setCurrentValue(value);\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n const length = currentValue.toString().length;\r\n setInputWidth((length + 1) * fontSize);\r\n }, [currentValue])\r\n\r\n const onChange = (e) => {\r\n const newValue = e.target.value;\r\n if (newValue >= 1 && newValue <= maxValue) {\r\n setCurrentValue(newValue);\r\n handleChange(newValue);\r\n }\r\n }\r\n\r\n return ;\r\n}\r\n\r\nInputNumber.defaultProps = {\r\n fontSize: 14,\r\n handleChange: () => { }\r\n}\r\n\r\nInputNumber.propTypes = {\r\n value: PropTypes.number.isRequired,\r\n maxValue: PropTypes.number.isRequired,\r\n handleChange: PropTypes.func,\r\n fontSize: PropTypes.number\r\n}","import {useState, useEffect} from 'react';\r\n\r\nexport default function useKeyPress (targetKey) {\r\n const [keyPressed, setKeyPressed] = useState(false);\r\n\r\n function downHandler({ key }) {\r\n if (key === targetKey) {\r\n setKeyPressed(true);\r\n }\r\n }\r\n\r\n const upHandler = ({ key }) => {\r\n if (key === targetKey) {\r\n setKeyPressed(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"keydown\", downHandler);\r\n window.addEventListener(\"keyup\", upHandler);\r\n\r\n return () => {\r\n window.removeEventListener(\"keydown\", downHandler);\r\n window.removeEventListener(\"keyup\", upHandler);\r\n };\r\n });\r\n\r\n return keyPressed;\r\n};","import React, {useState, useEffect, useRef} from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\nimport PageItemGenerator from '../../utils/page-item-generator';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport HomeAlert from '../home-alert';\r\nimport PropTypes from 'prop-types';\r\nimport Progress from '../shared/progress';\r\nimport PageItemPreview from '../page-item-preview';\r\nimport { TransformWrapper, TransformComponent } from \"react-zoom-pan-pinch\";\r\nimport ZoomOutIcon from '@material-ui/icons/ZoomOut';\r\nimport ZoomInIcon from '@material-ui/icons/ZoomIn';\r\nimport RestoreIcon from '@material-ui/icons/Restore';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport FilterCenterFocusIcon from '@material-ui/icons/FilterCenterFocus';\r\nimport ViewModuleIcon from '@material-ui/icons/ViewModule';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\nimport CustomTooltip from '../shared/tooltip';\r\nimport InputNumber from '../shared/input-number';\r\nimport useKeyPress from '../../hooks/key-press';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%'\r\n },\r\n homeBtn: {\r\n padding: '6px 16px 6px 8px',\r\n borderRadius: '4px',\r\n backgroundColor: '#fff',\r\n '&:hover': {\r\n backgroundColor: '#e6e6e7'\r\n }\r\n },\r\n page: {\r\n alignItems: 'center',\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n wrapper: {\r\n overflow:'auto'\r\n },\r\n zoomPanel: {\r\n position: 'absolute',\r\n bottom: 4,\r\n right: 0,\r\n zIndex: 1,\r\n margin: theme.spacing(0, 2, 2, 0)\r\n },\r\n paginationPanel: {\r\n position: 'absolute',\r\n display: 'flex',\r\n alignItems:'center',\r\n bottom: 4,\r\n left: 360,\r\n zIndex: 1,\r\n margin: theme.spacing(0, 0, 2, 2)\r\n },\r\n zoomContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '16px',\r\n width: '100%',\r\n alignItems: 'center'\r\n },\r\n zoomBox: {\r\n width: 'fit-content',\r\n height: 'fit-content'\r\n },\r\n multiplePages: {\r\n display: 'flex'\r\n },\r\n homeBtnBox: {\r\n position: 'absolute',\r\n top: 70,\r\n zIndex:1\r\n }\r\n}));\r\n\r\nconst getDefaultWrapperStyle = () => {\r\n return {\r\n overflow: 'initial',\r\n maxWidth: '100%',\r\n display: 'flex',\r\n MozUserSelect: 'initial',\r\n WebkitUserSelect: 'initial',\r\n msUserSelect: 'initial',\r\n KhtmlUserSelect: 'initial',\r\n WebkitTouchCallout: 'initial',\r\n userSelect: 'initial'\r\n }\r\n};\r\n\r\nexport default function Page(props) {\r\n const { t } = useTranslation();\r\n const { parameters, settings, handleChangeParameterItem, parameterMode, pages, nodes, blocksSize, paginationDisabled, loading} = props;\r\n const { fullHeight, fullWidth } = settings;\r\n const classes = useStyles();\r\n const [openHome, setOpenHome] = useState(false);\r\n const [mainPageWidth, setMainPageWidth] = useState(0);\r\n const [mainPageHeight, setMainPageHeight] = useState(0);\r\n const [pageCount, setPageCount] = useState(0);\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const [multipleMode, setMultipleMode] = useState(false);\r\n const [paginationMode, setPaginationMode] = useState(false);\r\n const [scale, setScale] = useState(1);\r\n const [countPerPage, setCountPerPage] = useState(1);\r\n const leftPress = useKeyPress(\"ArrowLeft\");\r\n const rightPress = useKeyPress(\"ArrowRight\");\r\n\r\n const gap = 16;\r\n const zoomStep = 0.1;\r\n const zoomWheelDisabled = true; //Use true if you want to disable zoom operation using CTRL + wheel keys and false if you want to allow\r\n const scrollBarWidth = 8;\r\n const ref = useRef(null);\r\n const homeButtonRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const pageWidth = ref.current.clientWidth;\r\n if (pageWidth > 0)\r\n setMainPageWidth(pageWidth);\r\n\r\n const pageHeight = ref.current.clientHeight;\r\n if (pageHeight > 0)\r\n setMainPageHeight(pageHeight);\r\n })\r\n\r\n useEffect(() => {\r\n if (paginationMode && rightPress) {\r\n forward();\r\n }\r\n }, [rightPress]);\r\n\r\n useEffect(() => {\r\n if (paginationMode && leftPress) {\r\n back();\r\n }\r\n }, [leftPress]);\r\n\r\n useEffect(() => {\r\n setCurrentPage(0);\r\n recalculateCountPerPage();\r\n },[pageCount])\r\n\r\n useEffect(() => {\r\n recalculateCountPerPage();\r\n }, [scale])\r\n\r\n const openHomePage = () => {\r\n setOpenHome(true);\r\n }\r\n\r\n const recalculateCountPerPage = () => {\r\n const posibleCount = getPosiblePageCount();\r\n if (posibleCount > 0) {\r\n setCountPerPage(posibleCount > pageCount ? pageCount : posibleCount);\r\n }\r\n }\r\n\r\n const getPosiblePageCount = () => {\r\n return Math.floor((mainPageWidth - scrollBarWidth) / getWrapperWidth());\r\n }\r\n\r\n const disablePaginationMode = () => {\r\n if (paginationMode)\r\n setPaginationMode(false);\r\n }\r\n\r\n const getScale = (scale) => {\r\n return scale < 0.5\r\n ? 0.5\r\n : scale > 2\r\n ? 2 : scale;\r\n }\r\n\r\n const getWrapperHeight = () => {\r\n if (fullHeight > 0) {\r\n return paginationMode\r\n ? (fullHeight * scale)\r\n : (fullHeight * scale * pageCount) + (gap * pageCount * scale);\r\n }\r\n return 0;\r\n }\r\n\r\n const getWrapperWidth = () => {\r\n if (fullWidth > 0) {\r\n return (fullWidth * scale);\r\n }\r\n return 0;\r\n }\r\n\r\n const getWrapperWidthMultiplePages = (width) => {\r\n return (width * countPerPage) + ((countPerPage - 1) * gap);\r\n }\r\n\r\n const getWrapperHeightMultiplePages = (height) => {\r\n const count = getPageCount();\r\n return paginationMode ? height : count * (height / pageCount);\r\n }\r\n\r\n const getPageCount = () => {\r\n return multipleMode ? Math.ceil(pageCount / countPerPage) : pageCount;\r\n }\r\n\r\n const getWrapperStyle = () => {\r\n const style = getDefaultWrapperStyle();\r\n\r\n const height = getWrapperHeight();\r\n const width = getWrapperWidth();\r\n\r\n if (height > 0)\r\n style.height = multipleMode ? getWrapperHeightMultiplePages(height) : height;\r\n\r\n if (width > 0)\r\n style.width = multipleMode ? getWrapperWidthMultiplePages(width) : width;\r\n\r\n return style;\r\n }\r\n\r\n const zoomInScale = () => getScale(scale + zoomStep);\r\n\r\n const zoomOutScale = () => getScale(scale - zoomStep);\r\n\r\n\r\n const onZoomStop = (ReactZoomPanPinchRef, event) => {\r\n disablePaginationMode();\r\n const calcScale = getScale(ReactZoomPanPinchRef.state.scale);\r\n setScale(calcScale);\r\n ReactZoomPanPinchRef.setTransform(0, 0, calcScale);\r\n }\r\n\r\n const customZoom = (calcScaleFunc, zoomFunc, setTransform) => {\r\n disablePaginationMode();\r\n const calcScale = calcScaleFunc();\r\n zoomFunc(zoomStep);\r\n setScale(calcScale)\r\n setTransform(0, 0, calcScale);\r\n }\r\n\r\n const zoomToFit = (setTransform) => {\r\n setCurrentPage(0);\r\n const mode = !paginationMode && !paginationDisabled;\r\n if (!paginationDisabled)\r\n setPaginationMode(mode);\r\n\r\n const calcScale = 1 / ((fullHeight) / (mainPageHeight));\r\n const zoomScale = mode? calcScale: getScale(calcScale);\r\n setScale(zoomScale)\r\n setTransform(0, 0, zoomScale);\r\n }\r\n\r\n const resetZoomTransform = (reset) => {\r\n setPaginationMode(false);\r\n setMultipleMode(false);\r\n setScale(1);\r\n reset();\r\n }\r\n\r\n const handleMultipleMode = () => {\r\n setMultipleMode(!multipleMode);\r\n setCurrentPage(0);\r\n }\r\n\r\n const renderPage = () => {\r\n const content = multipleMode ? renderMultiplePages() : renderSinglePages();\r\n return paginationMode ? content[currentPage] : content;\r\n }\r\n\r\n const renderSinglePages = () => {\r\n const pageItemGenerator = new PageItemGenerator((settings.height * 0.95), pages, nodes, blocksSize);\r\n const pageItemList = pageItemGenerator.getPageItemList();\r\n if (pageItemList.length > 0 && pageCount !== pageItemList.length) {\r\n setPageCount(pageItemList.length);\r\n }\r\n const sectionLinks = [];\r\n const content = [];\r\n let number = 1;\r\n const count = pageItemList.length;\r\n pageItemList.forEach(pageItem => {\r\n content.push(\r\n \r\n )\r\n number++;\r\n })\r\n return content;\r\n }\r\n\r\n const renderMultiplePages = () => {\r\n const content = renderSinglePages();\r\n const multipleContent = [];\r\n const row = [];\r\n let i;\r\n for (i = 0; i < content.length; i++) {\r\n row.push(content[i]);\r\n if (row.length === countPerPage) {\r\n multipleContent.push(\r\n
\r\n {[...row]}\r\n
\r\n );\r\n row.splice(0);\r\n }\r\n\r\n }\r\n if (row.length > 0)\r\n multipleContent.push(\r\n
\r\n {[...row]}\r\n
\r\n );\r\n return multipleContent;\r\n }\r\n\r\n const getActiveBtnStyle = (isActive) => {\r\n if (isActive)\r\n return { color: 'black' };\r\n return {};\r\n }\r\n\r\n const zoomWrapper = (content) => {\r\n return (\r\n \r\n {({ ...handlers }) => {\r\n return (\r\n \r\n {getPaginationPanel()}\r\n {getZoomPanel(handlers)}\r\n \r\n {content}\r\n \r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n\r\n const back = () => {\r\n if (currentPage > 0)\r\n setCurrentPage(currentPage - 1);\r\n }\r\n\r\n const forward = () => {\r\n if (currentPage < getPageCount() - 1)\r\n setCurrentPage(currentPage + 1);\r\n }\r\n\r\n const onWheel= (event) => {\r\n if (paginationMode) {\r\n if (event.deltaY < 0)\r\n back();\r\n else\r\n forward();\r\n }\r\n }\r\n\r\n const getPaginationPanel = () => {\r\n const count = getPageCount();\r\n return paginationMode ? (\r\n
\r\n \r\n \r\n \r\n {setCurrentPage(number-1)}}\r\n />\r\n of {count}\r\n \r\n \r\n \r\n
\r\n ) : null;\r\n }\r\n\r\n const getZoomPanel = (handlers) => {\r\n const { zoomIn, zoomOut, resetTransform, setTransform } = handlers;\r\n return (\r\n
\r\n \r\n customZoom(zoomInScale, zoomIn, setTransform)}>\r\n \r\n \r\n \r\n \r\n customZoom(zoomOutScale, zoomOut, setTransform)}>\r\n \r\n \r\n \r\n \r\n resetZoomTransform(resetTransform)}>\r\n \r\n \r\n \r\n \r\n zoomToFit(setTransform)} style={getActiveBtnStyle(paginationMode)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n const getHomeButton = () => {\r\n return
\r\n }\r\n >\r\n {t('back_to_template_btn')}\r\n \r\n \r\n
;\r\n }\r\n\r\n const getMainPageStyle = () => {\r\n if (paginationMode)\r\n return { overflow: 'hidden' };\r\n return null;\r\n }\r\n\r\n const { showHomeButton } = props;\r\n return (\r\n
\r\n {showHomeButton ? getHomeButton() : ''}\r\n
\r\n {loading ? : zoomWrapper(renderPage())}\r\n
\r\n
\r\n );\r\n}\r\nPage.defaultProps = {\r\n loading: false,\r\n showHomeButton: true,\r\n paginationDisabled: false,\r\n blocksSize: {},\r\n nodes:[]\r\n}\r\n\r\nPage.propTypes = {\r\n loading: PropTypes.bool,\r\n showHomeButton: PropTypes.bool,\r\n paginationDisabled: PropTypes.bool,\r\n settings: PropTypes.object.isRequired,\r\n pages: PropTypes.array.isRequired,\r\n nodes: PropTypes.array,\r\n blocksSize: PropTypes.any,\r\n parameters: PropTypes.any.isRequired,\r\n handleChangeParameterItem: PropTypes.func.isRequired,\r\n parameterMode: PropTypes.number.isRequired,\r\n}","import Page from './page';\r\nexport default Page;","import React from 'react';\r\nimport CustomCheckbox from '../shared/checkbox';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport PropTypes from 'prop-types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n repeatOnEachPage: {\r\n marginLeft: theme.spacing(2)\r\n }\r\n}));\r\n\r\n\r\nexport default function HeaderControl(props) {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n\r\n const renderElements = () => {\r\n const { header, handleRepeatHeader, handleHeaderEnable } = props;\r\n if (!header.headerBlockId)\r\n return;\r\n return (\r\n <>\r\n handleHeaderEnable(!header.enabled)}\r\n name=\"headerEnable\" />\r\n }\r\n label={{t('header')}}\r\n />\r\n handleRepeatHeader(!header.repeatOnEachPage)}\r\n name=\"repeatOnEachPage\"/>\r\n }\r\n label={{t('repeat_on_each_page')}}\r\n />\r\n \r\n );\r\n }\r\n\r\n const content = renderElements();\r\n return (\r\n
\r\n {content}\r\n
\r\n );\r\n}\r\n\r\nHeaderControl.propTypes = {\r\n header: PropTypes.object.isRequired,\r\n handleRepeatHeader: PropTypes.func.isRequired,\r\n handleHeaderEnable: PropTypes.func.isRequired\r\n}","import HeaderControl from './header-control';\r\nexport default HeaderControl;","import FooterControl from './footer-control';\r\nexport default FooterControl;","import React from 'react';\r\nimport CustomCheckbox from '../shared/checkbox';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport PropTypes from 'prop-types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport default function FooterControl (props){\r\n const { t } = useTranslation();\r\n\r\n const renderElements = () => {\r\n const { footer, handleFooterEnable } = props;\r\n if (!footer.footerBlockId)\r\n return;\r\n return (\r\n handleFooterEnable(!footer.enabled)}\r\n name=\"footerEnable\" />\r\n }\r\n label={{t('footer')}}\r\n />\r\n );\r\n }\r\n\r\n const content = renderElements();\r\n return (\r\n
\r\n {content}\r\n
\r\n );\r\n}\r\n\r\nFooterControl.propTypes = {\r\n footer: PropTypes.object.isRequired,\r\n handleFooterEnable: PropTypes.func.isRequired,\r\n}","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst styles = {\r\n root: {\r\n fontFamily: 'Roboto',\r\n fontSize: '12px',\r\n fontWeight: 'normal',\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: 1.33,\r\n letterSpacing: 'normal',\r\n textTransform: 'none',\r\n textDecoration: 'underline',\r\n color: '#a90e11'\r\n }\r\n};\r\n\r\nfunction TextSecondaryButton(props) {\r\n const { classes } = props;\r\n return ;\r\n}\r\n\r\nexport default withStyles(styles)(TextSecondaryButton);\r\n\r\nTextSecondaryButton.propTypes = {\r\n classes: PropTypes.object.isRequired\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport PropTypes from 'prop-types';\r\nimport TextSecondaryButton from '../shared/text-secondary-button';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n button: {\r\n minWidth: '0'\r\n }\r\n}));\r\n\r\nexport default function SecondaryButton(props) {\r\n const { onClick, children, style} = props;\r\n const classes = useStyles();\r\n return (\r\n \r\n );\r\n}\r\n\r\nSecondaryButton.defaultProps = {\r\n onClick: () => { },\r\n children: '',\r\n style: {}\r\n}\r\n\r\nSecondaryButton.propTypes = {\r\n onClick: PropTypes.func,\r\n children: PropTypes.string,\r\n style: PropTypes.object\r\n}","import React, { useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next';\r\nimport SecondaryButton from '../shared/secondary-button'\r\nimport DialogBox from '../shared/dialog-box';\r\nimport PropTypes from 'prop-types';\r\nimport CustomTooltip from '../shared/tooltip';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n width: '280px'\r\n }\r\n}));\r\n\r\nexport default function Reset(props) {\r\n const { sectionId, handleSectionReset} = props;\r\n const [open, setOpen] = useState(false);\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n const handleApply = () => {\r\n handleSectionReset(sectionId);\r\n setOpen(false);\r\n }\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n }\r\n\r\n const handleChange = () => {\r\n setOpen(true);\r\n }\r\n\r\n const render = () => {\r\n return (\r\n <>\r\n \r\n
\r\n {t('reset_btn')}\r\n
\r\n
\r\n \r\n
\r\n {t('reset_wrn')}\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n return (\r\n render()\r\n );\r\n}\r\n\r\nReset.propTypes = {\r\n sectionId: PropTypes.string.isRequired,\r\n handleSectionReset: PropTypes.func.isRequired\r\n}\r\n","import Reset from './reset';\r\nexport default Reset;","import React from 'react';\r\nimport CustomCheckbox from '../shared/checkbox';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport TextPrimary from '../shared/text-primary';\r\nimport CustomTooltip from '../shared/tooltip';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport HeaderControl from '../header-control';\r\nimport FooterControl from '../footer-control';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport Reset from '../reset';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport PropTypes from 'prop-types';\r\nimport SecondaryButton from '../shared/secondary-button'\r\nimport { HashLink as Link } from 'react-router-hash-link';\r\nimport PhotoSizeSelectActualIcon from '@material-ui/icons/PhotoSizeSelectActual';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n headerSectionBox: {\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n },\r\n headerSection: {\r\n justifyContent: 'flex-start'\r\n },\r\n resetBtn: {\r\n justifyContent: 'flex-end'\r\n },\r\n sectionBox: {\r\n paddingLeft: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n style: {\r\n borderRadius: '4px',\r\n boxShadow: 'inset 0 -1px 0 0 #8795a7',\r\n backgroundColor: '#f1f3f5'\r\n },\r\n selectLabel: {\r\n margin: '4px 0 0 12px'\r\n },\r\n chooseStyle: {\r\n justifyContent: 'flex-end',\r\n marginTop: theme.spacing(1),\r\n minWidth: '0'\r\n },\r\n sectionTitle: {\r\n width: '150px'\r\n },\r\n stylesBtnBox: {\r\n display:'flex'\r\n },\r\n stylesBtnIcon: {\r\n borderRadius: '10%'\r\n },\r\n styleBox: {\r\n display: 'flex'\r\n },\r\n styleList: {\r\n flexGrow: 1\r\n },\r\n sectionBtn: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n showBtn: {\r\n\r\n }\r\n}));\r\n\r\nexport default function SectionItemControl(props){\r\n\r\n const handleRepeatHeader = (repeatOnEachPage) => {\r\n props.handleRepeatHeader(props.section.id, repeatOnEachPage);\r\n }\r\n\r\n const handleChangeStyle = (event) => {\r\n props.handleChangeStyle(props.section.id, event.target.value);\r\n }\r\n\r\n const handleChooseStyle = () => {\r\n props.handleChooseStyle(props.section);\r\n }\r\n\r\n const handleHeaderEnable = (enabled) => {\r\n props.handleHeaderEnable(props.section.id, enabled);\r\n }\r\n\r\n const handleFooterEnable = (enabled) => {\r\n props.handleFooterEnable(props.section.id, enabled);\r\n } \r\n\r\n const getStyles = (styles) => {\r\n return styles.map((style) =>\r\n {style.title}\r\n );\r\n }\r\n\r\n const { section, handleSectionEnable, handleSectionForcePageBreak, handleSectionReset } = props;\r\n const styles = getStyles(section.styles);\r\n const selected = section.selectedStyle;\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n event.stopPropagation()}\r\n onFocus={(event) => event.stopPropagation()}\r\n control={\r\n handleSectionEnable(section.id, !section.enabled)}\r\n />}\r\n label={{section.type.name}} />\r\n \r\n
\r\n
\r\n \r\n \r\n {t('focus_btn')}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {t('styles')}\r\n \r\n {styles}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {/*TODO: Need to hide*/}\r\n {/* handleSectionPageBreak(section.id, !selected.usePageBreak)}*/}\r\n {/* name=\"usePageBreak\"*/}\r\n {/* />*/}\r\n {/* }*/}\r\n {/* label={Use Page Break}*/}\r\n {/*/>*/}\r\n handleSectionForcePageBreak(section.id, !selected.forcePageBreak)}\r\n name=\"forcePageBreak\"\r\n />\r\n }\r\n label={{t('force_page_break')}}\r\n />\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nSectionItemControl.propTypes = {\r\n section: PropTypes.object.isRequired,\r\n handleSectionEnable: PropTypes.func,\r\n handleSectionPageBreak: PropTypes.func,\r\n handleSectionForcePageBreak: PropTypes.func,\r\n handleRepeatHeader: PropTypes.func,\r\n handleHeaderEnable: PropTypes.func,\r\n handleFooterEnable: PropTypes.func,\r\n handleChangeStyle: PropTypes.func,\r\n handleSectionReset: PropTypes.func,\r\n handleChooseStyle: PropTypes.func\r\n}","import SectionItemControl from './section-item-control';\r\nexport default SectionItemControl;","import React from 'react';\r\nimport SectionItemControl from '../section-item-control'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n width: '100%',\r\n paddingLeft: theme.spacing(2)\r\n }\r\n}));\r\n\r\nexport default function SectionListControl(props){\r\n\r\n const renderElements = () => {\r\n const {\r\n sections,\r\n handleSectionEnable,\r\n handleSectionPageBreak,\r\n handleRepeatHeader,\r\n handleSectionForcePageBreak,\r\n handleChangeStyle,\r\n handleHeaderEnable,\r\n handleFooterEnable,\r\n handleSectionReset,\r\n handleChooseStyle} = props;\r\n\r\n let content = sections.map(section =>\r\n \r\n )\r\n \r\n return content;\r\n }\r\n\r\n const contents = renderElements();\r\n const classes = useStyles();\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n}\r\n\r\nSectionListControl.propTypes = {\r\n sections: PropTypes.array.isRequired,\r\n handleSectionEnable: PropTypes.func,\r\n handleSectionPageBreak: PropTypes.func,\r\n handleSectionForcePageBreak: PropTypes.func,\r\n handleRepeatHeader: PropTypes.func,\r\n handleHeaderEnable: PropTypes.func,\r\n handleFooterEnable: PropTypes.func,\r\n handleChangeStyle: PropTypes.func,\r\n handleSectionReset: PropTypes.func,\r\n handleChooseStyle: PropTypes.func\r\n}","import SectionListControl from './section-list-control';\r\nexport default SectionListControl;","import React from 'react';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport TextPrimary from '../shared/text-primary';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport SectionListControl from '../section-list-control'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CustomCheckbox from '../shared/checkbox';\r\nimport PropTypes from 'prop-types';\r\nimport CustomTooltip from '../shared/tooltip';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n padding: '0px 24px 0 24px',\r\n display: 'flex',\r\n flexWrap: 'wrap'\r\n },\r\n pageTitle: {\r\n width:'200px'\r\n },\r\n expanded: {\r\n backgroundColor: '#f1f3f5'\r\n },\r\n summaryContent: {\r\n '&.Mui-expanded': {\r\n margin: 0\r\n }\r\n }\r\n}));\r\n\r\nexport default function PageItemControl(props) {\r\n\r\n const { page, handlePageEnable, handlePageBreak, expanded, handleChange} = props;\r\n\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n const handleSectionEnable = (sectionId, enabled) => {\r\n props.handleSectionEnable(page.id, sectionId, enabled);\r\n }\r\n\r\n const handleSectionPageBreak = (sectionId, usePageBreak) => {\r\n props.handleSectionPageBreak(page.id, sectionId, usePageBreak);\r\n }\r\n\r\n const handleSectionForcePageBreak = (sectionId, forcePageBreak) => {\r\n props.handleSectionForcePageBreak(page.id, sectionId, forcePageBreak);\r\n }\r\n\r\n const handleRepeatHeader = (sectionId, repeatOnEachPage) => {\r\n props.handleRepeatHeader(page.id, sectionId, repeatOnEachPage);\r\n }\r\n\r\n const handleHeaderEnable = (sectionId, enabled) => {\r\n props.handleHeaderEnable(page.id, sectionId, enabled);\r\n }\r\n\r\n const handleFooterEnable = (sectionId, enabled) => {\r\n props.handleFooterEnable(page.id, sectionId, enabled);\r\n }\r\n\r\n const handleChangeStyle = (sectionId, styleId) => {\r\n props.handleChangeStyle(page.id, sectionId, styleId);\r\n }\r\n\r\n const handleSectionReset = (sectionId) => {\r\n props.handleSectionReset(page.id, sectionId);\r\n }\r\n\r\n const handleChooseStyle = (section) => {\r\n props.handleChooseStyle(page.id, section);\r\n }\r\n\r\n return (\r\n \r\n }\r\n aria-label=\"Expand\"\r\n id={page.id}\r\n classes={{ content: classes.summaryContent }}\r\n className={classes.content}>\r\n \r\n event.stopPropagation()}\r\n onFocus={(event) => event.stopPropagation()}\r\n control={\r\n handlePageEnable(page.id, !page.enabled)}\r\n />}\r\n label={{page.title}} />\r\n \r\n \r\n \r\n handlePageBreak(page.id, !page.startWithPageBreak)}\r\n name=\"startWithPageBreak\" />\r\n }\r\n label={{t('start_with_page_break')}}\r\n />\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nPageItemControl.defaultProps = {\r\n handlePageEnable: () => { },\r\n handlePageBreak: () => { },\r\n handleChange: () => { },\r\n handleSectionEnable: () => { },\r\n handleSectionPageBreak: () => { },\r\n handleSectionForcePageBreak: () => { },\r\n handleRepeatHeader: () => { },\r\n handleHeaderEnable: () => { },\r\n handleFooterEnable: () => { },\r\n handleChangeStyle: () => { },\r\n handleSectionReset: () => { },\r\n handleChooseStyle: () => { },\r\n}\r\n\r\nPageItemControl.propTypes = {\r\n page: PropTypes.object.isRequired,\r\n expanded: PropTypes.any.isRequired,\r\n handlePageEnable: PropTypes.func,\r\n handlePageBreak: PropTypes.func,\r\n handleChange: PropTypes.func,\r\n handleSectionEnable: PropTypes.func,\r\n handleSectionPageBreak: PropTypes.func,\r\n handleSectionForcePageBreak: PropTypes.func,\r\n handleRepeatHeader: PropTypes.func,\r\n handleHeaderEnable: PropTypes.func,\r\n handleFooterEnable: PropTypes.func,\r\n handleChangeStyle: PropTypes.func,\r\n handleSectionReset: PropTypes.func,\r\n handleChooseStyle: PropTypes.func\r\n}\r\n","import PageItemControl from './page-item-control';\r\nexport default PageItemControl;","import React from 'react';\r\nimport { withStyles, makeStyles } from '@material-ui/core/styles';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport { useTranslation } from 'react-i18next'\r\nimport Switch from '@material-ui/core/Switch';\r\nimport CustomTooltip from '../shared/tooltip';\r\nimport TextSecondary from '../shared/text-secondary';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst CustomSwitch = withStyles({\r\n switchBase: {\r\n color: '#ffffff',\r\n '&$checked': {\r\n color: '#a90e11',\r\n },\r\n '&$checked + $track': {\r\n backgroundColor: '#a90e11',\r\n },\r\n },\r\n checked: {},\r\n track: {},\r\n disabled: {}\r\n})(Switch);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n width: '100%',\r\n paddingLeft: theme.spacing(3),\r\n marginBottom: theme.spacing(2)\r\n }\r\n}));\r\n\r\nexport default function ViewModeControl(props){\r\n const { handleChange, viewMode, enabled } = props;\r\n const { t } = useTranslation();\r\n const checked = viewMode === 1;\r\n const classes = useStyles();\r\n return (\r\n
\r\n \r\n handleChange(e.target.checked)} disabled={!enabled} />}\r\n label={{t('view_mode')}}\r\n />\r\n \r\n
\r\n );\r\n}\r\n\r\nViewModeControl.propTypes = {\r\n viewMode: PropTypes.number.isRequired,\r\n handleChange: PropTypes.func.isRequired\r\n}","import ViewModeControl from './view-mode-control';\r\nexport default ViewModeControl;","import React from 'react';\r\nimport PageItemControl from '../page-item-control'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { useTranslation } from 'react-i18next'\r\nimport TextSubHeader from '../shared/text-sub-header';\r\nimport ViewModeControl from '../view-mode-control';\r\nimport Progress from '../shared/progress';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n heading: {\r\n height: '28px',\r\n margin: '8px 12px 30px 24px'\r\n },\r\n controls: {\r\n overflowY: 'auto',\r\n overflowX: 'hidden'\r\n }\r\n}));\r\n\r\nexport default function TemplateListControl(props) {\r\n const [expanded, setExpanded] = React.useState(false);\r\n const { t } = useTranslation();\r\n\r\n const handleChange = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n\r\n const classes = useStyles();\r\n const {\r\n pages,\r\n loading,\r\n parameterMode,\r\n enabledEditMode,\r\n handlePageEnable,\r\n handlePageBreak,\r\n handleSectionEnable,\r\n handleSectionPageBreak,\r\n handleRepeatHeader,\r\n handleSectionForcePageBreak,\r\n handleChangeStyle,\r\n handleHeaderEnable,\r\n handleFooterEnable,\r\n handleSectionReset,\r\n handleChangeParameterViewMode,\r\n handleChooseStyle} = props;\r\n\r\n const pageControls = () => pages.map(page =>\r\n \r\n );\r\n\r\n const getContent = () => {\r\n return (\r\n <>\r\n \r\n
\r\n {pageControls()}\r\n
\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n {t('template_settings')}\r\n
\r\n {loading ? : getContent()}\r\n \r\n );\r\n}\r\n","import TemplateListControl from './template-list-control';\r\nexport default TemplateListControl;","import React, { useState } from 'react';\r\nimport TemplateService from '../../services/template-service';\r\nimport ActionButton from '../shared/action-button';\r\nimport CustomSnackBar from '../shared/snack-bar';\r\nimport { useTranslation } from 'react-i18next';\r\nimport PropTypes from 'prop-types';\r\nimport LanguageHelper from '../../utils/language-helper';\r\n\r\nexport default function DownloadConfiguration(props) {\r\n const [open, setOpen] = useState(false);\r\n const { t } = useTranslation();\r\n const { parameters, pages, templateId, disabled } = props;\r\n\r\n const saveConfiguration = async () => {\r\n const currentLanguageCode = LanguageHelper.getCurrentLanguageAsync();\r\n const config = { parameters: parameters, pages: pages };\r\n const response = await TemplateService.saveConfiguration(templateId, config, currentLanguageCode);\r\n \r\n response.blob().then(blob => {\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = 'configuration.sst';\r\n a.click();\r\n //TODO: Remove a object\r\n });\r\n }\r\n\r\n const handleSave = async () => {\r\n await saveConfiguration();\r\n handleOpen();\r\n }\r\n\r\n const handleOpen= () => {\r\n setOpen(true);\r\n };\r\n\r\n return (\r\n <>\r\n {t('download_btn')}\r\n \r\n \r\n );\r\n}\r\n\r\nDownloadConfiguration.defaultProps = {\r\n parameters: {},\r\n pages: [],\r\n templateId: '',\r\n disabled:false\r\n}\r\n\r\nDownloadConfiguration.propTypes = {\r\n parameters: PropTypes.any,\r\n pages: PropTypes.arrayOf(PropTypes.object),\r\n templateId: PropTypes.string,\r\n disabled: PropTypes.bool\r\n}","import DownloadConfiguration from './download-configuration';\r\nexport default DownloadConfiguration;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Layout from '../layout';\r\nimport PropTypes from 'prop-types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n notFound: {\r\n display: 'flex',\r\n width:'100%',\r\n alignItems: 'center',\r\n justifyContent:'center'\r\n }\r\n}));\r\n\r\nexport default function ErrorPage(props) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n
\r\n

{props.children ?? t('not_found_page')}

\r\n
\r\n
\r\n );\r\n}\r\n\r\nErrorPage.defaultProps = {\r\n children: null\r\n}\r\n\r\n\r\nErrorPage.propTypes = {\r\n children: PropTypes.string,\r\n}","import ErrorPage from './error-page';\r\nexport default ErrorPage;","import React, { useState, useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport PropTypes from 'prop-types';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Page from '../page';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport TextSubHeader from '../shared/text-sub-header';\r\nimport CustomTooltip from '../shared/tooltip';\r\nimport useKeyPress from '../../hooks/key-press';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n },\r\n dialogRoot: {\r\n padding: 0,\r\n overflow: 'auto',\r\n overflowY: 'hidden',\r\n '&:first-child': {\r\n padding: 0\r\n }\r\n },\r\n actionsRoot: {\r\n justifyContent: 'center'\r\n },\r\n paper: {\r\n height: '80vh'\r\n },\r\n listItem: {\r\n \"&.Mui-selected\": {\r\n backgroundColor: '#a90e11',\r\n color: 'white',\r\n '&:hover': {\r\n backgroundColor: '#8e090c'\r\n }\r\n }\r\n },\r\n styleItems: {\r\n overflow: 'auto'\r\n },\r\n preview: {\r\n backgroundColor: '#f2f2f2',\r\n display: 'flex',\r\n flexGrow: '1',\r\n width:'100%',\r\n height: '80vh',\r\n padding: theme.spacing(2)\r\n },\r\n controls: {\r\n boxShadow: '0 2px 10px 0 rgb(0 0 0 / 16%), 0 2px 5px 0 rgb(0 0 0 / 26%)',\r\n zIndex:1,\r\n maxWidth: 320,\r\n minWidth: 200,\r\n height: '80vh',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n actions: {\r\n marginTop:'auto'\r\n },\r\n reset: {\r\n justifyContent: 'flex-end',\r\n marginTop: theme.spacing(1),\r\n minWidth:'0'\r\n },\r\n styleItemText: {\r\n marginLeft: theme.spacing(1)\r\n }\r\n}));\r\n\r\nexport default function ChooseStyle(props) {\r\n const { t } = useTranslation();\r\n const { handleOpenStyleWindow, open, settings, configNodes, parameters, parameterMode, section, handleChange } = props;\r\n const items = section !== null ? section.styles.map(style => style.id) : [];\r\n const defaultStyle = section !== null ? section.selectedStyle.id : null;\r\n const downPress = useKeyPress(\"ArrowDown\");\r\n const upPress = useKeyPress(\"ArrowUp\");\r\n const enterPress = useKeyPress(\"Enter\");\r\n const escape = useKeyPress(\"escape\");\r\n const [selectedIndex, setSelectedIndex] = useState(defaultStyle);\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n setSelectedIndex(defaultStyle);\r\n }, [defaultStyle])\r\n\r\n useEffect(() => {\r\n if (items.length && escape) {\r\n handleClose();\r\n }\r\n }, [escape]);\r\n\r\n useEffect(() => {\r\n if (items.length && enterPress) {\r\n handleApply();\r\n }\r\n }, [enterPress]);\r\n\r\n useEffect(() => {\r\n if (items.length && downPress) {\r\n const idx = items.indexOf(selectedIndex) + 1;\r\n setSelectedIndex(idx > items.length - 1 ? items[0] : items[idx]);\r\n }\r\n }, [downPress]);\r\n useEffect(() => {\r\n if (items.length && upPress) {\r\n const idx = items.indexOf(selectedIndex) - 1;\r\n setSelectedIndex(idx < 0 ? items[items.length-1] : items[idx]);\r\n }\r\n }, [upPress]);\r\n\r\n const handleApply = () => {\r\n handleOpenStyleWindow(false);\r\n handleChange(section.id, selectedIndex);\r\n }\r\n\r\n const handleClose = () => {\r\n setSelectedIndex(defaultStyle);\r\n handleOpenStyleWindow(false);\r\n }\r\n\r\n const handleClick = (event, styleId) => {\r\n if (event.detail !== 0) {\r\n setSelectedIndex(styleId);\r\n }\r\n }\r\n\r\n const getStyleItems = () => {\r\n if (section === null)\r\n return\r\n return section.styles.map((style) => \r\n handleClick(e, style.id)}\r\n >\r\n\r\n \r\n \r\n \r\n \r\n ); \r\n };\r\n\r\n const getPreview = () => {\r\n if (selectedIndex === null)\r\n return;\r\n\r\n const copySection = cloneDeep(section);\r\n const selectedStyle = copySection.styles.find(s => s.id === selectedIndex);\r\n copySection.selectedStyle = selectedStyle;\r\n\r\n const pages = [{\r\n enabled: true,\r\n id: 'style_selection',\r\n sections: [copySection],\r\n startWithPageBreak: false,\r\n title: 'style selection'\r\n }];\r\n\r\n return { }} />;\r\n }\r\n\r\n const { width } = props.settings;\r\n const previewStyle = {\r\n minWidth: width+60+'pt'\r\n }\r\n\r\n const render = () => {\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {t('style_picker')}\r\n \r\n \r\n
\r\n \r\n {getStyleItems()}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {getPreview()}\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n return (\r\n render()\r\n );\r\n}\r\n\r\nChooseStyle.defaultProps = {\r\n open: false,\r\n handleOpenStyleWindow: () => { },\r\n handleChange: () => { },\r\n section: null,\r\n configNodes: {},\r\n parameters: {},\r\n parameterMode: 0,\r\n settings: {}\r\n}\r\n\r\nChooseStyle.propTypes = {\r\n open: PropTypes.bool,\r\n configNodes: PropTypes.any,\r\n settings: PropTypes.object,\r\n parameters: PropTypes.any,\r\n parameterMode: PropTypes.number,\r\n section: PropTypes.object,\r\n handleOpenStyleWindow: PropTypes.func,\r\n handleChange: PropTypes.func\r\n}\r\n","import ChooseStyle from './choose-style';\r\nexport default ChooseStyle;","import React, { Component } from 'react';\r\nimport Page from '../page';\r\nimport TemplateListControl from '../template-list-control'\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport './template.css';\r\nimport Layout from '../layout';\r\nimport DownloadConfiguration from '../download-configuration';\r\nimport CustomSnackBar from '../shared/snack-bar';\r\nimport TemplateService from '../../services/template-service';\r\nimport PropTypes from 'prop-types';\r\nimport ErrorPage from '../error-page';\r\nimport ChooseStyle from '../choose-style';\r\nimport LocalStorage from '../../utils/local-storage';\r\nimport LanguageHelper from '../../utils/language-helper';\r\n\r\nexport default class Template extends Component {\r\n static displayName = Template.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n const { id } = this.props.match.params;\r\n const templateName = props.location.state === undefined ? '' : props.location.state.templateName;\r\n const state = {\r\n configNodes: {},\r\n pages: [],\r\n parameters: [],\r\n enabledEditMode: false,\r\n defaultPages: [],\r\n defaultParameters: [],\r\n loading: true,\r\n lang: 'en',\r\n pageSettings: {},\r\n templateId: id,\r\n templateName: templateName,\r\n parameterMode: 0,\r\n showUploadMessage: false,\r\n showParameterMessage: false,\r\n resetInfo: {},\r\n openChooseStyle: false,\r\n selectedSection: null,\r\n selectedPageId: '',\r\n error: false,\r\n errorMessage: ''\r\n }\r\n\r\n this.state = { ...state };\r\n }\r\n\r\n componentDidMount() {\r\n this.getConfigData();\r\n }\r\n\r\n handlePageEnable = (pageId, enabled) => {\r\n this.updatePageProperty('enabled', enabled, (pages) => this.getPage(pages, pageId));\r\n }\r\n\r\n handlePageBreak = (pageId, startWithPageBreak) => {\r\n this.updatePageProperty('startWithPageBreak', startWithPageBreak, (pages) => this.getPage(pages, pageId));\r\n }\r\n\r\n handleChangeStyle = (pageId, sectionId, styleId) => {\r\n const section = this.getSection(this.state.pages, pageId, sectionId);\r\n const style = this.getStyleSection(section, styleId);\r\n this.updatePageProperty('selectedStyle', style, (pages) => {\r\n const sect = this.getSection(pages, pageId, sectionId);\r\n const selectedStyle = sect.selectedStyle;\r\n const currentStyle = this.getStyleSection(sect, selectedStyle.id);\r\n currentStyle.forcePageBreak = selectedStyle.forcePageBreak;\r\n currentStyle.header.enabled = selectedStyle.header.enabled;\r\n currentStyle.header.repeatOnEachPage = selectedStyle.header.repeatOnEachPage;\r\n currentStyle.footer.enabled = selectedStyle.footer.enabled;\r\n return sect;\r\n });\r\n }\r\n\r\n setDefaultSectionProperties = (section) => {\r\n section.styles.forEach(style => {\r\n style.forcePageBreak = false;\r\n style.header.enabled = true;\r\n style.header.repeatOnEachPage = false;\r\n style.footer.enabled = true;\r\n });\r\n return section;\r\n }\r\n\r\n handleChooseStyle = (pageId, section) => {\r\n this.setState({ selectedSection: this.setDefaultSectionProperties(cloneDeep(section)), selectedPageId: pageId });\r\n this.handleOpenStyleWindow(true);\r\n }\r\n\r\n handleSectionEnable = (pageId, sectionId, enabled) => {\r\n this.updatePageProperty('enabled', enabled, (pages) => this.getSection(pages, pageId, sectionId));\r\n }\r\n\r\n handleSectionPageBreak = (pageId, sectionId, usePageBreak) => {\r\n this.updatePageProperty('usePageBreak', usePageBreak, (pages) => (this.getSection(pages, pageId, sectionId)).selectedStyle);\r\n }\r\n\r\n handleSectionForcePageBreak = (pageId, sectionId, forcePageBreak) => {\r\n this.updatePageProperty('forcePageBreak', forcePageBreak, (pages) => (this.getSection(pages, pageId, sectionId)).selectedStyle);\r\n }\r\n\r\n handleRepeatHeader = (pageId, sectionId, repeatOnEachPage) => {\r\n this.updatePageProperty('repeatOnEachPage', repeatOnEachPage, (pages) => (this.getSection(pages, pageId, sectionId)).selectedStyle.header);\r\n }\r\n\r\n handleHeaderEnable = (pageId, sectionId, enabled) => {\r\n this.updatePageProperty('enabled', enabled, (pages) => (this.getSection(pages, pageId, sectionId)).selectedStyle.header);\r\n }\r\n\r\n handleFooterEnable = (pageId, sectionId, enabled) => {\r\n this.updatePageProperty('enabled', enabled, (pages) => (this.getSection(pages, pageId, sectionId)).selectedStyle.footer);\r\n }\r\n\r\n onPageSizeChange = (event) => {\r\n this.setState({ pageSize: parseInt(event.target.value) });\r\n }\r\n\r\n handleChangeParameterItem = (sectionId, parameterId, selectedItemId, userDefValue) => {\r\n const newParams = cloneDeep(this.state.parameters);\r\n const sectionParams = newParams[sectionId];\r\n const param = sectionParams.find(p => p.id === parameterId);\r\n const parameterItem = param.items.find(i => i.id === selectedItemId);\r\n if (parameterItem.name === '%userdefined%')\r\n parameterItem.excelFormula = userDefValue;\r\n param.selectedItemId = selectedItemId;\r\n this.setState({ parameters: newParams, showParameterMessage: true });\r\n this.setToLocalStorage({ parameters: newParams });\r\n }\r\n\r\n handleReset = () => {\r\n const pages = cloneDeep(this.state.defaultPages);\r\n const parameters = cloneDeep(this.state.defaultParameters);\r\n const state = { pages: pages, parameters: parameters }\r\n this.setState({ ...state });\r\n this.setToLocalStorage(state);\r\n }\r\n\r\n handleSectionReset = (pageId, sectionId) => {\r\n const defaultSection = this.getSection(this.state.defaultPages, pageId, sectionId);\r\n const newPages = cloneDeep(this.state.pages);\r\n const page = this.getPage(newPages, pageId);\r\n const sectionIdx = this.getSectionIndex(page, sectionId);\r\n page.sections[sectionIdx] = cloneDeep(defaultSection);\r\n const newState = { pages: newPages, resetInfo: { showMessage: true, title: defaultSection.type.name } };\r\n\r\n const sectionParams = this.state.defaultParameters[sectionId];\r\n if (Array.isArray(sectionParams) && sectionParams.length) {\r\n const newParams = cloneDeep(this.state.parameters);\r\n newParams[sectionId] = cloneDeep(sectionParams);\r\n newState.parameters = newParams;\r\n }\r\n\r\n this.setState({ ...newState });\r\n this.setToLocalStorage(newState);\r\n }\r\n\r\n updatePageProperty = (propName, value, getObject) => {\r\n this.setState(({ pages }) => {\r\n const newPages = cloneDeep(pages);\r\n this.setProperty(getObject(newPages), propName, value);\r\n this.setToLocalStorage({ pages: newPages });\r\n return { pages: newPages };\r\n });\r\n }\r\n\r\n setProperty = (obj, propName, value) => {\r\n obj[propName] = value;\r\n }\r\n\r\n getSection = (pages, pageId, sectionId) => {\r\n const page = this.getPage(pages, pageId);\r\n return page.sections.find(s => s.id === sectionId);\r\n }\r\n\r\n getSectionIndex = (page, sectionId) => {\r\n return page.sections.findIndex(s => s.id === sectionId);\r\n }\r\n\r\n getStyleSection = (section, styleId) => {\r\n return section.styles.find(s => s.id === styleId);\r\n }\r\n\r\n getPage = (pages, pageId) => {\r\n return pages.find(p => p.id === pageId);\r\n }\r\n\r\n enabledEditMode = (parameters) => {\r\n return Object.keys(parameters).length > 0;\r\n }\r\n\r\n renderPage = () => {\r\n return ;\r\n }\r\n\r\n renderControls = () => {\r\n return ;\r\n }\r\n\r\n handleChangeParameterViewMode = (checked) => {\r\n const parameterMode = checked ? 1 : 0;\r\n\r\n this.setState({ parameterMode: parameterMode });\r\n this.setToLocalStorage({ parameterMode: parameterMode });\r\n }\r\n\r\n getParameterItems = (items) => {\r\n return items.map((item) =>\r\n {item.value}\r\n );\r\n }\r\n\r\n renderWithLayout = () => {\r\n const { parameters, pages, templateId, loading } = this.state;\r\n const controls = this.renderControls();\r\n const content = this.renderPage();\r\n const downloadButton = ;\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n }\r\n\r\n showUploadMessage = (showUploadMessage) => {\r\n this.setState({ showUploadMessage: showUploadMessage });\r\n }\r\n\r\n setShowParameterMessage = (showParameterMessage) => {\r\n this.setState({ showParameterMessage: showParameterMessage });\r\n }\r\n\r\n setResetMessage = (showMessage) => {\r\n const { resetInfo } = this.state;\r\n this.setState({ resetInfo: { ...resetInfo, showMessage: showMessage } });\r\n }\r\n\r\n getSnackBars = () => {\r\n const uploadMessageBox =\r\n ;\r\n\r\n const parameterMessageBox =\r\n ;\r\n\r\n const { resetInfo } = this.state;\r\n const resetMessageBox =\r\n ;\r\n\r\n return (\r\n <>\r\n { uploadMessageBox}\r\n { parameterMessageBox}\r\n { resetMessageBox}\r\n \r\n );\r\n }\r\n\r\n renderError = () => {\r\n return {this.state.errorMessage};\r\n }\r\n\r\n getChooseStyleWindow = () => {\r\n const { openChooseStyle, selectedSection, selectedPageId } = this.state;\r\n return this.handleChangeStyle(selectedPageId, sectionId, styleId)}\r\n handleOpenStyleWindow={this.handleOpenStyleWindow}\r\n settings={this.state.pageSettings}\r\n parameters={this.state.parameters}\r\n configNodes={this.state.configNodes}\r\n parameterMode={0}/>;\r\n }\r\n\r\n handleOpenStyleWindow = (open) => {\r\n this.setState({ openChooseStyle: open });\r\n }\r\n\r\n render() {\r\n const { loading, error } = this.state;\r\n\r\n if (error)\r\n return this.renderError();\r\n\r\n const content = this.renderWithLayout();\r\n\r\n const snackBars = loading ? '' : this.getSnackBars();\r\n\r\n return (\r\n <>\r\n \r\n {content}\r\n {snackBars}\r\n {this.getChooseStyleWindow()}\r\n \r\n );\r\n }\r\n\r\n async setToLocalStorage(obj) {\r\n await LocalStorage.setTemplateItem(this.state.templateId, this.state, obj);\r\n }\r\n\r\n //TODO: delete after testing\r\n async sleep(msec) {\r\n return new Promise(resolve => setTimeout(resolve, msec));\r\n }\r\n\r\n async getConfigData() {\r\n const { location } = this.props;\r\n const { templateId } = this.state;\r\n let config;\r\n let showUploadMessage = false;\r\n const currentLanguageCode = LanguageHelper.getCurrentLanguageAsync(this.props.location.search);\r\n\r\n try {\r\n const uploadInfo = location.state === undefined ? undefined : location.state.uploadInfo;\r\n if (uploadInfo !== undefined) {\r\n config = await TemplateService.getUploadedConfiguration(uploadInfo.uploadConfigurationId);\r\n showUploadMessage = true;\r\n }\r\n else {\r\n const storageState = await LocalStorage.getItem(this.state.templateId);\r\n if (storageState !== null) {\r\n if (storageState.lang === currentLanguageCode) {\r\n this.setState({\r\n ...storageState, loading: false, openChooseStyle: false, enabledEditMode: this.enabledEditMode(storageState.parameters)});\r\n return;\r\n }\r\n const storageConfig = {\r\n pages: storageState.pages,\r\n parameters: storageState.parameters,\r\n defaultPages: storageState.defaultPages,\r\n defaultParameters: storageState.defaultParameters\r\n }\r\n config = await TemplateService.getConfigurationWithProgress(templateId, storageConfig, currentLanguageCode);\r\n }\r\n else\r\n config = await TemplateService.getConfiguration(templateId, currentLanguageCode);\r\n }\r\n const nodes = config.htmlConfiguration;\r\n\r\n const state = {\r\n pages: config.pages,\r\n pageSettings: config.pageSettings,\r\n defaultPages: cloneDeep(config.defaultPages),\r\n defaultParameters: cloneDeep(config.defaultParameters),\r\n parameters: config.parameters,\r\n enabledEditMode: this.enabledEditMode(config.parameters),\r\n configNodes: nodes,\r\n loading: false,\r\n templateLang: config.lang,\r\n lang: currentLanguageCode,\r\n templateName: config.templateName,\r\n showUploadMessage: showUploadMessage\r\n }\r\n this.setState({...state});\r\n\r\n this.setToLocalStorage(state);\r\n }\r\n catch (e) {\r\n console.log(e);\r\n this.setState({ error: true, errorMessage: e.message });\r\n }\r\n }\r\n}\r\n\r\nTemplate.propTypes = {\r\n id: PropTypes.string,\r\n}","import Template from './template';\r\nexport default Template;","import TemplateSelectionPrivate from './template-selection-private';\r\nexport default TemplateSelectionPrivate;","import React from 'react';\r\nimport TemplateSelection from '../template-selection';\r\n\r\nexport default function TemplateSelectionPrivate(props) {\r\n return (\r\n \r\n );\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport TemplateSelection from '../template-selection';\r\nimport Template from '../template';\r\nimport ErrorPage from '../error-page';\r\nimport './app.css'\r\nimport TemplateSelectionPrivate from '../template-selection-private';\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {/* }/>*/}\r\n \r\n );\r\n }\r\n}\r\n","import App from './app';\r\nexport default App;","import React, { Component } from 'react';\r\nimport ErrorPage from '../error-page';\r\n\r\nexport default class ErrorBoundary extends Component {\r\n static displayName = ErrorBoundary.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasError: false, message: 'Something went wrong' };\r\n }\r\n\r\n static getDerivedStateFromError(error) {\r\n return { hasError: true, message: error.message };\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n //logErrorToMyService(error, errorInfo);\r\n }\r\n\r\n render() {\r\n const { hasError, message } = this.state;\r\n if (hasError) {\r\n return {message};\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n","import ErrorBoundary from './error-boundary';\r\nexport default ErrorBoundary;","import 'react-app-polyfill/ie11'\r\nimport 'react-app-polyfill/stable';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './components/app';\r\nimport ErrorBoundary from './components/error-boundary';\r\nimport LanguageHelper from './utils/language-helper';\r\n\r\nconst rootElement = document.getElementById('root');\r\n\r\nLanguageHelper.initializeI18n();\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n"],"sourceRoot":""}