{"version":3,"file":"static/js/index.313eac12.js","sources":["./src/App.tsx","./src/__mocks__/categoriesSidebars/adminMenu.tsx","./src/__mocks__/categoriesSidebars/agentMenu.tsx","./src/__mocks__/categoriesSidebars/index.tsx","./src/__mocks__/categoriesSidebars/moderatorMenu.tsx","./src/__mocks__/categoriesSidebars/superAdminMenu.tsx","./src/__mocks__/categoriesSidebars/supportMenu.tsx","./src/__mocks__/categoriesSidebars/technicalManagerMenu.tsx","./src/__mocks__/supportManagerAdditionalMenu.tsx","./src/api/axios.ts","./src/api/core/ApiError.ts","./src/api/core/AxiosHttpRequest.ts","./src/api/core/BaseHttpRequest.ts","./src/api/core/CancelablePromise.ts","./src/api/core/OpenAPI.ts","./src/api/core/request.ts","./src/api/services/AuthService.ts","./src/api/services/CategoryService.ts","./src/api/services/DiscountService.ts","./src/api/services/ExhibitionService.ts","./src/api/services/ExhibitorService.ts","./src/api/services/GlobalSettingsService.ts","./src/api/services/OrderService.ts","./src/api/services/PriceListItemService.ts","./src/api/services/PriceListService.ts","./src/api/services/ProductService.ts","./src/api/services/SellingOfficeService.ts","./src/api/services/StandService.ts","./src/api/services/UserService.ts","./src/api/setup-openapi.ts","./src/api/typed-axios.ts","./src/components/AdminSearch/AdminSearch.tsx","./src/components/AmountCounter/index.tsx","./src/components/AmountCounter/styled.ts","./src/components/AsyncButton/AsyncButton.tsx","./src/components/BrandBox/BrandBox.tsx","./src/components/Breadcrumbs/Breadcrumbs.tsx","./src/components/Buttons/Button/Button.tsx","./src/components/Buttons/Link/index.tsx","./src/components/Card/Card.tsx","./src/components/Card/ExhibitionCard.tsx","./src/components/Card/ProductCard.tsx","./src/components/Card/TechnicalServiceCard.tsx","./src/components/Content/index.tsx","./src/components/DatePicker/DatePicker.tsx","./src/components/Debug.tsx","./src/components/DevelopmentCard/BuildingCardModal.tsx","./src/components/DevelopmentCard/DevelopmentCard.styled.tsx","./src/components/DevelopmentCard/DevelopmentCard.tsx","./src/components/DownloadFileLink.tsx","./src/components/Fields/Checkbox.tsx","./src/components/Fields/Input.tsx","./src/components/Fields/InputNumber.tsx","./src/components/Fields/Select.tsx","./src/components/FileUpload/FileUpload.tsx","./src/components/FormLabel/FormLabel.tsx","./src/components/Forms/Services/SelectBuilding/getSelectBuildingInfo.tsx","./src/components/Forms/Services/SelectBuilding/index.tsx","./src/components/Forms/Services/ServiceFactory.tsx","./src/components/Forms/Services/TemporaryStaff/Row.tsx","./src/components/Forms/Services/TemporaryStaff/config.ts","./src/components/Forms/Services/TemporaryStaff/index.tsx","./src/components/Forms/Services/common/ProductItemsCard.tsx","./src/components/Forms/Services/common/use-products-loader.ts","./src/components/Forms/Services/defaultConfig.ts","./src/components/Header/Header.tsx","./src/components/Header/headerMenuConfig.tsx","./src/components/Icons/Development.tsx","./src/components/Icons/DraggableHandlerIcon.tsx","./src/components/Icons/Orders.tsx","./src/components/Icons/Users.tsx","./src/components/ImageGalleries/BuildingGallery.tsx","./src/components/ImageGalleries/CommonProductGallery.styled.tsx","./src/components/ImageGalleries/CommonProductGallery.tsx","./src/components/LanguageSwitcher/LanguageSwitcher.tsx","./src/components/Loader/Loader.tsx","./src/components/Menu/Menu.tsx","./src/components/Menu/MenuItem.tsx","./src/components/Modal/Provider.tsx","./src/components/Modal/api.tsx","./src/components/MultiSelect/MultiSelect.tsx","./src/components/OrderBadge.tsx","./src/components/OrderTableRow/OrderTableRow.tsx","./src/components/OrderTableRow/styled.ts","./src/components/Profile/Profile.styled.tsx","./src/components/Profile/Profile.tsx","./src/components/Profile/ProfileMenu.tsx","./src/components/Search/Search.tsx","./src/components/Sidebar/CategoriesSidebar.tsx","./src/components/Sidebar/OrderList/Footer.tsx","./src/components/Sidebar/OrderList/Header.tsx","./src/components/Sidebar/OrderList/OrderItemDependencyWarning.styled.tsx","./src/components/Sidebar/OrderList/OrderItemDependencyWarning.tsx","./src/components/Sidebar/OrderList/OrderList.styled.tsx","./src/components/Sidebar/OrderList/Row.tsx","./src/components/Sidebar/OrderList/index.tsx","./src/components/Sidebar/Sidebar.tsx","./src/components/Table/DraggableTable.tsx","./src/components/Table/Pagination.tsx","./src/components/Table/Table.tsx","./src/components/Table/useTableLoader.ts","./src/components/TechnicalServicesGrid/index.tsx","./src/components/TextArea/TextArea.tsx","./src/components/Timer/Timer.tsx","./src/components/Typography/PageTitle.tsx","./src/constants/admin-pages.ts","./src/constants/categorie.ts","./src/constants/endpoints.ts","./src/constants/languages.ts","./src/constants/order.ts","./src/constants/router.ts","./src/constants/technical-services.ts","./src/features/Routing/RoutesConfig/authRoutesConfig.ts","./src/features/Routing/auth.tsx","./src/features/Routing/guard.ts","./src/features/Routing/protected.tsx","./src/features/Routing/protected/admin-exhibitions.tsx","./src/features/Routing/protected/agent-pages.ts","./src/features/Routing/protected/exhibitions-by-role.tsx","./src/features/Routing/protected/member-directory.tsx","./src/features/Routing/protected/service-dictionary.tsx","./src/features/Routing/protected/settings.tsx","./src/features/Routing/protected/users.tsx","./src/features/Routing/provider.tsx","./src/features/Routing/root.tsx","./src/features/Routing/userPaths.ts","./src/features/feautres/index.ts","./src/features/query/index.ts","./src/features/query/query-options/index.ts","./src/features/rbac/useRBAC.ts","./src/features/sentry.ts","./src/hooks/categoriesConverter/useCategoriesByData.ts","./src/hooks/categoriesConverter/useSubCategoriesByData.ts","./src/hooks/useExhibitionStateReset.ts","./src/hooks/useFormErrorsHandler.ts","./src/hooks/useProductCategory.ts","./src/hooks/useSearchCategoryForProduct.ts","./src/hooks/useStringName.ts","./src/i18n/index.ts","./src/i18n/lang/colors/index.ts","./src/i18n/validate-translations-match.ts","./src/index.tsx","./src/layout/AdminAdditionalPanel/ToExhibition.tsx","./src/layout/AdminPanel/index.tsx","./src/layout/Auth/index.tsx","./src/layout/ConnectedSidebar/ConnectedSidebar.tsx","./src/layout/ConnectedSidebar/SidebarsByPageType/ExhibitionSidebar.tsx","./src/layout/ConnectedSidebar/SidebarsByPageType/SidebarByRole.tsx","./src/layout/Default/Layout.styled.tsx","./src/layout/Default/index.tsx","./src/model/IBaseOrder.ts","./src/model/ICart.ts","./src/model/ICategory.ts","./src/model/IExhibition.ts","./src/model/IExhibition/shema.ts","./src/model/IExhibitionSummary.ts","./src/model/IOrder.ts","./src/model/IOrderItem.ts","./src/model/IProduct.ts","./src/model/IUser.ts","./src/model/Serializable.ts","./src/pages/AdminPanel/Accordion/use-categories-loader.ts","./src/pages/AdminPanel/Accordion/use-categories-order-update.ts","./src/pages/AdminPanel/Accordion/use-products-loader.ts","./src/pages/AdminPanel/Accordion/use-products-order-update.ts","./src/pages/AdminPanel/Accordion/use-sub-categories-order-update.ts","./src/pages/AdminPanel/Exhibitions/EditPriceListItemForm.tsx","./src/pages/AdminPanel/Exhibitions/ExhibitionDescription.tsx","./src/pages/AdminPanel/Exhibitions/Exhibitions.tsx","./src/pages/AdminPanel/Exhibitions/ExhibitionsTabsPage.tsx","./src/pages/AdminPanel/Exhibitions/NewExhibition.tsx","./src/pages/AdminPanel/Exhibitions/PriceList.styled.ts","./src/pages/AdminPanel/Exhibitions/PriceLists.tsx","./src/pages/AdminPanel/Exhibitions/TableIncludedPriceListItemsBadge.tsx","./src/pages/AdminPanel/Exhibitions/types.ts","./src/pages/AdminPanel/MembersDirectory/EditMemberForm.tsx","./src/pages/AdminPanel/MembersDirectory/ManageExhibitorUsers/Actions.tsx","./src/pages/AdminPanel/MembersDirectory/ManageExhibitorUsers/AddNewEmployeeForm.tsx","./src/pages/AdminPanel/MembersDirectory/ManageExhibitorUsers/ManageExhibitorUsers.tsx","./src/pages/AdminPanel/MembersDirectory/ManageExhibitorUsers/hooks/use-save-employee.tsx","./src/pages/AdminPanel/MembersDirectory/MembersDirectory.tsx","./src/pages/AdminPanel/PersonalAccounts/MainInfo.tsx","./src/pages/AdminPanel/PersonalAccounts/MainInfoTab/hooks/use-company-save.ts","./src/pages/AdminPanel/PersonalAccounts/MainInfoTab/hooks/use-search-company-by-employee.ts","./src/pages/AdminPanel/PersonalAccounts/MainInfoTab/styled.ts","./src/pages/AdminPanel/PersonalAccounts/MainInfoTab/types.ts","./src/pages/AdminPanel/PersonalAccounts/NewAccount.tsx","./src/pages/AdminPanel/PersonalAccounts/PersonalAccounts.tsx","./src/pages/AdminPanel/PersonalAccounts/StandsTab.tsx","./src/pages/AdminPanel/PersonalAccounts/StandsTab/StandFieldSet.tsx","./src/pages/AdminPanel/PersonalAccounts/StandsTab/StandProjectForm/ProjectChangeForm.tsx","./src/pages/AdminPanel/PersonalAccounts/StandsTab/StandProjectForm/ProjectImageUploader.tsx","./src/pages/AdminPanel/PersonalAccounts/StandsTab/StandProjectForm/StandProjectForm.tsx","./src/pages/AdminPanel/PersonalAccounts/StandsTab/StandProjectForm/api.ts","./src/pages/AdminPanel/PersonalAccounts/StandsTab/contsants.ts","./src/pages/AdminPanel/PersonalAccounts/StandsTab/use-save-stand.ts","./src/pages/AdminPanel/PersonalAccounts/UsersTab/AddNewEmployeeForm.tsx","./src/pages/AdminPanel/PersonalAccounts/UsersTab/UsersTab.tsx","./src/pages/AdminPanel/PersonalAccounts/UsersTab/UsersTableActions.tsx","./src/pages/AdminPanel/PersonalAccounts/UsersTab/hooks/use-employee-create.tsx","./src/pages/AdminPanel/PersonalAccounts/UsersTab/hooks/use-employee-search.ts","./src/pages/AdminPanel/PersonalAccounts/UsersTab/types.ts","./src/pages/AdminPanel/PlacedOrders/CreateOrder/AddItemToOrderModal.tsx","./src/pages/AdminPanel/PlacedOrders/CreateOrder/AddedToOrderItemsTable.tsx","./src/pages/AdminPanel/PlacedOrders/CreateOrder/CreateOrder.tsx","./src/pages/AdminPanel/PlacedOrders/CreateOrder/CreateOrderButton.tsx","./src/pages/AdminPanel/PlacedOrders/CreateOrder/CreateOrderContext.ts","./src/pages/AdminPanel/PlacedOrders/CreateOrder/NoPriceListsLink.tsx","./src/pages/AdminPanel/PlacedOrders/CreateOrder/NoStandsLink.tsx","./src/pages/AdminPanel/PlacedOrders/CreateOrder/OrderControls.tsx","./src/pages/AdminPanel/PlacedOrders/CreateOrder/types.ts","./src/pages/AdminPanel/PlacedOrders/EditOrder/EditOrder.tsx","./src/pages/AdminPanel/PlacedOrders/EditOrder/EditOrderForm.tsx","./src/pages/AdminPanel/PlacedOrders/EditOrder/MarkupManagement/MarkupForm.tsx","./src/pages/AdminPanel/PlacedOrders/EditOrder/MarkupManagement/MarkupManagement.tsx","./src/pages/AdminPanel/PlacedOrders/EditOrder/MarkupManagement/use-order-extra-charge-management.tsx","./src/pages/AdminPanel/PlacedOrders/EditOrder/PersonalDiscount/PersonalDiscount.tsx","./src/pages/AdminPanel/PlacedOrders/EditOrder/PersonalDiscount/PersonalDiscountForm.tsx","./src/pages/AdminPanel/PlacedOrders/EditOrder/hooks/use-send-order-email.tsx","./src/pages/AdminPanel/PlacedOrders/EditStatus.tsx","./src/pages/AdminPanel/PlacedOrders/PlacedOrders.tsx","./src/pages/AdminPanel/PlacedOrders/shared/NumberColumnComponent.tsx","./src/pages/AdminPanel/ServiceDirectory/EditCategoryForm/EditCategoryForm.tsx","./src/pages/AdminPanel/ServiceDirectory/EditCategoryForm/use-parent-categories-loader.ts","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/AbstractEditProductDrawerForm.tsx","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/EditBuildingTypeProduct.tsx","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/EditDefaultProduct.tsx","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/EditProductDrawer.tsx","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/EditTemporaryStaffProduct.tsx","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/useCommonProductSave.ts","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/useProductForm.tsx","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/utils.ts","./src/pages/AdminPanel/ServiceDirectory/EditProductFieldsets/validation-schemas.ts","./src/pages/AdminPanel/ServiceDirectory/EditProductForm/useCommonProductEditLoader.ts","./src/pages/AdminPanel/ServiceDirectory/ServiceDirectory.Accordion.tsx","./src/pages/AdminPanel/ServiceDirectory/ServiceDirectory.Accordion/CategoryControls.tsx","./src/pages/AdminPanel/ServiceDirectory/ServiceDirectory.Accordion/CategoryItem.tsx","./src/pages/AdminPanel/ServiceDirectory/ServiceDirectory.Accordion/EditCategoryModalForm.tsx","./src/pages/AdminPanel/ServiceDirectory/ServiceDirectory.Accordion/ProductsList.tsx","./src/pages/AdminPanel/ServiceDirectory/ServiceDirectory.Accordion/SubCategoriesList.tsx","./src/pages/AdminPanel/ServiceDirectory/ServiceDirectory.Accordion/edit-category-api.ts","./src/pages/AdminPanel/Settings/ChangePassword.tsx","./src/pages/AdminPanel/Settings/Disounts/DiscountsTab.tsx","./src/pages/AdminPanel/Settings/Disounts/EditDiscountModal.tsx","./src/pages/AdminPanel/Settings/LogoTab.tsx","./src/pages/AdminPanel/Settings/ManualUploaderTab.tsx","./src/pages/AdminPanel/Settings/Settings.tsx","./src/pages/AdminPanel/Settings/SettingsPage.tsx","./src/pages/AdminPanel/UsersTable/NewUsers/NewUser.tsx","./src/pages/AdminPanel/UsersTable/NewUsers/NewUsersForm.tsx","./src/pages/AdminPanel/UsersTable/UsersTable.tsx","./src/pages/AgentHome/AgentHome.tsx","./src/pages/Cart/CartTotal.tsx","./src/pages/Cart/OrderComments/ExtendedStandOrderCommentsForm.tsx","./src/pages/Cart/OrderComments/SpaceOnlyStandOrderCommentsForm.tsx","./src/pages/Cart/index.tsx","./src/pages/Cart/styled.tsx","./src/pages/ConfirmModal.tsx","./src/pages/Exhibition/DeleteModal.tsx","./src/pages/Exhibition/Exhibition.styled.tsx","./src/pages/Exhibition/FilesStorage/FilesStorage.tsx","./src/pages/Exhibition/FilesStorage/filesStorageApi.ts","./src/pages/Exhibition/index.tsx","./src/pages/Exhibition/shared/StandDescription.tsx","./src/pages/Exhibition/useEditOrderLoader.ts","./src/pages/LoginPage/index.tsx","./src/pages/Order/Categories.tsx","./src/pages/Order/Service.tsx","./src/pages/Profile/ExhibitionsList.tsx","./src/pages/Profile/ExhibitionsTabs.tsx","./src/pages/Profile/Profile.tsx","./src/pages/Profile/hooks/use-exhibition-detailed-preload.ts","./src/pages/Profile/hooks/use-exhibition-loader.ts","./src/pages/StandProject/StandProject.tsx","./src/pages/StandProject/StandProjectDescription/AttachmentUploader.tsx","./src/pages/StandProject/StandProjectDescription/CommentForm.tsx","./src/pages/StandProject/StandProjectDescription/CommentsHistory.tsx","./src/pages/StandProject/StandProjectDescription/HistoryItem.tsx","./src/pages/StandProject/StandProjectDescription/ProjectDescription.tsx","./src/pages/StandProject/StandProjectDescription/StandProjectDescription.tsx","./src/pages/StandProject/StandProjectImage/StandProjectImage.styled.tsx","./src/pages/StandProject/StandProjectImage/StandProjectImage.tsx","./src/pages/VerifyEmailPage/index.tsx","./src/pages/common/Auth.styled.tsx","./src/store/effector/auth.ts","./src/store/effector/catalog-gate.tsx","./src/store/effector/catalog.ts","./src/store/effector/cleanup.ts","./src/store/effector/common.ts","./src/store/effector/exhibition.ts","./src/store/effector/init.ts","./src/store/effector/loading.ts","./src/store/effector/logger.ts","./src/store/effector/order-completeness.ts","./src/store/effector/order.ts","./src/store/effector/stand.ts","./src/store/effector/vat-settings.ts","./src/theme/css/styles.tsx","./src/theme/default/Globals.tsx","./src/theme/default/index.ts","./src/utils/amountTransformation.ts","./src/utils/attempt.ts","./src/utils/breadcrumbs.ts","./src/utils/constants.ts","./src/utils/date-utils.ts","./src/utils/draggable-utils.ts","./src/utils/exhibition-utils.ts","./src/utils/fetchAPI.ts","./src/utils/file-utils.ts","./src/utils/form-options-as-values.ts","./src/utils/is-nil.ts","./src/utils/is-option.ts","./src/utils/math-utils.ts","./src/utils/product-utils.ts","./src/utils/route.ts","./src/utils/typed-object-keys.ts","./src/utils/url-utils.ts","./src/utils/url.ts"],"sourcesContent":["import { ChakraProvider } from '@chakra-ui/react';\nimport 'simplebar-react/dist/simplebar.min.css';\nimport { RouterProvider } from '@/features/Routing/provider';\nimport DEFAULT_THEME from './theme/default/index';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { ToastContainer } from 'react-toastify';\nimport { ModalFactoryProvider } from './components/Modal/Provider';\nimport { GlobalStyles } from '@/theme/default/Globals';\n\nfunction App(): JSX.Element {\n return (\n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport DevelopmentIcon from '@/components/Icons/Development';\nimport { Category } from '@/model/ICategory';\nimport { CREATE_USER, SETTINGS } from '@/constants/technical-services';\nimport i18n from '@/i18n';\n\nconst adminMenu = () => {\n const settings = new Category({\n id: SETTINGS,\n name: SETTINGS,\n displayName: i18n.t(SETTINGS),\n });\n const createUser = new Category({\n id: CREATE_USER,\n name: CREATE_USER,\n displayName: i18n.t(CREATE_USER),\n });\n\n return [\n {\n category: createUser,\n image: ,\n },\n {\n category: settings,\n image: ,\n },\n ] as ITechnicalService[];\n};\n\nexport default adminMenu;\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport DevelopmentIcon from '@/components/Icons/Development';\nimport { Category } from '@/model/ICategory';\nimport { EXHIBITIONS } from '@/constants/technical-services';\nimport i18n from '@/i18n';\n\nexport const agentMenu = () => {\n const exhibitions = new Category({\n id: EXHIBITIONS,\n name: EXHIBITIONS,\n displayName: i18n.t(EXHIBITIONS),\n });\n\n return [\n {\n category: exhibitions,\n image: ,\n },\n ] as ITechnicalService[];\n};\n","import superAdminMenu from '@/__mocks__/categoriesSidebars/superAdminMenu';\nimport adminMenu from '@/__mocks__/categoriesSidebars/adminMenu';\nimport supportMenu from '@/__mocks__/categoriesSidebars/supportMenu';\nimport technicalManagerMenu from '@/__mocks__/categoriesSidebars/technicalManagerMenu';\nimport moderatorMenu from '@/__mocks__/categoriesSidebars/moderatorMenu';\nimport { User } from '@/model/IUser';\nimport { agentMenu } from '@/__mocks__/categoriesSidebars/agentMenu';\n\nexport const getCategoriesByRole = (user: User) => {\n switch (true) {\n case user.isAgent:\n return agentMenu();\n case user.isSuperAdmin:\n return superAdminMenu();\n case user.isAdmin:\n return adminMenu();\n case user.isSupportManager:\n return supportMenu();\n case user.isTechnicalManager:\n return technicalManagerMenu();\n case user.isModerator:\n return moderatorMenu();\n default:\n return [];\n }\n};\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport DevelopmentIcon from '@/components/Icons/Development';\nimport { Category } from '@/model/ICategory';\nimport { EXHIBITIONS } from '@/constants/technical-services';\nimport i18n from '@/i18n';\n\nconst moderatorMenu = () => {\n const exhibitions = new Category({\n id: EXHIBITIONS,\n name: EXHIBITIONS,\n displayName: i18n.t(EXHIBITIONS),\n });\n\n return [\n {\n category: exhibitions,\n image: ,\n },\n ] as ITechnicalService[];\n};\n\nexport default moderatorMenu;\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport DevelopmentIcon from '@/components/Icons/Development';\nimport { Category } from '@/model/ICategory';\nimport {\n CREATE_USER,\n EXHIBITIONS,\n MEMBER_DIRECTORY,\n SERVICE_DICTIONARY,\n SETTINGS,\n} from '@/constants/technical-services';\nimport i18n from '@/i18n';\n\nconst superAdminMenu = () => {\n const exhibitions = new Category({\n id: EXHIBITIONS,\n name: EXHIBITIONS,\n displayName: i18n.t(EXHIBITIONS),\n });\n const serviceDirectory = new Category({\n id: SERVICE_DICTIONARY,\n name: SERVICE_DICTIONARY,\n displayName: i18n.t(SERVICE_DICTIONARY),\n });\n const memberDirectory = new Category({\n id: MEMBER_DIRECTORY,\n name: MEMBER_DIRECTORY,\n displayName: i18n.t(MEMBER_DIRECTORY),\n });\n const settings = new Category({\n id: SETTINGS,\n name: SETTINGS,\n displayName: i18n.t(SETTINGS),\n });\n const createUser = new Category({\n id: CREATE_USER,\n name: CREATE_USER,\n displayName: i18n.t(CREATE_USER),\n });\n\n return [\n {\n category: exhibitions,\n image: ,\n },\n {\n category: serviceDirectory,\n image: ,\n },\n {\n category: memberDirectory,\n image: ,\n },\n {\n category: settings,\n image: ,\n },\n {\n category: createUser,\n image: ,\n },\n ] as ITechnicalService[];\n};\n\nexport default superAdminMenu;\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport DevelopmentIcon from '@/components/Icons/Development';\nimport { Category } from '@/model/ICategory';\nimport {\n EXHIBITIONS,\n MEMBER_DIRECTORY,\n SERVICE_DICTIONARY,\n} from '@/constants/technical-services';\nimport i18n from '@/i18n';\n\nconst supportMenu = () => {\n const exhibitions = new Category({\n id: EXHIBITIONS,\n name: EXHIBITIONS,\n displayName: i18n.t(EXHIBITIONS),\n });\n const serviceDirectory = new Category({\n id: SERVICE_DICTIONARY,\n name: SERVICE_DICTIONARY,\n displayName: i18n.t(SERVICE_DICTIONARY),\n });\n const memberDirectory = new Category({\n id: MEMBER_DIRECTORY,\n name: MEMBER_DIRECTORY,\n displayName: i18n.t(MEMBER_DIRECTORY),\n });\n\n return [\n {\n category: exhibitions,\n image: ,\n },\n {\n category: serviceDirectory,\n image: ,\n },\n {\n category: memberDirectory,\n image: ,\n },\n ] as ITechnicalService[];\n};\n\nexport default supportMenu;\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport DevelopmentIcon from '@/components/Icons/Development';\nimport { Category } from '@/model/ICategory';\nimport { EXHIBITIONS } from '@/constants/technical-services';\nimport i18n from '@/i18n';\n\nconst technicalManagerMenu = () => {\n const exhibitions = new Category({\n id: EXHIBITIONS,\n name: EXHIBITIONS,\n displayName: i18n.t(EXHIBITIONS),\n });\n\n return [\n {\n category: exhibitions,\n image: ,\n },\n ] as ITechnicalService[];\n};\n\nexport default technicalManagerMenu;\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport DevelopmentIcon from '@/components/Icons/Development';\nimport { Category } from '@/model/ICategory';\nimport {\n PERSONAL_ACCOUNTS,\n PLACED_ORDERS,\n} from '@/constants/technical-services';\nimport { IdType } from '@/model/common';\nimport { checkRBACRule } from '@/features/rbac/useRBAC';\nimport { $auth } from '@/store/effector/auth';\n\nconst supportManagerAdditionalMenu = (exhibitionId: IdType, t: any) => {\n const canManagePersonalAccounts = checkRBACRule($auth.getState().user)(\n 'canAccessExhibitionPersonalAccounts'\n );\n\n const menuItems: ITechnicalService[] = [];\n\n if (canManagePersonalAccounts) {\n menuItems.push({\n category: new Category({\n id: PERSONAL_ACCOUNTS,\n name: PERSONAL_ACCOUNTS,\n displayName: t(PERSONAL_ACCOUNTS),\n\n resolveUrl: () => {\n return `/admin/exhibitions/${exhibitionId}/view/personal-accounts`;\n },\n }),\n image: ,\n });\n }\n\n menuItems.push({\n category: new Category({\n id: PLACED_ORDERS,\n name: PLACED_ORDERS,\n displayName: t(PLACED_ORDERS),\n\n resolveUrl: () => {\n return `/admin/exhibitions/${exhibitionId}/view/placed-orders`;\n },\n }),\n image: ,\n });\n\n return menuItems;\n};\n\nexport default supportManagerAdditionalMenu;\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { BaseHttpRequest } from './core/BaseHttpRequest';\nimport type { OpenAPIConfig } from './core/OpenAPI';\nimport { AxiosHttpRequest } from './core/AxiosHttpRequest';\n\nimport { AuthService } from './services/AuthService';\nimport { CategoryService } from './services/CategoryService';\nimport { DiscountService } from './services/DiscountService';\nimport { ExhibitionService } from './services/ExhibitionService';\nimport { ExhibitorService } from './services/ExhibitorService';\nimport { GlobalSettingsService } from './services/GlobalSettingsService';\nimport { OrderService } from './services/OrderService';\nimport { PriceListService } from './services/PriceListService';\nimport { PriceListItemService } from './services/PriceListItemService';\nimport { ProductService } from './services/ProductService';\nimport { SellingOfficeService } from './services/SellingOfficeService';\nimport { StandService } from './services/StandService';\nimport { UserService } from './services/UserService';\n\ntype HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest;\n\nexport class axios {\n\n public readonly auth: AuthService;\n public readonly category: CategoryService;\n public readonly discount: DiscountService;\n public readonly exhibition: ExhibitionService;\n public readonly exhibitor: ExhibitorService;\n public readonly globalSettings: GlobalSettingsService;\n public readonly order: OrderService;\n public readonly priceList: PriceListService;\n public readonly priceListItem: PriceListItemService;\n public readonly product: ProductService;\n public readonly sellingOffice: SellingOfficeService;\n public readonly stand: StandService;\n public readonly user: UserService;\n\n public readonly request: BaseHttpRequest;\n\n constructor(config?: Partial, HttpRequest: HttpRequestConstructor = AxiosHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? '',\n VERSION: config?.VERSION ?? '1',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n\n this.auth = new AuthService(this.request);\n this.category = new CategoryService(this.request);\n this.discount = new DiscountService(this.request);\n this.exhibition = new ExhibitionService(this.request);\n this.exhibitor = new ExhibitorService(this.request);\n this.globalSettings = new GlobalSettingsService(this.request);\n this.order = new OrderService(this.request);\n this.priceList = new PriceListService(this.request);\n this.priceListItem = new PriceListItemService(this.request);\n this.product = new ProductService(this.request);\n this.sellingOffice = new SellingOfficeService(this.request);\n this.stand = new StandService(this.request);\n this.user = new UserService(this.request);\n }\n}\n\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\n\nexport class ApiError extends Error {\n public readonly url: string;\n public readonly status: number;\n public readonly statusText: string;\n public readonly body: any;\n public readonly request: ApiRequestOptions;\n\n constructor(request: ApiRequestOptions, response: ApiResult, message: string) {\n super(message);\n\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport { BaseHttpRequest } from './BaseHttpRequest';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\nimport { request as __request } from './request';\n\nexport class AxiosHttpRequest extends BaseHttpRequest {\n\n constructor(config: OpenAPIConfig) {\n super(config);\n }\n\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise\n * @throws ApiError\n */\n public override request(options: ApiRequestOptions): CancelablePromise {\n return __request(this.config, options);\n }\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nexport abstract class BaseHttpRequest {\n\n constructor(public readonly config: OpenAPIConfig) {}\n\n public abstract request(options: ApiRequestOptions): CancelablePromise;\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nexport class CancelError extends Error {\n\n constructor(message: string) {\n super(message);\n this.name = 'CancelError';\n }\n\n public get isCancelled(): boolean {\n return true;\n }\n}\n\nexport interface OnCancel {\n readonly isResolved: boolean;\n readonly isRejected: boolean;\n readonly isCancelled: boolean;\n\n (cancelHandler: () => void): void;\n}\n\nexport class CancelablePromise implements Promise {\n #isResolved: boolean;\n #isRejected: boolean;\n #isCancelled: boolean;\n readonly #cancelHandlers: (() => void)[];\n readonly #promise: Promise;\n #resolve?: (value: T | PromiseLike) => void;\n #reject?: (reason?: any) => void;\n\n constructor(\n executor: (\n resolve: (value: T | PromiseLike) => void,\n reject: (reason?: any) => void,\n onCancel: OnCancel\n ) => void\n ) {\n this.#isResolved = false;\n this.#isRejected = false;\n this.#isCancelled = false;\n this.#cancelHandlers = [];\n this.#promise = new Promise((resolve, reject) => {\n this.#resolve = resolve;\n this.#reject = reject;\n\n const onResolve = (value: T | PromiseLike): void => {\n if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n return;\n }\n this.#isResolved = true;\n this.#resolve?.(value);\n };\n\n const onReject = (reason?: any): void => {\n if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n return;\n }\n this.#isRejected = true;\n this.#reject?.(reason);\n };\n\n const onCancel = (cancelHandler: () => void): void => {\n if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n return;\n }\n this.#cancelHandlers.push(cancelHandler);\n };\n\n Object.defineProperty(onCancel, 'isResolved', {\n get: (): boolean => this.#isResolved,\n });\n\n Object.defineProperty(onCancel, 'isRejected', {\n get: (): boolean => this.#isRejected,\n });\n\n Object.defineProperty(onCancel, 'isCancelled', {\n get: (): boolean => this.#isCancelled,\n });\n\n return executor(onResolve, onReject, onCancel as OnCancel);\n });\n }\n\n get [Symbol.toStringTag]() {\n return \"Cancellable Promise\";\n }\n\n public then(\n onFulfilled?: ((value: T) => TResult1 | PromiseLike) | null,\n onRejected?: ((reason: any) => TResult2 | PromiseLike) | null\n ): Promise {\n return this.#promise.then(onFulfilled, onRejected);\n }\n\n public catch(\n onRejected?: ((reason: any) => TResult | PromiseLike) | null\n ): Promise {\n return this.#promise.catch(onRejected);\n }\n\n public finally(onFinally?: (() => void) | null): Promise {\n return this.#promise.finally(onFinally);\n }\n\n public cancel(): void {\n if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n return;\n }\n this.#isCancelled = true;\n if (this.#cancelHandlers.length) {\n try {\n for (const cancelHandler of this.#cancelHandlers) {\n cancelHandler();\n }\n } catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n this.#cancelHandlers.length = 0;\n this.#reject?.(new CancelError('Request aborted'));\n }\n\n public get isCancelled(): boolean {\n return this.#isCancelled;\n }\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\n\ntype Resolver = (options: ApiRequestOptions) => Promise;\ntype Headers = Record;\n\nexport type OpenAPIConfig = {\n BASE: string;\n VERSION: string;\n WITH_CREDENTIALS: boolean;\n CREDENTIALS: 'include' | 'omit' | 'same-origin';\n TOKEN?: string | Resolver | undefined;\n USERNAME?: string | Resolver | undefined;\n PASSWORD?: string | Resolver | undefined;\n HEADERS?: Headers | Resolver | undefined;\n ENCODE_PATH?: ((path: string) => string) | undefined;\n};\n\nexport const OpenAPI: OpenAPIConfig = {\n BASE: '',\n VERSION: '1',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\n};\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport axios from 'axios';\nimport type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios';\nimport FormData from 'form-data';\n\nimport { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nexport const isDefined = (value: T | null | undefined): value is Exclude => {\n return value !== undefined && value !== null;\n};\n\nexport const isString = (value: any): value is string => {\n return typeof value === 'string';\n};\n\nexport const isStringWithValue = (value: any): value is string => {\n return isString(value) && value !== '';\n};\n\nexport const isBlob = (value: any): value is Blob => {\n return (\n typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag])\n );\n};\n\nexport const isFormData = (value: any): value is FormData => {\n return value instanceof FormData;\n};\n\nexport const isSuccess = (status: number): boolean => {\n return status >= 200 && status < 300;\n};\n\nexport const base64 = (str: string): string => {\n try {\n return btoa(str);\n } catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\n\nexport const getQueryString = (params: Record): string => {\n const qs: string[] = [];\n\n const append = (key: string, value: any) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n\n const process = (key: string, value: any) => {\n if (isDefined(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n } else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n } else {\n append(key, value);\n }\n }\n };\n\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n\n return '';\n};\n\nconst getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {\n const encoder = config.ENCODE_PATH || encodeURI;\n\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring: string, group: string) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${getQueryString(options.query)}`;\n }\n return url;\n};\n\nexport const getFormData = (options: ApiRequestOptions): FormData | undefined => {\n if (options.formData) {\n const formData = new FormData();\n\n const process = (key: string, value: any) => {\n if (isString(value) || isBlob(value)) {\n formData.append(key, value);\n } else {\n formData.append(key, JSON.stringify(value));\n }\n };\n\n Object.entries(options.formData)\n .filter(([_, value]) => isDefined(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n } else {\n process(key, value);\n }\n });\n\n return formData;\n }\n return undefined;\n};\n\ntype Resolver = (options: ApiRequestOptions) => Promise;\n\nexport const resolve = async (options: ApiRequestOptions, resolver?: T | Resolver): Promise => {\n if (typeof resolver === 'function') {\n return (resolver as Resolver)(options);\n }\n return resolver;\n};\n\nexport const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions, formData?: FormData): Promise> => {\n const token = await resolve(options, config.TOKEN);\n const username = await resolve(options, config.USERNAME);\n const password = await resolve(options, config.PASSWORD);\n const additionalHeaders = await resolve(options, config.HEADERS);\n const formHeaders = typeof formData?.getHeaders === 'function' && formData?.getHeaders() || {}\n\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n ...formHeaders,\n })\n .filter(([_, value]) => isDefined(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {} as Record);\n\n if (isStringWithValue(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n if (isStringWithValue(username) && isStringWithValue(password)) {\n const credentials = base64(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n\n if (options.body) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n } else if (isBlob(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n } else if (isString(options.body)) {\n headers['Content-Type'] = 'text/plain';\n } else if (!isFormData(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n\n return headers;\n};\n\nexport const getRequestBody = (options: ApiRequestOptions): any => {\n if (options.body) {\n return options.body;\n }\n return undefined;\n};\n\nexport const sendRequest = async (\n config: OpenAPIConfig,\n options: ApiRequestOptions,\n url: string,\n body: any,\n formData: FormData | undefined,\n headers: Record,\n onCancel: OnCancel,\n axiosClient: AxiosInstance\n): Promise> => {\n const source = axios.CancelToken.source();\n\n const requestConfig: AxiosRequestConfig = {\n url,\n headers,\n data: body ?? formData,\n method: options.method,\n withCredentials: config.WITH_CREDENTIALS,\n cancelToken: source.token,\n };\n\n onCancel(() => source.cancel('The user aborted a request.'));\n\n try {\n return await axiosClient.request(requestConfig);\n } catch (error) {\n const axiosError = error as AxiosError;\n if (axiosError.response) {\n return axiosError.response;\n }\n throw error;\n }\n};\n\nexport const getResponseHeader = (response: AxiosResponse, responseHeader?: string): string | undefined => {\n if (responseHeader) {\n const content = response.headers[responseHeader];\n if (isString(content)) {\n return content;\n }\n }\n return undefined;\n};\n\nexport const getResponseBody = (response: AxiosResponse): any => {\n if (response.status !== 204) {\n return response.data;\n }\n return undefined;\n};\n\nexport const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => {\n const errors: Record = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n }\n\n const error = errors[result.status];\n if (error) {\n throw new ApiError(options, result, error);\n }\n\n if (!result.ok) {\n const errorStatus = result.status ?? 'unknown';\n const errorStatusText = result.statusText ?? 'unknown';\n const errorBody = (() => {\n try {\n return JSON.stringify(result.body, null, 2);\n } catch (e) {\n return undefined;\n }\n })();\n\n throw new ApiError(options, result,\n `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`\n );\n }\n};\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @param axiosClient The axios client instance to use\n * @returns CancelablePromise\n * @throws ApiError\n */\nexport const request = (config: OpenAPIConfig, options: ApiRequestOptions, axiosClient: AxiosInstance = axios): CancelablePromise => {\n return new CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = getFormData(options);\n const body = getRequestBody(options);\n const headers = await getHeaders(config, options, formData);\n\n if (!onCancel.isCancelled) {\n const response = await sendRequest(config, options, url, body, formData, headers, onCancel, axiosClient);\n const responseBody = getResponseBody(response);\n const responseHeader = getResponseHeader(response, options.responseHeader);\n\n const result: ApiResult = {\n url,\n ok: isSuccess(response.status),\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n\n catchErrorCodes(options, result);\n\n resolve(result.body);\n }\n } catch (error) {\n reject(error);\n }\n });\n};\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { WebApi_ViewModels_Auth_Login } from '../models/WebApi_ViewModels_Auth_Login';\nimport type { WebApi_ViewModels_Login_AuthCodeRequest } from '../models/WebApi_ViewModels_Login_AuthCodeRequest';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class AuthService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns any Created\n * @throws ApiError\n */\n public postAuthEmail({\n requestBody,\n }: {\n requestBody?: WebApi_ViewModels_Auth_Login,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/auth/email',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postAuthToken({\n requestBody,\n }: {\n requestBody?: WebApi_ViewModels_Login_AuthCodeRequest,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/auth/token',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public getAuthRefreshToken(): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/auth/refresh-token',\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Contracts_Enums_BuildingType } from '../models/ITEPortal_Contracts_Enums_BuildingType';\nimport type { ITEPortal_Domain_Dto_AddCategoryDto } from '../models/ITEPortal_Domain_Dto_AddCategoryDto';\nimport type { ITEPortal_Domain_Dto_AdminCategoryResourcesSummary } from '../models/ITEPortal_Domain_Dto_AdminCategoryResourcesSummary';\nimport type { ITEPortal_Domain_Dto_Category_CategoryOrderIndexDto } from '../models/ITEPortal_Domain_Dto_Category_CategoryOrderIndexDto';\nimport type { ITEPortal_Domain_Dto_CategoryDropdownDto } from '../models/ITEPortal_Domain_Dto_CategoryDropdownDto';\nimport type { ITEPortal_Domain_Dto_CategoryDto } from '../models/ITEPortal_Domain_Dto_CategoryDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class CategoryService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_CategoryDropdownDto Success\n * @throws ApiError\n */\n public getCategoriesAdminSummaries(): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/categories/admin-summaries',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_CategoryDto Success\n * @throws ApiError\n */\n public getCategories({\n pageNumber,\n pageSize,\n buildingType,\n parentCategoryId,\n search,\n product,\n }: {\n pageNumber?: number,\n pageSize?: number,\n buildingType?: ITEPortal_Contracts_Enums_BuildingType,\n parentCategoryId?: number,\n search?: string,\n product?: string,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/categories',\n query: {\n 'PageNumber': pageNumber,\n 'PageSize': pageSize,\n 'buildingType': buildingType,\n 'parentCategoryId': parentCategoryId,\n 'search': search,\n 'product': product,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postCategories({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_AddCategoryDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/categories',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putCategories({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_AddCategoryDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/categories',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_CategoryDto Success\n * @throws ApiError\n */\n public getCategoriesPriceList({\n exhibitionId,\n sellingOfficeId,\n buildingType,\n }: {\n exhibitionId?: number,\n sellingOfficeId?: number,\n buildingType?: ITEPortal_Contracts_Enums_BuildingType,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/categories/price-list',\n query: {\n 'ExhibitionId': exhibitionId,\n 'SellingOfficeId': sellingOfficeId,\n 'BuildingType': buildingType,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_AdminCategoryResourcesSummary Success\n * @throws ApiError\n */\n public getCategoriesResources({\n name,\n }: {\n name: string,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/categories/{name}/resources',\n path: {\n 'name': name,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_CategoryDto Success\n * @throws ApiError\n */\n public getCategoriesParentCategories(): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/categories/parent-categories',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postCategoriesImage({\n name,\n formData,\n }: {\n name: string,\n formData?: {\n image?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/categories/{name}/image',\n path: {\n 'name': name,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postCategoriesResourcesBatch({\n formData,\n }: {\n formData?: {\n importCategoryResourcesFile?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/categories/resources/batch',\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postCategoriesOrderIndex({\n requestBody,\n }: {\n requestBody?: Array,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/categories/order-index',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_Discount_GetCleaningDiscountDto } from '../models/ITEPortal_Domain_Dto_Discount_GetCleaningDiscountDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class DiscountService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_Discount_GetCleaningDiscountDto Success\n * @throws ApiError\n */\n public getDiscountsCleaning(): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/discounts/cleaning',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns number Success\n * @throws ApiError\n */\n public postDiscountsCleaning({\n areaFrom,\n areaTo,\n discountPercentage,\n }: {\n areaFrom?: number,\n areaTo?: number,\n discountPercentage?: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/discounts/cleaning',\n query: {\n 'AreaFrom': areaFrom,\n 'AreaTo': areaTo,\n 'DiscountPercentage': discountPercentage,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public putDiscountsCleaning({\n discountId,\n areaFrom,\n areaTo,\n discountPercentage,\n }: {\n discountId: number,\n areaFrom?: number,\n areaTo?: number,\n discountPercentage?: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/discounts/cleaning/{discountId}',\n path: {\n 'discountId': discountId,\n },\n query: {\n 'AreaFrom': areaFrom,\n 'AreaTo': areaTo,\n 'DiscountPercentage': discountPercentage,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public deleteDiscountsCleaning({\n discountId,\n }: {\n discountId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/discounts/cleaning/{discountId}',\n path: {\n 'discountId': discountId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_AdminExhibitionSummary } from '../models/ITEPortal_Domain_Dto_AdminExhibitionSummary';\nimport type { ITEPortal_Domain_Dto_Exhibition_ExhibitionStatisticsWithSummary } from '../models/ITEPortal_Domain_Dto_Exhibition_ExhibitionStatisticsWithSummary';\nimport type { ITEPortal_Domain_Dto_ExhibitionDto } from '../models/ITEPortal_Domain_Dto_ExhibitionDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class ExhibitionService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_Exhibition_ExhibitionStatisticsWithSummary Created\n * @throws ApiError\n */\n public getExhibitionsExhibitorStatistics(): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/exhibitor-statistics',\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_AdminExhibitionSummary Success\n * @throws ApiError\n */\n public getExhibitionsAdminSummaries({\n search,\n type,\n pageNumber,\n pageSize,\n }: {\n search?: string,\n type?: string,\n pageNumber?: number,\n pageSize?: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/admin-summaries',\n query: {\n 'Search': search,\n 'Type': type,\n 'PageNumber': pageNumber,\n 'PageSize': pageSize,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_ExhibitionDto Success\n * @throws ApiError\n */\n public getExhibitions({\n id,\n }: {\n id: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/{id}',\n path: {\n 'id': id,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postExhibitionsLogo({\n id,\n formData,\n }: {\n id: number,\n formData?: {\n logo?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitions/{id}/logo',\n path: {\n 'id': id,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postExhibitions({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_ExhibitionDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitions',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putExhibitions({\n exhibitionId,\n requestBody,\n }: {\n exhibitionId: number,\n requestBody?: ITEPortal_Domain_Dto_ExhibitionDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/exhibitions/{exhibitionId}',\n path: {\n 'exhibitionId': exhibitionId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_AdminExhibitorSummary } from '../models/ITEPortal_Domain_Dto_AdminExhibitorSummary';\nimport type { ITEPortal_Domain_Dto_CatalogExhibitorSummary } from '../models/ITEPortal_Domain_Dto_CatalogExhibitorSummary';\nimport type { ITEPortal_Domain_Dto_CreateExhibitorDto } from '../models/ITEPortal_Domain_Dto_CreateExhibitorDto';\nimport type { ITEPortal_Domain_Dto_Exhibitor_ExhibitorEmployeeDto } from '../models/ITEPortal_Domain_Dto_Exhibitor_ExhibitorEmployeeDto';\nimport type { ITEPortal_Domain_Dto_ExhibitorDto } from '../models/ITEPortal_Domain_Dto_ExhibitorDto';\nimport type { ITEPortal_Domain_Dto_UpdateExhibitorDto } from '../models/ITEPortal_Domain_Dto_UpdateExhibitorDto';\nimport type { ITEPortal_Domain_Dto_UpdateExhibitorUserDataDto } from '../models/ITEPortal_Domain_Dto_UpdateExhibitorUserDataDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class ExhibitorService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_CatalogExhibitorSummary Success\n * @throws ApiError\n */\n public getAdminSummaries({\n search,\n pageNumber,\n pageSize,\n }: {\n search?: string,\n pageNumber?: number,\n pageSize?: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/admin-summaries',\n query: {\n 'Search': search,\n 'PageNumber': pageNumber,\n 'PageSize': pageSize,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_ExhibitorDto Success\n * @throws ApiError\n */\n public getExhibitors({\n id,\n exhibitionId,\n }: {\n id: number,\n exhibitionId?: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitors/{id}',\n path: {\n 'id': id,\n },\n query: {\n 'exhibitionId': exhibitionId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putExhibitors({\n id,\n requestBody,\n }: {\n id: number,\n requestBody?: ITEPortal_Domain_Dto_UpdateExhibitorDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/exhibitors/{id}',\n path: {\n 'id': id,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_ExhibitorDto Success\n * @throws ApiError\n */\n public getExhibitors1({\n email,\n }: {\n email?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitors',\n query: {\n 'email': email,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postExhibitors({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_CreateExhibitorDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitors',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_AdminExhibitorSummary Success\n * @throws ApiError\n */\n public getExhibitorsExhibition({\n exhibitionId,\n search,\n }: {\n exhibitionId?: number,\n search?: string,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitors/exhibition',\n query: {\n 'exhibitionId': exhibitionId,\n 'search': search,\n },\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postExhibitionExhibitorsBatch({\n exhibitionId,\n formData,\n }: {\n exhibitionId: number,\n formData?: {\n importFile?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibition/{exhibitionId}/exhibitors/batch',\n path: {\n 'exhibitionId': exhibitionId,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putAdminSummaries({\n id,\n requestBody,\n }: {\n id: number,\n requestBody?: ITEPortal_Domain_Dto_UpdateExhibitorUserDataDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/admin-summaries/{id}',\n path: {\n 'id': id,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteExhibitionsExhibitors({\n exhibitionId,\n exhibitorId,\n }: {\n exhibitionId: number,\n exhibitorId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/exhibitions/{exhibitionId}/exhibitors/{exhibitorId}',\n path: {\n 'exhibitionId': exhibitionId,\n 'exhibitorId': exhibitorId,\n },\n });\n }\n\n /**\n * @returns number Success\n * @throws ApiError\n */\n public postExhibitorsExhibitionEmployees({\n exhibitorId,\n exhibitionId,\n requestBody,\n }: {\n exhibitorId: number,\n exhibitionId: number,\n requestBody?: ITEPortal_Domain_Dto_Exhibitor_ExhibitorEmployeeDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitors/{exhibitorId}/exhibition/{exhibitionId}/employees',\n path: {\n 'exhibitorId': exhibitorId,\n 'exhibitionId': exhibitionId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns number Success\n * @throws ApiError\n */\n public postExhibitorsEmployees({\n exhibitorId,\n requestBody,\n }: {\n exhibitorId: number,\n requestBody?: ITEPortal_Domain_Dto_Exhibitor_ExhibitorEmployeeDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitors/{exhibitorId}/employees',\n path: {\n 'exhibitorId': exhibitorId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public putExhibitorsEmployees({\n employeeId,\n requestBody,\n }: {\n employeeId: number,\n requestBody?: ITEPortal_Domain_Dto_Exhibitor_ExhibitorEmployeeDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/exhibitors/employees/{employeeId}',\n path: {\n 'employeeId': employeeId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns number Success\n * @throws ApiError\n */\n public deleteExhibitorsEmployees({\n employeeId,\n }: {\n employeeId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/exhibitors/employees/{employeeId}',\n path: {\n 'employeeId': employeeId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public deleteExhibitorsEmployeesExhibitions({\n employeeId,\n exhibitionId,\n }: {\n employeeId: number,\n exhibitionId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/exhibitors/employees/{employeeId}/exhibitions/{exhibitionId}',\n path: {\n 'employeeId': employeeId,\n 'exhibitionId': exhibitionId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_AdminExhibitorSummary Success\n * @throws ApiError\n */\n public getExhibitorsExhibitionsAgents({\n exhibitionId,\n }: {\n exhibitionId: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitors/exhibitions/{exhibitionId}/agents',\n path: {\n 'exhibitionId': exhibitionId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_ChangePasswordSettingsDto } from '../models/ITEPortal_Domain_Dto_ChangePasswordSettingsDto';\nimport type { ITEPortal_Domain_Dto_GlobalSettingsDto } from '../models/ITEPortal_Domain_Dto_GlobalSettingsDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class GlobalSettingsService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_GlobalSettingsDto Success\n * @throws ApiError\n */\n public getGlobalSettings(): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/global-settings',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postGlobalSettingsEditFromEmail({\n fromEmail,\n }: {\n fromEmail?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-fromEmail',\n query: {\n 'fromEmail': fromEmail,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postGlobalSettingsEditUsername({\n username,\n }: {\n username?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-username',\n query: {\n 'username': username,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postGlobalSettingsEditPassword({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_ChangePasswordSettingsDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-password',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postGlobalSettingsEditHost({\n host,\n }: {\n host?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-host',\n query: {\n 'host': host,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postGlobalSettingsEditPort({\n port,\n }: {\n port?: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-port',\n query: {\n 'port': port,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postGlobalSettingsEditLogo({\n formData,\n }: {\n formData?: {\n logo?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-logo',\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Created\n * @throws ApiError\n */\n public postGlobalSettingsEditExhibitorManualFile({\n culture,\n formData,\n }: {\n culture: string,\n formData?: {\n manual?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-exhibitor-manual-file/{culture}',\n path: {\n 'culture': culture,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Created\n * @throws ApiError\n */\n public postGlobalSettingsEditExhibitorManualUrl({\n culture,\n url,\n }: {\n culture: string,\n url?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/global-settings/edit-exhibitor-manual-url/{culture}',\n path: {\n 'culture': culture,\n },\n query: {\n 'url': url,\n },\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns string Created\n * @throws ApiError\n */\n public getGlobalSettingsExhibitorManual(): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/global-settings/exhibitor-manual',\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Contracts_Enums_OrderStatus } from '../models/ITEPortal_Contracts_Enums_OrderStatus';\nimport type { ITEPortal_Domain_Dto_AdminOrderSummary } from '../models/ITEPortal_Domain_Dto_AdminOrderSummary';\nimport type { ITEPortal_Domain_Dto_Order_CreateOrderDto } from '../models/ITEPortal_Domain_Dto_Order_CreateOrderDto';\nimport type { ITEPortal_Domain_Dto_Order_CreateOrderFromAdminDto } from '../models/ITEPortal_Domain_Dto_Order_CreateOrderFromAdminDto';\nimport type { ITEPortal_Domain_Dto_Order_ExtraChargeRemovingDto } from '../models/ITEPortal_Domain_Dto_Order_ExtraChargeRemovingDto';\nimport type { ITEPortal_Domain_Dto_Order_PersonalDiscountDto } from '../models/ITEPortal_Domain_Dto_Order_PersonalDiscountDto';\nimport type { ITEPortal_Domain_Dto_Order_PersonalExtraChargeDto } from '../models/ITEPortal_Domain_Dto_Order_PersonalExtraChargeDto';\nimport type { ITEPortal_Domain_Dto_Order_UpdateOrderDto } from '../models/ITEPortal_Domain_Dto_Order_UpdateOrderDto';\nimport type { ITEPortal_Domain_Dto_OrderDto } from '../models/ITEPortal_Domain_Dto_OrderDto';\nimport type { ITEPortal_Domain_Dto_OrderItem_CreateOrderItemDto } from '../models/ITEPortal_Domain_Dto_OrderItem_CreateOrderItemDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class OrderService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_AdminOrderSummary Success\n * @throws ApiError\n */\n public getOrders({\n exhibitionId,\n orderStatus,\n exhibitorId,\n search,\n }: {\n exhibitionId?: number,\n orderStatus?: ITEPortal_Contracts_Enums_OrderStatus,\n exhibitorId?: number,\n search?: string,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/orders',\n query: {\n 'exhibitionId': exhibitionId,\n 'orderStatus': orderStatus,\n 'exhibitorId': exhibitorId,\n 'search': search,\n },\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postOrders({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_Order_CreateOrderDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/orders',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putOrders({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_Order_UpdateOrderDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/orders',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postOrdersExhibitors({\n exhibitorId,\n requestBody,\n }: {\n exhibitorId: number,\n requestBody?: ITEPortal_Domain_Dto_Order_CreateOrderFromAdminDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/orders/exhibitors/{exhibitorId}',\n path: {\n 'exhibitorId': exhibitorId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_OrderDto Created\n * @throws ApiError\n */\n public getOrders1({\n orderId,\n }: {\n orderId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/orders/{orderId}',\n path: {\n 'orderId': orderId,\n },\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteOrders({\n orderId,\n }: {\n orderId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/orders/{orderId}',\n path: {\n 'orderId': orderId,\n },\n });\n }\n\n /**\n * @returns binary Success\n * @throws ApiError\n */\n public getOrdersPdf({\n orderId,\n }: {\n orderId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/orders/{orderId}/pdf',\n path: {\n 'orderId': orderId,\n },\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postExhibitionsOrders({\n exhibitionId,\n orderId,\n requestBody,\n }: {\n exhibitionId: number,\n orderId: number,\n requestBody?: ITEPortal_Domain_Dto_OrderItem_CreateOrderItemDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitions/{exhibitionId}/orders/{orderId}',\n path: {\n 'exhibitionId': exhibitionId,\n 'orderId': orderId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putExhibitionsOrders({\n exhibitionId,\n orderId,\n orderItemId,\n requestBody,\n }: {\n exhibitionId: number,\n orderId: number,\n orderItemId?: number,\n requestBody?: ITEPortal_Domain_Dto_OrderItem_CreateOrderItemDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/exhibitions/{exhibitionId}/orders/{orderId}',\n path: {\n 'exhibitionId': exhibitionId,\n 'orderId': orderId,\n },\n query: {\n 'orderItemId': orderItemId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteExhibitionsOrders({\n exhibitionId,\n orderId,\n orderItemId,\n }: {\n exhibitionId: number,\n orderId: number,\n orderItemId?: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/exhibitions/{exhibitionId}/orders/{orderId}',\n path: {\n 'exhibitionId': exhibitionId,\n 'orderId': orderId,\n },\n query: {\n 'orderItemId': orderItemId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteOrdersDraft({\n orderId,\n }: {\n orderId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/orders/{orderId}/draft',\n path: {\n 'orderId': orderId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putOrdersStatus({\n orderId,\n orderStatus,\n }: {\n orderId: number,\n orderStatus?: ITEPortal_Contracts_Enums_OrderStatus,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/orders/{orderId}/status',\n path: {\n 'orderId': orderId,\n },\n query: {\n 'orderStatus': orderStatus,\n },\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public postOrdersSendOrderChangedConfirmation({\n orderId,\n requestBody,\n }: {\n orderId: number,\n requestBody?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/orders/{orderId}/send-order-changed-confirmation',\n path: {\n 'orderId': orderId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postOrdersPersonalDiscount({\n orderId,\n requestBody,\n }: {\n orderId: number,\n requestBody?: ITEPortal_Domain_Dto_Order_PersonalDiscountDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/orders/{orderId}/personal-discount',\n path: {\n 'orderId': orderId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putOrdersPersonalDiscount({\n orderId,\n requestBody,\n }: {\n orderId: number,\n requestBody?: ITEPortal_Domain_Dto_Order_PersonalDiscountDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/orders/{orderId}/personal-discount',\n path: {\n 'orderId': orderId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteOrdersPersonalDiscount({\n orderId,\n }: {\n orderId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/orders/{orderId}/personal-discount',\n path: {\n 'orderId': orderId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putOrdersRemoveExtraCharge({\n orderId,\n requestBody,\n }: {\n orderId: number,\n requestBody?: ITEPortal_Domain_Dto_Order_ExtraChargeRemovingDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/orders/{orderId}/remove-extra-charge',\n path: {\n 'orderId': orderId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putOrdersPersonalExtraCharge({\n orderId,\n requestBody,\n }: {\n orderId: number,\n requestBody?: ITEPortal_Domain_Dto_Order_PersonalExtraChargeDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/orders/{orderId}/personal-extra-charge',\n path: {\n 'orderId': orderId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Contracts_Enums_BuildingType } from '../models/ITEPortal_Contracts_Enums_BuildingType';\nimport type { ITEPortal_Domain_Dto_AddPriceListItemDto } from '../models/ITEPortal_Domain_Dto_AddPriceListItemDto';\nimport type { ITEPortal_Domain_Dto_AdminPriceListItem } from '../models/ITEPortal_Domain_Dto_AdminPriceListItem';\nimport type { ITEPortal_Domain_Dto_PriceListItemSummary } from '../models/ITEPortal_Domain_Dto_PriceListItemSummary';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class PriceListItemService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_PriceListItemSummary Success\n * @throws ApiError\n */\n public getPricelistItems({\n exhibitionId,\n currency,\n sellingOfficeId,\n categoryIds,\n productId,\n buildingType,\n }: {\n exhibitionId?: number,\n currency?: string,\n sellingOfficeId?: number,\n categoryIds?: string,\n productId?: number,\n buildingType?: ITEPortal_Contracts_Enums_BuildingType,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/pricelist-items',\n query: {\n 'ExhibitionId': exhibitionId,\n 'Currency': currency,\n 'SellingOfficeId': sellingOfficeId,\n 'CategoryIds': categoryIds,\n 'ProductId': productId,\n 'BuildingType': buildingType,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_AdminPriceListItem Success\n * @throws ApiError\n */\n public getExhibitionsPriceListsItems({\n exhibitionId,\n priceListId,\n }: {\n exhibitionId: number,\n priceListId: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/{exhibitionId}/price-lists/{priceListId}/items',\n path: {\n 'exhibitionId': exhibitionId,\n 'priceListId': priceListId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns number Created\n * @throws ApiError\n */\n public postExhibitionsPriceListsItems({\n exhibitionId,\n priceListId,\n requestBody,\n }: {\n exhibitionId: number,\n priceListId: number,\n requestBody?: ITEPortal_Domain_Dto_AddPriceListItemDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitions/{exhibitionId}/price-lists/{priceListId}/items',\n path: {\n 'exhibitionId': exhibitionId,\n 'priceListId': priceListId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postExhibitionsPriceListsItemsBatch({\n exhibitionId,\n priceListId,\n formData,\n }: {\n exhibitionId: number,\n priceListId: number,\n formData?: {\n importPriceListItems?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitions/{exhibitionId}/price-lists/{priceListId}/items/batch',\n path: {\n 'exhibitionId': exhibitionId,\n 'priceListId': priceListId,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postPricelistItemsBatch({\n formData,\n }: {\n formData?: {\n importPriceListsFile?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/pricelist-items/batch',\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public putExhibitionsPriceListsItems({\n exhibitionId,\n priceListId,\n priceListItemId,\n requestBody,\n }: {\n exhibitionId: number,\n priceListId: number,\n priceListItemId: number,\n requestBody?: ITEPortal_Domain_Dto_AddPriceListItemDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/exhibitions/{exhibitionId}/price-lists/{priceListId}/items/{priceListItemId}',\n path: {\n 'exhibitionId': exhibitionId,\n 'priceListId': priceListId,\n 'priceListItemId': priceListItemId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns number Success\n * @throws ApiError\n */\n public deleteExhibitionsPriceListsItems({\n exhibitionId,\n priceListId,\n priceListItemId,\n }: {\n exhibitionId: number,\n priceListId: number,\n priceListItemId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/exhibitions/{exhibitionId}/price-lists/{priceListId}/items/{priceListItemId}',\n path: {\n 'exhibitionId': exhibitionId,\n 'priceListId': priceListId,\n 'priceListItemId': priceListItemId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_PriceListDto } from '../models/ITEPortal_Domain_Dto_PriceListDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class PriceListService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_PriceListDto Success\n * @throws ApiError\n */\n public getExhibitionsPriceLists({\n exhibitionId,\n }: {\n exhibitionId: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/{exhibitionId}/price-lists',\n path: {\n 'exhibitionId': exhibitionId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteExhibitionsPriceLists({\n priceListId,\n exhibitionId,\n }: {\n priceListId: number,\n exhibitionId: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/exhibitions/{exhibitionId}/price-lists/{priceListId}',\n path: {\n 'priceListId': priceListId,\n 'exhibitionId': exhibitionId,\n },\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Contracts_Enums_BuildingType } from '../models/ITEPortal_Contracts_Enums_BuildingType';\nimport type { ITEPortal_Domain_Dto_AddProductDto } from '../models/ITEPortal_Domain_Dto_AddProductDto';\nimport type { ITEPortal_Domain_Dto_Product_ProductOrderIndexDto } from '../models/ITEPortal_Domain_Dto_Product_ProductOrderIndexDto';\nimport type { ITEPortal_Domain_Dto_ProductDto } from '../models/ITEPortal_Domain_Dto_ProductDto';\nimport type { ITEPortal_Domain_Dto_ShortenedProductDto } from '../models/ITEPortal_Domain_Dto_ShortenedProductDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class ProductService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_ProductDto Success\n * @throws ApiError\n */\n public getProducts({\n pageNumber,\n pageSize,\n categoryId,\n buildingType,\n search,\n }: {\n pageNumber?: number,\n pageSize?: number,\n categoryId?: number,\n buildingType?: ITEPortal_Contracts_Enums_BuildingType,\n search?: string,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/products',\n query: {\n 'PageNumber': pageNumber,\n 'PageSize': pageSize,\n 'categoryId': categoryId,\n 'buildingType': buildingType,\n 'search': search,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postProducts({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_AddProductDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/products',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putProducts({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_AddProductDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/products',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteProducts({\n name,\n }: {\n name?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/products',\n query: {\n 'name': name,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public getProductsResources({\n name,\n }: {\n name: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/products/{name}/resources',\n path: {\n 'name': name,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_ShortenedProductDto Success\n * @throws ApiError\n */\n public getProductsShort({\n exceptPriceListId,\n }: {\n exceptPriceListId?: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/products/short',\n query: {\n 'exceptPriceListId': exceptPriceListId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postProductsBatch({\n formData,\n }: {\n formData?: {\n importProductsFile?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/products/batch',\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postProductsResourcesBatch({\n formData,\n }: {\n formData?: {\n importProductsResourcesFile?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/products/resources/batch',\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postProductsImages({\n name,\n formData,\n }: {\n name: string,\n formData?: {\n images?: Array;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/products/{name}/images',\n path: {\n 'name': name,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postProductsOrderIndex({\n requestBody,\n }: {\n requestBody?: Array,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/products/order-index',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_SellingOfficeDto } from '../models/ITEPortal_Domain_Dto_SellingOfficeDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class SellingOfficeService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_SellingOfficeDto Success\n * @throws ApiError\n */\n public getSellingOffices(): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/selling-offices',\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_ExhibitorStandDto } from '../models/ITEPortal_Domain_Dto_ExhibitorStandDto';\nimport type { ITEPortal_Domain_Dto_Stand_GetStandFileDto } from '../models/ITEPortal_Domain_Dto_Stand_GetStandFileDto';\nimport type { ITEPortal_Domain_Dto_Stand_GetStandProjectDto } from '../models/ITEPortal_Domain_Dto_Stand_GetStandProjectDto';\nimport type { ITEPortal_Domain_Dto_Stand_StandProjectChangesDto } from '../models/ITEPortal_Domain_Dto_Stand_StandProjectChangesDto';\nimport type { ITEPortal_Domain_Dto_Stand_StandProjectDto } from '../models/ITEPortal_Domain_Dto_Stand_StandProjectDto';\nimport type { ITEPortal_Domain_Dto_Stand_StandStatusUpdateDto } from '../models/ITEPortal_Domain_Dto_Stand_StandStatusUpdateDto';\nimport type { ITEPortal_Domain_Dto_StandDto } from '../models/ITEPortal_Domain_Dto_StandDto';\nimport type { ITEPortal_Domain_Dto_StandSummariesDto } from '../models/ITEPortal_Domain_Dto_StandSummariesDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class StandService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns ITEPortal_Domain_Dto_StandSummariesDto Success\n * @throws ApiError\n */\n public getExhibitionsExhibitorStands({\n exhibitionId,\n }: {\n exhibitionId: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/{exhibitionId}/exhibitor-stands',\n path: {\n 'exhibitionId': exhibitionId,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_StandSummariesDto Success\n * @throws ApiError\n */\n public getExhibitorStands({\n standId,\n }: {\n standId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitor-stands/{standId}',\n path: {\n 'standId': standId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_StandDto Success\n * @throws ApiError\n */\n public getExhibitionsStands({\n id,\n exhibitionId,\n }: {\n id: number,\n exhibitionId: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/{exhibitionId}/stands/{id}',\n path: {\n 'id': id,\n 'exhibitionId': exhibitionId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putExhibitionsStands({\n id,\n exhibitionId,\n requestBody,\n }: {\n id: number,\n exhibitionId: string,\n requestBody?: ITEPortal_Domain_Dto_StandDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/exhibitions/{exhibitionId}/stands/{id}',\n path: {\n 'id': id,\n 'exhibitionId': exhibitionId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_ExhibitorStandDto Success\n * @throws ApiError\n */\n public getExhibitionsExhibitorsStands({\n exhibitionId,\n exhibitorId,\n }: {\n exhibitionId: number,\n exhibitorId: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/exhibitions/{exhibitionId}/exhibitors/{exhibitorId}/stands',\n path: {\n 'exhibitionId': exhibitionId,\n 'exhibitorId': exhibitorId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public postExhibitionsStands({\n exhibitionId,\n requestBody,\n }: {\n exhibitionId: number,\n requestBody?: ITEPortal_Domain_Dto_StandDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/exhibitions/{exhibitionId}/stands',\n path: {\n 'exhibitionId': exhibitionId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_Stand_GetStandProjectDto Success\n * @throws ApiError\n */\n public getStandsProject({\n standId,\n }: {\n standId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/stands/{standId}/project',\n path: {\n 'standId': standId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns number Success\n * @throws ApiError\n */\n public postStandsProject({\n standId,\n requestBody,\n }: {\n standId: number,\n requestBody?: ITEPortal_Domain_Dto_Stand_StandProjectDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/stands/{standId}/project',\n path: {\n 'standId': standId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public postStandsUpdateProjectStatus({\n standId,\n projectId,\n requestBody,\n }: {\n standId: number,\n projectId: number,\n requestBody?: ITEPortal_Domain_Dto_Stand_StandStatusUpdateDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/stands/{standId}/update-project-status/{projectId}',\n path: {\n 'standId': standId,\n 'projectId': projectId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns boolean Success\n * @throws ApiError\n */\n public putStandsProject({\n standId,\n projectId,\n requestBody,\n }: {\n standId: number,\n projectId: number,\n requestBody?: ITEPortal_Domain_Dto_Stand_StandProjectDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/stands/{standId}/project/{projectId}',\n path: {\n 'standId': standId,\n 'projectId': projectId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putStandsProjectImage({\n standId,\n projectId,\n formData,\n }: {\n standId: number,\n projectId: number,\n formData?: {\n image?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/stands/{standId}/project/{projectId}/image',\n path: {\n 'standId': standId,\n 'projectId': projectId,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns number Success\n * @throws ApiError\n */\n public postStandsProjectChanges({\n standId,\n projectId,\n requestBody,\n }: {\n standId: number,\n projectId: number,\n requestBody?: ITEPortal_Domain_Dto_Stand_StandProjectChangesDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/stands/{standId}/project/{projectId}/changes',\n path: {\n 'standId': standId,\n 'projectId': projectId,\n },\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putStandsProjectChanges({\n standId,\n projectId,\n changesId,\n formData,\n }: {\n standId: number,\n projectId: number,\n changesId: number,\n formData?: {\n file?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/stands/{standId}/project/{projectId}/changes/{changesId}',\n path: {\n 'standId': standId,\n 'projectId': projectId,\n 'changesId': changesId,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_Stand_GetStandFileDto Success\n * @throws ApiError\n */\n public getStandsFiles({\n standId,\n }: {\n standId: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/stands/{standId}/files',\n path: {\n 'standId': standId,\n },\n errors: {\n 400: `Bad Request`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public putStandsFiles({\n standId,\n formData,\n }: {\n standId: number,\n formData?: {\n file?: Blob;\n },\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/stands/{standId}/files',\n path: {\n 'standId': standId,\n },\n formData: formData,\n mediaType: 'multipart/form-data',\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteStandsFiles({\n standId,\n fileId,\n }: {\n standId: number,\n fileId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/stands/{standId}/files/{fileId}',\n path: {\n 'standId': standId,\n 'fileId': fileId,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public getStandsZip({\n standId,\n }: {\n standId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/stands/{standId}/zip',\n path: {\n 'standId': standId,\n },\n });\n }\n\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ITEPortal_Domain_Dto_TechnicalManagerDto } from '../models/ITEPortal_Domain_Dto_TechnicalManagerDto';\nimport type { ITEPortal_Domain_Dto_UserDto } from '../models/ITEPortal_Domain_Dto_UserDto';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class UserService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public getUsers({\n search,\n roles,\n }: {\n search?: string,\n roles?: Array,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/users',\n query: {\n 'search': search,\n 'roles': roles,\n },\n errors: {\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public getUsers1({\n userId,\n }: {\n userId: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/users/{userId}',\n path: {\n 'userId': userId,\n },\n errors: {\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public getUsersEmail({\n email,\n }: {\n email?: string,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'GET',\n url: '/users/email',\n query: {\n 'email': email,\n },\n });\n }\n\n /**\n * @returns any Created\n * @throws ApiError\n */\n public postUsersAdd({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_UserDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'POST',\n url: '/users/add',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Success\n * @throws ApiError\n */\n public deleteUsersDelete({\n id,\n }: {\n id: number,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/users/delete/{id}',\n path: {\n 'id': id,\n },\n errors: {\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns any Created\n * @throws ApiError\n */\n public putUsersUpdate({\n requestBody,\n }: {\n requestBody?: ITEPortal_Domain_Dto_UserDto,\n }): CancelablePromise {\n return this.httpRequest.request({\n method: 'PUT',\n url: '/users/update',\n body: requestBody,\n mediaType: 'application/json-patch+json',\n errors: {\n 400: `Bad Request`,\n 500: `Server Error`,\n },\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_TechnicalManagerDto Success\n * @throws ApiError\n */\n public getUsersTechnicalManagers(): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/users/technical-managers',\n });\n }\n\n /**\n * @returns ITEPortal_Domain_Dto_TechnicalManagerDto Success\n * @throws ApiError\n */\n public getUsersTechnicalManagers1({\n exhibitionId,\n }: {\n exhibitionId: number,\n }): CancelablePromise> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/users/technical-managers/{exhibitionId}',\n path: {\n 'exhibitionId': exhibitionId,\n },\n });\n }\n\n}\n","import { OpenAPI } from './core/OpenAPI';\nimport { removeTrailingSlash } from '../utils/url';\n\nOpenAPI.BASE = removeTrailingSlash(process.env.PUBLIC_API_URL as string);\n\nOpenAPI.WITH_CREDENTIALS = true;\n\nOpenAPI.HEADERS = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${localStorage.getItem('token')}`,\n};\n","import { axios } from './axios';\nimport baseAxios from 'axios';\nimport { removeTrailingSlash } from '../utils/url';\nimport { AxiosHttpRequest } from './core/AxiosHttpRequest';\nimport type { ApiRequestOptions } from './core/ApiRequestOptions';\nimport type { CancelablePromise } from './core/CancelablePromise';\nimport { request as __request } from './core/request';\nimport { OpenAPIConfig } from '@/api/core/OpenAPI';\n\nclass TypedAxiosHttpRequest extends AxiosHttpRequest {\n axiosInstance = baseAxios.create();\n\n constructor(config: OpenAPIConfig) {\n super(config);\n this.axiosInstance.interceptors.response.use(\n (response) => {\n return response;\n },\n (error) => {\n if (error.response?.status === 401) {\n localStorage.clear();\n window.location.href = '/login';\n }\n\n throw error;\n }\n );\n }\n\n public override request(options: ApiRequestOptions): CancelablePromise {\n return __request(\n this.config,\n {\n ...options,\n query: {\n ...options.query,\n culture: localStorage.getItem('lang'),\n },\n headers: {\n ...options.headers,\n Authorization: `Bearer ${localStorage.getItem('token')}`,\n },\n },\n this.axiosInstance\n );\n }\n}\n\nexport const typedAxios = new axios(\n {\n BASE: removeTrailingSlash(process.env.PUBLIC_API_URL as string),\n WITH_CREDENTIALS: true,\n HEADERS: {\n Authorization: `Bearer ${localStorage.getItem('token')}`,\n },\n },\n TypedAxiosHttpRequest\n);\n","import { SearchIcon } from '@chakra-ui/icons';\nimport {\n InputGroup,\n InputLeftElement,\n Input,\n Box,\n Flex,\n} from '@chakra-ui/react';\nimport { useMatches, useNavigate, useSearch } from '@tanstack/react-router';\nimport { SearchBoxOptionsType } from './types';\nimport { useTranslation } from 'react-i18next';\nimport { useDebouncedCallback } from 'use-debounce';\n\nexport const AdminSearch = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const currentSearch = useSearch({ strict: false });\n const context = (useMatches().at(-1)?.context || {\n searchOptions: null,\n }) as {\n searchOptions: SearchBoxOptionsType[];\n };\n\n const doSearch = (parameterName: string, value: string | undefined) => {\n const params = {\n ...currentSearch,\n [parameterName]: value || undefined,\n };\n\n if (params.p) {\n params.p = undefined;\n }\n\n navigate({\n search: params,\n });\n };\n\n const doDebouncedSearch = useDebouncedCallback(\n (parameterName: string, value: string) => {\n doSearch(parameterName, value);\n },\n 1000\n );\n\n const clearSearch = (parameterName: string) => {\n doSearch(parameterName, undefined);\n };\n\n if (!context.searchOptions || !Array.isArray(context.searchOptions)) {\n return null;\n }\n\n return (\n \n {context.searchOptions.map((searchDescriptor, index) => {\n const { placeholder = t('search'), queryParameterName = 'search' } =\n searchDescriptor;\n\n return (\n \n \n \n \n \n {\n const target = e.target as HTMLInputElement;\n\n if (!target.value) {\n clearSearch(queryParameterName);\n\n return;\n }\n\n if (e.key === 'Enter') {\n doSearch(queryParameterName, target.value);\n\n return;\n }\n\n doDebouncedSearch(queryParameterName, target.value);\n }}\n onChangeCapture={(e) => {\n const target = e.target as HTMLInputElement;\n\n if (!target.value) {\n e.stopPropagation();\n e.preventDefault();\n\n clearSearch(queryParameterName);\n\n doDebouncedSearch.cancel();\n\n return;\n }\n }}\n />\n \n \n );\n })}\n \n );\n};\n","import { HStack, Input, InputProps, Text, useCounter } from '@chakra-ui/react';\nimport { AddIcon, MinusIcon } from '@chakra-ui/icons';\nimport { AmountWrapper, CounterButtonDec, CounterButtonInc } from './styled';\nimport { MathUtils } from '../../utils/math-utils';\nimport { ButtonHTMLAttributes, DetailedHTMLProps } from 'react';\nconst minValue = 0;\nconst maxValue = 9999;\n\ninterface AmountCounterProps {\n amountCounterValue: string | number | undefined;\n onChange?: (counterValue: number) => void;\n suffix?: string;\n disabled?: boolean;\n precision?: number;\n step?: number;\n}\n\nexport const AmountCounter = ({\n amountCounterValue,\n onChange,\n disabled = false,\n suffix,\n step = 1,\n precision = 0,\n}: AmountCounterProps) => {\n useCounter({});\n const {\n increment,\n decrement,\n update,\n value: controlledValue,\n } = useCounter({\n step,\n defaultValue: amountCounterValue,\n min: minValue,\n max: maxValue,\n precision,\n keepWithinRange: true,\n onChange(_: string, valueAsNumber: number) {\n if (valueAsNumber > 0) {\n if (step === 0.25 && valueAsNumber % step !== 0) {\n onChange?.(MathUtils.roundToNearestQuarter(valueAsNumber));\n } else {\n onChange?.(valueAsNumber);\n }\n }\n },\n });\n\n const inc = {\n onClick: () => {\n increment(step);\n },\n } satisfies DetailedHTMLProps<\n ButtonHTMLAttributes,\n HTMLButtonElement\n >;\n\n const dec = {\n onClick: () => {\n decrement(step);\n },\n } satisfies DetailedHTMLProps<\n ButtonHTMLAttributes,\n HTMLButtonElement\n >;\n\n const input = {\n onChange: (e) => {\n if (step < 1) {\n update((e.target.value || '').replace(/[^0-9.,]/g, ''));\n } else {\n if (\n typeof e.target.value === 'string' &&\n e.target.value.match(/\\.|,/)\n ) {\n return;\n }\n\n if (\n typeof e.target.value === 'string' &&\n e.target.value.startsWith('0')\n ) {\n update((e.target.value || '').slice(1));\n\n return;\n }\n\n update((e.target.value || '').replace(/[^0-9]/g, ''));\n }\n },\n onBlur: (event) => {\n if (step !== 0.25) {\n return;\n }\n\n const value = event.target.value;\n\n const valueAsNumber = parseFloat(value);\n\n if (\n typeof valueAsNumber === 'number' &&\n !Number.isNaN(valueAsNumber) &&\n valueAsNumber % 0.25 !== 0\n ) {\n update(MathUtils.roundToNearestQuarter(valueAsNumber));\n }\n },\n value: controlledValue,\n } satisfies InputProps;\n\n return (\n \n \n \n \n \n \n {suffix && {suffix}}\n \n \n \n \n \n );\n};\n","import styled, { css } from 'styled-components';\nimport { ifProp } from 'styled-tools';\n\nconst Button = styled.button`\n opacity: 0.5;\n\n transition: all ease-in-out 0.15s;\n\n &:hover {\n opacity: 1;\n }\n`;\n\nexport const CounterButtonDec = styled(Button)<{\n suffix: string | undefined;\n}>`\n //padding-left: ${({ suffix }) => (suffix ? '0' : '20px')};\n\n ${ifProp(\n 'disabled',\n css`\n cursor: not-allowed;\n `\n )}\n`;\n\nexport const AmountWrapper = styled.div<{\n suffix: string | undefined;\n disabled: boolean | undefined;\n}>`\n width: ${({ suffix }) => (suffix ? '170px' : '120px')};\n text-align: center;\n padding: 0 20px;\n ${ifProp(\n 'suffix',\n css`\n padding: 0 10px;\n `\n )}\n border: 1px solid silver;\n border-radius: 5px;\n display: flex;\n flex-direction: row;\n justify-content: center;\n\n ${ifProp(\n 'disabled',\n css`\n cursor: not-allowed;\n color: #999999;\n background-color: #f7f7f7;\n `\n )}\n\n :focus {\n text-align: center;\n border: none;\n outline: none;\n }\n`;\n\nexport const CounterButtonInc = styled(Button)<{\n suffix: string | undefined;\n}>`\n //padding-right: ${({ suffix }) => (suffix ? '0' : '20px')};\n\n ${ifProp(\n 'disabled',\n css`\n cursor: not-allowed;\n `\n )}\n`;\n","import { Button, ButtonProps } from '@chakra-ui/react';\nimport { useState } from 'react';\n\nexport const AsyncButton = (props: ButtonProps) => {\n const { onClick, children, ...rest } = props;\n const [isLoading, toggleLoading] = useState(false);\n\n const handleAsyncClick = async (e: any) => {\n try {\n const promise = onClick?.(e);\n\n if (\n promise &&\n // @ts-expect-error expecting that void could not be promise\n promise instanceof Promise\n ) {\n toggleLoading(true);\n await promise;\n }\n } finally {\n toggleLoading(false);\n }\n };\n\n return (\n \n {children}\n \n );\n};\n","import styled from 'styled-components';\nimport { Link } from '@tanstack/react-router';\nimport { DEFAULT_LOGO_PATH } from '@/utils/constants';\n\nconst Wrapper = styled.div`\n width: 100%;\n max-width: var(--chakra-sizes-header-brand-width);\n`;\n\nconst StyledLink = styled(Link)`\n display: block;\n`;\n\nconst Image = styled.img`\n width: 100%;\n height: auto;\n max-height: 70px;\n min-height: 60px;\n max-width: 60px;\n min-width: 60px;\n margin-top: -10px;\n`;\n\nconst BrandBox = () => {\n return (\n \n \n \"Logo\"\n \n \n );\n};\n\nexport default BrandBox;\n","import { Breadcrumb, BreadcrumbItem, BreadcrumbLink } from '@chakra-ui/react';\nimport styled, { css } from 'styled-components';\nimport { BreadcrumbOptions } from '@chakra-ui/breadcrumb/dist/breadcrumb-types';\nimport { ChevronRightIcon } from '@chakra-ui/icons';\nimport { Link } from '@tanstack/react-router';\nimport { ifProp } from 'styled-tools';\nimport { IBreadcrumbItem } from '@/model/common';\n\ninterface BreadcrumbsProps {\n id?: string;\n options?: BreadcrumbOptions;\n items?: IBreadcrumbItem[];\n}\n\nconst BreadcrumbsWrapper = styled.div`\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n`;\n\nconst BreadcrumbsLinkContainer = styled(BreadcrumbLink)`\n ${ifProp(\n 'disabled',\n css`\n cursor: default;\n `\n )}\n`;\n\nconst Breadcrumbs: React.FC = ({\n items,\n id,\n options = {\n spacing: '8px',\n separator: ,\n },\n}) => {\n return (\n \n \n {items &&\n items.map((breadcrumbItem, index) => {\n const { label, link } = breadcrumbItem;\n const isDisabled = index !== 0 && items.length === index + 1;\n\n return (\n \n \n {label}\n \n \n );\n })}\n \n \n );\n};\n\nexport default Breadcrumbs;\n","import { Box, Spinner } from '@chakra-ui/react';\n\ninterface ButtonProps {\n type?: 'strict' | 'rounded';\n colorScheme?:\n | 'primary'\n | 'secondary'\n | 'disabled'\n | 'disabledSecondary'\n | 'black'\n | 'transparent'\n | 'red';\n children?: React.ReactNode;\n height?: string;\n width?: string;\n fontWeight?: string;\n onClick?: () => void;\n disabled?: boolean;\n buttonType?: 'submit' | 'button' | 'reset' | undefined;\n defaultColor?: string;\n isLoading?: boolean;\n}\n\nconst schemeConfig = {\n primary: {\n backgroundImage: 'linear-gradient(120deg, #F18F18 0%, #E8431A 100%)',\n color: 'white',\n },\n secondary: {\n backgroundImage: '#fcfcfc',\n border: '1px',\n color: '#E8431A',\n },\n disabled: {\n backgroundImage: 'linear-gradient(120deg, #F18F18 0%, #E8431A 100%)',\n opacity: '0.5',\n color: 'white',\n },\n disabledSecondary: {\n border: '1px',\n opacity: '0.5',\n color: '#E8431A',\n },\n black: {\n color: '#1A202C',\n border: '1px solid silver',\n },\n transparent: {\n color: '#1A202C',\n border: 'none',\n },\n red: {\n backgroundColor: '#E8431A',\n color: 'white',\n },\n};\n\nconst hoverConfig = {\n primary: {\n backgroundImage: 'linear-gradient(120deg, #e2820e 0%, #d33b15 100%)',\n color: '#e6e6e6',\n },\n secondary: {\n backgroundImage: '#fcfcfc',\n border: '1px',\n color: '#E8431A',\n opacity: '0.7',\n },\n disabled: {\n backgroundImage: 'linear-gradient(120deg, #e2820e 0%, #d33b15 100%)',\n opacity: '0.5',\n color: '#e6e6e6',\n },\n disabledSecondary: {\n border: '1px',\n opacity: '0.5',\n color: '#E8431A',\n },\n black: {\n color: '#1A202C',\n border: '1px solid silver',\n opacity: '0.5',\n },\n transparent: {\n color: '#E8431A',\n border: 'none',\n opacity: '0.5',\n },\n red: {\n backgroundColor: '#E8431A',\n color: 'white',\n opacity: '0.5',\n },\n};\n\nconst focusConfig = {\n transparent: {\n color: '#E8431A',\n },\n};\n\nexport const Button = ({\n type = 'rounded',\n colorScheme = 'primary',\n children = 'Test button',\n height = '40px',\n width = '120px',\n fontWeight = 'bold',\n onClick,\n disabled = false,\n buttonType,\n defaultColor,\n isLoading,\n}: ButtonProps): JSX.Element => {\n const rounded = type === 'strict' ? '0px' : '6px';\n\n const defaultColorConfig = defaultColor\n ? {\n color: defaultColor,\n }\n : {};\n\n return (\n \n {isLoading ? : children}\n \n );\n};\n","import styled from 'styled-components';\nimport { Link } from '@tanstack/react-router';\n\nexport const StyledLink = styled(Link)`\n text-decoration: none;\n color: rgba(0, 0, 0, 0.5);\n font-weight: 500;\n`;\n","import {\n Card as ChakraCard,\n CardBody,\n CardFooter,\n CardHeader,\n} from '@chakra-ui/react';\nimport { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nexport interface CardProps {\n className?: string;\n header?: ReactNode;\n children: ReactNode;\n footer?: ReactNode;\n width?: string | number;\n}\n\nconst ChakraCardWrapper = styled.div<{\n width: number | string;\n}>`\n width: ${({ width }) => width};\n`;\n\nconst ChakraCardContainer = styled(ChakraCard)`\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);\n\n &.animated-card {\n transition: all ease-in-out 0.3s;\n transform: translateY(0);\n }\n\n &.animated-card:hover {\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n }\n`;\n\nconst ChakraCardTitle = styled(CardHeader)`\n font-size: 20px;\n font-weight: 600;\n padding-left: 24px;\n padding-top: 26px;\n`;\n\nconst ChakraCardFooter = styled(CardFooter)`\n display: flex;\n justify-content: end;\n`;\n\nexport const Card = ({\n className,\n header,\n children,\n footer,\n width = 'auto',\n}: CardProps): JSX.Element => {\n return (\n \n \n {header && {header}}\n {children}\n {footer && {footer}}\n \n \n );\n};\n","import {\n Box,\n Card,\n CardBody,\n CardFooter,\n Divider,\n Heading,\n Image,\n Stack,\n Text,\n} from '@chakra-ui/react';\nimport styled from 'styled-components';\nimport { ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Nullable } from '../../types/support-types';\n\ninterface ExhibitionCardProps {\n image: string;\n name: string;\n subtitles?: Array>;\n description?: string | ReactNode;\n stands?: number;\n orders?: number;\n}\n\ninterface SubtitleProps {\n subtitles: Array>;\n}\n\ninterface FooterSectionProps {\n stands: number | undefined;\n orders: number | undefined;\n}\n\nconst SubtitlesWrapper = styled.div`\n display: flex;\n flex-direction: row;\n gap: 10px;\n color: #718096;\n padding-top: 10px;\n`;\n\nconst DescriptionWrapper = styled(Text)`\n color: #718096;\n font-size: 12px;\n padding-top: 20px;\n`;\n\nconst ImageContainer = styled(Image)`\n height: max-content;\n max-width: 200px;\n`;\n\nconst ImageWrapper = styled.div`\n border-right: 1px solid #e2e8f0;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n padding: 25px;\n`;\n\nconst DotsContainer = styled(Box)`\n margin: 0 2px;\n border-radius: 50%;\n display: inline-block;\n`;\n\nconst FooterTextWrapper = styled.div`\n font-size: 14px;\n color: #718096;\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n justify-content: center;\n`;\n\nconst SubtitleRowWrapper = styled.div`\n display: flex;\n flex-direction: row;\n gap: 10px;\n`;\n\nconst Subtitle = ({ subtitles }: SubtitleProps): JSX.Element => {\n return (\n \n {subtitles.map((subtitle, index) => {\n return (\n \n {subtitle}\n {index !== subtitles.length - 1 && (\n \n )}\n \n );\n })}\n \n \n );\n};\n\nconst FooterSection = ({ stands, orders }: FooterSectionProps): JSX.Element => {\n const { t } = useTranslation();\n\n return (\n \n {`${t('stands')} ${stands}`}\n \n {`${t('orders')} ${orders}`}\n \n );\n};\n\nexport const ExhibitionCard = ({\n image,\n name,\n subtitles,\n description,\n stands,\n orders,\n}: ExhibitionCardProps): JSX.Element => {\n return (\n \n \n {image && }\n \n\n \n \n \n {name}\n \n {subtitles && }\n {description && (\n {description}\n )}\n \n\n \n \n \n \n \n );\n};\n","import { Card, CardProps } from './Card';\nimport styled from 'styled-components';\n\nconst StyledCard = styled(Card)`\n .chakra-card__body {\n padding-top: 0;\n padding-bottom: 0;\n }\n`;\n\nconst ProductCard = ({ children, className, ...props }: CardProps) => {\n return (\n \n {children}\n \n );\n};\n\nexport default ProductCard;\n","import { ITechnicalService } from '@/model/ITechnicalService';\nimport styled from 'styled-components';\nimport { Card } from './Card';\nimport { StyledLink } from '../Buttons/Link';\nimport { replacePaths } from '@/utils/route';\nimport { CREATE_EXHIBITION_ORDER_TAB_PATH } from '@/constants/router';\nimport { Flex, Image } from '@chakra-ui/react';\nimport { viewExhibitionCart } from '@/features/Routing/protected/exhibitions-by-role';\n\ninterface TechnicalServiceProps {\n service: ITechnicalService;\n}\n\nconst Wrapper = styled(StyledLink)`\n max-width: 240px;\n width: 100%;\n text-align: center;\n\n svg {\n transition: all ease-in-out 0.15s;\n max-width: 96px;\n width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n\n fill: #a0aec0;\n }\n\n .service-name {\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n word-wrap: normal;\n\n color: #4a5568;\n }\n\n &:hover {\n svg {\n fill: var(--chakra-colors-brandColor);\n }\n }\n`;\n\nconst ServiceName = styled.div`\n margin-top: 0.5rem;\n height: 2.3rem;\n\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n\n color: inherit;\n`;\n\nconst TechnicalCardWrapper = styled(Flex)`\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst TechnicalServiceCard: React.FC = ({ service }) => {\n const { exhibitionId, stand } = viewExhibitionCart.useParams();\n const category = service.category;\n\n const pathName = replacePaths(CREATE_EXHIBITION_ORDER_TAB_PATH, {\n ':exhibitionId': exhibitionId,\n ':stand': stand,\n ':service': category.name,\n });\n\n return (\n \n \n \n {service.image && typeof service.image === 'string' ? (\n {service.image}\n ) : (\n service.image\n )}\n \n {category.displayName || category.name || category.id}\n \n \n \n \n );\n};\n\nexport default TechnicalServiceCard;\n","import styled from 'styled-components';\nimport SimpleBar from 'simplebar-react';\n\ninterface ContentProps {\n className?: string;\n}\n\nexport const Content = styled.div`\n max-width: 100%;\n width: 100%;\n\n overflow: hidden;\n`;\n\nexport const ContentInner = styled(SimpleBar)`\n height: 100%;\n\n overflow-y: auto;\n\n max-height: calc(100vh - var(--chakra-sizes-nav-bar-height) - 0px);\n padding-bottom: 20px;\n`;\n\nexport const ContentWithSidebars = styled(Content)`\n max-width: calc(\n 100% - var(--chakra-sizes-side-bar-width) -\n var(--chakra-sizes-order-list-width)\n );\n\n margin-left: var(--chakra-sizes-side-bar-width);\n margin-right: var(--chakra-sizes-side-bar-width);\n`;\n\nexport const AdminPanelContent = styled(Content)`\n max-width: calc(100% - var(--chakra-sizes-side-bar-width));\n\n margin-left: var(--chakra-sizes-side-bar-width);\n`;\n","import { SingleDatepicker } from 'chakra-dayzed-datepicker';\nimport { DatePickerDays, DatePickerMonths } from '@/utils/constants';\nimport { FieldProps } from '@/components/Fields/interfaces';\nimport {\n FormErrorMessage,\n Box,\n FormControl,\n InputGroup,\n InputRightElement,\n IconButton,\n} from '@chakra-ui/react';\nimport { FormLabel } from '@/components/FormLabel/FormLabel';\nimport {\n Controller,\n FieldValues,\n useController,\n useFormContext,\n} from 'react-hook-form';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport { CloseIcon } from '@chakra-ui/icons';\n\ninterface DatePickerProps extends FieldProps {\n defaultValue?: Date;\n dateFormat?: string;\n width?: string | number;\n errors?: any;\n clearable?: boolean;\n}\n\nexport const DatePicker = ({\n dateFormat = 'dd.MM.yyyy',\n // @ts-expect-error as default string doesn't found in generic T\n name = 'date-picker',\n label,\n isRequired,\n control,\n defaultValue,\n clearable,\n}: DatePickerProps) => {\n const formContext = useFormContext();\n\n if (!formContext) {\n throw new Error(\n `This field (${name}) should be used only within FormContext`\n );\n }\n\n const { fieldState } = useController({\n name: name,\n });\n\n if (!fieldState) {\n throw new Error(\n 'fieldState not found. Is this field used within FormContext?'\n );\n }\n\n dayjs.extend(utc);\n dayjs.extend(timezone);\n\n const defaultDate = defaultValue\n ? new Date(dayjs(defaultValue).toString())\n : undefined;\n\n return (\n \n \n {label && {label}}\n {\n let fieldValue = field.value;\n\n if (typeof field.value === 'string') {\n // @ts-expect-error desc\n fieldValue = new Date(dayjs(field.value).toString());\n }\n\n return (\n \n {\n field.onChange(date);\n }}\n configs={{\n dateFormat: dateFormat,\n dayNames: DatePickerDays,\n monthNames: DatePickerMonths,\n }}\n />\n {clearable && (\n \n }\n onClick={() => {\n field.onChange(null);\n }}\n />\n \n )}\n \n );\n }}\n />\n {fieldState.error?.message && (\n {fieldState.error?.message}\n )}\n \n \n );\n};\n","import { PropsWithChildren } from 'react';\n\nconst isDebugEnabled = sessionStorage.getItem('debug-enabled') === '1';\n\nexport const Debug = ({ children }: PropsWithChildren) => {\n if (!isDebugEnabled) {\n return null;\n }\n\n return <>{children};\n};\n","import {\n BuildingDescriptionBodyRow,\n BuildingDescriptionLabelContainer,\n BuildingDescriptionWrapper,\n BuildingTableRow,\n BuildingTableTitle,\n ImageDescription,\n ImageWrapper,\n NoteSectionContainer,\n PriceLabel,\n PriceNumber,\n PriceRowContainer,\n PricesWrapper,\n TableContainerWrapper,\n} from '@/components/DevelopmentCard/DevelopmentCard.styled';\nimport { Table, Tbody, Thead, Tr } from '@chakra-ui/react';\nimport React, { ReactNode } from 'react';\nimport {\n CardPricesType,\n TableDataType,\n} from '@/components/DevelopmentCard/DevelopmentCard';\nimport { useTranslation } from 'react-i18next';\nimport parse from 'html-react-parser';\nimport { Nullable } from '../../types/support-types';\nimport { useExhibition } from '@/store/effector/exhibition';\n\ninterface ModalPricesProps {\n prices?: CardPricesType;\n header?: ReactNode;\n}\n\ninterface ImageSectionProps {\n description?: Nullable;\n children?: ReactNode;\n}\n\ninterface BuildingDescriptionSectionProps {\n buildingLabel?: Nullable;\n buildingDescription?: Nullable;\n}\n\ninterface TableSectionProps {\n tableData?: TableDataType;\n}\n\ninterface NoteSectionProps {\n note?: string;\n}\n\nexport const ModalPrices = ({ prices, header }: ModalPricesProps) => {\n const { t } = useTranslation();\n const { currency } = useExhibition();\n\n return (\n \n {prices?.current && (\n \n {header}\n \n {t('building-info-price', { price: prices?.current, currency })}\n \n \n )}\n {prices?.transition &&\n prices?.transition?.map((transition, index) => {\n return (\n \n {transition?.label}\n \n {t('building-info-price', {\n price: transition?.price,\n currency,\n })}\n \n \n );\n })}\n \n );\n};\n\nexport const ImageSection = ({\n description,\n children,\n}: ImageSectionProps): JSX.Element => {\n return (\n \n {children}\n {description}\n \n );\n};\n\nexport const BuildingDescriptionSection = ({\n buildingLabel,\n buildingDescription,\n}: BuildingDescriptionSectionProps): JSX.Element => {\n return (\n \n \n {buildingLabel}\n \n {buildingDescription && (\n \n {parse(buildingDescription)}\n \n )}\n \n );\n};\n\nexport const TableSection = ({ tableData }: TableSectionProps): JSX.Element => {\n return (\n \n \n \n \n {tableData?.titles?.map((columnTitle, index) => (\n {columnTitle}\n ))}\n \n \n \n {tableData?.rows?.map((row, index) => {\n return (\n \n {row?.map((value, key) => (\n {value}\n ))}\n \n );\n })}\n \n
\n
\n );\n};\n\nexport const NoteSection = ({ note }: NoteSectionProps): JSX.Element => {\n return {note};\n};\n","import styled from 'styled-components';\nimport { Box, TableContainer, Td, Text, Th } from '@chakra-ui/react';\n\nexport const PricesWrapper = styled(Box)`\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding-bottom: 10px;\n`;\n\nexport const PriceRowContainer = styled(Box)`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n background-color: #edf2f7;\n border-radius: 5px;\n height: 40px;\n padding: 10px 0 10px 10px;\n width: 100%;\n`;\n\nexport const PriceNumber = styled(Box)`\n background-color: #a0aec0;\n color: #ffffff;\n width: 30%;\n height: 40px;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n`;\n\nexport const PriceLabel = styled(Box)`\n width: 70%;\n font-size: 14px;\n line-height: 1;\n`;\n\nexport const ImageDescription = styled(Box)`\n display: flex;\n justify-content: center;\n font-size: 12px;\n padding-top: 5px;\n`;\n\nexport const ImageWrapper = styled(Box)`\n padding-bottom: 10px;\n`;\n\nexport const BuildingDescriptionWrapper = styled(Box)`\n padding-bottom: 5px;\n`;\n\nexport const BuildingDescriptionLabelContainer = styled(Box)`\n font-size: 16px;\n font-weight: 600;\n padding-bottom: 5px;\n`;\n\nexport const BuildingDescriptionBodyRow = styled(Text)`\n font-size: 14px;\n`;\n\nexport const BuildingTableTitle = styled(Th)`\n font-size: 14px;\n font-weight: 600;\n padding-left: 0 !important;\n`;\n\nexport const BuildingTableRow = styled(Td)`\n font-size: 14px;\n padding-left: 0 !important;\n`;\n\nexport const TableContainerWrapper = styled(TableContainer)`\n white-space: unset !important;\n padding: 15px 0;\n`;\n\nexport const NoteSectionContainer = styled(Box)`\n background-color: #edf2f7;\n border-radius: 5px;\n padding: 10px;\n font-size: 12px;\n`;\n\nexport const BuildingCardWrapper = styled.form``;\n","import React, {\n PropsWithChildren,\n ReactNode,\n useCallback,\n useState,\n} from 'react';\nimport { Card } from '@/components/Card/Card';\nimport { useTranslation } from 'react-i18next';\nimport {\n ButtonGroup,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n useDisclosure,\n} from '@chakra-ui/react';\nimport { Button } from '../Buttons/Button/Button';\nimport {\n BuildingDescriptionSection,\n ImageSection,\n ModalPrices,\n NoteSection,\n TableSection,\n} from '@/components/DevelopmentCard/BuildingCardModal';\nimport { AmountCounter } from '@/components/AmountCounter';\nimport { useForm } from 'react-hook-form';\nimport { BuildingCardWrapper } from '@/components/DevelopmentCard/DevelopmentCard.styled';\nimport styled from 'styled-components';\nimport { OrderItem } from '@/model/IOrderItem';\nimport { Product } from '@/model/IProduct';\nimport { useStand } from '@/store/effector/stand';\nimport { orderApi } from '@/store/effector/order';\nimport { typedAxios } from '@/api/typed-axios';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { ITEPortal_Contracts_Enums_BuildingType } from '@/api';\n\nexport type CardPricesType = {\n current?: number;\n transition?: TransitionType[];\n};\n\ntype TransitionType = {\n label: string;\n price: number;\n};\n\ntype TableRowType = string[];\n\nexport type TableDataType = {\n titles: string[];\n rows: TableRowType[];\n};\n\nexport type CardInfoType = {\n prices?: CardPricesType;\n imageDescription?: string | null;\n buildingLabel?: string | null;\n buildingDescription?: string | null;\n tableData?: TableDataType;\n note?: string | null;\n images?: string[] | null;\n};\n\ninterface DevelopmentCardProps {\n header?: ReactNode;\n cardName: string;\n cardInfo?: CardInfoType;\n product: Product;\n isSelected: boolean;\n}\n\nconst StyledCard = styled(Card)`\n .chakra-card__header {\n padding-bottom: 0;\n }\n\n .chakra-card__body {\n padding-top: 1rem;\n padding-bottom: 0;\n }\n`;\n\nexport const DevelopmentCard = ({\n header,\n children,\n cardInfo,\n product,\n isSelected,\n ...props\n}: PropsWithChildren) => {\n const { standForOrder } = useStand();\n const { exhibitionId, sellingOfficeId } = useExhibition();\n const { isOpen, onOpen, onClose } = useDisclosure();\n const [openConfirm, setOpenConfirm] = useState(false);\n const { handleSubmit } = useForm();\n const { t } = useTranslation();\n const suffix = t('sqm');\n\n const onSubmit = handleSubmit(() => {\n setOpenConfirm(!openConfirm);\n });\n\n const selectBuilding = useCallback(async () => {\n if (product) {\n try {\n const buildingType = Math.max(...(product.buildingTypes || []));\n\n const priceListItemsBasedOnBuildingType =\n await typedAxios.priceListItem.getPricelistItems({\n exhibitionId: +exhibitionId,\n sellingOfficeId: +sellingOfficeId,\n buildingType:\n +buildingType as ITEPortal_Contracts_Enums_BuildingType,\n categoryIds: product.categoryId?.toString(),\n productId: product.productId,\n });\n\n const building = priceListItemsBasedOnBuildingType.find(\n (pi) => pi.productName === product.productName\n );\n\n if (building && building.includedPriceListItems) {\n product.setLinkedItems(building.includedPriceListItems);\n }\n } catch {}\n\n orderApi.clearProducts();\n orderApi.addItem(\n OrderItem.fromJSON({\n id: product.getProductId(),\n product,\n amount: standForOrder?.area,\n })\n );\n }\n }, []);\n\n const setBuilding = async () => {\n await selectBuilding();\n };\n\n const ModalConfirm = () => {\n const closeModal = () => setOpenConfirm(false);\n const confirmTransition = () => setBuilding();\n\n return (\n \n \n \n {t('building-selection-confirmation')}\n \n \n {t('building-confirm', { buildingName: header })}\n \n \n \n \n \n \n \n \n \n );\n };\n\n const ModalInfoComponent = (): JSX.Element => {\n return (\n \n \n \n {header}\n \n \n \n \n {children}\n \n \n {cardInfo?.tableData && (\n \n )}\n {cardInfo?.note && }\n \n \n \n );\n };\n\n const SelectionButton = () => {\n const changeHandler = (value: number) => {\n if (product && product instanceof Product) {\n orderApi.changeItem({\n id: product.getProductId(),\n product,\n amount: value,\n });\n }\n };\n\n return isSelected ? (\n changeHandler(counterValue)}\n disabled={true}\n suffix={suffix}\n precision={2}\n step={0.25}\n />\n ) : (\n \n );\n };\n\n const BuildingInfoButton = (): JSX.Element => {\n return (\n <>\n \n \n \n \n );\n };\n\n return (\n \n \n \n \n \n \n }\n {...props}\n >\n {children}\n \n );\n};\n","import { Text, TextProps } from '@chakra-ui/react';\nimport { useTranslation } from 'react-i18next';\nimport { AttachmentIcon, DeleteIcon } from '@chakra-ui/icons';\nimport { FileUtils } from '@/utils/file-utils';\nimport styled from 'styled-components';\nimport { ModalFactory } from '@/components/Modal/api';\nimport React, { MouseEvent, useState } from 'react';\nimport Download from 'yet-another-react-lightbox/plugins/download';\nimport Lightbox from 'yet-another-react-lightbox';\n\ntype DownloadFileLinkPropsType = {\n attachmentUrl?: string | null;\n fileName?: string | null;\n onDelete?: () => Promise;\n withIcon?: boolean;\n} & TextProps;\n\nconst imageExtensions = ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'];\n\nconst isImage = (fileName: string) => {\n return imageExtensions.some((ext) => fileName.endsWith(`.${ext}`));\n};\n\nconst FileLink = styled(Text)`\n .delete-handler {\n visibility: hidden;\n margin-top: -5px;\n margin-left: 1em;\n }\n &:hover {\n .delete-handler {\n visibility: visible;\n }\n }\n`;\n\nexport const DownloadFileLink = (props: DownloadFileLinkPropsType) => {\n const {\n attachmentUrl,\n fileName: fileNameFromProps,\n onDelete,\n withIcon = true,\n ...textProps\n } = props;\n const { t } = useTranslation();\n const canBeDeleted = typeof onDelete === 'function';\n const couldBeOpenedInPopup = attachmentUrl && isImage(attachmentUrl);\n const [open, setOpen] = useState(false);\n\n if (!attachmentUrl) {\n return null;\n }\n\n const handleDeleteFile = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (typeof onDelete !== 'function') {\n return;\n }\n\n ModalFactory.confirm({\n id: 'file-delete-confirmation',\n Component: () => <>{t('delete-file-confirmation')},\n okLabel: t('confirm-delete'),\n onOk: async () => {\n await onDelete();\n\n ModalFactory.closeById('file-delete-confirmation');\n },\n });\n };\n\n const downloadAttachment = () => {\n if (attachmentUrl) {\n if (couldBeOpenedInPopup) {\n setOpen(true);\n\n return;\n }\n\n FileUtils.saveUrlToBlob(attachmentUrl);\n }\n };\n\n return (\n \n {withIcon && } {fileNameFromProps || t('download-file')}\n {canBeDeleted && (\n \n )}\n {couldBeOpenedInPopup && (\n setOpen(false)}\n index={0}\n slides={[\n {\n src: attachmentUrl,\n },\n ]}\n animation={{ fade: 0 }}\n controller={{ closeOnPullDown: true, closeOnBackdropClick: true }}\n styles={{ root: { '--yarl__color_backdrop': 'rgba(0, 0, 0, .7)' } }}\n plugins={[Download]}\n download={{\n download: ({ slide }) => {\n FileUtils.saveUrlToBlob(slide.src);\n },\n }}\n />\n )}\n \n );\n};\n","import {\n FieldValues,\n Path,\n useController,\n useFormContext,\n} from 'react-hook-form';\nimport {\n Checkbox as BaseCheckbox,\n CheckboxProps as BaseCheckboxProps,\n} from '@chakra-ui/react';\n\ninterface CheckboxProps\n extends Omit {\n name: Path;\n}\n\nexport const Checkbox = (\n props: CheckboxProps\n) => {\n const { onChange, name } = props;\n const formContext = useFormContext();\n\n if (!formContext) {\n throw new Error(\n `This field (${name}) should be used only within FormContext`\n );\n }\n\n const { fieldState, field } = useController({\n name: name,\n });\n\n if (!fieldState) {\n throw new Error(\n 'fieldState not found. Is this field used within FormContext?'\n );\n }\n\n const registeredFieldProps = formContext.register(name as Path, {\n onChange: (event) => {\n if (typeof onChange === 'function') {\n onChange(event);\n }\n\n formContext.clearErrors(name);\n },\n });\n\n return (\n <>\n \n {/* todo add error handling */}\n \n );\n};\n","import { FieldProps } from './interfaces';\nimport {\n FormErrorMessage,\n Input as ChakraInput,\n Box,\n FormControl,\n InputGroup,\n InputLeftAddon,\n InputRightAddon,\n InputProps as ChakraInputProps,\n} from '@chakra-ui/react';\nimport React, { ReactNode } from 'react';\nimport { FormLabel } from '@/components/FormLabel/FormLabel';\nimport styled from 'styled-components';\nimport {\n FieldValues,\n Path,\n useController,\n useFormContext,\n} from 'react-hook-form';\n\ninterface InputProps extends FieldProps {\n maxWidth?: number | string | null;\n defaultValue?: string;\n disabled?: boolean;\n value?: string;\n onChange?: any;\n addonLeft?: ReactNode;\n addonRight?: ReactNode;\n}\n\nconst FormControlWrapper = styled(FormControl)`\n display: flex;\n flex-direction: column;\n`;\n\nexport const ParticipantCheckContainer = styled(Box)`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n`;\n\nconst Input = ({\n // @ts-expect-error as default string doesn't found in generic T\n name = 'input',\n label,\n placeholder,\n settings,\n maxWidth = '170px',\n defaultValue,\n isRequired,\n disabled,\n value,\n onChange,\n addonLeft,\n addonRight,\n children,\n ...rest\n}: InputProps & ChakraInputProps) => {\n const formContext = useFormContext();\n\n if (!formContext) {\n throw new Error(\n `This field (${name}) should be used only within FormContext`\n );\n }\n\n const { fieldState } = useController({\n name: name,\n });\n\n if (!fieldState) {\n throw new Error(\n 'fieldState not found. Is this field used within FormContext?'\n );\n }\n\n const registerFieldName = formContext.register(name as Path, {\n onChange: (event) => {\n if (typeof onChange === 'function') {\n onChange(event);\n }\n\n formContext.clearErrors(name);\n },\n ...settings,\n });\n\n return (\n \n \n {label && {label}}\n \n {addonLeft && {addonLeft}}\n \n \n {children}\n \n {addonRight && {addonRight}}\n \n {fieldState.error?.message && (\n {fieldState.error?.message}\n )}\n \n \n );\n};\n\nexport default Input;\n","import React, { CSSProperties, ReactNode } from 'react';\nimport {\n NumberDecrementStepper,\n NumberIncrementStepper,\n NumberInput,\n NumberInputField,\n NumberInputStepper,\n NumberInputProps,\n FormControl,\n FormErrorMessage,\n InputGroup,\n InputLeftAddon,\n} from '@chakra-ui/react';\nimport { FieldProps } from './interfaces';\nimport {\n FieldValues,\n Path,\n useController,\n useFormContext,\n} from 'react-hook-form';\nimport { FormLabel } from '../FormLabel/FormLabel';\n\ntype InputNumberProps = NumberInputProps &\n FieldProps & {\n defaultValue?: number;\n addon?: ReactNode;\n };\n\nconst StyledForCaseWithAddon: CSSProperties = {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n};\n\nconst InputNumber = ({\n name,\n placeholder,\n settings,\n min,\n max,\n defaultValue,\n label,\n addon,\n ...rest\n}: InputNumberProps) => {\n const formContext = useFormContext();\n\n if (!formContext) {\n throw new Error(\n `This field (${name}) should be used only within FormContext`\n );\n }\n\n const { fieldState, field } = useController({\n name: name,\n });\n\n if (!fieldState) {\n throw new Error(\n 'fieldState not found. Is this field used within FormContext?'\n );\n }\n\n const { onChange, ...registerFieldName } = formContext.register(\n name as Path,\n {\n onChange: () => {\n formContext.clearErrors(name);\n },\n ...settings,\n }\n );\n\n return (\n \n {label && {label}}\n\n {\n onChange({ target: { value: valueAsNumber, name } });\n }}\n >\n \n {addon && {addon}}\n \n \n \n \n \n \n \n\n {fieldState.error?.message && (\n {fieldState.error?.message}\n )}\n \n );\n};\n\nexport default InputNumber;\n","import styled from 'styled-components';\nimport { Select } from '@chakra-ui/react';\nimport { BadgeItem } from '@/components/OrderTableRow/OrderTableRow';\nimport { FieldProps } from './interfaces';\nimport {\n FieldValues,\n Path,\n useController,\n useFormContext,\n} from 'react-hook-form';\n\nconst OrderTableRowContainerBadgeComponent = styled(Select)`\n //padding: 5px 0;\n width: 170px !important;\n`;\n\ninterface BadgeDataProp extends FieldProps {\n options?: BadgeItem[];\n}\n\nconst SelectComponent: React.FC = ({\n options,\n placeholder,\n settings,\n name = 'select',\n}) => {\n const formContext = useFormContext();\n\n if (!formContext) {\n throw new Error(\n `This field (${name}) should be used only within FormContext`\n );\n }\n\n const { fieldState } = useController({\n name: name,\n });\n\n if (!fieldState) {\n throw new Error(\n 'fieldState not found. Is this field used within FormContext?'\n );\n }\n\n const registerFieldName = formContext.register(name as Path, {\n onChange: () => {\n formContext.clearErrors(name);\n },\n ...settings,\n });\n\n return (\n \n \n {options?.map(({ key, value }) => {\n return (\n \n );\n })}\n \n );\n};\n\nexport default SelectComponent;\n","import React, { useCallback } from 'react';\nimport { FileWithPath, useDropzone, Accept } from 'react-dropzone';\nimport { Box, FormControl, FormErrorMessage, Text } from '@chakra-ui/react';\nimport styled from 'styled-components';\nimport { FieldProps } from '@/components/Fields/interfaces';\nimport { useTranslation } from 'react-i18next';\nimport { FormLabel } from '@/components/FormLabel/FormLabel';\nimport { FieldValues, useController, useFormContext } from 'react-hook-form';\n\nconst Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 5px;\n border-width: 2px;\n border-radius: 5px;\n border-color: silver;\n border-style: dashed;\n color: grey;\n outline: none;\n transition: border 0.24s ease-in-out;\n cursor: pointer;\n`;\n\ninterface UploadFileDropzoneProps\n extends FieldProps {\n multiple?: boolean;\n defaultValue?: string;\n accept?: Accept;\n defaultLabel?: React.ReactNode;\n}\n\nexport const UploadFileDropzone = ({\n label,\n multiple = false,\n // @ts-expect-error as default string doesn't found in generic T\n name = 'download-file',\n isRequired,\n defaultValue,\n accept,\n // accept = { 'image/*': [] },\n defaultLabel: defaultLabelFromProps,\n}: UploadFileDropzoneProps) => {\n const { t } = useTranslation();\n\n const { setValue } = useFormContext();\n const onDrop = useCallback(\n (droppedFiles: File[]) => {\n setValue(\n name,\n // @ts-expect-error as generic T doesn't know that value is File\n droppedFiles,\n { shouldValidate: true }\n );\n },\n [setValue, name]\n );\n const { getRootProps, getInputProps, acceptedFiles } = useDropzone({\n accept,\n multiple: multiple,\n onDrop,\n });\n\n const { fieldState } = useController({\n name: name,\n });\n\n const filesLength = acceptedFiles.length;\n const defaultLabel = defaultLabelFromProps || t('upload-file-default-label');\n\n const files = acceptedFiles.map((file: FileWithPath) => (\n
  • \n {file.path} - {file.size} bytes\n
  • \n ));\n\n const uploadFileLabel = filesLength\n ? acceptedFiles.length > 1\n ? t('multiple-files-selected', { filesCount: acceptedFiles.length })\n : files\n : defaultValue || defaultLabel;\n\n return (\n \n \n {label && {label}}\n \n \n \n {uploadFileLabel}\n \n \n {fieldState.error?.message && (\n {fieldState.error.message}\n )}\n \n \n );\n};\n","import { FormLabel as ChakraFormLabel, FormLabelProps } from '@chakra-ui/react';\nimport { PropsWithChildren } from 'react';\n\nconst formLabelStyle = {\n color: 'grey',\n fontWeight: 500,\n fontSize: '16px',\n};\n\nexport const FormLabel = (\n props: PropsWithChildren\n): JSX.Element => {\n return ;\n};\n","import { Product } from '@/model/IProduct';\nimport { DomainRecord } from '@/model/common';\nimport { CardInfoType } from '@/components/DevelopmentCard';\nimport { ITEPortal_Domain_Dto_PriceListItemSummary } from '../../../../api';\n\nexport function getSelectBuildingInfo(\n products: Product[],\n data: ITEPortal_Domain_Dto_PriceListItemSummary[]\n): DomainRecord[] {\n return products.map((product) => {\n const cardInfo: CardInfoType = {};\n\n const selectBuildingData = data?.find(\n (productData) => productData?.productName === product?.productName\n );\n\n const buildingType = selectBuildingData?.buildingTypes?.find(\n (type) => type !== 0\n );\n\n cardInfo['prices'] = {\n current: product?.price,\n };\n cardInfo['imageDescription'] = selectBuildingData?.imageDescription;\n cardInfo['buildingLabel'] = selectBuildingData?.productDisplayName;\n cardInfo['buildingDescription'] = selectBuildingData?.description;\n cardInfo['note'] = selectBuildingData?.additionalNotes;\n cardInfo['images'] = selectBuildingData?.imageUrls;\n\n return {\n key: product.getProductId(),\n text:\n product.productDisplayName ||\n product.productName ||\n product.getProductId(),\n product: product,\n buildingType,\n cardInfo,\n } satisfies DomainRecord;\n });\n}\n","import React, { useEffect } from 'react';\nimport { DevelopmentCard } from '@/components/DevelopmentCard';\nimport styled from 'styled-components';\nimport { t } from 'i18next';\nimport { LoaderWrapper } from '@/theme/css/styles';\nimport { Loader } from '@/components/Loader/Loader';\nimport { getSelectBuildingInfo } from '@/components/Forms/Services/SelectBuilding/getSelectBuildingInfo';\nimport { ShowMoreText } from '@/components/Forms/Services/TemporaryStaff';\nimport { createExhibitionOrderServiceRoute } from '../../../../features/Routing/protected/exhibitions-by-role';\nimport { CATEGORY_TYPES } from '../../../../constants/categorie';\nimport { typedAxios } from '../../../../api/typed-axios';\nimport { ProductUtils } from '@/utils/product-utils';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { useStand } from '@/store/effector/stand';\nimport { useOrder } from '@/store/effector/order';\nimport { loadingApi, useAppLoading } from '@/store/effector/loading';\nimport { ITEPortal_Domain_Dto_CategoryDto } from '../../../../api';\nimport { Box, Text } from '@chakra-ui/react';\nimport { useVatSettings } from '@/store/effector/vat-settings';\nimport { BuildingGallery } from '@/components/ImageGalleries/BuildingGallery';\nimport { useQuery } from '@tanstack/react-query';\n\nconst BuildingTypesWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n gap: 20px;\n\n & > div {\n flex-basis: 50%;\n max-width: calc(50% - 10px);\n }\n`;\n\ninterface SelectBuildingCardProps {\n description?: ITEPortal_Domain_Dto_CategoryDto['description'];\n}\n\nconst useBuildingsLoader = () => {\n const { exhibitionId } = createExhibitionOrderServiceRoute.useParams();\n const { standForOrder, originalBuildingType } = useStand();\n const { sellingOfficeId } = useExhibition();\n\n return useQuery({\n queryKey: ['buildings', exhibitionId, standForOrder, sellingOfficeId],\n queryFn: async () => {\n const data = await typedAxios.priceListItem.getPricelistItems({\n exhibitionId: +exhibitionId,\n sellingOfficeId: +sellingOfficeId,\n buildingType: standForOrder.buildingType || originalBuildingType,\n });\n\n const productItemCardData = data.filter(\n (item) => item.categoryName === CATEGORY_TYPES.SELECT_BUILDING\n );\n\n const productItemCardObjects = productItemCardData?.map((product) => {\n return ProductUtils.createProductFromPriceListItem(product);\n });\n\n const productItemsObjects = getSelectBuildingInfo(\n productItemCardObjects,\n productItemCardData\n );\n\n return productItemsObjects;\n },\n });\n};\n\nexport const SelectBuilding = ({\n description,\n}: SelectBuildingCardProps): JSX.Element => {\n const { items } = useOrder();\n const isLoader = useAppLoading();\n const { vatMessage } = useVatSettings();\n\n const { data: cardItems = [], isFetching } = useBuildingsLoader();\n\n useEffect(\n function toggleLoading() {\n if (isFetching) {\n loadingApi.on();\n } else {\n loadingApi.off();\n }\n },\n [isFetching]\n );\n\n return (\n <>\n {vatMessage && (\n \n {vatMessage}\n \n )}\n {description && !isLoader && (\n \n {description}\n \n )}\n {isLoader ? (\n \n \n \n ) : (\n <>\n {cardItems.length > 0 && (\n \n {cardItems.map(({ key, text, cardInfo, product }) => {\n const isSelected = items?.some(\n (oi) => oi.id === product.getProductId()\n );\n\n return (\n \n {cardInfo?.images && (\n \n )}\n \n );\n })}\n \n )}\n \n )}\n \n );\n};\n","import {\n SELECT_BUILDING,\n TEMPORARY_STAFF,\n} from '@/constants/technical-services';\nimport { SelectBuilding } from './SelectBuilding';\nimport ProductItemsCard from './common/ProductItemsCard';\nimport TemporaryStaff from './TemporaryStaff';\nimport { Category } from '@/model/ICategory';\n\ninterface ServiceFactoryProps {\n category: Category;\n description: string;\n}\n\nconst ServiceFactory = ({ category }: ServiceFactoryProps) => {\n switch (category.name) {\n case SELECT_BUILDING:\n return ;\n case TEMPORARY_STAFF:\n return ;\n default:\n return ;\n }\n};\n\nexport default ServiceFactory;\n","import { Product } from '@/model/IProduct';\nimport { FieldValues, FormProvider, useForm } from 'react-hook-form';\nimport styled from 'styled-components';\nimport { Button, Flex, Tooltip } from '@chakra-ui/react';\nimport { useTranslation } from 'react-i18next';\nimport Select from '@/components/Fields/Select';\nimport { WarningIcon } from '@chakra-ui/icons';\nimport {\n BadgeItem,\n RowDataStructure,\n} from '@/components/OrderTableRow/OrderTableRow';\nimport InputNumber from '@/components/Fields/InputNumber';\nimport Input from '@/components/Fields/Input';\n\ninterface RowProps {\n label: string;\n submitHandler: (product: Product, values: FieldValues) => void;\n product: Product;\n params: RowDataStructure[];\n}\n\nconst Form = styled.form`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n padding: 20px 0;\n\n &:not(:last-child) {\n border-bottom: 1px solid #e2e8f0;\n }\n`;\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: row;\n margin-left: auto;\n align-items: center;\n`;\n\nconst Price = styled.div`\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n text-align: right;\n margin-right: 1rem;\n`;\n\nconst Label = styled.div`\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n margin-bottom: 0.75rem;\n`;\n\nexport const TooltipWrapper = styled.span`\n margin-left: 0.25rem;\n color: #cbd5e0;\n font-size: 16px;\n`;\n\nconst rowDataComponentsConfig = {\n inputNumber: InputNumber,\n input: Input,\n badge: Select,\n};\n\nconst Row: React.FC = ({ label, product, submitHandler, params }) => {\n const { t } = useTranslation();\n const instance = useForm();\n const {\n handleSubmit,\n formState: { isValid },\n } = instance;\n const description = product?.description;\n\n const onSubmit = handleSubmit((data) => {\n submitHandler(product, data);\n });\n\n return (\n \n
    \n
    \n \n\n \n {params?.map((tableElement, key) => {\n const Component =\n rowDataComponentsConfig?.[\n tableElement?.type as 'badge' | 'input' | 'inputNumber'\n ];\n\n return (\n \n );\n })}\n \n
    \n \n {product.formattedPrice}\n \n \n
    \n
    \n );\n};\n\nexport default Row;\n","import { DomainRecord } from '@/model/common';\nimport { RowDataStructure } from '@/components/OrderTableRow/OrderTableRow';\nimport { LANGUAGES_OPTIONS } from '@/constants/languages';\nimport { t } from 'i18next';\nimport { Product } from '@/model/IProduct';\n\nfunction getTemporaryStaffConfig(products: Product[]): DomainRecord[] {\n return products.map((product) => {\n const params: RowDataStructure[] = [];\n\n switch (product?.fieldType) {\n case 'select':\n params.push({\n type: 'badge',\n name: 'language',\n text: product.formattedPrice,\n options: LANGUAGES_OPTIONS,\n settings: { required: true },\n placeholder: t('chooseLanguage') as string,\n });\n break;\n case 'input':\n params.push({\n type: 'input',\n name: 'language',\n text: product.formattedPrice,\n placeholder: t('enterLanguage') as string,\n settings: { required: true },\n });\n break;\n }\n\n params.push(\n {\n type: 'inputNumber',\n name: 'staff_amount',\n placeholder: t('personAmountPlaceholder') as string,\n settings: { required: true, min: 1 },\n },\n {\n type: 'inputNumber',\n name: 'day_amount',\n placeholder: t('dayAmountPlaceholder') as string,\n settings: { required: true, min: 1 },\n }\n );\n\n return {\n key: product.getProductId(),\n text:\n product.productDisplayName ||\n product.productName ||\n product.getProductId() + '',\n product: product,\n params,\n };\n });\n}\n\nexport default getTemporaryStaffConfig;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport getTemporaryStaffConfig from './config';\nimport { Product } from '@/model/IProduct';\nimport { FieldValues } from 'react-hook-form';\nimport ProductCard from '@/components/Card/ProductCard';\nimport ReactShowMoreText from 'react-show-more-text';\nimport styled from 'styled-components';\nimport Row from './Row';\nimport { TemporaryStaffOrderItem } from '@/model/IOrderItem';\nimport fetchApi from '@/utils/fetchAPI';\nimport { GET_PRICELIST_PRODUCTS } from '@/constants/endpoints';\nimport { FetchMethods } from '@/utils/constants';\nimport { DomainRecord } from '@/model/common';\nimport { Loader } from '@/components/Loader/Loader';\nimport { t } from 'i18next';\nimport { LoaderWrapper } from '@/theme/css/styles';\nimport { createExhibitionOrderServiceRoute } from '@/features/Routing/protected/exhibitions-by-role';\nimport { CATEGORY_TYPES } from '@/constants/categorie';\nimport { ITEPortal_Domain_Dto_PriceListItemSummary } from '@/api';\nimport { ProductUtils } from '@/utils/product-utils';\nimport { useStand } from '@/store/effector/stand';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { orderApi } from '@/store/effector/order';\nimport { ITEPortal_Domain_Dto_CategoryDto } from '../../../../api';\nimport { useVatSettings } from '@/store/effector/vat-settings';\nimport { Box, Text } from '@chakra-ui/react';\n\ninterface TemporaryStaffProps {\n description: ITEPortal_Domain_Dto_CategoryDto['description'];\n}\n\nexport const ShowMoreText = styled(ReactShowMoreText)`\n position: relative;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n margin-bottom: 24px;\n padding-bottom: 20px;\n\n .show-more-less-clickable {\n position: absolute;\n right: 0;\n cursor: pointer;\n color: var(--chakra-colors-brandColor);\n text-decoration: none;\n transform: translateY(100%);\n }\n`;\n\nconst TemporaryStaff: React.FC = ({ description }) => {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [productItems, setProductItems] = useState([]);\n const { standForOrder } = useStand();\n const { sellingOfficeId } = useExhibition();\n const { vatMessage } = useVatSettings();\n const { exhibitionId } = createExhibitionOrderServiceRoute.useParams();\n\n const clickHandler = useCallback((product: Product, values: FieldValues) => {\n const language = values?.language as string | undefined;\n const personAmount = parseInt(values?.staff_amount);\n const dayAmount = parseInt(values?.day_amount);\n\n orderApi.addItem(\n new TemporaryStaffOrderItem({\n id: product.getProductId(),\n product: product,\n language: language,\n peopleAmount: personAmount,\n dayAmount: dayAmount,\n })\n );\n }, []);\n\n useEffect(() => {\n const fetchData = async () => {\n const culture = localStorage.getItem('lang');\n\n setIsSubmitting(true);\n try {\n const { data } = await fetchApi<\n Array\n >(GET_PRICELIST_PRODUCTS, {\n method: FetchMethods.Get,\n params: {\n exhibitionId,\n sellingOfficeId,\n buildingType: standForOrder?.buildingType,\n culture,\n },\n });\n\n const productItemCardData = data.filter(\n (item: any) => item.categoryName === CATEGORY_TYPES.TEMPORARY_STAFF\n );\n\n const productItemCardObjects = productItemCardData?.map((product) => {\n return ProductUtils.createProductFromPriceListItem(product);\n });\n\n const productItemsObjects = getTemporaryStaffConfig(\n productItemCardObjects\n );\n\n setProductItems(productItemsObjects);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n fetchData();\n }, []);\n\n return (\n <>\n {vatMessage && (\n \n {vatMessage}\n \n )}\n {description && !isSubmitting && (\n \n {description}\n \n )}\n {isSubmitting ? (\n \n \n \n ) : (\n productItems?.length > 0 && (\n \n {productItems.map(({ key, text, product, params }) => (\n \n ))}\n \n )\n )}\n \n );\n};\n\nexport default TemporaryStaff;\n","import { OrderTableRow } from '@/components/OrderTableRow/OrderTableRow';\nimport ProductCard from '@/components/Card/ProductCard';\nimport { ShowMoreText } from '@/components/Forms/Services/TemporaryStaff';\nimport { useTranslation } from 'react-i18next';\nimport { Loader } from '@/components/Loader/Loader';\nimport { LoaderWrapper } from '@/theme/css/styles';\nimport { Category } from '@/model/ICategory';\nimport TechnicalServicesGrid from '@/components/TechnicalServicesGrid';\nimport { useProductsLoader } from './use-products-loader';\nimport { Box, Text } from '@chakra-ui/react';\nimport { useVatSettings } from '@/store/effector/vat-settings';\n\ninterface ProductItemsCardProps {\n serviceCategory: Category;\n}\n\nconst ProductItemsCard = ({ serviceCategory }: ProductItemsCardProps) => {\n const serviceSpecification = serviceCategory.id;\n const { t } = useTranslation();\n const { vatMessage } = useVatSettings();\n\n const { productItems, isLoading } = useProductsLoader({\n categoryId: serviceSpecification,\n });\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n\n return (\n <>\n {vatMessage && (\n \n {vatMessage}\n \n )}\n {serviceCategory.description && (\n \n {serviceCategory.description}\n \n )}\n\n {serviceCategory.tree.length > 0 && (\n \n \n \n )}\n\n \n {productItems.map(({ key, text, params, product }, index) => {\n //Temporary solution\n\n return (\n \n );\n })}\n \n \n );\n};\n\nexport default ProductItemsCard;\n","import { useEffect, useState } from 'react';\nimport { typedAxios } from '@/api/typed-axios';\nimport getConfig from '../defaultConfig';\nimport { createExhibitionOrderServiceRoute } from '@/features/Routing/protected/exhibitions-by-role';\nimport { IdType, DomainRecord } from '@/model/common';\nimport { ProductUtils } from '@/utils/product-utils';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { useStand } from '@/store/effector/stand';\nimport { useCatalog } from '@/store/effector/catalog';\n\nexport const useProductsLoader = (opts: { categoryId: IdType }) => {\n const { categoryId } = opts;\n\n const { flatMap } = useCatalog();\n const [isLoading, setLoading] = useState(false);\n const [productItems, setProductItems] = useState([]);\n const { standForOrder } = useStand();\n const { sellingOfficeId } = useExhibition();\n const { exhibitionId } = createExhibitionOrderServiceRoute.useParams();\n const categoriesSource = [...flatMap.values()];\n\n useEffect(() => {\n const fetchData = async () => {\n setLoading(true);\n try {\n const data = await typedAxios.priceListItem.getPricelistItems({\n exhibitionId: +exhibitionId,\n sellingOfficeId: +sellingOfficeId,\n buildingType: standForOrder?.buildingType,\n categoryIds: categoryId + '' || undefined,\n });\n\n const productItemCardObjects = data?.map((product) => {\n const category = categoriesSource.find((cat) => {\n return cat.id === product.categoryId;\n });\n\n return ProductUtils.createProductFromPriceListItem(product, {\n category,\n });\n });\n\n const productItemsObjects = getConfig(productItemCardObjects);\n\n setProductItems(productItemsObjects);\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [categoryId]);\n\n return {\n isLoading,\n productItems,\n };\n};\n","import { DomainRecord } from '@/model/common';\nimport { Product } from '@/model/IProduct';\n\nexport default function getConfig(products: Product[]): DomainRecord[] {\n return products.map((product) => ({\n key: product.getProductId(),\n text:\n product.productDisplayName ||\n product.productName ||\n product.getProductId(),\n product: product,\n params: [\n {\n type: 'price',\n text: product.formattedPrice,\n },\n ],\n }));\n}\n","import styled from 'styled-components';\nimport BrandBox from '@/components/BrandBox';\nimport ProfileMenu from '@/components/Profile/ProfileMenu';\nimport Menu from '@/components/Menu';\nimport { headerMenuConfig } from '@/components/Header/headerMenuConfig';\nimport Search from '@/components/Search';\nimport { useMatches, useParams } from '@tanstack/react-router';\nimport { LanguageSwitcher } from '@/components/LanguageSwitcher/LanguageSwitcher';\nimport { Flex } from '@chakra-ui/react';\nimport { useTranslation } from 'react-i18next';\nimport { AdminSearch } from '../AdminSearch';\nimport { useAuth } from '@/store/effector/auth';\n\nconst NavBar = styled.header`\n display: flex;\n flex-direction: row;\n\n padding: 16px 20px;\n height: var(--chakra-sizes-nav-bar-height);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n\n background: #fff;\n`;\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n\n justify-content: end;\n`;\n\nconst StyleMenu = styled(Menu)`\n margin-left: 32px;\n`;\n\nconst StyledSearch = styled(Search)`\n max-width: 222px;\n margin-right: 32px;\n`;\n\nconst RightBlockWrapper = styled(Flex)`\n flex-direction: column;\n align-items: end;\n justify-content: center;\n padding-bottom: 10px;\n`;\n\nconst Header: React.FC = () => {\n const { user } = useAuth();\n\n const matchContext = useMatches().at(-1)?.context || {\n key: 'default',\n };\n\n const { exhibitionId, stand } = useParams({ strict: false }) || {};\n const { t } = useTranslation();\n const shouldRenderExhibitionSearchForExhibitor =\n Boolean(user?.isExhibitor) && Boolean(exhibitionId) && Boolean(stand);\n\n const shouldRenderPageSpecificSearch = !user?.isExhibitor;\n\n return (\n \n \n {user?.isExhibitor && (\n \n )}\n \n {shouldRenderExhibitionSearchForExhibitor && (\n \n )}\n {shouldRenderPageSpecificSearch && (\n \n )}\n \n \n \n \n \n \n );\n};\n\nexport default Header;\n","import { IMenuConfig } from '@/components/Menu/config';\nimport { WarningIcon } from '@chakra-ui/icons';\nimport { typedAxios } from '../../api/typed-axios';\nimport { UrlUtils } from '../../utils/url-utils';\n\nconst saveManual = async () => {\n typedAxios.request\n .request({\n url: '/global-settings/exhibitor-manual',\n method: 'GET',\n query: {\n culture: localStorage.getItem('lang'),\n },\n })\n .then((manualUrl) => {\n if (manualUrl && typeof manualUrl === 'string') {\n window.open(UrlUtils.appendTimestampToUrl(manualUrl), '_blank');\n }\n });\n};\n\nexport const headerMenuConfig = (t: any) => {\n return {\n items: [\n {\n key: 'manual',\n name: t('participantManual'),\n to: saveManual,\n icon: ,\n },\n ],\n } as IMenuConfig;\n};\n","const DevelopmentIcon = () => (\n \n \n \n \n \n \n \n);\n\nexport default DevelopmentIcon;\n","import { forwardRef, Icon, IconProps } from '@chakra-ui/react';\n\nexport const DraggableHandlerIcon = forwardRef((props: IconProps, ref) => {\n return (\n \n \n \n );\n});\n","import { Icon, IconProps } from '@chakra-ui/react';\n\nexport const OrdersIcon = (props: IconProps) => {\n return (\n \n \n \n );\n};\n","import { Icon, IconProps } from '@chakra-ui/react';\n\nexport const UsersIcon = (props: IconProps) => {\n return (\n \n \n \n );\n};\n","import Lightbox, { SlideImage } from 'yet-another-react-lightbox';\nimport Inline from 'yet-another-react-lightbox/plugins/inline';\nimport 'yet-another-react-lightbox/styles.css';\nimport 'yet-another-react-lightbox/plugins/thumbnails.css';\n\nimport { useMemo, useState } from 'react';\nimport styled from 'styled-components';\nimport { Box, HStack } from '@chakra-ui/react';\n\ninterface BuildingStandardBodyProps {\n images: string[];\n}\n\nconst DotsWrapper = styled(HStack)`\n justify-content: center;\n position: absolute;\n bottom: 8px;\n width: 100%;\n`;\n\nconst DotsContainer = styled(Box)`\n cursor: pointer;\n margin: 0 2px;\n border-radius: 50%;\n display: inline-block;\n transition: background-color 0.6s ease;\n\n &:hover {\n background: black;\n }\n`;\n\nexport const BuildingGallery = ({\n images,\n}: BuildingStandardBodyProps): JSX.Element => {\n const [open, setOpen] = useState(false);\n const [index, setIndex] = useState(0);\n\n const slides = useMemo>(() => {\n return images.map((image) => {\n return {\n id: image,\n src: image,\n };\n });\n }, [images]);\n\n const toggleOpen = (state: boolean) => () => setOpen(state);\n\n const updateIndex = ({ index: current }: { index: number }) =>\n setIndex(current);\n\n const singleImage = slides.length <= 1;\n\n return (\n \n null : undefined,\n iconNext: singleImage ? () => null : undefined,\n }}\n inline={{\n style: {\n width: '100%',\n maxWidth: '430px',\n aspectRatio: '3 / 2',\n margin: '0 auto',\n },\n }}\n />\n {!singleImage && (\n \n {Array.from({ length: slides.length }).map((_, slide) => (\n updateIndex({ index: slide })}\n />\n ))}\n \n )}\n\n null : undefined,\n iconNext: singleImage ? () => null : undefined,\n }}\n controller={{ closeOnPullDown: true, closeOnBackdropClick: true }}\n styles={{ root: { '--yarl__color_backdrop': 'rgba(0, 0, 0, .7)' } }}\n />\n \n );\n};\n","import styled from 'styled-components';\n\nexport const Thumbnail = styled.img`\n width: 40px;\n height: auto;\n margin-right: 0.5rem;\n cursor: pointer;\n opacity: 0.9;\n\n &:hover {\n opacity: 1;\n }\n`;\n","import Lightbox, { SlideImage } from 'yet-another-react-lightbox';\nimport 'yet-another-react-lightbox/styles.css';\nimport 'yet-another-react-lightbox/plugins/thumbnails.css';\n\nimport { useMemo, useState } from 'react';\nimport { Flex, Text } from '@chakra-ui/react';\nimport { Thumbnail } from '@/components/ImageGalleries/CommonProductGallery.styled';\nimport { useFeatureValue } from '@/features/feautres';\n\ninterface BuildingStandardBodyProps {\n images: string[];\n}\n\nexport const CommonProductGallery = ({ images }: BuildingStandardBodyProps) => {\n const [open, setOpen] = useState(false);\n const [index, setIndex] = useState(0);\n const thumbnailsCount = useFeatureValue(\n 'PRODUCT_GALLERY_PREVIEW_IMAGES_COUNT',\n 3\n );\n\n const slides = useMemo>(() => {\n return images.map((image) => {\n return {\n id: image,\n src: image,\n };\n });\n }, [images]);\n\n const visibleSlides = slides.slice(0, thumbnailsCount);\n const hiddenSlidesCount = slides.length - thumbnailsCount;\n\n const toggleOpen = (state: boolean) => () => setOpen(state);\n\n const updateIndex = ({ index: current }: { index: number }) =>\n setIndex(current);\n\n if (!visibleSlides.length) {\n return null;\n }\n\n return (\n <>\n \n {visibleSlides.map((slide, i) => (\n {\n updateIndex({ index: i });\n toggleOpen(true)();\n }}\n />\n ))}\n {hiddenSlidesCount > 0 && (\n \n + {hiddenSlidesCount}\n \n )}\n \n\n \n \n );\n};\n","import { Button as OrderButton } from '@/components/Buttons/Button/Button';\nimport { Box, Divider } from '@chakra-ui/react';\nimport React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport { SystemLangType } from '../../model/common';\nimport { commonApi, useCommonStore } from '@/store/effector/common';\n\nconst ButtonsWrapper = styled(Box)`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n`;\n\nexport const LanguageSwitcher = (): JSX.Element => {\n const { i18n } = useTranslation();\n const { lang: language } = useCommonStore();\n const [lngValue, setLngValue] = useState(language);\n\n useEffect(() => {\n setLngValue(language);\n setLanguageValue(language);\n }, [language]);\n\n const setLanguageValue = (languageValue: SystemLangType) => {\n commonApi.setLanguage(languageValue);\n\n if (localStorage.getItem('lang') !== languageValue) {\n localStorage.setItem('lang', languageValue);\n i18n.changeLanguage(languageValue);\n location.reload();\n }\n };\n\n return (\n \n setLanguageValue('ru')}\n >\n Русский\n \n \n setLanguageValue('en')}\n >\n English\n \n \n );\n};\n","import React, { PropsWithChildren } from 'react';\nimport { Box, BoxProps, Spinner, SpinnerProps } from '@chakra-ui/react';\n\nexport const Loader = ({\n centralized,\n ...rest\n}: {\n centralized?: boolean;\n} & SpinnerProps): JSX.Element => {\n return (\n \n );\n};\n\nconst LoaderWrapperLoadingStyles: BoxProps = {\n opacity: 0.6,\n pointerEvents: 'none',\n userSelect: 'none',\n};\n\nexport const LoaderWrapper = (\n props: PropsWithChildren<{ loading: boolean } & BoxProps>\n) => {\n const { loading, children, ...boxProps } = props;\n\n return (\n \n {props.loading && (\n \n )}\n {children}\n \n );\n};\n","import React, { useCallback } from 'react';\nimport styled from 'styled-components';\nimport MenuItem from './MenuItem';\nimport { IMenuConfig } from './config';\nimport { Button } from '@chakra-ui/react';\nimport { useNavigate } from '@tanstack/react-router';\n\ninterface ListProps {\n direction?: 'row' | 'column';\n}\n\nconst List = styled.ul`\n display: flex;\n flex-direction: ${(props) => props.direction};\n align-items: center;\n\n padding-left: 0;\n margin-left: 0;\n\n list-style: none;\n`;\n\ninterface MenuProps extends ListProps {\n config: IMenuConfig;\n className?: string;\n}\n\nconst Menu: React.FC = ({\n config,\n className,\n direction = 'row',\n}) => {\n const navigate = useNavigate();\n\n const redirectTo = useCallback(\n (path: string) => navigate({ to: path, replace: true }),\n []\n );\n\n return (\n \n {config.items.map(({ key, name, icon, to }) => {\n const onClick = () => {\n if (to) {\n if (typeof to === 'function') {\n return to();\n }\n\n return redirectTo(to);\n }\n };\n\n return (\n \n {to ? (\n \n {name}\n \n ) : (\n name\n )}\n \n );\n })}\n \n );\n};\n\nexport default Menu;\n","import styled from 'styled-components';\n\nconst Item = styled.li<{ active: boolean }>`\n margin: 0;\n\n color: ${({ active }) =>\n active ? 'rgba(0, 0, 0, 0.7)' : 'rgba(0, 0, 0, 0.5)'};\n\n transition: color ease-in-out 15ms;\n cursor: pointer;\n\n &:hover {\n color: rgba(0, 0, 0, 0.7);\n }\n\n > * {\n padding: 0.5rem 1rem;\n }\n`;\n\ninterface MenuItem {\n children?: React.ReactNode;\n active?: boolean;\n}\n\nconst MenuItem: React.FC = ({ children, active = false }) => {\n return {children};\n};\n\nexport default MenuItem;\n","import {\n Button,\n ButtonGroup,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n} from '@chakra-ui/react';\nimport { $modalContext, $modalStack, ModalFactory } from './api';\nimport { useUnit } from 'effector-react';\nimport { useTranslation } from 'react-i18next';\nimport { AsyncButton } from '@/components/AsyncButton';\n\nexport const ModalFactoryProvider = () => {\n const { t } = useTranslation();\n const modals = useUnit($modalStack);\n\n if (modals.length === 0) {\n return null;\n }\n\n return (\n <>\n {modals.map((modal, index) => {\n const shouldUseOverlay = index === 0;\n\n return (\n \n {shouldUseOverlay && }\n \n {modal.title}\n \n \n \n \n\n \n \n ModalFactory.close(modal.id)}\n >\n {modal.cancelLabel || t('cancel')}\n \n {modal.okLabel && (\n {\n return modal.onOk?.($modalContext.getState());\n }}\n >\n {modal.okLabel}\n \n )}\n \n \n \n \n );\n })}\n \n );\n};\n","import { createDomain, createApi } from 'effector';\nimport { ComponentType, ReactNode, useEffect } from 'react';\nimport { attempt } from '../../utils/attempt';\nimport i18n from '../../i18n';\n\nexport type ModalDescriptor = {\n id?: string;\n isOpened?: boolean;\n okLabel?: ReactNode;\n cancelLabel?: ReactNode;\n onOk?: (modalContext?: any) => Promise;\n onCancel?: () => Promise;\n Component: ComponentType;\n title?: ReactNode;\n};\n\nconst domain = createDomain('modal-factory');\n\ntype StackType = ModalDescriptor[];\nexport const $modalStack = domain.createStore([]);\n\nconst defaultModalProps: Partial = {\n isOpened: true,\n};\n\nconst infoModalDefaultProps: Partial = {\n title: 'Success',\n okLabel: '',\n cancelLabel: 'Close',\n ...defaultModalProps,\n};\n\nconst confirmModalDefaultProps: Partial = {\n title: i18n.t('attention'),\n okLabel: i18n.t('yes'),\n cancelLabel: i18n.t('cancel'),\n onCancel: async () => {\n ModalFactory.close();\n },\n ...defaultModalProps,\n};\n\nexport const $modalContext = domain.createStore(null);\n\nexport const ModalFactory = {\n ...createApi($modalStack, {\n show: (_, newModal: ModalDescriptor) => [\n ..._,\n { ...defaultModalProps, ...newModal, isOpened: true },\n ],\n info: (_, newModal: ModalDescriptor) => [\n ..._,\n { ...infoModalDefaultProps, ...newModal, isOpened: true },\n ],\n confirm: (_, newModal: ModalDescriptor) => [\n ..._,\n { ...confirmModalDefaultProps, ...newModal, isOpened: true },\n ],\n closeAll: () => [],\n closeById: (_, id: ModalDescriptor['id']) => {\n if (!id) {\n return _;\n }\n\n return _.filter((d) => d.id !== id);\n },\n close: (_, id: string | undefined) => {\n let descriptorById: ModalDescriptor | null = null;\n\n if (typeof id === 'string') {\n const indexOfDescriptor = _.findIndex((d) => d.id === id);\n\n if (indexOfDescriptor === -1) {\n return _;\n }\n\n descriptorById = _.splice(indexOfDescriptor, 1)[0];\n }\n\n const lastModalDescriptor = descriptorById ? descriptorById : _.pop();\n\n if (!lastModalDescriptor) {\n return [];\n }\n\n setTimeout(() => {\n // todo this breaks a purity of reducer, needs to be refined\n if (typeof lastModalDescriptor?.onCancel === 'function') {\n attempt(() => lastModalDescriptor.onCancel?.());\n }\n }, 0);\n\n return [..._];\n },\n }),\n isOpened: $modalStack.map((stack) => {\n return stack.length > 0;\n }),\n\n isOpenedById: (id: string) => {\n return $modalStack.getState().some((d) => d.id === id);\n },\n ...createApi($modalContext, {\n updateContext: (_: S, payload: T) => payload,\n }),\n};\n\nexport const useModalFactoryContextProvider = (context: T) => {\n useEffect(() => {\n ModalFactory.updateContext(context);\n }, [context]);\n};\n","import Select, { StylesConfig } from 'react-select';\nimport CreatableSelect from 'react-select/creatable';\nimport { FieldProps } from '@/components/Fields/interfaces';\nimport { FormLabel } from '@/components/FormLabel/FormLabel';\nimport { Box, FormControl, FormErrorMessage } from '@chakra-ui/react';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\nimport { FieldValues, useController, useFormContext } from 'react-hook-form';\nimport { useMemo } from 'react';\nimport { OptionType } from '../../model/common';\nimport { isArrayOfOptions, isOption } from '../../utils/is-option';\n\nconst FormControlWrapper = styled(FormControl)`\n display: flex;\n flex-direction: column;\n`;\n\ninterface SelectComponentProps\n extends Omit, 'settings'> {\n options?: OptionType[];\n isMulti?: boolean;\n closeMenuOnSelect?: boolean;\n blurInputOnSelect?: boolean;\n defaultValue?: OptionType | OptionType[];\n maxWidth?: string;\n onChange?: (value: any) => void;\n disabled?: boolean;\n allowCreate?: boolean;\n}\n\nexport const SelectComponent = ({\n label,\n options,\n isRequired,\n isMulti = false,\n closeMenuOnSelect = true,\n blurInputOnSelect = true,\n maxWidth,\n onChange,\n disabled,\n name,\n allowCreate,\n ...props\n}: SelectComponentProps): JSX.Element => {\n const formContext = useFormContext();\n\n if (!formContext) {\n throw new Error(\n `This field (${name}) should be used only within FormContext`\n );\n }\n\n const { fieldState, field } = useController({\n name: name,\n control: formContext.control,\n });\n\n const value = useMemo(() => {\n if (Array.isArray(field.value)) {\n if (field.value.every(isOption)) {\n return field.value;\n }\n }\n\n if (isOption(field.value)) {\n return field.value;\n }\n\n if (Array.isArray(options) && !Array.isArray(field.value)) {\n const option = options?.find((opt) => opt.value === field.value);\n\n if (option) {\n return option;\n }\n }\n\n if (Array.isArray(options) && isArrayOfOptions(field.value)) {\n const possibleValues = field.value\n // @ts-expect-error todo fix types\n .map((option) => option.value);\n\n return options.filter((opt) => possibleValues.includes(opt.value));\n }\n\n return null;\n }, [field, options]);\n\n if (!fieldState) {\n throw new Error(\n 'fieldState not found. Is this field used within FormContext?'\n );\n }\n\n const { t } = useTranslation();\n\n const selectStylesOverride: StylesConfig = {\n control: (styles, { isDisabled }) => ({\n ...styles,\n backgroundColor: isDisabled ? '#f7f7f7' : 'inherit',\n borderColor: fieldState.invalid ? 'red' : 'inherit',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n }),\n option: (styles) => ({ ...styles, minHeight: '40px' }),\n menuPortal: (styles) => ({ ...styles, zIndex: 10000 }),\n };\n\n const BaseComponent = allowCreate ? CreatableSelect : Select;\n\n return (\n \n \n {label && {label}}\n {\n if (event) {\n field.onChange(event);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n } else if (event === null) {\n // reset field state and propagate clearing select\n formContext.resetField(name);\n }\n }}\n />\n {fieldState.error?.message && (\n {fieldState.error?.message}\n )}\n \n \n );\n};\n","import { Badge, BadgeProps } from '@chakra-ui/react';\nimport { ITEPortal_Domain_Dto_AdminOrderSummary } from '@/api';\nimport { ORDER_STATUSES } from '@/constants/order';\nimport { isNil } from '@/utils/is-nil';\nimport i18n from '@/i18n';\n\ntype BadgeConfigType = {\n [key: string]: { color: BadgeProps['colorScheme']; label: string };\n};\n\nconst badgeConfig: BadgeConfigType = {\n [ORDER_STATUSES.Draft]: {\n color: 'gray',\n label: i18n.t('order-status-draft'),\n },\n [ORDER_STATUSES.Submitted]: {\n color: 'orange',\n label: i18n.t('order-status-submitted'),\n },\n [ORDER_STATUSES.Processing]: {\n color: 'yellow',\n label: i18n.t('order-status-processing'),\n },\n [ORDER_STATUSES.Invoiced]: {\n color: 'blue',\n label: i18n.t('order-status-invoiced'),\n },\n [ORDER_STATUSES.Paid]: {\n color: 'green',\n label: i18n.t('order-status-paid'),\n },\n [ORDER_STATUSES.Cancelled]: {\n color: 'red',\n label: i18n.t('order-status-cancelled'),\n },\n};\n\nexport const OrderBadge = ({\n status,\n}: {\n status: ITEPortal_Domain_Dto_AdminOrderSummary['orderStatus'];\n}) => {\n if (isNil(status)) {\n return null;\n }\n\n const badgeType = badgeConfig[status];\n\n return {badgeType?.label};\n};\n","import React, { useCallback } from 'react';\nimport { Divider, Flex, Tooltip } from '@chakra-ui/react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '../Buttons/Button/Button';\nimport { FieldValues, RegisterOptions, UseFormRegister } from 'react-hook-form';\nimport { Product } from '@/model/IProduct';\nimport InputNumber from '../Fields/InputNumber';\nimport { IdType } from '@/model/common';\nimport { WarningIcon } from '@chakra-ui/icons';\nimport { TooltipWrapper } from '@/components/Forms/Services/TemporaryStaff/Row';\nimport {\n ButtonContainer,\n InfoSectionContainer,\n OrderTableRowContainer,\n OrderTableRowContainerBadgeComponent,\n OrderTableRowContainerInputComponent,\n OrderTableRowContainerInputWrapper,\n OrderTableRowContainerNameComponent,\n OrderTableRowContainerPriceComponent,\n OrderTableRowWrapper,\n ParamsSectionContainer,\n} from './styled';\nimport { AmountCounter } from '@/components/AmountCounter';\nimport { Nullable } from '../../types/support-types';\nimport { OrderItem } from '../../model/IOrderItem';\nimport { orderApi, useOrder } from '@/store/effector/order';\nimport { ITEPortal_Domain_Dto_PriceListItemSummary } from '@/api';\nimport { CommonProductGallery } from '@/components/ImageGalleries/CommonProductGallery';\n\ntype RowDataType = 'price' | 'input' | 'badge' | 'inputNumber';\n\nexport interface RowDataStructure {\n type: RowDataType;\n text?: string | null;\n name?: string | null;\n options?: BadgeItem[];\n placeholder?: string;\n settings?: RegisterOptions;\n}\n\ninterface RowDataProps {\n rowData: {\n text: string;\n params: RowDataStructure[];\n };\n // submitHandler: (product: Product, values: FieldValues) => void;\n product: Product;\n withDivider?: boolean;\n}\n\ntype TextDataProp = {\n text?: string;\n id?: IdType;\n description?: Nullable;\n} & Pick;\n\nexport interface BadgeItem {\n key?: string | number;\n value: string | number;\n}\n\ninterface BadgeDataProp {\n register?: UseFormRegister;\n options?: BadgeItem[];\n name?: string;\n placeholder?: string;\n settings?: RegisterOptions;\n}\n\ninterface InputFieldProps {\n register?: UseFormRegister;\n name?: string;\n placeholder?: string;\n settings?: RegisterOptions;\n}\n\nconst NameComponent = ({\n text,\n description,\n imageUrls,\n}: TextDataProp): JSX.Element => {\n return (\n \n \n {text}\n {description && (\n \n \n \n \n \n )}\n \n {imageUrls && }\n \n );\n};\n\nconst PriceComponent = ({ text }: TextDataProp): JSX.Element => {\n return (\n \n {text}\n \n );\n};\n\nconst InputComponent: React.FC = ({\n register,\n placeholder,\n settings,\n name = 'field',\n}) => {\n const registerFieldName = register ? { ...register(name, settings) } : {};\n\n return (\n \n \n \n );\n};\n\nconst SelectComponent: React.FC = ({\n register,\n options,\n placeholder,\n settings,\n name = 'select',\n}) => {\n const registerFieldName = register ? { ...register(name, settings) } : {};\n\n return (\n \n \n {options?.map(({ key, value }) => {\n return (\n \n );\n })}\n \n );\n};\n\nconst rowDataComponentsConfig = {\n price: PriceComponent,\n inputNumber: InputNumber,\n input: InputComponent,\n badge: SelectComponent,\n};\n\nconst RowControl = ({ orderItem }: { orderItem: OrderItem }) => {\n const product = orderItem.product;\n\n const changeHandler = (value: number) => {\n orderApi.changeItem({\n id: product.getProductId(),\n product,\n amount: value,\n });\n };\n\n const isProductSupportsDecimals = product.category.isDecimal;\n\n return (\n changeHandler(counterValue)}\n suffix={product instanceof Product ? product.unit : undefined}\n precision={isProductSupportsDecimals ? 2 : 0}\n step={product instanceof Product ? product.amountStep : 1}\n />\n );\n};\n\nconst AddItemToOrderButton = ({ product }: { product: Product }) => {\n const { t } = useTranslation();\n\n const addItem = useCallback((productToAdd: Product) => {\n const item = new OrderItem({\n id: productToAdd.getProductId(),\n product: productToAdd,\n });\n\n item.setAmount(1);\n\n orderApi.addItem(item);\n }, []);\n\n return (\n addItem(product)}\n >\n {t('choose')}\n \n );\n};\n\nexport const OrderTableRow = ({\n rowData,\n product,\n withDivider,\n}: RowDataProps): JSX.Element => {\n const { items } = useOrder();\n const { params, text } = rowData;\n const orderItem = items?.find((item) => item?.id === product?.productName);\n\n return (\n \n \n \n {text && (\n \n )}\n \n {params?.map((tableElement, key) => {\n const rowDataText = tableElement?.text as string;\n const rowDataOptions = tableElement?.options as BadgeItem[];\n\n const Component = rowDataComponentsConfig[tableElement?.type];\n\n if (!Component) {\n console.warn(`there is no Component for ${tableElement?.type}`);\n\n return null;\n }\n\n return (\n \n );\n })}\n \n \n \n {orderItem && !orderItem.included ? (\n \n ) : (\n \n )}\n \n \n {withDivider && }\n \n );\n};\n","import styled from 'styled-components';\nimport { Input, Select } from '@chakra-ui/react';\n\nexport const OrderTableRowWrapper = styled.div`\n width: 100%;\n`;\n\nexport const OrderTableRowContainer = styled.form`\n display: flex;\n flex-direction: row;\n margin-left: auto;\n justify-content: space-between;\n align-items: center;\n max-width: 100%;\n padding-top: 1.3rem;\n padding-bottom: 1.3rem;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n justify-content: end;\n height: 30px;\n`;\n\nexport const OrderTableRowContainerNameComponent = styled.div`\n font-size: 14px;\n line-height: 1.2;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n gap: 1rem;\n\n @media all and (max-width: 1300px) {\n flex-direction: column;\n align-items: flex-start;\n }\n`;\n\nexport const OrderTableRowContainerPriceComponent = styled.div`\n font-size: 14px;\n min-width: 100px;\n text-align: center;\n font-weight: 600;\n`;\n\nexport const OrderTableRowContainerInputComponent = styled(Input)`\n padding: 0 5px;\n max-width: 50px;\n text-align: center;\n\n ::placeholder {\n text-align: center;\n }\n\n :focus {\n text-align: center;\n }\n`;\n\nexport const InfoSectionContainer = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-right: 20px;\n gap: 20px;\n`;\n\nexport const ParamsSectionContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n gap: 20px;\n`;\n\nexport const OrderTableRowContainerInputWrapper = styled.div`\n padding: 5px 0;\n min-width: 50px;\n`;\n\nexport const OrderTableRowContainerBadgeComponent = styled(Select)`\n padding: 5px 0;\n width: 150px;\n`;\n","import styled from 'styled-components';\nimport { Text, Avatar as ChakraAvatar } from '@chakra-ui/react';\n\nexport const Row = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n\nexport const Avatar = styled(ChakraAvatar)`\n max-width: 40px;\n max-height: 40px;\n\n border-radius: 50%;\n margin-left: 12px;\n`;\n\nexport const UserInfo = styled(Text)`\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n`;\n","import { User } from '@/model/IUser';\nimport { Row, UserInfo } from './Profile.styled';\nimport { ChevronDownIcon } from '@chakra-ui/icons';\nimport styled from 'styled-components';\n\ninterface ProfileProps {\n user: User;\n}\n\nconst StyledChevronDownIcon = styled(ChevronDownIcon)`\n margin-left: 8.7px;\n`;\n\nconst Profile: React.FC = ({ user }) => {\n return (\n \n {user.fullName}\n \n \n );\n};\n\nexport default Profile;\n","import {\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n MenuList,\n} from '@chakra-ui/react';\nimport Profile from './Profile';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { authApi, useAuth } from '@/store/effector/auth';\nimport { exhibitorPathRootPath } from '@/features/Routing/userPaths';\nimport { useRBAC } from '@/features/rbac/useRBAC';\n\nconst StyledMenuList = styled(MenuList)`\n font-size: 0.8125rem;\n`;\n\nconst StyledMenuItem = styled(MenuItem)`\n padding: 0.35rem 1.2rem;\n`;\n\nconst ProfileMenu: React.FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { can } = useRBAC();\n\n const logOutHandler = useCallback(() => {\n authApi.logout();\n }, []);\n\n const toExhibitions = () => {\n navigate({\n to: exhibitorPathRootPath,\n });\n };\n\n const { user } = useAuth();\n\n if (!user) {\n return null;\n }\n\n return (\n <>\n \n \n \n \n \n {can('canViewPublicExhibitions') && (\n <>\n \n {t('myExhibitions')}\n \n\n \n \n )}\n {t('logout')}\n \n \n \n );\n};\n\nexport default ProfileMenu;\n","import React, { useCallback, useRef } from 'react';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport {\n AutoComplete,\n AutoCompleteInput,\n AutoCompleteItem,\n AutoCompleteList,\n} from '@choc-ui/chakra-autocomplete';\nimport { Box, InputGroup, InputLeftElement } from '@chakra-ui/react';\nimport { Search2Icon } from '@chakra-ui/icons';\nimport { Item } from '@choc-ui/chakra-autocomplete/dist/types';\nimport { useNavigate } from '@tanstack/react-router';\nimport { getPathByProduct } from '@/utils/route';\nimport { useCategoriesByData } from '@/hooks/categoriesConverter/useCategoriesByData';\nimport { queryOptions, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ProductUtils } from '@/utils/product-utils';\nimport { useStand } from '@/store/effector/stand';\nimport { useCatalog } from '@/store/effector/catalog';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { typedAxios } from '@/api/typed-axios';\n\nconst Wrapper = styled.div`\n font-weight: 400;\n font-size: 16px;\n line-height: 24px;\n`;\n\nconst StyledInputGroup = styled(InputGroup)`\n color: #a0aec0;\n`;\n\ninterface SearchProps {\n className?: string;\n exhibitionId: string;\n stand: string;\n}\n\nconst filter = (query: string, optionValue: string, optionLabel: string) => {\n if (query.length > 0) {\n return optionLabel\n .trim()\n .toLowerCase()\n .includes(query.toLowerCase().trim());\n }\n\n return false;\n};\n\nconst Search: React.FC = ({ className, exhibitionId, stand }) => {\n const queryClient = useQueryClient();\n const { sellingOfficeId } = useExhibition();\n const { flatMap } = useCatalog();\n\n const { standForOrder } = useStand();\n const source = useCategoriesByData([...flatMap.values()]);\n\n const categoryIds = source?.map((category) => category?.['id'])?.toString();\n\n const ref = useRef();\n const { t } = useTranslation();\n const navigate = useNavigate();\n\n const onSelectHandler = useCallback(({ item }: { item: Item }) => {\n navigate({\n to: getPathByProduct(exhibitionId, stand, item.originalValue),\n replace: true,\n });\n\n return false;\n }, []);\n\n const autoCompleteQueryOptions = queryOptions({\n queryKey: [\n 'products-search',\n standForOrder?.buildingType,\n exhibitionId,\n sellingOfficeId,\n categoryIds,\n ],\n enabled: false,\n queryFn: async () => {\n const response = await typedAxios.priceListItem.getPricelistItems({\n exhibitionId: +exhibitionId,\n sellingOfficeId: +sellingOfficeId,\n categoryIds,\n buildingType: standForOrder?.buildingType,\n });\n // const { data: response } = await fetchApi<\n // Array\n // >(GET_PRICELIST_PRODUCTS, {\n // method: FetchMethods.Get,\n // params: {\n // exhibitionId,\n // sellingOfficeId,\n // categoryIds,\n // buildingType: standForOrder?.buildingType,\n // },\n // });\n\n return response.map((product) => {\n return ProductUtils.createProductFromPriceListItem(product);\n });\n },\n });\n\n const { data = [], isFetching } = useQuery(autoCompleteQueryOptions);\n\n return (\n \n {t('notFoundOption') as string}\n }\n openOnFocus\n isLoading={isFetching}\n >\n \n \n \n \n {\n queryClient.ensureQueryData(autoCompleteQueryOptions);\n }}\n />\n \n \n {data.map((product) => (\n \n {product.productDisplayName || product.getProductId()}\n \n ))}\n \n \n \n );\n};\n\nexport default Search;\n","import React, { useEffect, useRef } from 'react';\nimport { Link, useParams } from '@tanstack/react-router';\nimport Sidebar from './Sidebar';\nimport styled from 'styled-components';\nimport { replacePaths } from '@/utils/route';\nimport {\n CREATE_EXHIBITION_ORDER_TAB_PATH,\n SHOW_SUPPORT_MANAGER_ADDITIONAL_PATH,\n SHOW_SUPPORT_MANAGER_PATH,\n} from '@/constants/router';\nimport SimpleBarCore from 'simplebar-core';\nimport classNames from 'classnames';\nimport { ITechnicalService } from '@/model/ITechnicalService';\nimport { Box, Image } from '@chakra-ui/react';\nimport { useProductCategory } from '@/hooks/useProductCategory';\nimport { Nullable } from '../../types/support-types';\n\nconst StyledLink = styled(Link)`\n background: transparent;\n text-decoration: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n padding: 12px 0;\n\n &:first-child {\n margin-top: 12px;\n }\n\n &:last-child {\n margin-bottom: 12px;\n }\n\n transition: all ease-in-out 0.15s;\n\n text-align: center;\n color: #718096;\n\n &:hover,\n &.active {\n color: var(--chakra-colors-brandColor);\n\n > svg {\n fill: var(--chakra-colors-brandColor);\n }\n }\n\n > * {\n z-index: -1;\n }\n\n > svg {\n max-width: 57px;\n max-height: 57px;\n\n margin-left: auto;\n margin-right: auto;\n\n fill: #a0aec0;\n transition: all ease-in-out 0.15s;\n\n position: relative;\n z-index: -1;\n }\n`;\nconst ServiceName = styled.div`\n font-weight: 600;\n font-size: 12px;\n line-height: 16px;\n\n position: relative;\n z-index: -1;\n`;\n\nconst Wrapper = styled.div`\n padding: 0 24px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst BarTitleWrapper = styled(Box)`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 80px;\n font-size: 16px;\n font-weight: 600;\n color: #718096;\n text-align: center;\n border-bottom: 1px solid silver;\n border-top: 1px solid silver;\n box-shadow: 0 1px 2px rgb(0 0 0 / 5%);\n`;\n\ninterface CategoriesSidebarProps {\n categories: ITechnicalService[];\n type?: 'adminPanel' | 'order' | 'additionalPanel';\n barTitle?: Nullable;\n}\n\nconst CategoriesSidebar = ({\n categories,\n type = 'order',\n barTitle,\n}: CategoriesSidebarProps) => {\n const { exhibitionId, service, stand } = useParams({ strict: false }) || {};\n\n const ref = useRef(null);\n const itemRefs = useRef>({});\n const categoryInfo = useProductCategory(categories, service);\n const category = categoryInfo?.category;\n\n useEffect(() => {\n setTimeout(() => {\n const target =\n itemRefs.current[(category?.parent?.id || category?.id) as string];\n\n if (target) {\n const top = target.offsetTop;\n\n ref.current?.getScrollElement()?.scrollTo({\n top: top > 0 ? top : 0,\n behavior: 'smooth',\n });\n }\n }, 300);\n }, [itemRefs, ref, category]);\n\n return (\n \n {barTitle && {barTitle}}\n \n {categories.map(({ category: serviceObject, image }) => {\n const serviceCategory = serviceObject.parent || serviceObject;\n\n const resolvedUlr = serviceCategory.resolveUrl?.();\n\n const pageUrl =\n type === 'adminPanel'\n ? SHOW_SUPPORT_MANAGER_PATH\n : SHOW_SUPPORT_MANAGER_ADDITIONAL_PATH;\n\n const link =\n type === 'order'\n ? replacePaths(CREATE_EXHIBITION_ORDER_TAB_PATH, {\n ':exhibitionId': exhibitionId,\n ':stand': stand,\n ':service': serviceCategory.name,\n })\n : replacePaths(pageUrl, {\n ':page': serviceCategory.name,\n });\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return (\n {\n // itemRefs.current[serviceCategory.id] = el;\n // }}\n id={`sidebar-${serviceCategory.id.toString()}`}\n key={serviceCategory.name}\n to={resolvedUlr || link}\n className={classNames({\n active: category?.parent?.name === serviceCategory.name,\n })}\n >\n {image && typeof image === 'string' ? (\n {image}\n ) : (\n image\n )}\n \n {serviceCategory.displayName ||\n serviceCategory.name ||\n serviceCategory.id}\n \n \n );\n })}\n \n \n );\n};\n\nexport default CategoriesSidebar;\n","import {\n Footer as StyledFooter,\n StyledButton,\n StyledText,\n} from './OrderList.styled';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from '@tanstack/react-router';\nimport { replacePaths } from '@/utils/route';\nimport { CREATE_EXHIBITION_CART_PATH } from '@/constants/router';\nimport { createExhibitionOrderServiceRoute } from '@/features/Routing/protected/exhibitions-by-role';\nimport { useOrder, useOrderTotal } from '@/store/effector/order';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { useOrderCompleteness } from '@/store/effector/order-completeness';\n\nconst Footer = () => {\n const { t } = useTranslation();\n const { items } = useOrder();\n const total = useOrderTotal();\n const { currency } = useExhibition();\n const { isOrderCompleted } = useOrderCompleteness();\n const isDisabled = !items?.length || !isOrderCompleted;\n const navigate = useNavigate();\n const { exhibitionId, stand } = createExhibitionOrderServiceRoute.useParams();\n\n const addToCart = () => {\n const cartPath = replacePaths(CREATE_EXHIBITION_CART_PATH, {\n ':exhibitionId': exhibitionId,\n ':stand': stand,\n });\n\n navigate({\n to: cartPath,\n });\n };\n\n return (\n \n \n {t('summary', {\n cost: t('result-price', {\n cost: (total || 0).toLocaleString(),\n currency,\n }),\n })}\n \n \n {t('checkout')}\n \n \n );\n};\n\nexport default Footer;\n","import { useTranslation } from 'react-i18next';\nimport {\n ExhibitionBox,\n ExhibitionTitle,\n HeaderTitle,\n StyledHeader,\n} from './OrderList.styled';\n\nimport { StandDescription } from '@/pages/Exhibition/shared/StandDescription';\nimport { Box } from '@chakra-ui/react';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { useStand } from '@/store/effector/stand';\n\nconst Header = () => {\n const { t } = useTranslation();\n const { exhibitionName } = useExhibition();\n const { standForOrder, originalBuildingType } = useStand();\n\n return (\n \n \n {exhibitionName}\n \n {standForOrder && (\n \n \n \n )}\n {t('orderedServices')}\n \n );\n};\n\nexport default Header;\n","import styled from 'styled-components';\nimport { Link as RRLink } from '@tanstack/react-router';\n\nexport const Link = styled(RRLink)`\n &:hover {\n text-decoration: underline;\n color: var(--chakra-colors-brandColor);\n }\n`;\n","import { OrderItem } from '@/model/IOrderItem';\nimport { useOrderCompleteness } from '@/store/effector/order-completeness';\nimport {\n Alert,\n AlertDescription,\n AlertProps,\n AlertTitle,\n} from '@chakra-ui/react';\nimport { useParams } from '@tanstack/react-router';\nimport { Link } from '@/components/Sidebar/OrderList/OrderItemDependencyWarning.styled';\nimport { useTranslation } from 'react-i18next';\nimport { ArrowUpIcon } from '@chakra-ui/icons';\nimport { ReactNode } from 'react';\n\nexport const OrderItemDependencyWarning = (\n props: {\n orderItem: OrderItem;\n renderProps?: (node: ReactNode) => JSX.Element;\n } & AlertProps\n) => {\n const { orderItem, renderProps, ...alertProps } = props;\n const { incompleteItemsDueToDependency, isOrderCompleted } =\n useOrderCompleteness();\n const { t } = useTranslation();\n const { exhibitionId, stand } = useParams({ strict: false });\n\n if (isOrderCompleted) {\n return null;\n }\n\n const inTheListOfIncomplete = incompleteItemsDueToDependency.find(\n (incomplete) => incomplete.productId === orderItem.id\n );\n\n if (!inTheListOfIncomplete) {\n return null;\n }\n\n const wrapInto =\n typeof renderProps === 'function' ? renderProps : (el: JSX.Element) => el;\n\n return wrapInto(\n \n \n {t('service-require-dependency')}\n \n \n
      \n {inTheListOfIncomplete.outstandingDeps?.map((pr) => {\n return (\n \n
    • {pr.productDisplayName}
    • \n \n );\n })}\n
    \n
    \n \n );\n};\n","import styled from 'styled-components';\nimport Sidebar from '../Sidebar';\nimport { Button, Text } from '@chakra-ui/react';\n\nexport const StyledSidebar = styled(Sidebar)`\n display: flex;\n flex-direction: column;\n\n max-height: calc(100% - var(--chakra-sizes-nav-bar-height));\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n`;\n\nexport const Footer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const StyledText = styled(Text)`\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n`;\n\nexport const StyledButton = styled(Button)`\n margin-top: 20px;\n width: 100%;\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n\n :hover {\n background-color: var(--chakra-colors-brandColor) !important;\n }\n`;\n\nexport const HeaderTitle = styled.h3`\n font-weight: 600;\n font-size: 18px;\n line-height: 28px;\n\n margin: 20px 0;\n`;\n\nexport const StyledHeader = styled.div`\n margin-top: 10px;\n`;\n\nexport const ExhibitionBox = styled.div`\n background: #e2e8f0;\n border-radius: 6px;\n text-align: left;\n padding: 8px 12px;\n`;\n\nexport const ExhibitionTitle = styled.h4`\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const BoothNumber = styled.h6`\n font-weight: 500;\n font-size: 12px;\n line-height: 16px;\n margin-top: 4px;\n`;\n","import React, { useCallback, useState } from 'react';\nimport { CloseIcon, InfoIcon } from '@chakra-ui/icons';\nimport styled from 'styled-components';\nimport { OrderItem, TemporaryStaffOrderItem } from '@/model/IOrderItem';\nimport { Link, useNavigate } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { getPathByProduct } from '@/utils/route';\nimport classNames from 'classnames';\nimport { viewExhibitionCart } from '@/features/Routing/protected/exhibitions-by-role';\nimport { CATEGORY_TYPES } from '@/constants/categorie';\nimport { TKey } from '@/i18n/types';\nimport { useExhibition } from '@/store/effector/exhibition';\nimport { orderApi } from '@/store/effector/order';\nimport { OrderItemDependencyWarning } from '@/components/Sidebar/OrderList/OrderItemDependencyWarning';\nimport { Tooltip } from '@chakra-ui/react';\n\ninterface RowProps {\n className?: string;\n item: OrderItem | TemporaryStaffOrderItem;\n}\n\nconst Wrapper = styled.div`\n overflow-x: hidden;\n transition: all ease-in-out 0.3s;\n\n transform: translateX(0);\n\n &.showActions {\n transform: translateX(-2rem);\n\n .actions {\n width: 1rem;\n }\n }\n\n &:not(:last-child) .wrapper-inner {\n border-bottom: 1px solid #e2e8f0;\n }\n`;\n\nconst WrapperInner = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: 20px;\n\n padding: 12px 0;\n\n font-size: 12px;\n line-height: 16px;\n`;\n\nconst Name = styled(Link)`\n padding-left: 20px;\n width: 50%;\n font-weight: 400;\n\n &:hover {\n text-decoration: underline;\n color: var(--chakra-colors-brandColor);\n }\n`;\n\nconst Count = styled.div`\n text-align: center;\n width: 20%;\n font-weight: 400;\n white-space: nowrap;\n`;\n\nconst Price = styled.div`\n text-align: right;\n width: 30%;\n\n font-weight: 600;\n white-space: nowrap;\n`;\n\nconst Actions = styled.div`\n text-align: right;\n transition: width ease-in-out 0.3s;\n width: 0;\n`;\n\nconst Button = styled.button`\n transition: all ease-in-out 0.15s;\n\n color: #718096;\n\n &:hover {\n color: var(--chakra-colors-brandColor);\n }\n`;\n\nconst Row: React.FC = ({ item, className }) => {\n const { currency } = useExhibition();\n const { t } = useTranslation();\n const navigate = useNavigate();\n const productPrice = item.total;\n\n const itemName = item.displayName;\n\n const [visible, setVisible] = useState(false);\n\n const { exhibitionId, stand } = viewExhibitionCart.useParams();\n const isBuilding = item.product.category.isBuilding;\n\n const deleteHandler = useCallback(async () => {\n if (isBuilding) {\n await navigate({\n to: `/exhibitions/${exhibitionId}/${stand}/create/${CATEGORY_TYPES.SELECT_BUILDING}`,\n replace: true,\n });\n }\n\n orderApi.removeItem(item);\n }, []);\n\n const unitOfMeasurement = isBuilding\n ? 'sqm'\n : item.product.category.unitOfMeasure;\n\n return (\n <>\n !item.included && setVisible(false)}\n >\n \n \n {itemName}{' '}\n {item.included && (\n \n \n \n )}\n \n !item.included && setVisible(true)}>\n {item.getAmount()}{' '}\n {unitOfMeasurement ? `(${t(unitOfMeasurement as TKey)})` : null}\n \n !item.included && setVisible(true)}>\n {t('result-price', {\n cost: productPrice.toLocaleString(),\n currency,\n })}\n \n\n \n {!item.included && (\n \n )}\n \n \n \n \n \n );\n};\n\nexport default Row;\n","import Row from '@/components/Sidebar/OrderList/Row';\nimport { StyledSidebar } from './OrderList.styled';\nimport Footer from './Footer';\nimport Header from './Header';\nimport { useOrder } from '@/store/effector/order';\n\nconst OrderListSidebar = () => {\n const { items } = useOrder();\n\n return (\n }\n footer={