\n\t\t\t{React.Children.map(children, (child, index) => {\n\t\t\t\treturn React.cloneElement(child, {\n\t\t\t\t\tisOpen: index === openChildIndex,\n\t\t\t\t\tonOpen: () => {\n\t\t\t\t\t\tsetOpenChildIndex(index)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})}\n\t\t
\n\t)\n}\n\nexport { NavLinksRoot, NavLinks, NavLinkElement as NavLink, NavLinkToExternalHref, NavLinkToJasperReport }\n\n","import { makeStyles } from '@material-ui/core/styles'\nimport styled from 'styled-components'\nimport { withStyles, Switch, Divider, Drawer } from '@material-ui/core'\nimport NewIcons from 'components/icon/NewIcons'\nimport { customElements } from 'cssStatic'\n\nconst drawerWidth = 260\n\n///TODO style\nexport const StyledNewIcon = styled(NewIcons)`\n grid-area: logo;\n align-self: center;\n justify-self:flex-start;\n margin: 15px 0 0 12px;\n`\n\n///TODO style\nexport const SwitchWrapper = styled.div`\n padding-right: 30; \n align-self:flex-start;\n`\n\n///TODO style\nexport const useStyles = makeStyles((theme) => ({\n root: {\n background: theme.palette.primary.mainDarken800,\n display: 'grid',\n gridTemplateColumns: '100%',\n gridTemplateRows: '90px 1fr 10px',\n gridTemplateAreas: `\"logo\" \"content\" \"switch\"`,\n gridRowGap: 0\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n },\n drawerOpen: {\n overflowX: 'hidden',\n width: drawerWidth,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n drawerClose: {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: theme.spacing(7) + 1,\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(9) + 1,\n },\n },\n\n}))\n\n///TODO style\nexport const StyledDivider = withStyles(({ palette }) => ({\n root: {\n backgroundColor: palette.primary.mainDarken800\n },\n}))(Divider)\n\n///TODO style\nexport const StyledDrawer = withStyles(({ palette }) => ({\n root: {\n backgroundColor: 'palette.primary.mainDarken800'\n },\n}))(Drawer)\n\n///TODO style\nexport const StyledSwitch = withStyles(({ palette }) => ({\n root: {\n margin: '20px 0',\n gridArea: 'switch',\n '& .MuiSwitch-colorSecondary.Mui-checked + .MuiSwitch-track': {\n backgroundColor: palette.primary.yellow,\n opacity: 0.8,\n }\n },\n thumb: {\n backgroundColor: palette.secondary.white,\n },\n track: {\n backgroundColor: palette.primary.error,\n opacity: 0.5,\n }\n}))(Switch)","import React, { useContext, useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { Drawer, } from '@material-ui/core'\nimport { NavLinksRoot, NavLinks, NavLink, NavLinkToExternalHref, NavLinkToJasperReport } from './NavLinks'\nimport { useStyles, StyledDivider, StyledSwitch, StyledNewIcon, SwitchWrapper } from \"./StyledSidebar\"\nimport { useTranslate } from 'locale/Locale'\nimport { Link } from \"react-router-dom\"\nimport { appCtrl } from 'AppCtrl'\nimport { GlobalStrings } from 'GlobalStrings'\n\n//#region Context Creating\n\texport const SidebarContext = React.createContext()\n//#endregion\n\n/**\n * Komponent wyświetlajacy Switcha pozwalającego otwierać i zamykać menu boczne\n * @returns \n */\nconst Switch = () => {\n\tconst { isMenuOpen, setOpen } = useContext(SidebarContext)\n\n\treturn (\n\t\t\n\t});\n}\n\n/**\n * Komponent bocznego panelu\n *\n * @returns {Node}\n */\nexport default function SideBar() {\n\tconst SIDEBAR_CONFIGURATION_PATH = 'Sidebar' //Ścieżka pozwalająca na zapis stanu do konfiguracji\n\tconst isMenuOpenFromConfiguration = appCtrl?.configuration?.getValue(SIDEBAR_CONFIGURATION_PATH) //Odczytywanie wartości inicjującej z konfiguracji\n\tconst [isMenuOpen, setOpen] = useState(isMenuOpenFromConfiguration)\n\tconst translate = useTranslate('WebSpa/MainMenu')\n\tconst classes = useStyles()\n\n\tuseEffect(() => {\n\t\tappCtrl.configuration.setValue(SIDEBAR_CONFIGURATION_PATH, isMenuOpen) //Zapisywanie aktualnej wartości do Konfiguracji\n\t},[isMenuOpen])\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t e.preventDefault()}>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n}\n\nfunction GetLogoName(isMenuOpen) {\n\tif (appCtrl?.session?.currentOrganizationInfo?.id === GlobalStrings.LinguaLabOrganizationId)\n\t\treturn isMenuOpen ? \"linguaLabLogo\" : \"linguaLabLogoType\";\n\n\tif (appCtrl?.session?.currentOrganizationInfo?.id === GlobalStrings.PunktOrganizationId)\n\t\treturn isMenuOpen ? \"punktLogo\" : \"punktLogoType\";\n\n\tif (appCtrl?.session?.currentOrganizationInfo?.id === GlobalStrings.IuridicoOrganizationId)\n\t\treturn isMenuOpen ? \"iuridicoLogo\" : \"iuridicoLogoType\";\n\n\treturn isMenuOpen ? \"logotype\" : \"logo\";\n}\n\nfunction GetLogoWidth(isMenuOpen) {\n\tif (appCtrl?.session?.currentOrganizationInfo?.id === GlobalStrings.LinguaLabOrganizationId)\n\t\treturn isMenuOpen ? 230 : 38;\n\n\tif (appCtrl?.session?.currentOrganizationInfo?.id === GlobalStrings.PunktOrganizationId)\n\t\treturn isMenuOpen ? 230 : 38;\n\n\tif (appCtrl?.session?.currentOrganizationInfo?.id === GlobalStrings.IuridicoOrganizationId)\n\t\treturn isMenuOpen ? 230 : 38;\n\t\n\treturn isMenuOpen ? 200 : 38;\n}\n\nfunction GetLogoBackgroundColor() {\n\tif (appCtrl?.session?.currentOrganizationInfo?.id === GlobalStrings.PunktOrganizationId)\n\t\treturn \"#FFFFFF\";\n\n\treturn \"\";\n}\n","import React from 'react'\nimport SideBar from 'components/sidebar/SideBar'\nimport './Layout.scss'\n\n/**\n * Komponent wyglądu całej aplikacji\n *\n * @param {Node} children Zawartość prawej strony\n * @returns {Node}\n */\nexport default function Layout(props) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t{props.children}\n\t\t\t
\n\t\t
\n\t)\n}\n","import React from 'react'\nimport joinClassNames from 'components/joinClassNames'\nimport { GradientHidder } from 'components/topology/Topology'\n\nexport default function TabItem({ part, onClick, }) {\n\tconst TAB_ITEM_NAME = \"TabItem\"\n\t\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{part.props.tabTitle || part.props.title}\n\t\t\t\n\t\t
\n\t)\n}\n","import React from 'react'\nimport { useHistory } from \"react-router-dom\"\nimport TabItem from './TabItem'\nimport { linkManager } from 'components/LinkManager'\n\nexport default function Tab({ tab, tabIndex }) {\n\tconst history = useHistory()\n\n\treturn (\n\t\t\n\t\t\t{tab.map((part, index) => {\n\t\t\t\treturn (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tlinkManager.handleTab(history,part)\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t})}\n\t\t
\n\t)\n}\n","import React from 'react'\nimport { FormMetaRoot, FormConsumer } from 'components/form/Form'\nimport { useAppCtrl } from 'AppCtrl'\n\nexport default function HomePartOuter({ children, part }) {\n\tconst appCtrl = useAppCtrl()\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{form => {\n\t\t\t\t\tpart.parts.forEach(p => {\n\t\t\t\t\t\tconst partName = p.props.useLinkName ? p.props.useLinkName : p.props.dataType\n\t\t\t\t\t\tp.reachable = !!form.getServiceRelativeRead(partName)\n\t\t\t\t\t})\n\t\t\t\t\treturn null\n\t\t\t\t}}\n\t\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n","import React from 'react'\nimport DV from '../../../components/dataView/DataView'\nimport HomePartOuter from './HomePartOuter'\n\nexport default function HomePart({ children }) {\n\treturn (\n\t\t}>\n\t\t\t{children}\n\t\t\n\t)\n}\n","import React from 'react'\r\nimport { FormMetaRoot, FormConsumer } from 'components/form/Form'\r\nimport { useAppCtrl } from 'AppCtrl'\r\nimport { useHistory } from 'react-router-dom'\r\nimport { linkManager } from 'components/LinkManager'\r\n\r\nexport function ModulePartOuter({ children, part, autoOpenTab }) {\r\n\tconst appCtrl = useAppCtrl()\r\n\tconst history = useHistory()\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{form => {\r\n\t\t\t\t\tlinkManager.handleAutoTab(history, part, autoOpenTab)\r\n\r\n\t\t\t\t\tpart.parts.forEach(p => {\r\n\t\t\t\t\t\tconst partName = p.props.useLinkName ? p.props.useLinkName : p.props.dataType\r\n\t\t\t\t\t\tp.reachable = !!form.getServiceRelativeRead(partName)\r\n\t\t\t\t\t})\r\n\t\t\t\t\treturn null\r\n\t\t\t\t}}\r\n\t\t\t\r\n\t\t\t{children}\r\n\t\t\r\n\t)\r\n}\r\n","import React from 'react'\r\nimport { MessageListener } from 'components/form/Form'\r\nimport Tab from 'contents/main/dataView/Tab'\r\n\r\nexport function ModulePartInner({ part }) {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t p.reachable !== false)]} />\r\n\t\t
\r\n\t)\r\n}\r\n","// import {ErrorBoundary} from 'react-err'\nimport {Paper, Card, CardActions, CardContent, CardHeader, Tooltip } from '@material-ui/core'\nimport { FileCopy } from '@material-ui/icons'\nimport Button from 'components/form/components/list/components/buttons/Button'\nimport { Css, withStyles } from 'cssStatic'\nimport { toString } from 'lodash'\nimport React from 'react'\nimport {DefaultErrorHandler} from 'services/ErrorHandlingClass/ErrorHandlingClasses'\nimport { appCtrl } from 'AppCtrl'\n\nCss.add({\n\t'.expand-more': {transform: 'rotate(0deg)', cursor: 'pointer', },\n\t'.expand-less': {transform: 'rotate(180deg)', cursor: 'pointer', },\n '.error-boundary-wrapper': { margin: 'auto', 'max-width': '85%', 'max-height': '75%','overflow-y': 'auto', },\n '.error-details': {'margin-bottom': '25px', 'margin-left': '10px'},\n '.align-left': {'justify-content': 'flex-end'},\n})\n\nconst StyledCardWrapper = withStyles({root: 'error-boundary-wrapper'}, Paper)\n/**\n * Komponent wyswietlania błędów podelementów\n *\n * @returns {Node}\n */\nexport default class ErrorBoundary extends React.Component {\n constructor(props) {\n super(props)\n this.state = { \n errorObject: {},\n hasError: false,\n expanded: false,\n isButtonDisabled: false,\n }\n }\n\n static getDerivedStateFromError(error) {\n return { errorObject: new DefaultErrorHandler(error), hasError: true }\n }\n\n componentDidCatch(error, info) {\n this.setState({ errorObject: new DefaultErrorHandler(error), hasError: true })\n }\n\n render() {\n if (this.state.hasError) {\n if (this.props.blankOnError === true) {\n return (null)\n }\n else if (this.props.errorElement !== undefined && this.props.errorElement !== null) {\n return this.props.errorElement\n }\n else {\n return (\n \n \n \n \n \n Error:
\n \n {toString(this.state.errorObject?.detail) || 'Something went wrong'}\n
\n Stack Trace:
\n \n {toString(this.state.errorObject?.stack) || 'Something went wrong'}\n
\n \n \n \n } onClick={() => {\n navigator.clipboard.writeText(`${toString(this.state.errorObject?.detail)}\\n${toString(this.state.errorObject?.stack)}`)\n this.setState({isButtonDisabled: true})\n }}/>\n \n \n \n \n )\n }\n }\n\n return this.props.children\n }\n}","import React from 'react'\r\nimport DV from '../../../components/dataView/DataView'\r\nimport { ModulePartOuter } from './ModulePartOuter'\r\nimport { ModulePartInner } from './ModulePartInner'\r\nimport ErrorBoundary from 'components/errorBoundary/ErrorBoundary'\r\n\r\nfunction ModuleDecoration({ child1, child2, part }) {\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t{child1}\r\n\t\t\t{child2}\r\n\t\t
\r\n\t)\r\n}\r\n\r\n/**\r\n * Part do wyswietlania wielu ListPart'ow ktorych linki są pobierane z modułów\r\n *\r\n * @param {*} { children, part, name, title }\r\n */\r\nexport function ModulePart({ children, part, name, title, autoOpenTab }) {\r\n\treturn (\r\n\t\t\r\n\t\t\t}\r\n\t\t\t\tinnerContent={}\r\n\t\t\t\tinnerDecoration={}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t\r\n\t\t\r\n\t)\r\n}\r\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport \"./Card.scss\"\nimport ErrorBoundary from 'components/errorBoundary/ErrorBoundary'\n\n/**\n * Komponent białej kartki na której umieszczane są podkomponenty\n *\n * @param {string} classNameBorder css klasa ramki kartki domyślnie: 'card-border'\n * @param {string} classNameContent css klasa zawartości domyślnie: 'card-content'\n * @param {Node} children Zawartość\n * @param {*} other Dodatkowe props dla ramki\n * @returns {Node}\n */\nexport default function Card({ classNameBorder, classNameContent, children, ...other }) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{children}\n\t\t\t
\n\t\t
\n\t)\n}\n\nCard.propTypes = {\n\tclassNameConntent: PropTypes.string,\n\tclassNameBorder: PropTypes.string,\n\tchildren: PropTypes.node\n}\n\nCard.defaultProps = {\n\tclassNameBorder: \"\"\n}\n","/**\n * Zamienia style na kolor \n * Dostępne style to:\n * \tprimary, secondary, success, danger, warning, info, error, default\n * @param {string} style - Nazwa stylu z BE\n * @param {object} palette - Obiekt palety kolorów z kontrolki Material-UI.\n * @returns {string} kolor \n */\nexport function styleToColor(style, palette) {\n\tif (!palette)\n\t\treturn '#1e272e'\n\t\t\n\tswitch (style) { ///TODO DOAĆ POZOSTAŁE CASE\n\t\tcase 'primary':\n\t\t\treturn '#599ca4'\n\t\tcase 'success':\n\t\t\treturn palette.primary?.success\n\t\tcase 'primary':\n\t\t\treturn palette.primary?.mainDarken800\n\t\tcase 'error':\n\t\t\treturn palette.primary?.errorAlternative\n\t\tcase 'warning':\n\t\t\treturn palette.primary?.warning\n\t\tdefault:\n\t\t\treturn '#1e272e' //TODO Przenieśc do theme\n\t}\n}","import React from 'react'\nimport { customElements } from 'cssStatic'\nimport { rowGap, colGap } from '../fields/getFieldDimentions'\n\n\nexport const StyledSectionContentWrapper = customElements('o-section-content-wrapper', {\n\t'display': 'grid',\n 'row-gap': `${rowGap}px`,\n 'column-gap': `${colGap}px`,\n})\n\n/**\n * Wrapper otaczający całą zawartość sekcji (pola oraz podsekcje) \n * Wykorzystywany w celu poprawnego ułożenia pól oraz sekcji\n * @param {Node} children - Dzieci które wrapper ma otoczyć\n * @returns \n */\nexport const SectionContentWrapper = ({ children }) => (\n \n {children}\n \n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Card, FormControl, FormLabel, makeStyles } from '@material-ui/core'\nimport { styleToColor } from 'Tools/styleToColor'\nimport './Sections.scss'\nimport { SectionContentWrapper } from './SectionContentWrapper'\n\n//#region Style\nconst useMainSectionStyles = makeStyles(({ palette }) => ({\n\tformLabelRoot: {\n\t\tcolor: props => styleToColor(props.style, palette),\n\t\tfontWeight: 500,\n\t\tmargin: '0 0 21px 0',\n\t\tfontSize: 16,\n\t\ttextTransform: 'capitalize'\n\t},\n\tcardRoot: {\n\t\tpadding: '15px 15px 30px 15px',\n\t\tborderRadius: 0,\n\t\tborderLeft: '4px solid',\n\t\tborderColor: props => styleToColor(props.style, palette),\n\t\toverflowX: 'auto'\n\t}\n}))\n//#endregion\n\n/**\n * Komponent wyświetlający sekcję z główną Main\n * \n * @param {Object} section Obiekt sekcji nadrzędnej - rodzic grupujący inne sekcje z tabami\n * @returns {Node}\n */\nexport function SectionMain({ section, children }) {\n\tconst { formLabelRoot, formControlRoot, cardRoot } = useMainSectionStyles({ style: section.style })\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{section.label}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n}\n\n\n//#region PropTypes & DefaultProps\nSectionMain.propTypes = {\n\tsection: PropTypes.object.isRequired,\n\tchildren: PropTypes.node\n}\n//#endregion","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Card, makeStyles, Typography } from '@material-ui/core'\nimport { styleToColor } from 'Tools/styleToColor'\nimport './Sections.scss'\nimport { SectionContentWrapper } from './SectionContentWrapper'\n\n//#region Style\nconst useLabelSectionStyles = makeStyles(({ palette }) => ({\n\ttypographyRoot: {\n\t\tcolor: props => styleToColor(props.style, palette),\n\t\tbackground: 'linear-gradient(180deg, transparent 40%, rgba(255,255,255,1) 35%)',\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 12,\n\t\ttransform: 'translateY(-50%)',\n\t\tpadding: '0 5px',\n\t\tfontSize: '18px',\n\t\tfontWeight: 500,\t\n\t\twhiteSpace: 'nowrap',\n\t},\n\tcardRoot: {\n\t\tborder: '2px solid',\n\t\tborderColor: props => styleToColor(props.style, palette),\n\t\tpadding: '10px 10px 0 10px',\n\t\tboxShadow: 'none',\n\t\tposition: 'relative',\n\t\tzIndex: 1,\n\t\toverflow: 'visible',\n\t},\n\tfieldsWrapper: {\n\t\toverflowX: 'hidden',\n\t\tpadding: '15px 5px 25px 5px',\n\t}\n}))\n//#endregion\n\n/**\n * Komponent wyświetlający sekcję Label z obramówką\n * \n * @param {Object} section Obiekt sekcji nadrzędnej - rodzic grupujący inne sekcje z tabami\n * @returns {Node}\n */\nexport function SectionLabel({ section, children }) {\n\tconst { cardRoot, typographyRoot, fieldsWrapper } = useLabelSectionStyles({ style: section.style })\n\n\treturn (\n\t\t\n\t\t\t{section.label}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t
\n\t\t\n\t)\n}\n\n//#region PropTypes & DefaultProps\nSectionLabel.propTypes = {\n\tsection: PropTypes.object.isRequired,\n\tchildren: PropTypes.node\n}\n//#endregion","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Accordion, AccordionSummary, Typography, Card, makeStyles } from '@material-ui/core'\nimport { ExpandMore } from '@material-ui/icons'\nimport { styleToColor } from 'Tools/styleToColor'\nimport { SectionContentWrapper } from './SectionContentWrapper'\nimport './Sections.scss'\n\n//#region Style\nconst useAccordionSectionStyles = makeStyles(({ palette }) => ({\n\taccordeonRoot: {\n\t\tmargin: '5px !important',\n\t},\n\tcardRoot: {\n\t\tpadding: '8px 13px',\n\t},\n\taccordionSummaryRoot: {\n\t\theight: 45,\n\t\tcolor: 'white',\n\t\tbackground: props => styleToColor(props.style, palette),\n\t\t'&.Mui-expanded': {\n\t\t\theight: 48,\n\t\t\tminHeight: 48,\n\t\t},\n\t},\n}))\n//#endregion\n\n/**\n * Komponent wyświetlający sekcję w formie Accordeona\n * \n * @param {Object} section Obiekt sekcji nadrzędnej - rodzic grupujący inne sekcje z tabami\n * @returns {Node}\n */\nexport function SectionAccordion({ section, children }) {\n\tconst { accordionSummaryRoot, accordeonRoot, cardRoot } = useAccordionSectionStyles({ style: section.style })\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t\t>\n\t\t\t\t{section.label}\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n}\n\n\n//#region PropTypes & DefaultProps\nSectionAccordion.propTypes = {\n\tsection: PropTypes.object.isRequired,\n\tchildren: PropTypes.node\n}\n//#endregion","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Card, makeStyles } from '@material-ui/core'\nimport './Sections.scss'\nimport { SectionContentWrapper } from './SectionContentWrapper'\n\n//#region Style\nconst useDefaultSectionStyles = makeStyles(({ palette }) => ({\n\tcardRoot: {\n\t\tpadding: '30px 15px 30px 15px',\n\t\tboxShadow: 'none'\n\t}\n}))\n//#endregion\n\n\n/**\n * Komponent wyświetlający sekcję domyślną - Default\n * \n * @param {Object} section Obiekt sekcji nadrzędnej - rodzic grupujący inne sekcje z tabami\n * @returns {Node}\n */\nexport function SectionDefault({ section, children }) {\n\tconst { cardRoot } = useDefaultSectionStyles()\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t)\n}\n\n//#region PropTypes & DefaultProps\nSectionDefault.propTypes = {\n\tsection: PropTypes.object,\n\tchildren: PropTypes.node.isRequired,\n}\n//#endregion","import { includes, isEmpty } from 'lodash'\n\nconst widthUnitInPixel = 41\n\nfunction getDefaultWidth(width) {\n\tif (!width || width === '100%')\n\t\treturn '100%'\n\n\tif (width.endsWith('u'))\n\t\treturn `${Number.parseInt(width.slice(0, -1)) * widthUnitInPixel}px`\n\n\treturn width\n}\n\n/**\n * Zwraca uporządkowane sekcje które są w sekcji parentSectionName.\n * @param {FormMetaObjest} form Forma w której są sekcje \n * @param {string | undefined} parentSectionName Nazwa sekcji parenta\n * @param {boolean | undefined} polymorphic czy jest polimorficzny\n * @returns {object[]} Array opisów sekcji\n */\nexport function getSectionsDescriptions(form, parentSectionName, polymorphic) {\n\t// //Jeśli brak sekcji polymorphic to ją dodajemy\n\t// if (!('polymorphic' in form.data.meta.sections) && polymorphic)\n\t// \tform.data.meta.sections.polymorphic = {\n\t// \t\tname: 'polymorphic',\n\t// \t\tlabel: 'polymorphic',\n\t// \t\tsequenceIndex: 1000\n\t// \t}\n\tconst meargedSections = {...form.data.meta.sections, ...form._data?.data?.[0].meta?.sections}\n\n\tlet sections = Object.values(meargedSections)\n\t\t.map(section => { //Pętla pozwalająca na robienie operacji na wszystkich sekcjach (przed filtrowaniem i sortowaniem)\n\t\t\tif(!isEmpty(meargedSections)){\n\t\t\t\tconst sectionWithChilds = meargedSections[section.parentSectionName] //Sekcja na które wskazuje \"parentSectionName\" są sekcjami które mają dzieci, wybieramy ją\n\t\t\t\tif(!isEmpty(sectionWithChilds)){\n\t\t\t\t\t//Jeśli znaleźliśmy taką sekcję, to ustawiamy właściwość \"hasChildren\" na true. Wykorzystujemy to aby ustalić które sekcje mają dzieci\n\t\t\t\t\tmeargedSections[sectionWithChilds.name].hasChildren = true\n\t\t\t\t} \n\n\t\t\t\treturn section\n\t\t\t}\n\t\t})\n\t\t.filter(section => section.name !== 'list' && (!parentSectionName && !section.parentSectionName || section.parentSectionName === parentSectionName))\n\t\t.sort((a, b) => (a.sequenceIndex ? a.sequenceIndex : 0) - (b.sequenceIndex ? b.sequenceIndex : 0))\n\t\t.map(currentSection => {\n\t\t\tcurrentSection.width = getDefaultWidth(currentSection.width)\n\t\t\treturn currentSection\n\t\t})\n\n\treturn sections\n}","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Section } from './Section'\nimport useForm from '../../hooks/useForm'\nimport { Tab, makeStyles, Card } from '@material-ui/core'\nimport { darken } from '@material-ui/core/styles'\nimport { TabContext, TabPanel, TabList } from '@material-ui/lab';\nimport { isEmpty, isArray } from 'lodash'\nimport { styleToColor } from 'Tools/styleToColor'\nimport { getSectionsDescriptions } from './getSectionsDescriptions.js'\nimport './Sections.scss'\n\n//#region Style\nconst useTabSectionStyles = makeStyles(({ palette }) => ({\n\tcardWrapperRoot: {\n\t\toverflow: 'hidden',\n\t},\n\ttabPanelRoot: {\n\t\tpadding: 0,\n\t},\n\twrapper: {\n\t\tfontSize: '14px'\n\t},\n\ttabListRoot: {\n\t\tbackgroundColor: props => props.style === 'default' ? palette.secondary.white : styleToColor(props.style, palette),\n\t\tcolor: props => props.style === 'default' ? palette.primary.mainDarken800 : palette.primary.grey200,\n\t},\n\ttabListIndicator: {\n\t\tbackgroundColor: props => darken(styleToColor(props.style, palette), 0.4),\n\t\theight: 3,\n\t}\n}))\n//#endregion\n\n/**\n * Komponent wyświetlajacy zawartość Tab Panelu\n * \n * @param {Array} sections - Tablica wszystkich sekcji (tabów)\n * @returns {Node}\n */\nfunction TabPanelContent({ sections }) {\n\tconst { tabPanelRoot } = useTabSectionStyles()\n\n\treturn (\n\t\tsections.map((section, index) => {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)\n\t\t})\n\t)\n}\n\n/**\n * Komponent wyświetlajacy przewijalne menu dla Tab Panelu\n * \n * @param {Array} sections - Tablica wszystkich sekcji (tabów)\n * @param {Object} rootSection - Obiekt sekcji nadrzędnej - rodzic grupujący inne sekcje z tabami\n * @param {Function} setCurrentSelectedSectionName - Funkcja zmieniająca obecną nazwę na nazwę nowo wybranej sekcji\n * @returns {Node}\n */\nfunction TabListContent({ sections, setCurrentSelectedSectionName, rootSection }) {\n\tconst { wrapper, tabListRoot, tabListIndicator } = useTabSectionStyles({ style: rootSection?.style ?? \"default\" })\n\n\treturn (\n\t\t setCurrentSelectedSectionName(tabName)}\n\t\t>\n\t\t\t{\n\t\t\t\tsections.map((section, index) => )\n\t\t\t}\n\t\t\n\t)\n}\n\n/**\n * Komponent wyświetlający sekcję z tabami\n * \n * @param {Object} section Obiekt sekcji nadrzędnej - rodzic grupujący inne sekcje z tabami\n * @returns {Node}\n */\nexport function SectionTab({ section, children }) {\n\tconst form = useForm('data')\n\tconst sections = getSectionsDescriptions(form, section.name)\n\tconst [currentSelectedSectionName, setCurrentSelectedSectionName] = useState(sections?.[0]?.name)\n\tconst { cardWrapperRoot } = useTabSectionStyles({ style: section?.style ?? \"default\" })\n\n\tif (isEmpty(sections) || !isArray(sections))\n\t\treturn null\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n}\n\n//#region PropTypes & DefaultProps\nSectionTab.propTypes = {\n\tsection: PropTypes.object.isRequired,\n\tchildren: PropTypes.node\n}\n\nTabListContent.propTypes = {\n\tsections: PropTypes.array,\n\tsetCurrentSelectedSectionName: PropTypes.func.isRequired,\n\trootSection: PropTypes.object\n}\n\nTabPanelContent.propTypes = {\n\tsections: PropTypes.array,\n}\n//#endregion","import React from 'react'\nimport Fields from '../fields/Fields'\nimport useForm from '../../hooks/useForm'\nimport { SectionMain } from './SectionMain'\nimport { SectionLabel } from './SectionLabel'\nimport { SectionAccordion } from './SectionAccordion'\nimport { SectionDefault } from './SectionDefault'\nimport { SectionTab } from './SectionTab'\nimport { Sections } from './Sections'\nimport { getSectionFields } from '../fields/getSectionFields'\nimport isEmpty from 'lodash/isEmpty'\nimport './Sections.scss'\n\n/**\n * Renderuje sekcje w zależności od section.displayType\n * @param {object} props\n * @param {object} section Opis sekcji\n * @param {boolean} polymorphic Czy polimorficzny\n * @returns {Node}\n */\nexport function Section({ section, polymorphic, parentSectionName }) {\n\tconst form = useForm('data')\n\tconst fields = getSectionFields(form, section.name)\n\n\tconst childs = <>\n\t\t\n\t\t\n\t>\n\n\tif(isEmpty(fields) && !section.hasChildren) //Jeśli sekcja nie ma pól i nie posiada innych sekcji to jej nie wyświetlamy (jest pusta)\n\t\treturn null\n\n\tswitch (section.displayType) {\n\t\tcase 'label':\n\t\t\treturn {childs}\n\t\tcase 'main':\n\t\t\treturn {childs}\n\t\tcase 'accordion':\n\t\t\treturn {childs}\n\t\tcase 'tab':\n\t\t\treturn {childs}\n\t\t//case 'accordionGroup':\n\t\tcase 'default':\n\t\tdefault:\n\t\t\treturn {childs}\n\t}\n}","/*\nDla atrybutów dodajemy parametry (w meta.attributes.[nazwaAtrybutu] lub w data[].meta.attributes.[nazwaAtrybutu])\n\n\t1. width\n\t\tOpis: Szerokość pola\n\t\tTyp: String\n\t\tWymagalność: nie wymagany\n\t\tDefault: '16u' - (w zaleznosci od typu)\n\t\tFormat: numer+jednostka\n\t\t\t\n\t\tnumer - liczby całkowite\n\t\tDostępne jednostki to:\n\t\t\ta) 'u' - Nasz umowna jednostka szerokości która po stronie FE jest przeliczana na piksle\n\t\t\tb) '%' - Jeśli === 100% to pole na całą szerokość \n\t\t\tc) 'px' - rozmiar w px\n\t\t\t\n\t\tnp:\n\t\t\t1u - pole będzie miało szerokość 1*stala_po_stronie_FE\n\t\t\t6u - a to 6*stala_po_stronie_FE\n\t\t\t16u - domyślna szerokość i powinna odpowiadać mniej więcej szerokośći przed wprowadzaniam zmian\n\t\t\t\n\t2. height\n\t\tOpis: Wysokość pola. Ma znaczenie tylko dla pól których można zmieniać wysokość np: 'TextArea'. Dla pozostałych jest ignorowana.\n\t\tTyp: String\n\t\tWymagalność: nie wymagany\n\t\tDefault: W zależności od typy będzie różny default tak by zachować wsteczną kompatybilność\n\t\tFormat: numer+jednostka\n\t\t\t\n\t\tnumer - liczby całkowita (locale z '.')\n\t\tDostępne jednostki to:\n\t\t\ta) 'u' - Nasz umowna jednostka szerokości która po stronie FE jest przeliczana na piksle\n\t\t\t\n\t\tPrzykłady tak jak wyżej (dla width)\n\nDla sekcji dodajemy (w meta.sections.[sectionName]):\n\t\n\t1. sequenceIndex\n\t\tOpis: Liczba określajaca pozycje sekcji względem innych sekcji.\n\t\t\tJeśli ustawiony parenSectionName to określa położenie wobec sekcji które mają tego samego parenta.\n\t\tTyp: Integer\n\t\tWymagalność: nie wymagany\n\t\tDefault: 0\n\t\tUwaga: Jeśli sekcje mają ten sam sequenceIndex to wyświetlają się w kolejności w meta.sections\t\t\n\t\t\n\t2. parentSectionName\n\t\tOpis: Nazwa sekcji wewnątrz której ma pojawiać się ta sekcja.\n\t\t\tUwaga: Jeśli nie istnieje taka sekcja parentSectionName to sekcja nie zostanie wyświetlona. (Error in console?)\n\t\t\tUwaga: Algorytm bedzie uwzgledniał możliwość niepoprawnego zapętlenia sekcji i nie będzie ich rysował (Error in console?)\n\t\tTyp: String\n\t\tWymagalność: nie wymagany\n\t\tDefault: undefined - czyli jest to sekcja bez parenta\n\t3. displayType\n\t\tOpis: Określa jakiego typu jest ta sekcja.\n\t\tTyp: String który może przyjmować wartości: \n\t\t\t'default' - sekcja bez rzadnych obramowań i innych dodatkowych funkcjonalności\n\t\t\t'label' - sekcja z widoczną labelką mniejszym fontem i oznaczeniem obszaru który zajmuję. Mniej ważna niż 'main'\n\t\t\t'main' - sekcja z widoczną pogrubioną labelką i oznaczeniem obszaru który zajmuję\n\t\t\t'accordion' - sekcja która może składać się jak akordeon\n\t\t\t'tab' - ? sekcja której podsekcje są zakładkami tab'a\n\t\t\t'accordionGroup' - ?\n\t\t\t...\n\t\tWymagalność: nie wymagany\n\t\tDefault: 'default'\n\t4. width\n\t\tOpis: Szerokość sekcji\n\t\tTyp: String\n\t\tWymagalność: nie wymagany\n\t\tDefault: undefined\n\t\tFormat: number+jednostka | 'auto' ?\n\t\n\t\tDostępne jednostki to:\n\t\t\ta) 'u' - Nasz umowna jednostka szerokości która po stronie FE jest przeliczana na piksle\n\t\t\tb) '%' - procent zajmowania nadrzednego elementu w poziomie\n\t\t\t\t\t'100%' - powoduje że sekcja zajmuje cały wiersz\n\t\t\tc) 'px' - ilość pixli zajmowania ekranu w poziomie (nie zalecane)\n\t\t\td) 'fr' - ilość frakcji zajmowania ekranu w poziomie\n\t\t\te) 'vw' - Procent względem szerokości okna\n\t\t\t\n\t\t'auto': Sekcja zajmuje w poziomie resztę miejsca po pozostałych kolumnach\n\t\t\t\n\t\tPrzykłady:\n\t\t\t//TODO\n\t\t\t10px 2f 40px 5fr auto\nUwaga: \n\t- Sekcja o nazwie 'list' jest sekcją specjalną na potrzeby gridów i nigdy nie jest wyświetlana\n*/\n\nimport React from 'react'\nimport useForm from '../../hooks/useForm'\nimport './Sections.scss'\nimport { Section } from './Section'\nimport { getSectionsDescriptions } from './getSectionsDescriptions'\n\n/**\n * Renderuje sekcje z odpowiednim parenem\n * @param {String} parentSectionName Nazwy parenta sekcji\n * @returns {Node}\n */\nexport function Sections({ parentSectionName, polymorphic }) {\n\tconst form = useForm('data')\n\tlet sections = getSectionsDescriptions(form, parentSectionName, polymorphic)\n\n\tsections = sections.reduce((p, section) => {\n\t\tif (section.width === '100%') {\n\t\t\tp.push(section)\n\t\t\treturn p\n\t\t}\n\n\t\tlet last\n\n\t\tif (!p.length)\n\t\t\tp.push(last = [])\n\t\telse\n\t\t\tif (Array.isArray(p[p.length - 1]))\n\t\t\t\tlast = p[p.length - 1]\n\t\t\telse\n\t\t\t\tp.push(last = [])\n\n\t\tlast.push(section)\n\t\treturn p\n\t}, [])\n\n\tif (!sections.length)\n\t\treturn null\n\n\treturn (\n\t\t\n\t\t\t{\n\t\t\t\tsections.map((section, index) => {\n\t\t\t\t\tif (!Array.isArray(section))\n\t\t\t\t\t\treturn
\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
section.width).join(' ') }}>\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsection.map((section, index) => {\n\t\t\t\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t}\n\t\t
\n\t)\n}","import React from 'react'\nimport { Preloader, MessageListener } from 'components/form/Form'\nimport Card from 'components/card/Card'\nimport { Sections } from 'components/form/components/sections/Sections'\nimport { Buttons } from 'components/form/components/list/components/buttons/Buttons'\nimport Tab from 'contents/main/dataView/Tab'\nimport { HorizontalPair } from 'components/topology/Topology'\nimport { IconMessages } from 'components/iconMessages/IconMessages'\n\nexport default function EditOnePartInner({ part, createEditForm, polymorphic }) {\n\tif (createEditForm)\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{\n\t\t\t\t\tpart.isSelected &&\n\t\t\t\t\tcreateEditForm({ part, polymorphic })\n\t\t\t\t}\n\t\t\t\n\t\t)\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\tright={}\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n}\n","import FormMetaObject from './FormMetaObject';\n\nexport default class ModalUPAFormMetaObject extends FormMetaObject\n{\n constructor(params)\n {\n super(params);\n }\n\n shouldExcludeFieldFromRendering(field)\n {\n return field.name === \"RelatedObjectsRefList\";\n }\n}","import React from 'react'\nimport { FormMetaObject, Fields, Preloader } from 'components/form/Form'\nimport getFormRestService from 'services/getFormRestService'\nimport { Buttons } from 'components/form/components/list/components'\nimport { Dialog, DialogActions, DialogContent, DialogTitle, Divider, } from '@material-ui/core'\nimport { isArray, isEmpty } from 'lodash'\nimport { handleUploadMultipleFileFields } from 'components/form/components/file/File';\nimport { useHistory } from 'react-router-dom'\nimport { useTranslate } from 'locale/Locale'\nimport { useSnackbar } from 'notistack'\nimport { BackendButtons } from 'model/ButtonsDefs';\nimport ModalUPAFormMetaObject from 'components/form/classes/ModalUPAFormMetaObject'\n\nconst formMettaObjectClassFactory = (params) => {\n\treturn new ModalUPAFormMetaObject(params);\n}\n\n\nfunction ModalBody({ modalButton, part }) {\n\treturn (\n\t\t\n\t)\n}\n\nexport default function ModalUpa({ modalButton, setModalButton, part }) {\n\tconst history = useHistory()\n\tconst translate = useTranslate('WebSpa/Snackbar/UploadFile/CreatePartOuter/SnackbarMessage')\n\tconst { enqueueSnackbar } = useSnackbar()\n\n\tif (!modalButton)\n\t\treturn null\n\n\treturn (\n\t\t {\n\t\t\t\tlet includeData = modalButton.name === BackendButtons.ButtonCreateSupplierInvoiceAsOrganization || modalButton.name === BackendButtons.ButtonCreateSupplierinvoice;\n\t\t\t\tif ( includeData ) {\n\t\t\t\t\tlet selectedRowIds = form._parentForm?.rowManager?.marksOrSelectedIds;\n\t\t\t\t\tif (selectedRowIds !== undefined && selectedRowIds.length > 1) {\n\t\t\t\t\t\tselectedRowIds = selectedRowIds.map(r => { return { id: r } });\n\t\t\t\t\t\tif (form._data.data[0]._changes === null || form._data.data[0]._changes === undefined)\n\t\t\t\t\t\t\tform._data.data[0]._changes = { 'RelatedObjectsRefList': selectedRowIds }\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tform._data.data[0]._changes = { ...form._data.data[0]._changes, 'RelatedObjectsRefList': selectedRowIds }\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait getFormRestService(modalButton.href)\n\t\t\t\t\t.getUPA(form, includeData)\n\t\t\t}}\n\t\t\tonSubmit={async (form, submitType, props) => {\n\t\t\t\tif (!form.isOk)\n\t\t\t\t\treturn\n\n\t\t\t\t//Obsługa przesyłania plików\n\t\t\t\tif(submitType === 'ButtonConfirm') {\n\t\t\t\t\tif (isArray(form.allFileFields) && !isEmpty(form.allFileFields)) {\t\n\t\t\t\t\t\thandleUploadMultipleFileFields(true, form, part, enqueueSnackbar, translate, history);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet selectedRowIds = form._parentForm?.rowManager?.marksOrSelectedIds;\n\t\t\t\tif( selectedRowIds !== undefined && selectedRowIds.length > 1){\n\t\t\t\t\tselectedRowIds = selectedRowIds.map(r => {return {id: r}});\n\t\t\t\t\tif(form._data.data[0]._changes === null || form._data.data[0]._changes === undefined)\n\t\t\t\t\t\tform._data.data[0]._changes = { 'RelatedObjectsRefList': selectedRowIds}\n\t\t\t\t\telse\n\t\t\t\t\t\tform._data.data[0]._changes = {...form._data.data[0]._changes, 'RelatedObjectsRefList': selectedRowIds}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (await form.onSubmitButton(submitType)) {\n\t\t\t\t\tsetModalButton(false)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (form.serviceUpdateHRef) {\n\t\t\t\t\tawait getFormRestService(form.serviceUpdateHRef)\n\t\t\t\t\t\t.patch(form, '')\n\t\t\t\t}\n\t\t\t\tsetModalButton(false)\n\t\t\t}}\n\t\t>\n\t\t\t\n\t\t\n\t)\n}","import React from 'react'\nimport DV from '../../../components/dataView/DataView'\nimport { FormMetaObject, useForm, FormConsumer } from 'components/form/Form'\nimport getFormRestService from \"services/getFormRestService\"\nimport { linkManager } from 'components/LinkManager'\nimport ModalUpa from 'components/modalUpa/ModalUpa'\nimport { GlobalStrings } from 'GlobalStrings'\nimport { MESSAGE_ACTIONS, useIconMessageDispatch } from 'components/AppMessages';\n\nexport default function EditOnePartOuter({ dataType, useLinkName, children, part, onLoad }) {\n\tconst form = useForm('data')\n\tconst dataView = DV.useDataView()\n\tconst [modalButton, setModalButton] = React.useState(undefined)\n\n\tconst iconMessageDispatch = useIconMessageDispatch();\n\n\tlet readOne = form.getServiceRelativeReadOneHRef(useLinkName ? useLinkName : dataType)\n\n\treturn (\n\t\t {\n\t\t\t\tpart.props.form = form\n\n\t\t\t\tif(onLoad){\n\t\t\t\t\tonLoad(form)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (readOne && await getFormRestService(readOne).getOne(form)) {\n\t\t\t\t\tif (!linkManager.synchronize(dataView))\n\t\t\t\t\t\tdataView.refresh()\n\t\t\t\t}\n\n\t\t\t\ticonMessageDispatch({type: MESSAGE_ACTIONS.APPEND_MESSAGE, \n\t\t\t\t\tpayload: { \n\t\t\t\t\t\tmessages: form.data?.objectInfoMessages,\n\t\t\t\t\t\tupdatedDataType: form.dataType,\n\t\t\t\t\t\tmessagesOwnersId: [ form.data.data[0].id ]\n\t\t\t\t\t }});\n\t\t\t}}\n\t\t\tdataType={dataType}\n\t\t\tuseLinkName={useLinkName}\n\t\t\tonSubmit={async (form, submitType, props) => {\n\t\t\t\tif (submitType === GlobalStrings.reloadOnChangeSubmitType) {\n\t\t\t\t\tawait form.handleReloadOnChangeSubmitType(props);\n\t\t\t\t}\n\t\t\t\telse if (!form.isOk)\n\t\t\t\t\treturn\n\t\t\t\telse if (await form.onSubmitButton(submitType)) {\n\t\t\t\t\tif (form.parentForm) {\n\t\t\t\t\t\tform.parentForm.rowManager.rowData = { ...form.parentForm.rowManager.rowData }\n\t\t\t\t\t\tform.parentForm.trigger('data')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (form.onDisplayModalUpa(submitType, button => setModalButton(button))) {}\n\t\t\t\telse {\n\t\t\t\t\tawait getFormRestService(form.serviceUpdateHRef).patch(form, '')\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ticonMessageDispatch({type: MESSAGE_ACTIONS.APPEND_MESSAGE, \n\t\t\t\t\tpayload: { \n\t\t\t\t\t\tmessages: form.data?.objectInfoMessages,\n\t\t\t\t\t\tupdatedDataType: form.dataType,\n\t\t\t\t\t\tmessagesOwnersId: [ form.data.data[0].id ]\n\t\t\t\t\t }});\n\n\t\t\t\tdataView.refresh()\n\t\t\t}}\n\t\t>\n\t\t\t\n\t\t\t\t{form => {\n\t\t\t\t\tif (typeof part.props.title === 'function')\n\t\t\t\t\t\tpart.props.functionTitle = part.props.title\n\t\t\t\t\tif (part.props.functionTitle) {\n\t\t\t\t\t\tlet t = part.props.title\n\t\t\t\t\t\tpart.props.title = part.props.functionTitle(form)\n\t\t\t\t\t\tif (t !== part.props.title)\n\t\t\t\t\t\t\tdataView.refresh()\n\t\t\t\t\t}\n\t\t\t\t\tpart.parts.forEach(p => {\n\t\t\t\t\t\tlet dataType = p.props.useLinkName || p.props.dataType\n\t\t\t\t\t\tlet r = form.getServiceRelativeRead(dataType) || form.getServiceRelativeReadOne(dataType)\n\t\t\t\t\t\tp.reachable = r !== undefined\n\t\t\t\t\t})\n\t\t\t\t\treturn null\n\t\t\t\t}}\n\t\t\t\n\t\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n","import ErrorBoundary from 'components/errorBoundary/ErrorBoundary'\nimport React from 'react'\nimport DV from '../../../components/dataView/DataView'\nimport EditOnePartInner from './EditOnePartInner'\nimport EditOnePartOuter from './EditOnePartOuter'\n\nfunction InnerDecoration({ child1, child2 }) {\n\tif (!child1)\n\t\treturn null\n\n\treturn \n\t\t{child1}\n\t\t{child2}\n\t
\n}\n\nexport default function EditOnePart({ part, name, dataType, useLinkName, title, children, createEditForm, polymorphic, onLoad }) {\n\treturn (\n\t\t\n\t\t\t}\n\t\t\t\tinnerContent={}\n\t\t\t\tinnerDecoration={}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t)\n}\n","import React from 'react'\nimport { Preloader, MessageListener } from 'components/form/Form'\nimport Card from 'components/card/Card'\nimport { Sections } from 'components/form/components/sections/Sections'\nimport { Buttons } from 'components/form/components/list/components/buttons/Buttons'\nimport Tab from 'contents/main/dataView/Tab'\nimport { HorizontalPair } from 'components/topology/Topology'\nimport { IconMessages } from 'components/iconMessages/IconMessages'\n\nexport default function EditPartInner({ part, createEditForm, polymorphic }) {\n\tif (createEditForm)\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{\n\t\t\t\t\tpart.isSelected &&\n\t\t\t\t\tcreateEditForm({ part, polymorphic })\n\t\t\t\t}\n\t\t\t\n\t\t)\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t{\n\t\t\t\tpart.isSelected &&\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\tright={}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\n\t)\n}\n","import React from 'react'\nimport DV from '../../../components/dataView/DataView'\nimport { FormMetaObject, useForm, FormConsumer } from 'components/form/Form'\nimport getFormRestService from \"services/getFormRestService\"\nimport ModalUpa from 'components/modalUpa/ModalUpa'\nimport { useHistory } from 'react-router-dom'\nimport { linkManager } from 'components/LinkManager'\nimport { GlobalStrings } from 'GlobalStrings'\nimport { MESSAGE_ACTIONS, useIconMessageDispatch } from 'components/AppMessages';\nimport { isArray, isEmpty } from 'lodash';\nimport { useSnackbar } from 'notistack';\nimport { handleUploadMultipleFileFields } from 'components/form/components/file/File';\nimport { useTranslate } from 'locale/Locale';\n\nexport default function EditPartOuter({ dataType, useLinkName, children, part, autoOpenTab }) {\n\n\tconst { enqueueSnackbar } = useSnackbar();\n\n\tconst parentForm = useForm('data')\n\tconst dataView = DV.useDataView()\n\tconst history = useHistory()\n\tconst [modalButton, setModalButton] = React.useState(undefined)\n\n\tconst iconMessageDispatch = useIconMessageDispatch();\n\n\tconst translate = useTranslate('WebSpa/Snackbar/UploadFile/CreatePartOuter/SnackbarMessage');\n\n\n\tReact.useEffect(()=>{\n\t\tlinkManager.handleAutoTab(history, part, autoOpenTab)\n\t},[])\n\n\treturn (\n\t\t {\n\t\t\t\tpart.props.form = form\n\n\t\t\t\tif (loadType === 'reload') {\n\t\t\t\t\tlet readOne = form.serviceReadOneHRef\n\n\t\t\t\t\tif (!readOne)\n\t\t\t\t\t\treturn\n\n\t\t\t\t\treadOne = readOne.replace('{id}', form.id)\n\n\t\t\t\t\tif (!await getFormRestService(readOne)\n\t\t\t\t\t\t.getOne(form))\n\t\t\t\t\t\treturn\n\n\t\t\t\t\tif (form.parentForm) {\n\t\t\t\t\t\tform.parentForm.rowManager.setRowFromFormChild(form)\n\t\t\t\t\t\tform.parentForm.trigger('data')\n\t\t\t\t\t}\n\n\t\t\t\t\ticonMessageDispatch({\n\t\t\t\t\t\ttype: MESSAGE_ACTIONS.APPEND_MESSAGE,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tmessages: form.parentForm.popObjectInfoMessages(),\n\t\t\t\t\t\t\tupdatedDataType: form.dataType,\n\t\t\t\t\t\t\tmessagesOwnersId: [ form.data.data[0].id ]\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}}\n\t\t\tdataType={dataType}\n\t\t\tuseLinkName={useLinkName}\n\t\t\tonSubmit={async (form, submitType, props) => {\n\t\t\t\t\n\t\t\t\tif (submitType === GlobalStrings.reloadOnChangeSubmitType) {\n\t\t\t\t\tawait form.handleReloadOnChangeSubmitType(props);\n\t\t\t\t}\n\t\t\t\telse if (submitType === 'delete' && await form.onDeleteButton(submitType)) {\n\t\t\t\t\tif (form.parentForm) {\n\t\t\t\t\t\tlinkManager.handleListNewPage(history, part.parent, true);\n\t\t\t\t\t\tform.parentForm.asyncLoad();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (await form.onSubmitButton(submitType)){\n\t\t\t\t\tif (form.parentForm) {\n\t\t\t\t\t\tform.parentForm.rowManager.rowData = { ...form.parentForm.rowManager.rowData }\n\t\t\t\t\t\tform.parentForm.trigger('data')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//Sytuacja kiedy aktualizujemy objekt\t\n\t\t\t\telse if (form.onDisplayModalUpa(submitType, button => setModalButton(button))) {}\n\t\t\t\telse if (!submitType) {\n\n\t\t\t\t\t//Obsługa przesyłania plików\n\t\t\t\t\tif (isArray(form.allFileFields) && !isEmpty(form.allFileFields)) {\n\t\t\t\t\t\thandleUploadMultipleFileFields(false, form, part, enqueueSnackbar, translate, history);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait getFormRestService(form.serviceUpdateHRef).patch(form, '');\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\tform.onLinkButton(submitType);\n\t\t\t\t}\n\n\t\t\t\ticonMessageDispatch({\n\t\t\t\t\ttype: MESSAGE_ACTIONS.APPEND_MESSAGE,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tmessages: form.parentForm.popObjectInfoMessages(),\n\t\t\t\t\t\tupdatedDataType: form.dataType,\n\t\t\t\t\t\tmessagesOwnersId: [ form.data.data[0].id ]\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}}\n\t\t>\n\t\t\t\n\t\t\t\t{form => {\n\t\t\t\t\t\n\n\t\t\t\t\tif (typeof part.props.title === 'function')\n\t\t\t\t\t\tpart.props.functionTitle = part.props.title\n\t\t\t\t\tif (part.props.functionTitle) {\n\t\t\t\t\t\tlet t = part.props.title\n\t\t\t\t\t\tpart.props.title = part.props.functionTitle(form)\n\t\t\t\t\t\tif (t !== part.props.title)\n\t\t\t\t\t\t\tdataView.refresh()\n\t\t\t\t\t}\n\t\t\t\t\tlet isChangeReachable = false\n\n\t\t\t\t\tif (part.parts)\n\t\t\t\t\t\tpart.parts.forEach(p => {\n\t\t\t\t\t\t\tlet dataType = p.props.useLinkName || p.props.dataType\n\t\t\t\t\t\t\tlet r = !!(form.getServiceRelativeRead(dataType) || form.getServiceRelativeReadOne(dataType))\n\t\t\t\t\t\t\tisChangeReachable = isChangeReachable || p.reachable !== r\n\t\t\t\t\t\t\tp.reachable = r\n\t\t\t\t\t\t})\n\t\t\t\t\tif (isChangeReachable)\n\t\t\t\t\t\tdataView.refresh()\n\t\t\t\t\treturn null\n\t\t\t\t}}\n\t\t\t\n\t\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n","import ErrorBoundary from 'components/errorBoundary/ErrorBoundary'\nimport React from 'react'\nimport DV from '../../../components/dataView/DataView'\nimport EditPartInner from './EditPartInner'\nimport EditPartOuter from './EditPartOuter'\n\nfunction InnerDecoration({ child1, child2 }) {\n\tif (!child1)\n\t\treturn null\n\n\treturn \n\t\t{child1}\n\t\t{child2}\n\t
\n}\n\nexport default function EditPart({ part, name, dataType, useLinkName, title, children, createEditForm, polymorphic, autoOpenTab }) {\n\treturn (\n\t\t\n\t\t\t}\n\t\t\t\tinnerContent={}\n\t\t\t\tinnerDecoration={}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t)\n}\n","import React from 'react'\nimport { Preloader, MessageListener } from 'components/form/Form'\nimport Card from 'components/card/Card'\nimport { Sections } from 'components/form/components/sections/Sections'\nimport { Buttons } from 'components/form/components/list/components/buttons/Buttons'\n\nexport default function CreatePartInner({ part, createEditForm, polymorphic }) {\n\tif (createEditForm)\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{createEditForm({ part })}\n\t\t\t\n\t\t)\n\n\tlet fields = \n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{fields}\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n}\n","import React from 'react'\nimport { FormMetaObject, useForm } from 'components/form/Form'\nimport getFormRestService from 'services/getFormRestService'\nimport { linkManager } from 'components/LinkManager'\nimport { useHistory } from 'react-router-dom'\nimport { isArray, isEmpty } from 'lodash'\nimport { useTranslate } from 'locale/Locale'\nimport { useSnackbar } from 'notistack'\nimport { GlobalStrings } from 'GlobalStrings'\nimport { fileFieldsNamesOutsideFileTypesThatSupportsUpload } from 'components/form/components/file/File';\nimport { handleUploadMultipleFileFields } from 'components/form/components/file/File';\n\nfunction findIndex(form) {\n\tconst newRow = form.rowManager.rowData\n\tconst treeParentRef = form.data.meta.treeParentRef\n\tconst n = newRow.data[0].attributes[treeParentRef]\n\tif (!n)\n\t\treturn\n\tconst idParent = n.id\n\tconst revRows = form.rows.slice().reverse()\n\n\tlet index = revRows.findIndex(row => {\n\t\tconst v = row.attributes[treeParentRef]\n\n\t\t// eslint-disable-next-line\n\t\treturn v && v.id == idParent\n\t})\n\n\tif (index !== -1)\n\t\treturn (revRows.length - index)\n\n\t// eslint-disable-next-line\n\tindex = form.rows.findIndex(row => row.id == idParent)\n\n\tif (index !== -1)\n\t\treturn index + 1\n}\n\nexport default function CreatePartOuter({ part, dataType, useLinkName, children }) {\n\tconst parentForm = useForm('data')\n\tconst history = useHistory()\n\tconst translate = useTranslate('WebSpa/Snackbar/UploadFile/CreatePartOuter/SnackbarMessage')\n\tconst { enqueueSnackbar } = useSnackbar()\n\n\treturn (\n\t\t {\n\t\t\t\tif (submitType === GlobalStrings.reloadOnChangeSubmitType){\n\t\t\t\t\tawait form.handleReloadOnChangeSubmitType(props);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!form.isOk)\n\t\t\t\t\treturn\n\n\t\t\t\t//Obsługa przesyłania plików\n\t\t\t\tif (isArray(form.allFileFields) && !isEmpty(form.allFileFields)) {\t\n\t\t\t\t\tawait handleUploadMultipleFileFields(true, form, part, enqueueSnackbar, translate, history);\n\t\t\t\t\tif (fileFieldsNamesOutsideFileTypesThatSupportsUpload.some(fn => form.allFileFields.some(field => field.name === fn))) {\n\t\t\t\t\t\tif (form.errorFromService || form.errorFromBackEnd)\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\thandleAfterPostOperationsToSetNewRowAsSelected(form);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait getFormRestService(form.serviceCreateHRef)\n\t\t\t\t\t.post(form)\n\n\t\t\t\tif (form.errorFromService || form.errorFromBackEnd)\n\t\t\t\t\treturn\n\n\t\t\t\thandleAfterPostOperationsToSetNewRowAsSelected(form);\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t\n\t)\n\n\tfunction handleAfterPostOperationsToSetNewRowAsSelected(form) {\n\t\tconst newIndex = findIndex(parentForm);\n\n\t\tparentForm.rowManager.pushRowFromRowData(newIndex);\n\t\tparentForm.rowManager.initVisibleRowsFromData();\n\n\t\tlinkManager.handleListId(history, part.parent, form.id);\n\t}\n}","import ErrorBoundary from 'components/errorBoundary/ErrorBoundary'\nimport React from 'react'\nimport DV from '../../../components/dataView/DataView'\nimport CreatePartInner from './CreatePartInner'\nimport CreatePartOuter from './CreatePartOuter'\n\nfunction InnerDecoration({ child1, child2 }) {\n\tif (!child1)\n\t\treturn null\n\n\treturn \n\t\t{child1}\n\t\t{child2}\n\t
\n}\n\nexport default function CreatePart({ part, name, title, dataType, useLinkName, createEditForm, polymorphic }) {\n\treturn (\n\t\t\n\t\t\t}\n\t\t\t\tinnerContent={}\n\t\t\t\tinnerDecoration={}\n\t\t\t>\n\t\t\t\n\t\t\n\t)\n}\n","import React from 'react'\nimport Paginator from 'components/form/components/paginator/Paginator'\nimport { Card, ListMode, ListButtons, GanttGroupElements, GanttObserveds, ListModeView } from 'components/form/components/list/components'\nimport { Preloader } from 'components/form/Form'\nimport { Vertical, HorizontalPair } from 'components/topology/Topology'\nimport { useHistory } from 'react-router-dom'\nimport { linkManager } from 'components/LinkManager'\n\nexport function List({ part, dataTypeAdd, isGantt, group, sort, inlineEditionOnly, onClickRow, onDoubleClickRow, onLaunch, additionalButtons }) {\n\tconst history = useHistory()\n\n\treturn (\n\t\t<>\n\t\t\t}\n\t\t\t\tright={}\n\t\t\t/>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tlinkManager.handleListNewPage(history, part, true)\n\t\t\t\t\t\t\t}} />} />\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t>\n\t)\n}","import React from 'react'\nimport { List } from 'components/form/components/list'\n\nexport default function ListPartInnerList({ part, dataTypeAdd, isGantt, group, sort, inlineEditionOnly, onClickRow, onDoubleClickRow, onLaunch, additionalButtons }) {\n\treturn
\n}\n","export class MarkManager {\r\n\t_marks = new Set()\r\n\r\n\tclear() {\r\n\t\tthis._marks = new Set()\r\n\t\tthis._select = undefined\r\n\t}\r\n\r\n\tisMark(id) {\r\n\t\treturn this._marks.has(id)\r\n\t}\r\n\r\n\tsetMark(id, bMark) {\r\n\t\tif (bMark) {\r\n\t\t\tthis._marks.add(id)\r\n\t\t\tthis._select = id\r\n\t\t} else {\r\n\t\t\tthis._marks.delete(id)\r\n\t\t\tthis._select = undefined\r\n\t\t}\r\n\t}\r\n\r\n\tselect(id) {\r\n\t\tthis._marks.clear()\r\n\t\tthis.setMark(id, true)\r\n\t\tthis._select = id\r\n\t}\r\n\r\n\tselectRange(toId, rows) {\r\n\t\tif (!this._select)\r\n\t\t\treturn\r\n\r\n\t\tlet index0, index1\r\n\r\n\t\trows.forEach((row, index) => {\r\n\t\t\tif (row.id === this._select)\r\n\t\t\t\tindex0 = index\r\n\t\t\tif (row.id === toId)\r\n\t\t\t\tindex1 = index\r\n\t\t})\r\n\r\n\t\tif (index0 > index1) {\r\n\t\t\tlet h = index0\r\n\t\t\tindex0 = index1\r\n\t\t\tindex1 = h\r\n\t\t}\r\n\r\n\t\tthis._marks.clear()\r\n\t\tfor (let i = index0; i <= index1; ++i)\r\n\t\t\tthis._marks.add(rows[i].id)\r\n\t}\r\n\r\n\ttoggleMark(id) {\r\n\t\tthis.setMark(id, !this.isMark(id))\r\n\t}\r\n\r\n\tget count() { return this._marks.size }\r\n\tget ids() { return [...this._marks] }\r\n}","import { MarkManager } from './MarkManager.js'\r\nimport { getFileNameWithoutExtension } from 'Tools/IOTools'\r\n\r\nexport class Data {\r\n\t/**\r\n\t * \r\n\t * @param {object} args\r\n\t * @param {\r\n\t * \tleft:[\r\n\t * \t\t{\r\n\t * \t\t\tid:string, \r\n\t * \t\t\tvalue:string,\r\n\t * \t\t\tnext:[string]\r\n\t * \t\t}\r\n\t * \t],\r\n\t * \tright:[]\r\n\t * } args.values\r\n\t * \t\r\n\t */\r\n\tconstructor({ values }) {\r\n\t\tthis._changes = false\r\n\t\tthis._markLeft = new MarkManager()\r\n\t\tthis._markRight = new MarkManager()\r\n\t\tthis.left = values.left\r\n\t\tthis.right = values.right\r\n\t\tthis._connect()\r\n\t}\r\n\r\n\tget changes() { return this._changes }\r\n\tset changes(v) { this._changes = v }\r\n\r\n\tget connections() {\r\n\t\treturn {\r\n\t\t\tleft: this.left\r\n\t\t\t\t.filter(v => v.next?.length > 0)\r\n\t\t\t\t.map(v => v.value + '->' + v.next.map(vv => {\r\n\t\t\t\t\treturn this.rightById(vv)?.value ?? '!! ' + this.leftById(vv)?.value ?? vv\r\n\t\t\t\t})),\r\n\t\t\tright: this.right\r\n\t\t\t\t.filter(v => v.next?.length > 0)\r\n\t\t\t\t.map(v => v.value + '->' + v.next.map(vv => {\r\n\t\t\t\t\treturn this.leftById(vv)?.value ?? '!! ' + this.rightById(vv)?.value ?? vv\r\n\t\t\t\t}))\r\n\t\t}\r\n\t}\r\n\r\n\tget values() { return { left: this.left, right: this.right } }\r\n\r\n\tonRenderProvider({ values }) {\r\n\t\tthis.left = values.left\r\n\t\tthis.right = values.right\r\n\t\tthis._connect()\r\n\t}\r\n\r\n\t_connect() {\r\n\t\tthis._setBacks()\r\n\t\tthis._sortValues()\r\n\t\tthis._setMaps()\r\n\t\tthis._markLeft.clear()\r\n\t\tthis._markRight.clear()\r\n\t}\r\n\r\n\t_setBacks() {\r\n\t\tconst left = new Map()\r\n\t\tconst right = new Map()\r\n\r\n\t\tthis._mapLeft = left\r\n\t\tthis._mapRight = right\r\n\r\n\t\tthis.left.forEach(v => left.set(v.id, { v }))\r\n\t\tthis.right.forEach(v => right.set(v.id, { v }))\r\n\r\n\t\tthis.left.forEach(v => {\r\n\t\t\tv._back = undefined\r\n\t\t})\r\n\t\tthis.right.forEach(v => {\r\n\t\t\tv._back = undefined\r\n\t\t})\r\n\t\tthis.left.forEach(v => {\r\n\t\t\tif (!v.next)\r\n\t\t\t\treturn\r\n\t\t\tv.next.forEach(id => {\r\n\t\t\t\tconst vv = right.get(id)\r\n\t\t\t\tif (vv)\r\n\t\t\t\t\tvv.v._back = v\r\n\t\t\t})\r\n\t\t})\r\n\t\tthis.right.forEach(v => {\r\n\t\t\tif (!v.next)\r\n\t\t\t\treturn\r\n\t\t\tv.next.forEach(id => {\r\n\t\t\t\tconst vv = left.get(id)\r\n\t\t\t\tif (vv)\r\n\t\t\t\t\tvv.v._back = v\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n\r\n\t_sortValues() {\r\n\t\tconst f = (a, b) => {\r\n\t\t\tconst aBack = (a.next ? a.value : undefined) ?? a._back?.value ?? ''\r\n\t\t\tconst bBack = (b.next ? b.value : undefined) ?? b._back?.value ?? ''\r\n\t\t\tconst res = aBack.localeCompare(bBack)\r\n\r\n\t\t\tif (res !== 0)\r\n\t\t\t\treturn res\r\n\r\n\t\t\treturn a.value.localeCompare(b.value)\r\n\t\t}\r\n\t\tthis.left.sort(f)\r\n\t\tthis.right.sort(f)\r\n\t}\r\n\r\n\t_setMaps() {\r\n\t\tconst left = this._mapLeft\r\n\t\tconst right = this._mapRight\r\n\r\n\t\tthis.left.forEach((v, index) => left.set(v.id, { v, index }))\r\n\t\tthis.right.forEach((v, index) => right.set(v.id, { v, index }))\r\n\r\n\t\tthis.left.filter(v => v.next).forEach(v => {\r\n\t\t\tconst _next = []\r\n\t\t\tv.next.map(id => {\r\n\t\t\t\tconst e = right.get(id)\r\n\t\t\t\tif (e)\r\n\t\t\t\t\t_next.push(e.index)\r\n\t\t\t})\r\n\r\n\t\t\tif (_next.length > 0) {\r\n\t\t\t\tv._nextFirst = this.right[Math.min(..._next)].id\r\n\t\t\t\tv._nextLast = this.right[Math.max(..._next)].id\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.right.filter(v => v.next).forEach(v => {\r\n\t\t\tconst _next = []\r\n\t\t\tv.next.map(id => {\r\n\t\t\t\tconst e = left.get(id)\r\n\t\t\t\tif (e)\r\n\t\t\t\t\t_next.push(e.index)\r\n\t\t\t})\r\n\r\n\t\t\tif (_next.length > 0) {\r\n\t\t\t\tv._nextFirst = this.left[Math.min(..._next)].id\r\n\t\t\t\tv._nextLast = this.left[Math.max(..._next)].id\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tleftById(id) { return this._mapLeft.get(id)?.v }\r\n\trightById(id) { return this._mapRight.get(id)?.v }\r\n\tmarkLeftIsFree() {\r\n\t\treturn !this._markLeft.ids.some(id => {\r\n\t\t\tconst left = this.leftById(id)\r\n\t\t\treturn left && (left._back || left.next)\r\n\t\t})\r\n\t}\r\n\tmarkRightIsFree() {\r\n\t\treturn !this._markRight.ids.some(id => {\r\n\t\t\tconst right = this.rightById(id)\r\n\t\t\treturn right && (right._back || right.next)\r\n\t\t})\r\n\t}\r\n\r\n\t_removeMapLeftIds(ids) {\r\n\t\tthis._mapRight.forEach(_row => {\r\n\t\t\tconst row = _row.v\r\n\t\t\tif (!row.next)\r\n\t\t\t\treturn\r\n\r\n\t\t\tconst count = row.next?.length\r\n\t\t\trow.next = row.next.filter(n => !ids.includes(n))\r\n\t\t\tif (row.next?.length !== count)\r\n\t\t\t\tthis.changes = true\r\n\t\t\tif (!row.next.length) {\r\n\t\t\t\trow.next = undefined\r\n\t\t\t\tthis.changes = true\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t_removeMapRightIds(ids) {\r\n\t\tthis._mapLeft.forEach(_row => {\r\n\t\t\tconst row = _row.v\r\n\t\t\tif (!row.next)\r\n\t\t\t\treturn\r\n\r\n\t\t\tconst count = row.next?.length\r\n\t\t\trow.next = row.next.filter(n => !ids.includes(n))\r\n\t\t\tif (row.next?.length !== count)\r\n\t\t\t\tthis.changes = true\r\n\t\t\tif (!row.next.length) {\r\n\t\t\t\trow.next = undefined\r\n\t\t\t\tthis.changes = true\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t_addMapLeftIds(id, ids) {\r\n\t\tconst row = this.leftById(id)\r\n\r\n\t\tif (!row)\r\n\t\t\treturn false\r\n\r\n\t\tthis._removeMapRightIds(ids)\r\n\t\tif (row.next)\r\n\t\t\trow.next.push(...ids.filter(id => !row.next.includes(id)))\r\n\t\telse\r\n\t\t\trow.next = ids\r\n\t}\r\n\r\n\t_addMapRightIds(id, ids) {\r\n\t\tconst row = this.rightById(id)\r\n\r\n\t\tif (!row)\r\n\t\t\treturn false\r\n\r\n\t\tthis._removeMapLeftIds(ids)\r\n\t\tif (row.next)\r\n\t\t\trow.next.push(...ids.filter(id => !row.next.includes(id)))\r\n\t\telse\r\n\t\t\trow.next = ids\r\n\t}\r\n\r\n\t_linkLeft() {\r\n\t\tif (this._markLeft.count === 1 && this._markRight.count > 0) {\r\n\t\t\tconst idLeft = this._markLeft.ids[0]\r\n\t\t\tconst left = this.leftById(idLeft)\r\n\r\n\t\t\tif (!this.markRightIsFree())\r\n\t\t\t\treturn false\r\n\r\n\t\t\t//\t\tleft0 --> |right|\r\n\t\t\t//\t\t|left|\r\n\t\t\t//\t\t...\r\n\t\t\t//zamieniamy na:\r\n\t\t\t//\t\tleft0 <-- |right|\r\n\t\t\t//\t\tleft <--\r\n\t\t\t//\t\t...\r\n\t\t\tif (left._back?.next?.length === 1) {\r\n\t\t\t\tleft.next = [left._back.id, ...this._markRight.ids]\r\n\t\t\t\tleft._back.next = undefined\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\r\n\t\t\t//\t\t|left| --> *\r\n\t\t\t//\t\t ...\r\n\t\t\t//\t\t --> | |\r\n\t\t\t//\t\t ...\r\n\t\t\tif (!left._back) {\r\n\t\t\t\tthis._addMapLeftIds(idLeft, this._markRight.ids)\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\r\n\t\t\treturn false\r\n\t\t}\r\n\t}\r\n\r\n\t_linkRight() {\r\n\t\tif (this._markRight.count === 1 && this._markLeft.count > 0) {\r\n\t\t\tconst idRight = this._markRight.ids[0]\r\n\t\t\tconst right = this._mapRight.get(idRight)?.v\r\n\r\n\t\t\tif (!this.markLeftIsFree())\r\n\t\t\t\treturn false\r\n\r\n\t\t\t//\t\t|left| <-- right0\r\n\t\t\t//\t\t |right|\r\n\t\t\t//\t\t ...\r\n\t\t\t//zamieniamy na:\r\n\t\t\t//\t\t|left| --> right0\r\n\t\t\t//\t\t --> |right|\r\n\t\t\t//\t\t ...\r\n\t\t\tif (right._back?.next?.length === 1) {\r\n\t\t\t\tright.next = [right._back.id, ...this._markLeft.ids]\r\n\t\t\t\tright._back.next = undefined\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\r\n\t\t\t//\t\t * <-- |left|\r\n\t\t\t//\t\t... <-- \r\n\t\t\t//\t\t| | <--\r\n\t\t\t// ...\r\n\t\t\tif (!right._back) {\r\n\t\t\t\tthis._addMapRightIds(idRight, this._markLeft.ids)\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\r\n\t\t\treturn false\r\n\t\t}\r\n\t}\r\n\r\n\tlink() {\r\n\t\tif (this._linkLeft() || this._linkRight()) {\r\n\t\t\tthis._connect()\r\n\t\t\tthis.refresh()\r\n\t\t\tthis.changes = true\r\n\t\t\treturn true\r\n\t\t}\r\n\r\n\t\treturn false\r\n\t}\r\n\r\n\tunlink() {\r\n\t\tthis._removeMapLeftIds(this._markLeft.ids)\r\n\t\tthis._removeMapRightIds(this._markRight.ids)\r\n\r\n\t\tthis._markLeft.ids.forEach(id => {\r\n\t\t\tconst row = this.leftById(id)\r\n\r\n\t\t\tif (row.next) {\r\n\t\t\t\trow.next = undefined\r\n\t\t\t\tthis.changes = true\r\n\t\t\t}\r\n\t\t})\r\n\t\tthis._markRight.ids.forEach(id => {\r\n\t\t\tconst row = this.rightById(id)\r\n\r\n\t\t\tif (row.next) {\r\n\t\t\t\trow.next = undefined\r\n\t\t\t\tthis.changes = true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis._connect()\r\n\t\tthis.refresh()\r\n\t}\r\n\r\n\t_autoLink() {\r\n\t\tthis.left.forEach(fileOnLeftSide => {\r\n\t\t\tif (fileOnLeftSide.next)\r\n\t\t\t\treturn\r\n\r\n\t\t\tconst fileNameWithoutExtension = getFileNameWithoutExtension(fileOnLeftSide.value);\r\n\t\t\tconst matchingFileOnRightSide = this._findFileOnRightSideByFileNameWithoutExtension(fileNameWithoutExtension)\r\n\t\t\tif (!matchingFileOnRightSide)\r\n\t\t\t\treturn\r\n\r\n\t\t\tfileOnLeftSide.next = [matchingFileOnRightSide.id]\r\n\t\t\tthis.changes = true\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Wyszukuje pliku po prawej stronie po nazwie pliku\r\n\t * @param {string} fileName \r\n\t * @returns Plik po prawej stronie lub undefined jeśli nie znaleziono\r\n\t */\r\n\t_findFileOnRightSideByFileNameWithoutExtension(fileName)\r\n\t{\r\n\t\treturn this.right.find(fileOnRightSide => {\r\n\t\t\tconst fileNameWithoutExtension = getFileNameWithoutExtension(fileOnRightSide.value)\r\n\t\t\treturn fileNameWithoutExtension === fileName\r\n\t\t});\r\n\t}\r\n\r\n\tautoLink() {\r\n\t\tthis._autoLink()\r\n\t\tthis._connect()\r\n\t\tthis.refresh()\r\n\t}\r\n}","import RefreshableContext from 'components/refreshableContext/RefreshableContext'\r\n\r\nexport const context = RefreshableContext.create()","import React from 'react'\r\n\r\nfunction _Brace(x1, y1, x2, y2) {\r\n\tconst vx = x2 - x1, vx2 = vx / 2, vx4 = vx / 4\r\n\tconst vy = y2 - y1, vy2 = vy / 2, vy4 = vy / 4\r\n\r\n\treturn `c0 0 ${vx4} 0 ${vx2} ${vy2} c0 0 ${vx4} ${vy2} ${vx2} ${vy2}`\r\n}\r\n\r\n\r\nexport function Brace({ xb, xe, yb1, yb2, ye1, ye2 }) {\r\n\tlet width = Math.max(xb, xe) - Math.min(xb, xe) + 1 + 2\r\n\tlet height = Math.max(yb1, yb2, ye1, ye2) - Math.min(yb1, yb2, ye1, ye2) + 1 + 2\r\n\tconst x = Math.min(xb, xe)\r\n\tconst y = Math.min(yb1, yb2, ye1, ye2)\r\n\tconst d = Math.abs(yb1 - yb2) > Math.abs(ye1 - ye2) ? 1 : -1\r\n\r\n\r\n\txb -= x\r\n\txe -= x\r\n\tyb1 -= y\r\n\tyb2 -= y\r\n\tye1 -= y\r\n\tye2 -= y\r\n\r\n\tif (yb1 === yb2 && ye1 === ye2)\r\n\t\treturn (\r\n\t\t\t\r\n\t\t)\r\n\r\n\treturn (\r\n\t\t\r\n\t)\r\n}","import React from 'react'\r\nimport { usePositionElements } from 'components/positionObserver/PositionObserver'\r\nimport { Brace } from './Brace'\r\n\r\nexport function LeftObserved({ id0, id1, id2 }) {\r\n\tconst [r0, r1, r2] = usePositionElements([id0, id1, id2], true)\r\n\r\n\tif (!r0 || !r1 || !r2)\r\n\t\treturn null\r\n\r\n\tconst p0 = r0.rgCn\r\n\tconst p1 = r1.lfCn\r\n\r\n\tif (id1 === id2)\r\n\t\treturn \r\n\r\n\treturn \r\n}\r\n\r\nexport function RightObserved({ id0, id1, id2 }) {\r\n\tconst [r0, r1, r2] = usePositionElements([id0, id1, id2], true)\r\n\r\n\tif (!r0 || !r1 || !r2)\r\n\t\treturn null\r\n\r\n\tconst p0 = r0.lfCn\r\n\tconst p1 = r1.rgCn\r\n\r\n\tif (id1 === id2)\r\n\t\treturn \r\n\r\n\treturn \r\n}","import React from 'react'\r\nimport { useAddElement } from 'components/positionObserver/PositionObserver'\r\nimport { customElements } from 'cssStatic'\r\nimport { context } from './Context'\r\n\r\nconst StyledZipElement = customElements('o-zip-element', [\r\n\t'grid', 'f-primary', 'f-16', 'overflow-x-hidden', 'min-width-0', 'noselect', 'ellipsis', 'nowrap', 'cursor-pointer',\r\n\t'br-3', 'text-grey700',\r\n\t{\r\n\t\t'& > div': ['m-tb-5', 'p-5', {\r\n\t\t\t'background-color': '#f9f9ff',\r\n\t\t\t'padding': '10px',\r\n\t\t\t'border-radius': '10px',\r\n\t\t\t'border-color': `var(--o-mainDarken700)`\r\n\t\t}],\r\n\t\t'&[is-mark=\"true\"] > div': { 'background-color': '#eeeeff' },\r\n\t\t'&[left=\"false\"] > div': ['br-left-solid', 'm-right-5'],\r\n\t\t'&[left=\"true\"] > div': ['br-right-solid', 'm-left-5']\r\n\t}\r\n])\r\n\r\nconst onClick = function ( evt, data, row, mark ) {\r\n\r\n\r\n\tif (evt.ctrlKey) {\r\n\t\tmark.toggleMark(row.id)\r\n\t\tdata.refresh()\r\n\t\treturn\r\n\t}\r\n\r\n\tif (evt.shiftKey) {\r\n\t\tmark.selectRange(row.id, data.left)\r\n\t\tdata.refresh()\r\n\t\treturn\r\n\t}\r\n\r\n\tmark.select(row.id)\r\n\tdata.refresh()\r\n}\r\n\r\nexport function ZipElementLeft({ row }) {\r\n\tconst ref = useAddElement(row.id)\r\n\tconst data = context.useContext()\r\n\r\n\treturn (\r\n\t\t onClick(evt, data, row, data._markLeft)\r\n\t\t}>\r\n\t\t\t\r\n\t\t\t\t{row.value}\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n}\r\n\r\n\r\n\r\nexport function ZipElementRight({ row }) {\r\n\tconst ref = useAddElement(row.id)\r\n\tconst data = context.useContext()\r\n\r\n\treturn (\r\n\t\t onClick(evt, data, row, data._markRight)\r\n\t\t}>\r\n\t\t\t\r\n\t\t\t\t{row.value}\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n}","import React from 'react'\r\nimport { customElements } from 'cssStatic'\r\nimport { context } from './Context'\r\nimport { ZipElementLeft, ZipElementRight } from './ZipElement'\r\n\r\nconst StyledZipSite = customElements('o-zip-site', ['grid-ver', 'overflow-x-hidden', 'overflow-y-visible'])\r\n\r\nexport function ZipLeft() {\r\n\tconst data = context.useContext()\r\n\tconst colData = data?.left ?? []\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{colData.map((row, index) => )}\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n}\r\n\r\nexport function ZipRight() {\r\n\tconst data = context.useContext()\r\n\tconst colData = data?.right ?? []\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{colData.map((row, index) => )}\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n}","import React from 'react'\r\nimport { Group, Elements, Observers } from 'components/positionObserver/PositionObserver'\r\nimport { customElements } from 'cssStatic'\r\nimport { context } from './Context'\r\nimport { LeftObserved, RightObserved } from './Observed'\r\nimport { ZipLeft, ZipRight } from './Zip'\r\nimport Button from 'components/form/components/list/components/buttons/Button'\r\nimport { useTranslate } from 'locale/Locale'\r\nimport { Tooltip } from '@material-ui/core'\r\n\r\nconst StyledZipListContent = customElements('o-zip-list-content', ['grid-hor', 'grid-gap-60', 'overflow-hidden', 'relative'])\r\nconst StyledZipList = customElements('o-zip-list', ['grid-ver', 'overflow-hidden', 'grid-acy-start'])\r\nconst StyledZipTop = customElements('o-zip-top', ['grid-hor', 'grid-acx-space-between'])\r\nconst StyledZipButtons = customElements('o-zip-buttons', ['grid-hor', 'grid-acx-start', 'grid-acy-center', 'grid-gap-5'])\r\nconst StyledZipButton = customElements('o-zip-button', ['f-26', 'fi-google', 'p-5', 'cursor-pointer', 'transition-5', {\r\n\t'&:hover': {\r\n\t\t'background-color': '#f9f9ff'\r\n\t},\r\n\t'color': '#336699'\r\n}])\r\n\r\nexport function ZipListContent({ additionalButtons, onSave, readOnly }) {\r\n\tconst data = context.useContext()\r\n\tconst translate = useTranslate('WebSpa/Buttons')\r\n\tconst translateZip = useTranslate('WebSpa/ZipList')\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{additionalButtons && additionalButtons()}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treadOnly || <>\r\n\t\t\t\t\t\t\t\t\t { /* \r\n\t\t\t\t\t\t\t\t\t\t { data.link() }}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tlink\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t */ }\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t data.unlink()}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tlink_off\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t data.autoLink()}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\thdr_auto\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t(readOnly || !data.changes) ? null :\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{data.left.filter(v => v.next && v._nextFirst && v._nextLast).map(v => )}\r\n\t\t\t\t\t\t\t{data.right.filter(v => v.next && v._nextFirst && v._nextLast).map(v => )}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n}","import React from 'react'\r\nimport { Data } from './Data'\r\nimport { context } from './Context'\r\nimport { ZipListContent } from './ZipListContent'\r\n\r\nexport function ZipList({ values, additionalButtons, onSave, readOnly }) {\r\n\treturn (\r\n\t\t {\r\n\t\t\t\treturn new Data(props)\r\n\t\t\t}}>\r\n\t\t\t\r\n\t\t\r\n\t)\r\n}","function add(object, nextObjectId) {\r\n\tif (!object.next)\r\n\t\tobject.next = [nextObjectId]\r\n\telse\r\n\t\tobject.next.push(nextObjectId)\r\n}\r\n\r\n\r\nfunction connectNextObjIfExists(map, firstObjId, secObjId) {\r\n\tconst firstObj = map.get(firstObjId)\r\n\tif ( firstObj !== undefined )\r\n\t\tadd(firstObj, secObjId)\r\n}\r\n\r\n\r\nexport function fromForm(form, { dependentObjectsFieldName, isDependentObjectFieldName }) {\r\n\tconst filesData = form.data.data\r\n\r\n\tconst values = divideFormRowsValuesBetWeenLeftRightSides(filesData, isDependentObjectFieldName)\r\n\r\n\tconst map = new Map()\r\n\r\n\tvalues.left.forEach(file => map.set(file.id, file))\r\n\tvalues.right.forEach(file => map.set(file.id, file))\r\n\r\n\tfilesData.forEach(objData => {\r\n\t\tif (!Array.isArray(objData.attributes[dependentObjectsFieldName]))\r\n\t\t\treturn\r\n\r\n\t\tobjData.attributes[dependentObjectsFieldName].forEach(dependentObj => connectNextObjIfExists(map, objData.id, dependentObj.id))\r\n\t})\r\n\r\n\treturn values\r\n}\r\n\r\n/**\r\n * Dzielimy listę wejściową objectsData na dwie listy:\r\n\tlewa - objekty ktore maja ustawiona wartość isDependentObjectFieldName = false\r\n\tprawa - objekty ktore maja ustawiona wartość isDependentObjectFieldName = true\r\n\tJesli to pole nie występuje to wtedy objekt nie zostanie przydzielony do żadnej z list\r\n * @param {*} Dane objektów \r\n * @param {*} nazwa pola które zawiera informacje czy dany objekt jest objektem zależnym \r\n * @returns Objekt zawierający dwie listy objektów podzielone na lewą i prawą stronę\r\n */\r\nfunction divideFormRowsValuesBetWeenLeftRightSides(objectsData, isDependentObjectFieldName) {\r\n\treturn {\r\n\t\tleft: objectsData.filter(row => row.attributes?.[isDependentObjectFieldName] === false)\r\n\t\t\t.map(row => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: row.id,\r\n\t\t\t\t\tvalue: row.attributes?.FileIdent?.value\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\tright: objectsData.filter(row => row.attributes?.[isDependentObjectFieldName])\r\n\t\t\t.map(row => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: row.id,\r\n\t\t\t\t\tvalue: row.attributes?.FileIdent?.value\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t}\r\n}","import React from 'react'\nimport { MessageListener } from 'components/form/Form'\nimport ListPartInnerList from './ListPartInnerList'\nimport { ZipList } from 'components/zipList/ZipList'\nimport { fromForm } from 'components/zipList/fromForm'\nimport { toForm } from 'components/zipList/toForm'\nimport { customElements } from 'cssStatic'\nimport useForm from 'components/form/hooks/useForm'\nimport { Card } from 'components/form/components/list/components'\nimport Button from 'components/form/components/list/components/buttons/Button'\nimport { Tooltip } from '@material-ui/core'\nimport { useTranslate } from 'locale/Locale'\n\nconst SwitchButtonBack = customElements('o-inqueries-zip-list-switch-button-back', ['f-26', 'fi-google', 'p-5', 'cursor-pointer', 'transition-5', {\n\t'&:hover': {\n\t\t'background-color': '#f9f9ff'\n\t},\n\t'color': `var(--o-primaryDarken700)`\n}])\n\nexport function ZipListWrapper(props) {\n\tconst [state, setState] = React.useState(false)\n\tconst { part, group, sort, dataTypeAdd, isGantt, inlineEditionOnly, onClickRow, onDoubleClickRow, onLaunch } = props\n\tconst form = useForm('data')\n\tconst zipButtons=Object.values(form.parentForm?.data?.meta?.buttons ?? {})?.filter(button => button.uiAction === 'ZipList' && button?.params?.childDataType === (form._useLinkName ? form._useLinkName : form.dataType))\n\tconst zipButton = zipButtons.find(button=>form.parentForm?.data?.data?.[0]?.links[button.name])\n\tconst translateZip = useTranslate('WebSpa/ZipList')\n\n\tif (state && zipButton)\n\t\treturn \n\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t setState(!state)}>\n\t\t\t\t\t\t\tarrow_back\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvalues={fromForm(form, zipButton.params)}\n\t\t\t\tonSave={zipContext => {\n\t\t\t\t\tif (!form.serviceUpdateHRef)\n\t\t\t\t\t\treturn\n\n\t\t\t\t\tconst dataToSend = toForm(form, zipContext.values, zipButton.params)\n\t\t\t\t\tconst formData = { data: dataToSend }\n\n\t\t\t\t\tif (dataToSend.length > 0)\n\t\t\t\t\t\tform.asyncSubmit('saveRows', formData)\n\t\t\t\t\tzipContext.changes = false\n\t\t\t\t}}\n\t\t\t\treadOnly={!form.serviceUpdateHRef}\n\t\t\t/>\n\t\t\n\n\treturn (\n\t\t\n\t\t\t\t