{"version":3,"file":"site.js","mappings":"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","sources":["webpack://asp.net/webpack/runtime/chunk loaded","webpack://asp.net/webpack/runtime/create fake namespace object","webpack://asp.net/./ReactComponents/AccountWidget.scss?ca84","webpack://asp.net/./ReactComponents/Avatar.scss?c9d1","webpack://asp.net/./ReactComponents/Breadcrumb.scss?fed3","webpack://asp.net/./ReactComponents/ComingSoon.scss?faba","webpack://asp.net/./ReactComponents/EditableImage.scss?4b54","webpack://asp.net/./ReactComponents/LanguageSelector.scss?f105","webpack://asp.net/./ReactComponents/RecentEnvironments.scss?8473","webpack://asp.net/./ReactComponents/SearchBar.scss?8d4e","webpack://asp.net/./ReactComponents/Site/Menu.scss?a355","webpack://asp.net/./TypeScript/Designer/Components/ListGridItem.scss?43b6","webpack://asp.net/./ReactComponents/AccountWidget.tsx","webpack://asp.net/./ReactComponents/Avatar.tsx","webpack://asp.net/./ReactComponents/Breadcrumb.tsx","webpack://asp.net/./ReactComponents/ComingSoon.tsx","webpack://asp.net/./ReactComponents/EditableImage.tsx","webpack://asp.net/./ReactComponents/LanguageSelector.tsx","webpack://asp.net/./ReactComponents/RecentEnvironments.tsx","webpack://asp.net/./ReactComponents/SearchBar.tsx","webpack://asp.net/./ReactComponents/Site/BellIcon.tsx","webpack://asp.net/./ReactComponents/Site/FrontPages/Home.tsx","webpack://asp.net/./ReactComponents/Site/FrontPages/Product.tsx","webpack://asp.net/./ReactComponents/Site/Menu.tsx","webpack://asp.net/./ReactComponents/Site/Pages.tsx","webpack://asp.net/./ReactComponents/Site/Site.tsx","webpack://asp.net/./TypeScript/Api/ActionPermissionService.ts","webpack://asp.net/./TypeScript/Api/CalendarController.ts","webpack://asp.net/./TypeScript/Api/ConnectionController.ts","webpack://asp.net/./TypeScript/Api/ContentController.ts","webpack://asp.net/./TypeScript/Api/ContentLogController.ts","webpack://asp.net/./TypeScript/Api/DataSourceApiController.ts","webpack://asp.net/./TypeScript/Api/EnvironmentApiController.ts","webpack://asp.net/./TypeScript/Api/EnvironmentInvitationApiController.ts","webpack://asp.net/./TypeScript/Api/FileSystemApiController.ts","webpack://asp.net/./TypeScript/Api/FontController.ts","webpack://asp.net/./TypeScript/Api/InteractionController.ts","webpack://asp.net/./TypeScript/Api/JsonApiController.ts","webpack://asp.net/./TypeScript/Api/LicenseController.ts","webpack://asp.net/./TypeScript/Api/MediaApiController.ts","webpack://asp.net/./TypeScript/Api/PageController.ts","webpack://asp.net/./TypeScript/Api/PageFolderApiController.ts","webpack://asp.net/./TypeScript/Api/PlayerApiController.ts","webpack://asp.net/./TypeScript/Api/PlaylistController.ts","webpack://asp.net/./TypeScript/Api/PlaylistFolderApiController.ts","webpack://asp.net/./TypeScript/Api/ResourcePermissionController.ts","webpack://asp.net/./TypeScript/Api/TdmApi.ts","webpack://asp.net/./TypeScript/Api/UserApiController.ts","webpack://asp.net/./TypeScript/Api/UtilController.ts","webpack://asp.net/./TypeScript/Api/VoucherController.ts","webpack://asp.net/./TypeScript/Designer/Components/Thumbnail.tsx","webpack://asp.net/./TypeScript/Designer/Contexts/EnvironmentContext.tsx","webpack://asp.net/./TypeScript/Designer/Contexts/HeaderContext.tsx","webpack://asp.net/./TypeScript/Designer/Contexts/TourContext.tsx","webpack://asp.net/./TypeScript/Designer/RequestCreator.ts","webpack://asp.net/./TypeScript/Designer/Size.ts","webpack://asp.net/./TypeScript/Dto/TdmUrl.ts","webpack://asp.net/./TypeScript/Generated/ActionPermission.ts","webpack://asp.net/./TypeScript/Generated/LicensePermission.ts","webpack://asp.net/./TypeScript/Tdm/Defaults.ts","webpack://asp.net/./TypeScript/Teos/Constants.ts","webpack://asp.net/./TypeScript/Util/Cookie.ts","webpack://asp.net/./TypeScript/Util/KeyValueIndexedDb.ts","webpack://asp.net/./TypeScript/Util/Md5.ts","webpack://asp.net/./TypeScript/Util/SupportedLanguages.ts","webpack://asp.net/./TypeScript/Util/i18next.ts","webpack://asp.net/webpack/bootstrap","webpack://asp.net/webpack/runtime/compat get default export","webpack://asp.net/webpack/runtime/define property getters","webpack://asp.net/webpack/runtime/global","webpack://asp.net/webpack/runtime/harmony module decorator","webpack://asp.net/webpack/runtime/hasOwnProperty shorthand","webpack://asp.net/webpack/runtime/make namespace object","webpack://asp.net/webpack/runtime/node module decorator","webpack://asp.net/webpack/runtime/jsonp chunk loading","webpack://asp.net/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// extracted by mini-css-extract-plugin\nexport default {\"bgColor\":\"bg-color\",\"bgColorAlt\":\"bg-color-alt\",\"bgColorDark\":\"bg-color-dark\",\"colorBlack\":\"#040129\",\"colorBlue\":\"#2118BC\",\"colorRed\":\"#FF0F0F\",\"colorGray\":\"#EAEAED\",\"colorGrayAlt\":\"#D4D3E5\",\"colorDisabled\":\"#C4C4C4\",\"colorSkeleton\":\"#888888\",\"AccountWidgetWrapper\":\"AccountWidgetWrapper__augms\",\"AccountConfig\":\"AccountConfig__KKDjp\",\"AccountActionWrapper\":\"AccountActionWrapper__uD6Kk\",\"AccountActionDropdownBtn\":\"AccountActionDropdownBtn__IzfiP\",\"AccountActionDropdown\":\"AccountActionDropdown__IMgGP\",\"AvatarLarge\":\"AvatarLarge__sG226\",\"AvatarWrapper\":\"AvatarWrapper__sJuDC\",\"UserName\":\"UserName__KNwkW\",\"headerContainer\":\"headerContainer__uTOBx\",\"backdrop\":\"backdrop__w1Bs2\",\"headerWrapper\":\"headerWrapper__Pnlk4\",\"expanded\":\"expanded__iYY2k\",\"expandHandle\":\"expandHandle__GpmUk\"};","// extracted by mini-css-extract-plugin\nexport default {\"environmentFallbackImage\":\"environmentFallbackImage__XVxzY\"};","// extracted by mini-css-extract-plugin\nexport default {\"bgColor\":\"bg-color\",\"bgColorAlt\":\"bg-color-alt\",\"bgColorDark\":\"bg-color-dark\",\"colorBlack\":\"#040129\",\"colorBlue\":\"#2118BC\",\"colorRed\":\"#FF0F0F\",\"colorGray\":\"#EAEAED\",\"colorGrayAlt\":\"#D4D3E5\",\"colorDisabled\":\"#C4C4C4\",\"colorSkeleton\":\"#888888\",\"breadcrumb\":\"breadcrumb__IuHnj\",\"breadcrumbPart\":\"breadcrumbPart__e1Ls_\",\"breadcrumbSeparator\":\"breadcrumbSeparator__uF2RO\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"container__K8jZj\",\"overlay\":\"overlay__ceRrz\",\"text\":\"text__KYbUo\"};","// extracted by mini-css-extract-plugin\nexport default {\"imageWrapper\":\"imageWrapper__si0Nc\",\"overlay\":\"overlay__W9vIS\"};","// extracted by mini-css-extract-plugin\nexport default {\"LanguageSelect\":\"LanguageSelect__Cah9e\"};","// extracted by mini-css-extract-plugin\nexport default {\"bgColor\":\"bg-color\",\"bgColorAlt\":\"bg-color-alt\",\"bgColorDark\":\"bg-color-dark\",\"colorBlack\":\"#040129\",\"colorBlue\":\"#2118BC\",\"colorRed\":\"#FF0F0F\",\"colorGray\":\"#EAEAED\",\"colorGrayAlt\":\"#D4D3E5\",\"colorDisabled\":\"#C4C4C4\",\"colorSkeleton\":\"#888888\",\"recentEnvironments\":\"recentEnvironments__OKzQV\",\"title\":\"title__otpOr\",\"environmentList\":\"environmentList__r23KT\",\"environment\":\"environment__aVf7n\",\"avatar\":\"avatar__YFwAw\",\"name\":\"name__QFB0g\"};","// extracted by mini-css-extract-plugin\nexport default {\"searchBar\":\"searchBar__FoqSA\",\"queryInput\":\"queryInput__VeBo5\",\"searchResultsContainer\":\"searchResultsContainer__o3fYx\",\"searchResult\":\"searchResult__yZbzf\",\"searchResultTitle\":\"searchResultTitle__dubiB\",\"searchResultType\":\"searchResultType__48ZWe\"};","// extracted by mini-css-extract-plugin\nexport default {\"bgColor\":\"bg-color\",\"bgColorAlt\":\"bg-color-alt\",\"bgColorDark\":\"bg-color-dark\",\"colorBlack\":\"#040129\",\"colorBlue\":\"#2118BC\",\"colorRed\":\"#FF0F0F\",\"colorGray\":\"#EAEAED\",\"colorGrayAlt\":\"#D4D3E5\",\"colorDisabled\":\"#C4C4C4\",\"colorSkeleton\":\"#888888\",\"menu\":\"menu__ZbVue\",\"expanded\":\"expanded__U0b1T\",\"menuItems\":\"menuItems__dlcSL\",\"labelWrapper\":\"labelWrapper__yyVwf\",\"current\":\"current__WeH_t\",\"expandButton\":\"expandButton__N9ZqY\",\"logoWrapper\":\"logoWrapper__YZ9hL\",\"logo\":\"logo__mmlne\",\"placeholder\":\"placeholder__riCof\",\"menuSpacer\":\"menuSpacer__oVgxa\",\"badge\":\"badge__bFa7Y\",\"active\":\"active___jwtl\",\"label\":\"label__veRvD\",\"submenus\":\"submenus__AMNIJ\",\"submenu\":\"submenu__JNXxK\",\"submenuContent\":\"submenuContent__uleF2\",\"submenuHeader\":\"submenuHeader__QccM6\",\"submenuItems\":\"submenuItems__fuEbQ\",\"licensePopupContent\":\"licensePopupContent__xo1gW\"};","// extracted by mini-css-extract-plugin\nexport default {\"bgColor\":\"bg-color\",\"bgColorAlt\":\"bg-color-alt\",\"bgColorDark\":\"bg-color-dark\",\"colorBlack\":\"#040129\",\"colorBlue\":\"#2118BC\",\"colorRed\":\"#FF0F0F\",\"colorGray\":\"#EAEAED\",\"colorGrayAlt\":\"#D4D3E5\",\"colorDisabled\":\"#C4C4C4\",\"colorSkeleton\":\"#888888\",\"itemWrapper\":\"itemWrapper__FDgZb\",\"item\":\"item__BViWx\",\"listItem\":\"listItem__aHUFZ\",\"image\":\"image__oDfSp\",\"actions\":\"actions__iRsq6\",\"gridItem\":\"gridItem__SOoqn\",\"titleWrapper\":\"titleWrapper__LNnWk\",\"title\":\"title__WPwv3\",\"nameInputWrapper\":\"nameInputWrapper__A6AXj\",\"skeletonImage\":\"skeletonImage__hA4_f\",\"dragHandle\":\"dragHandle__v11Qn\",\"selected\":\"selected__O_u1K\"};","import React, {useEffect, useRef, useState} from 'react';\r\nimport {UserDto} from \"shared/Generated/Dto/UserDto\";\r\nimport styles from './AccountWidget.scss';\r\nimport {TdmUrl} from \"shared/Dto/TdmUrl\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport Avatar from \"./Avatar\";\r\nimport {Popover} from \"antd\";\r\nimport RecentEnvironments from \"./RecentEnvironments\";\r\nimport SearchBar from \"./SearchBar\";\r\nimport Breadcrumb from \"./Breadcrumb\";\r\nimport {useHeader} from \"shared/Designer/Contexts/HeaderContext\";\r\nimport LanguageSelector from \"sharedReact/LanguageSelector\";\r\nimport {useTour} from \"shared/Designer/Contexts/TourContext\";\r\n\r\nconst AccountWidget: React.FC = () => {\r\n const {header} = useHeader();\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n\r\n }, []);\r\n\r\n return (\r\n <>\r\n {header.enabled && (\r\n <>\r\n {header.compact ? (\r\n <>\r\n
\r\n
\r\n
setOpen(!open)}>\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n {/**/}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n ) : (\r\n <>\r\n
\r\n \r\n \r\n
\r\n {/**/}\r\n \r\n \r\n
\r\n
\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\n//ReactComponentIgnore\r\nexport const AccountActions: React.FC = () => {\r\n const [user, setUser] = useState();\r\n const [isAccountDropdownVisible, setIsAccountDropdownVisible] = useState(false);\r\n const accountActionsRef = useRef(null);\r\n const accountRef = useRef(null);\r\n const {t} = useTranslation();\r\n const {setAccountTarget, isShowingTour} = useTour();\r\n useEffect(() => {\r\n TdmApi.users.getCurrentUser().then(setUser);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if(isShowingTour){\r\n setAccountTarget(accountRef.current);\r\n }\r\n }, [isShowingTour]);\r\n\r\n const toggleAccountDropdown = () => {\r\n setIsAccountDropdownVisible(!isAccountDropdownVisible);\r\n };\r\n\r\n const handleClickOutside = (e: Event) => {\r\n if (accountActionsRef.current && !accountActionsRef.current.contains(e.target)) {\r\n setIsAccountDropdownVisible(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n });\r\n\r\n return (\r\n <>\r\n {user &&\r\n } trigger={\"click\"} destroyTooltipOnHide>\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {user.name}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n \r\n );\r\n};\r\n\r\ninterface accountPopoverProps {\r\n user: UserDto;\r\n}\r\n\r\nconst AccountPopover: React.FC = ({user}) => {\r\n const {t} = useTranslation();\r\n const [environmentsOpen, setEnvironmentsOpen] = useState(false);\r\n const [envSearchFocused, setEnvSearchFocused] = useState(false);\r\n\r\n function onOpenChange(newOpen: boolean) {\r\n if (!envSearchFocused)\r\n setEnvironmentsOpen(newOpen);\r\n }\r\n\r\n return (\r\n
setEnvironmentsOpen(false)}>\r\n
\r\n \r\n
\r\n {user.name}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport function stringToHslColor(str: string, s: number, l: number) {\r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n const h = hash % 360;\r\n return 'hsl(' + h + ', ' + s + '%, ' + l + '%)';\r\n}\r\n\r\nexport default AccountWidget;","import React, {useEffect, useState} from \"react\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\nimport EditableImage from \"./EditableImage\";\r\nimport {stringToHslColor} from \"./AccountWidget\";\r\nimport {UserDto} from \"shared/Generated/Dto/UserDto\";\r\nimport {EnvironmentDto} from \"shared/Generated/Dto/EnvironmentDto\";\r\nimport styles from \"./Avatar.scss\";\r\nimport {Defaults} from \"shared/Tdm/Defaults\";\r\n\r\ninterface AvatarProps {\r\n user?: UserDto;\r\n environment?: EnvironmentDto;\r\n className: string;\r\n onChange?: (event: React.ChangeEvent) => void;\r\n}\r\n\r\nconst Avatar: React.FC = ({user, environment, className, onChange = null}) => {\r\n const [source, setSource] = useState(\"\");\r\n const [name, setName] = useState(\"\");\r\n const [avatarFetched, setAvatarFetched] = useState(false);\r\n\r\n function fetchAvatar(controller: \"users\" | \"environments\", id: string) {\r\n if (!avatarFetched) {\r\n TdmApi[controller].getAvatar(id)\r\n .then(() => setSource(`/${controller}/${id}/avatar/`))\r\n .catch(() => setSource(\"\"))\r\n .finally(() => setAvatarFetched(true));\r\n }\r\n }\r\n\r\n function refresh() {\r\n if (user) {\r\n fetchAvatar(\"users\", user.id);\r\n setName(user.name);\r\n } else if (environment) {\r\n fetchAvatar(\"environments\", environment.id);\r\n setName(environment.name);\r\n } else\r\n console.error(\"You must set either an environment or a user\");\r\n }\r\n\r\n useEffect(refresh, [user, environment]);\r\n\r\n let initials = \"\";\r\n let bgColor = \"\";\r\n if (name) {\r\n bgColor = stringToHslColor(name ?? \"\", 80, 60);\r\n const names = name.replace(/\\s*$/g, \"\").split(\" \");\r\n initials = names.map((n, index) => index === 0 || index === names.length - 1 ? n[0] : \"\").join('').toUpperCase().substring(0, 2);\r\n }\r\n\r\n function FallbackSvg() {\r\n if (user)\r\n return (\r\n \r\n \r\n \r\n {initials}\r\n \r\n \r\n );\r\n else\r\n return (\r\n
\r\n {\"logo\"}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {onChange === null\r\n ? source ? \"Avatar\"/ : \r\n : }\r\n imageClassName={className}/>\r\n }\r\n \r\n );\r\n};\r\n\r\nexport default Avatar;","import React, {Fragment, useEffect, useState} from \"react\";\r\nimport styles from \"./Breadcrumb.scss\";\r\nimport {useEnvironment} from \"shared/Designer/Contexts/EnvironmentContext\";\r\nimport {useHeader} from \"shared/Designer/Contexts/HeaderContext\";\r\n\r\n\r\nconst Breadcrumb: React.FC = () => {\r\n const {breadcrumb} = useHeader();\r\n const {environment} = useEnvironment();\r\n const [parts, setParts] = useState([]);\r\n\r\n useEffect(() => {\r\n if (breadcrumb) {\r\n if (breadcrumb.base === \"currentEnvironment\" && environment) {\r\n const newParts = breadcrumb.parts.map(part => ({path: `/${environment.path}/${part.path}`, name: part.name}));\r\n newParts.unshift({path: `/${environment.path}`, name: environment.name});\r\n setParts(newParts);\r\n } else {\r\n setParts(breadcrumb.parts);\r\n }\r\n }\r\n }, [breadcrumb, environment]);\r\n\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n\r\nexport default Breadcrumb;\r\n","import React, {ReactNode, useState} from 'react';\r\nimport styles from './ComingSoon.scss';\r\nimport {t} from \"i18next\";\r\n\r\ninterface props {\r\n children: ReactNode\r\n functionalityName?: string\r\n}\r\n\r\nconst ComingSoon: React.FC = ({children, functionalityName}) => {\r\n const [isHovered, setHovered] = useState(false);\r\n\r\n return (\r\n
setHovered(true)}\r\n onMouseLeave={() => setHovered(false)}>\r\n {isHovered &&\r\n
\r\n

{t(\"{{functionality}} Coming Soon\", {functionality: functionalityName})}

\r\n
\r\n }\r\n {children}\r\n
\r\n );\r\n};\r\n\r\nexport default ComingSoon;","import React, {useEffect, useState} from \"react\";\r\nimport styles from \"./EditableImage.scss\";\r\nimport {useTranslation} from \"react-i18next\";\r\n\r\ninterface EditableImageProps {\r\n name: string;\r\n value: string;\r\n onChange: (event: React.ChangeEvent) => void;\r\n fallbackElement?: React.ReactNode;\r\n imageClassName?: string;\r\n}\r\n\r\nconst EditableImage: React.FC = ({\r\n name,\r\n value = \"\",\r\n onChange,\r\n fallbackElement = null,\r\n imageClassName = \"\"\r\n }) => {\r\n const [source, setSource] = useState(value ?? \"\");\r\n const {t} = useTranslation();\r\n\r\n useEffect(() => {\r\n setSource(value);\r\n }, [value]);\r\n\r\n function onFileSelected(event: React.ChangeEvent) {\r\n const files = event.target.files;\r\n if (files.length > 0) {\r\n setSource(URL.createObjectURL(files[0]));\r\n onChange(event);\r\n }\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default EditableImage;","import React, {useState} from \"react\";\r\nimport styles from \"./LanguageSelector.scss\";\r\nimport {SupportedLanguages} from \"shared/Util/SupportedLanguages\";\r\nimport i18next from \"shared/Util/i18next\";\r\nimport ReactFlagsSelect from \"react-flags-select\";\r\n\r\n\r\nconst LanguageSelector: React.FC = () => {\r\n const [selected, setSelected] = useState(SupportedLanguages.getFlagCodeByCountyCode(i18next.language));\r\n const changeLanguages = (flagCode: string) => {\r\n i18next.changeLanguage(SupportedLanguages.getLanguageCodeByFlagCode(flagCode)).then(() => {\r\n setSelected(flagCode);\r\n });\r\n };\r\n\r\n return (\r\n changeLanguages(flagCode)}\r\n />\r\n );\r\n};\r\n\r\nexport default LanguageSelector;","import React, {useEffect, useState} from \"react\";\r\nimport styles from \"./RecentEnvironments.scss\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {EnvironmentDto} from \"shared/Generated/Dto/EnvironmentDto\";\r\nimport {Cookie} from \"shared/Util/Cookie\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\nimport Avatar from \"./Avatar\";\r\nimport {UserDto} from \"shared/Generated/Dto/UserDto\";\r\nimport Md5 from \"shared/Util/Md5\";\r\n\r\ninterface RecentEnvironmentsProps {\r\n onSearchFocusChanged: (focused: boolean) => void;\r\n}\r\n\r\n//ReactComponentIgnore\r\nconst RecentEnvironments: React.FC = ({onSearchFocusChanged}) => {\r\n const [user, setUser] = useState();\r\n const [environments, setEnvironments] = useState([]);\r\n const [query, setQuery] = useState(\"\");\r\n const {t} = useTranslation();\r\n\r\n let searchTimeout: NodeJS.Timeout = null;\r\n useEffect(() => {\r\n TdmApi.users.getCurrentUser().then(user => {\r\n setUser(user);\r\n setFromCookie(user);\r\n });\r\n\r\n }, []);\r\n\r\n function setFromCookie(user: UserDto) {\r\n const userEmailDigest = Md5.hashToBase64(user.emailAddress)\r\n .replace(/\\+/g, \"-\")\r\n .replace(/\\//g, \"_\")\r\n .replace(/=/g, \"\");\r\n //AFAIK, -_ are both cookie-safe. /= definitely aren't (C# will complain), so let's not use that dialect of base64\r\n\r\n const recentEnvironments = Cookie.getCookie(\"recentEnvironmentIdentifiers_\" + userEmailDigest)?.split(\",\") ?? [];\r\n const environmentPromises = recentEnvironments.map(environmentId => TdmApi.environments.get(environmentId));\r\n Promise.allSettled(environmentPromises).then((results) => {\r\n const successResults = results.filter(result => result.status === \"fulfilled\") as PromiseFulfilledResult[];\r\n setEnvironments(successResults.map(result => result.value));\r\n });\r\n }\r\n\r\n function onChange(event: React.ChangeEvent) {\r\n if (event.currentTarget.value === \"\")\r\n setFromCookie(user);\r\n else {\r\n if (searchTimeout !== null) {\r\n clearTimeout(searchTimeout);\r\n searchTimeout = null;\r\n }\r\n\r\n searchTimeout = setTimeout(() => {\r\n TdmApi.environments.search(event.target.value).then(setEnvironments);\r\n searchTimeout = null;\r\n }, 400);\r\n }\r\n setQuery(event.currentTarget.value);\r\n }\r\n\r\n\r\n return (\r\n
event.stopPropagation()}>\r\n onSearchFocusChanged(true)} onBlur={() => onSearchFocusChanged(false)}/>\r\n {query === \"\" ? t(\"Recent environments\") : t(\"Search results\")}\r\n
\r\n {environments.length > 0\r\n ? environments.map(environment =>\r\n \r\n \r\n {environment.name}\r\n \r\n )\r\n : {t(\"No environments found\")}\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default RecentEnvironments;","import React, {useEffect, useRef, useState} from \"react\";\r\nimport styles from \"./SearchBar.scss\";\r\nimport {SearchResultDto} from \"shared/Generated/Dto/SearchResultDto\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\nimport {HttpConnection} from \"shared/Designer/RequestCreator\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport Thumbnail from \"shared/Designer/Components/Thumbnail\";\r\nimport {useTour} from \"shared/Designer/Contexts/TourContext\";\r\n\r\nconst SearchBar: React.FC = () => {\r\n const [query, setQuery] = useState(\"\");\r\n const [searching, setSearching] = useState(false);\r\n const [results, setResults] = useState([]);\r\n const {setSearchTarget, isShowingTour} = useTour();\r\n const {t} = useTranslation();\r\n const environment = location.pathname != '/environments' ? HttpConnection.environmentPath : null;\r\n const searchRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if(isShowingTour){\r\n setSearchTarget(searchRef.current);\r\n }\r\n }, [isShowingTour]);\r\n function onChanged(e: React.ChangeEvent) {\r\n const query = e.target.value;\r\n\r\n setQuery(query);\r\n setSearching(true);\r\n\r\n TdmApi.search(query).then(results => {\r\n console.log(results);\r\n setSearching(false);\r\n setResults(results);\r\n });\r\n }\r\n\r\n if (!environment) return <>;\r\n\r\n return
\r\n onChanged(e)}\r\n />\r\n\r\n {query &&\r\n
\r\n {(results && results.length > 0)\r\n ? results.map(result => )\r\n : searching ?

Searching...

\r\n :

No results found...

}\r\n
\r\n }\r\n
;\r\n};\r\n\r\ninterface SearchResultParameters {\r\n result: SearchResultDto;\r\n}\r\n\r\nfunction urlForSearchResult(result: SearchResultDto) {\r\n const env = HttpConnection.environmentPath;\r\n switch (result.type) {\r\n case \"Page\":\r\n return `/${env}/pages/${result.id}`;\r\n case \"Playlist\":\r\n return `/${env}/playlists/${result.id}`;\r\n case \"Player\":\r\n return `/${env}/players/${result.id}`;\r\n case \"PlayerGroup\":\r\n return `/${env}/playerGroups/${result.id}`;\r\n case \"DataSource\":\r\n return `/${env}/dataSources/${result.id}`;\r\n case \"FontFamily\":\r\n return `/${env}/fontFamilies/${result.id}`;\r\n }\r\n}\r\n\r\nconst SearchResult: React.FC = ({result}) => {\r\n return
\r\n \r\n {/*placeholder image*/}\r\n
\r\n {result.name}\r\n {result.type}\r\n
\r\n
;\r\n};\r\n\r\nexport default SearchBar;","import React from 'react';\r\n\r\ninterface bellProps {\r\n width?: string | number,\r\n height?: string | number,\r\n animationSpeed?: string | number,\r\n color?: string,\r\n animate?: boolean,\r\n active?: boolean,\r\n style?: React.CSSProperties,\r\n other?: React.SVGProps\r\n}\r\n\r\nfunction BellIcon(props: bellProps) {\r\n const {\r\n width = '40px',\r\n height = '40px',\r\n animationSpeed = '0.3',\r\n color = '#000',\r\n animate,\r\n active,\r\n style,\r\n ...other\r\n }: bellProps = props;\r\n\r\n return (\r\n \r\n \r\n \r\n { active\r\n ? \r\n { animate\r\n ? \r\n : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n : null\r\n }\r\n\r\n \r\n { animate\r\n ? \r\n : null\r\n }\r\n\r\n \r\n { animate\r\n ? \r\n : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport default BellIcon;","import {addPageFunction} from '../Pages';\r\nimport $ from 'jquery';\r\n\r\naddPageFunction('home', () => {\r\n const featureContainer = document.querySelector('.feature-container');\r\n const focusStamp = document.querySelector('.stamp.focus');\r\n const elementsToObserve = document.querySelectorAll('.template-information');\r\n const focusStampParent = focusStamp?.parentNode as HTMLElement;\r\n\r\n // const iso0 = new Isotope('.feature-group', {\r\n // itemSelector: '.feature-item',\r\n // stamp: '.stamp',\r\n // layoutMode: 'masonry',\r\n // masonry: {\r\n // columnWidth: '.grid-sizer',\r\n // gutter: '.gutter-sizer'\r\n // }\r\n // });\r\n\r\n\r\n if (featureContainer) {\r\n featureContainer.addEventListener('click', (event) => {\r\n const target = event.target as HTMLElement;\r\n if (target.classList.contains('feature-item') && !target.classList.contains('focused')) {\r\n const curFocus = focusStamp?.querySelector('.feature-item') as HTMLElement;\r\n if (curFocus) {\r\n curFocus.classList.remove('focused');\r\n target.classList.add('focused');\r\n focusStampParent?.insertBefore(target, curFocus.nextSibling);\r\n focusStamp?.prepend(target);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // new Isotope(\"#featured-clients .image-container-1\", {\r\n // itemSelector: '.image-tile',\r\n // layoutMode: 'fitRows',\r\n // originLeft: false,\r\n // originTop: false,\r\n // });\r\n // new Isotope(\"#featured-clients .image-container-2\", {\r\n // itemSelector: '.image-tile',\r\n // layoutMode: 'fitRows',\r\n // originLeft: false,\r\n // });\r\n\r\n // observe when elements come into viewport, and toggle class to start animations\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(({isIntersecting, target}) => {\r\n if (isIntersecting) {\r\n if (target.parentElement?.classList.contains('reverse')) {\r\n target.classList.add(...['fade-in-right']);\r\n } else {\r\n target.classList.add(...['fade-in-left']);\r\n }\r\n } else {\r\n target.classList.remove(...['fade-in-right', 'fade-in-left']);\r\n }\r\n });\r\n });\r\n\r\n for (const el of elementsToObserve) {\r\n observer.observe(el);\r\n }\r\n\r\n const testimonialCarousel = document.getElementById('testimonial-carousel') as Element;\r\n const quoteImages = document.getElementsByClassName('quote-image');\r\n testimonialCarousel.addEventListener('slide.bs.carousel', event => {\r\n quoteImages[event.from].classList.remove('active');\r\n quoteImages[event.to].classList.add('active');\r\n });\r\n\r\n\r\n const industriesMenu = $(\"#industries .menu\");\r\n const industriesContent = $(\"#industries .content\");\r\n industriesMenu.on('click', '.menu-item:not(.active)', ev => {\r\n const target = $(ev.target).data('target');\r\n $(industriesContent).find(target).addClass('active')\r\n .siblings().removeClass('active');\r\n\r\n $(ev.target).addClass('active').siblings().removeClass('active');\r\n });\r\n});","import {addPageFunction} from '../Pages';\r\nimport $ from 'jquery';\r\n\r\naddPageFunction('product', () => {\r\n const industriesMenu = $(\"#industries .menu\");\r\n const industriesContent = $(\"#industries .content\");\r\n const elementsToObserve = document.querySelectorAll('.template-information');\r\n\r\n industriesMenu.on('click', '.menu-item:not(.active)', ev => {\r\n const target = $(ev.target).data('target');\r\n $(industriesContent).find(target).addClass('active')\r\n .siblings().removeClass('active');\r\n\r\n $(ev.target).addClass('active').siblings().removeClass('active');\r\n });\r\n\r\n\r\n // observe when elements come into viewport, and toggle class to start animations\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(({isIntersecting, target}) => {\r\n if (isIntersecting) {\r\n if (target.parentElement?.classList.contains('reverse')) {\r\n target.classList.add(...['fade-in-right']);\r\n } else {\r\n target.classList.add(...['fade-in-left']);\r\n }\r\n } else {\r\n target.classList.remove(...['fade-in-right', 'fade-in-left']);\r\n }\r\n });\r\n });\r\n\r\n for (const el of elementsToObserve) {\r\n observer.observe(el);\r\n }\r\n\r\n const testimonialCarousel = document.getElementById('testimonial-carousel') as Element;\r\n const quoteImages = document.getElementsByClassName('quote-image');\r\n testimonialCarousel.addEventListener('slide.bs.carousel', event => {\r\n quoteImages[event.from].classList.remove('active');\r\n quoteImages[event.to].classList.add('active');\r\n });\r\n\r\n const videoElements = document.getElementsByClassName('video-container');\r\n for (const el of videoElements) {\r\n const videoEl = el.getElementsByTagName(\"video\").item(0);\r\n const playButton = el.getElementsByClassName(\"play-button\").item(0);\r\n playButton.addEventListener('click', () => handlePlayButton(videoEl, playButton), false);\r\n }\r\n\r\n function handlePlayButton(videoEl, playButton) {\r\n if (videoEl.paused) {\r\n playVideo(videoEl, playButton);\r\n } else {\r\n videoEl.pause();\r\n playButton.classList.remove(\"playing\");\r\n }\r\n }\r\n\r\n async function playVideo(videoEl, playButton) {\r\n try {\r\n playButton.classList.add(\"playing\");\r\n await videoEl.play();\r\n } catch (err) {\r\n console.log(err);\r\n playButton.classList.remove(\"playing\");\r\n }\r\n }\r\n});","import React, {useEffect, useState} from \"react\";\r\nimport {HttpConnection} from \"shared/Designer/RequestCreator\";\r\nimport styles from \"./Menu.scss\";\r\nimport {useTranslation} from \"react-i18next\";\r\nimport Avatar from \"sharedReact/Avatar\";\r\nimport {EnvironmentDto} from \"shared/Generated/Dto/EnvironmentDto\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\nimport {ActionPermission} from \"shared/Generated/ActionPermission\";\r\nimport ReactDOMClient from \"react-dom/client\";\r\nimport ComingSoon from \"sharedReact/ComingSoon\";\r\nimport {Defaults} from \"shared/Tdm/Defaults\";\r\nimport {Cookie} from \"shared/Util/Cookie\";\r\nimport {LicensePermission} from \"shared/Generated/LicensePermission\";\r\nimport {Badge, Popover} from \"antd\";\r\nimport {toDate} from \"date-fns\";\r\nimport BellIcon from \"sharedReact/Site/BellIcon\";\r\n\r\n\r\ntype MenuItem = {\r\n name: string;\r\n title: string;\r\n icon?: string;\r\n items: {\r\n name: string,\r\n path: string,\r\n contains?: string[],\r\n permissions?: ActionPermission[],\r\n licensePermissions?: LicensePermission[]\r\n }[];\r\n path?: string;\r\n comingSoon?: boolean;\r\n}\r\n\r\nconst menuItemsOutsideEnvironment: MenuItem[] = [\r\n {\r\n name: \"dashboard\",\r\n title: \"My Environments\",\r\n icon: \"application\",\r\n path: \"environments\",\r\n items: []\r\n },\r\n {\r\n name: \"licensePlan\",\r\n title: \"License plan\",\r\n icon: \"licensing\",\r\n path: \"licenses/plan\",\r\n items: []\r\n }\r\n];\r\n\r\nconst menuItemsInsideEnvironment: MenuItem[] = [\r\n {\r\n name: \"dashboard\",\r\n title: \"Dashboard\",\r\n icon: \"application\",\r\n path: \"dashboard\",\r\n items: []\r\n },\r\n {\r\n name: \"designer\",\r\n title: \"Designer\",\r\n icon: \"palette\",\r\n items: [\r\n {name: \"Players\", path: \"players\", contains: [\"playerGroups\"], permissions: [ActionPermission.PlayerOverview], licensePermissions: [LicensePermission.PlaySignage]},\r\n {name: \"Pages\", path: \"pages\", permissions: [ActionPermission.PageOverview], licensePermissions: [LicensePermission.PlaySignage]},\r\n {name: \"Playlists\", path: \"playlists\", permissions: [ActionPermission.PlaylistOverview], licensePermissions: [LicensePermission.PlaySignage]},\r\n {name: \"Media\", path: \"media\", permissions: [ActionPermission.MediaOverview], licensePermissions: [LicensePermission.PlaySignage]},\r\n {name: \"Schedules\", path: \"schedules\", permissions: [ActionPermission.ScheduleOverview], licensePermissions: [LicensePermission.PlaySignage]},\r\n {\r\n name: \"Fonts\",\r\n path: \"fontFamilies\",\r\n permissions: [ActionPermission.FontOverview],\r\n licensePermissions: [LicensePermission.CustomFonts]\r\n },\r\n {\r\n name: \"Content log\",\r\n path: \"contentLog\",\r\n permissions: [ActionPermission.ContentLog],\r\n licensePermissions: [LicensePermission.ContentLog]\r\n }\r\n ]\r\n },\r\n {\r\n name: \"interactions\",\r\n title: \"Interactions\",\r\n icon: \"data\",\r\n items: [\r\n {name: \"Data sources\", path: \"dataSources\", permissions: [ActionPermission.DataSourceOverview], licensePermissions: [LicensePermission.PlaySignage]},\r\n {\r\n name: \"Interactions\",\r\n path: \"interactions\",\r\n permissions: [ActionPermission.InteractionOverview],\r\n licensePermissions: [LicensePermission.Interactivity]\r\n },\r\n ],\r\n },\r\n /*{\r\n name: \"roombooking\",\r\n title: \"Room booking\",\r\n icon: \"cube\",\r\n items: [],\r\n comingSoon: true\r\n }*/\r\n];\r\n\r\n//ReactComponentIgnore\r\nexport const MenuWrapper: React.FC = () => {\r\n const [menuItems, setMenuItems] = useState(menuItemsOutsideEnvironment);\r\n const [expandedSubmenu, setExpandedSubmenu] = useState(\"\");\r\n const [expandedMenu, setExpandedMenu] = useState(\"\");\r\n const [environment, setEnvironment] = useState(null);\r\n const {t} = useTranslation();\r\n const [licenseNotification, setLicenseNotification] = useState<{title: React.ReactNode, description: React.ReactNode, icon: React.ReactNode, isDemo?: boolean}>(null);\r\n \r\n const getEnvironmentCookie = () => {\r\n return Cookie.getCookie(\"lastVisitedEnvironmentPath\");\r\n };\r\n\r\n useEffect(() => {\r\n if(environment != null)\r\n setMenuItems(menuItemsInsideEnvironment);\r\n else\r\n setMenuItems(menuItemsOutsideEnvironment);\r\n }, [environment]);\r\n\r\n useEffect(() => {\r\n const environmentCookie = getEnvironmentCookie();\r\n if(environmentCookie != null) {\r\n TdmApi.environments.getByPath(environmentCookie)\r\n .then((env) => {\r\n setEnvironment(env);\r\n }).catch(() => {\r\n setEnvironment(null);\r\n });\r\n } else {\r\n setEnvironment(null);\r\n }\r\n \r\n TdmApi.licenses.getLicensePlan().then(plan => {\r\n if(plan != null) {\r\n const renewalDate: Date = toDate(plan.nextRenewal);\r\n const now = new Date();\r\n const difference = renewalDate.getTime() - now.getTime();\r\n const differenceInDays = difference / (1000 * 3600 * 24);\r\n \r\n //todo - a more solid method to check if plan is a demo plan\r\n const isDemo = [\"TDM-ENT-D\", \"TDM-ESS-D\", \"TDM-SMB-D\"].includes(plan.sku);\r\n \r\n if(renewalDate < now) {\r\n setLicenseNotification({\r\n isDemo: isDemo,\r\n title: t(\"Your current license plan has expired.\"),\r\n icon: ,\r\n description: t(\"Visit your license plan overview for more information and how to extend or upgrade your current license plan!\")\r\n });\r\n } else {\r\n \r\n const status = {\r\n isDemo: isDemo,\r\n title: t(\"Your license will expire in {{days}} days\", {days: Math.round(differenceInDays)}),\r\n icon: ,\r\n description: t(\"Visit your license plan overview for more information, to upgrade, or to expand your license plan with additional devices or modules\")\r\n };\r\n \r\n setLicenseNotification(status);\r\n }\r\n } else {\r\n setLicenseNotification({\r\n isDemo: false,\r\n title: t(\"Unlock the full capabilities of TDM\"),\r\n icon: ,\r\n description: t(\"Configure your own license plan and get started with an environment of your own!\")\r\n });\r\n }\r\n });\r\n }, []);\r\n\r\n function isMenuItemActive(item: MenuItem): boolean {\r\n return item.items.some(x => isSubmenuLinkCurrent(x));\r\n }\r\n\r\n function menuItemAllowed(item: MenuItem): boolean {\r\n const allowed = !item.items || item.items.length == 0 || item.items.some(x => subMenuItemAllowed(x));\r\n return allowed;\r\n }\r\n\r\n function subMenuItemAllowed(item: { permissions?: ActionPermission[], licensePermissions?: LicensePermission[] }): boolean {\r\n if (item.permissions && item.permissions.length > 0 && !item.permissions.some(perm => TdmApi.allowed(perm)))\r\n return false;\r\n\r\n if (item.licensePermissions && item.licensePermissions.length > 0 && !item.licensePermissions.some(perm => TdmApi.allowedByLicense(perm)))\r\n return false;\r\n \r\n return true;\r\n }\r\n\r\n function isSubmenuLinkCurrent(item: { name: string, path: string, contains?: string[] }): boolean {\r\n const href = `/${HttpConnection.environmentPath}/${item.path}`;\r\n if (location.pathname.startsWith(href)) return true;\r\n return item.contains?.some(path => location.pathname.startsWith(`/${HttpConnection.environmentPath}/${path}`)) ?? false;\r\n }\r\n\r\n const handleSubmenuClick = (event: React.MouseEvent) => {\r\n const submenuName = event.currentTarget.dataset.submenu;\r\n if (submenuName) {\r\n const menu = menuItems.find(x => x.name === submenuName);\r\n if (menu && menu.items.length > 0) {\r\n setExpandedSubmenu((prevState) => (prevState === submenuName ? \"\" : submenuName));\r\n } else {\r\n setExpandedSubmenu(\"\");\r\n }\r\n }\r\n };\r\n const expandMenu = (event: React.MouseEvent) => {\r\n const menu = event.currentTarget.dataset.menu;\r\n if (menu) {\r\n setExpandedMenu((prevState) => (prevState === menu ? \"\" : menu));\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {environment\r\n ? \r\n : \r\n \"logo\"\r\n \r\n }\r\n
\r\n
\r\n {menuItems.map((menu, index) => menuItemAllowed(menu) &&\r\n (menu.comingSoon ?\r\n \r\n \r\n \r\n
\r\n {t(menu.title)}\r\n
\r\n \r\n
\r\n :\r\n \r\n \r\n
\r\n {t(menu.title)}\r\n
\r\n
\r\n ))}\r\n\r\n
\r\n \r\n {/**/}\r\n {/* */}\r\n {/*
{t(\"Deleted items\")}
*/}\r\n {/*
*/}\r\n {environment && (\r\n licenseNotification == null ? (\r\n \r\n \r\n \r\n
{t(\"My license\")}
\r\n
\r\n
\r\n ) : (\r\n {licenseNotification.description}
} \r\n arrow={true}\r\n >\r\n \r\n \r\n \r\n
{t(\"My license\")}
\r\n
\r\n
\r\n \r\n ))}\r\n {/**/}\r\n {/* */}\r\n {/*
{t(\"Support center\")}
*/}\r\n {/*
*/}\r\n \r\n \r\n
{t(\"Log out\")}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {menuItems\r\n .filter(menu => menu.items.length > 0)\r\n .map((menu, index) => \r\n \r\n
\r\n
\r\n

{menu.title}

\r\n
\r\n
    \r\n {menu.items.map((item, idx) =>\r\n subMenuItemAllowed(item) && (\r\n \r\n {item.name}\r\n \r\n )\r\n )}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst MenuRenderer = {\r\n render: () => {\r\n const menuWrapper = document.getElementById('menu-wrapper') as HTMLDivElement;\r\n if (menuWrapper != null) {\r\n const wrapperContainer = ReactDOMClient.createRoot(menuWrapper);\r\n wrapperContainer.render();\r\n }\r\n }\r\n};\r\n\r\nexport {MenuRenderer};","const pageFunctions: Record void> = {};\r\nexport const addPageFunction = (pageName: string, pageFunction: () => void) => {\r\n pageFunctions[pageName] = pageFunction;\r\n};\r\nexport const getPageFunction = (pageName: string) => {\r\n return pageFunctions[pageName];\r\n};","import {MenuRenderer} from './Menu';\r\nimport {getPageFunction} from './Pages';\r\n\r\nfunction executePageFunction() {\r\n // @ts-expect-error ignore the getCurrentPageName function not being defined, as it is implemented in the layout\r\n const currentPage = getCurrentPageName && getCurrentPageName();\r\n if (currentPage != \"\") {\r\n const curMenuItem = document.querySelectorAll(\".header .menu-item[data-page=\" + currentPage + \"]\");\r\n if (curMenuItem != null)\r\n curMenuItem.forEach(x => x.classList.add(\"active\"));\r\n\r\n const pageFunction = getPageFunction(currentPage);\r\n if (pageFunction) {\r\n pageFunction();\r\n }\r\n }\r\n}\r\n\r\n\r\nMenuRenderer.render();\r\ndocument.addEventListener('DOMContentLoaded', executePageFunction);\r\n","import {ActionPermission} from \"shared/Generated/ActionPermission\";\r\n\r\nexport class ActionPermissionService {\r\n private static permissions: Uint8Array;\r\n\r\n private static allPermissions?: Record;\r\n\r\n public async fetchAllPermissions(): Promise {\r\n if (!ActionPermissionService.allPermissions) {\r\n ActionPermissionService.allPermissions = await fetch(\"/users/json/allActionPermissions\").then(response => {\r\n if (!response.ok) {\r\n throw new Error(response.statusText);\r\n }\r\n return response.json() as Promise>;\r\n });\r\n }\r\n }\r\n\r\n public allowedForEnvironment(permission: ActionPermission, environment: string) {\r\n if (!ActionPermissionService.allPermissions) {\r\n throw new Error(\"Call fetchAllPermissions before calling allowedForEnvironment\");\r\n }\r\n\r\n const permString = ActionPermissionService.allPermissions?.[environment];\r\n if (!permString) return false;\r\n\r\n const perms = Uint8Array.from(atob(permString), c => c.charCodeAt(0));\r\n\r\n return this.hasActionPermission(perms, permission);\r\n }\r\n\r\n public allowed(permission: ActionPermission) {\r\n if (!ActionPermissionService.permissions) {\r\n const fromDom = document.querySelector(\"#react-component-user-action-permissions\") as HTMLInputElement;\r\n\r\n if (!fromDom) {\r\n console.log(\"Action permissions checked, but page has no input with the user's permissions\");\r\n return false;\r\n }\r\n\r\n ActionPermissionService.permissions = Uint8Array.from(atob(fromDom.value), c => c.charCodeAt(0));\r\n }\r\n\r\n return this.hasActionPermission(ActionPermissionService.permissions, permission);\r\n }\r\n\r\n private hasActionPermission(set: Uint8Array, action: ActionPermission): boolean {\r\n //Permissions are stored as an \"array of booleans\", where the int value of the permission enum represent the bit\r\n // offset in this array. It's not a perfectly efficient system, as we deliberately leave gaps in the enum between\r\n // sections for future expansion, but I think you'll agree that this is way more efficient than representing each\r\n // permission as a boolean in JSON.\r\n\r\n const offset = action as number;\r\n const byteOffset = ~~(offset / 8);\r\n const bitOffset = offset % 8;\r\n\r\n const byte = set[byteOffset];\r\n return (byte & (1 << bitOffset)) != 0;\r\n }\r\n}","import {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {CalendarDto} from \"shared/Generated/Dto/DataSources/CalendarDto\";\r\n\r\nexport class CalendarController {\r\n private readonly route = `calendars/json`;\r\n\r\n public getCalendars(connectionId: string): Promise {\r\n return HttpConnection.getAsync(connectionId, `${this.route}/GetCalendars`) as Promise;\r\n }\r\n}","import {JsonApiController} from \"./JsonApiController\";\r\nimport {ConnectionDto} from \"shared/Generated/Dto/Connections/ConnectionDto\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {ConnectionsResultDto} from \"shared/Generated/Dto/ConnectionsResultDto\";\r\n\r\nexport class ConnectionController extends JsonApiController {\r\n public constructor() {\r\n super(\"connections\");\r\n }\r\n\r\n public async getStorageProviders(): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/GetStorageProviders`) as ConnectionDto[];\r\n }\r\n\r\n public async createBlueAndRedConnection(): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/CreateBlueAndRedConnection`) as ConnectionDto;\r\n }\r\n\r\n public async GetConnectedServicesFromConnection(connectionId: string): Promise {\r\n return await HttpConnection.getAsync(connectionId, `${this.route}/GetConnectedServicesFromConnection`) as ConnectionsResultDto[];\r\n }\r\n\r\n public async getOAuthLogInURl(selectedType: ConnectionDto[\"$type\"], extraOptions?: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/getOauthLoginUrl?redirectUrl=${encodeURI(window.location.href.replace(\"#_=_\", \"\"))}&environmentPath=${HttpConnection.environmentPath}&typeName=${selectedType}${extraOptions ? `&extraInfo=${extraOptions}` : \"\"}`, false) as string;\r\n }\r\n \r\n public async login(urlParams: string): Promise {\r\n return await HttpConnection.getAsync(null, `connections/login${urlParams}`, false) as string\r\n }\r\n}\r\n\r\n","import {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {PlayableContentDto} from \"shared/Generated/Dto/PlayableContentDto\";\r\n\r\n\r\nexport class ContentController {\r\n protected readonly route: string;\r\n\r\n constructor() {\r\n this.route = \"Content\";\r\n }\r\n\r\n public async get(contentId: string): Promise {\r\n return await HttpConnection.getAsync(contentId, `${this.route}/json`);\r\n }\r\n \r\n public async getThumbnail(contentId: string, lastUpdatedTime: number): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/getThumbnail/${encodeURIComponent(contentId)}?lastUpdated=${lastUpdatedTime}`);\r\n }\r\n \r\n public thumbnailPath(contentId: string, lastUpdatedTime: number): string {\r\n return HttpConnection.createUrl(null, `${this.route}/getThumbnail/${encodeURIComponent(contentId)}?lastUpdated=${lastUpdatedTime}`);\r\n }\r\n}","import {ContentLogQueryDto} from \"shared/Generated/Dto/ContentLogQueryDto\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {ContentLogQueryResultDto} from \"shared/Generated/Dto/ContentLogQueryResultDto\";\r\n\r\nexport class ContentLogController {\r\n public async filterValues(): Promise {\r\n return HttpConnection.getAsync(null, \"contentLog/json/filterValues\", true);\r\n }\r\n\r\n public async query(query: ContentLogQueryDto): Promise {\r\n return HttpConnection.postAsync(query, \"contentLog/json/query\", true);\r\n }\r\n}","import {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {JsonApiController} from \"./JsonApiController\";\r\nimport {NsStationDto} from \"shared/Generated/Dto/NsStationDto\";\r\nimport {Dashboard, Report, Tile} from \"sharedReact/Designer/Properties/PowerBiProperties\";\r\nimport {WeatherIconDto} from \"shared/Generated/Dto/DataSources/WeatherIconDto\";\r\n\r\nexport class DataSourceApiController extends JsonApiController {\r\n constructor(path) {\r\n super(path);\r\n }\r\n\r\n public async GetCoordinatesFromLocation(location: string): Promise {\r\n return await HttpConnection.getAsync(location, `${this.route}/GetCoordinatesFromLocation`) as LocationResult[];\r\n }\r\n\r\n public async GetPowerBiAuthUrl(id: string): Promise {\r\n return await HttpConnection.getAsync(id, `${this.route}/GetPowerBiAuthUrl`) as string;\r\n }\r\n\r\n public async getFacebookPages(dataSourceId: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/GetFacebookPages/${dataSourceId}`);\r\n }\r\n\r\n public async getNsStations(dataSourceId: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/GetNsStations/${dataSourceId}`);\r\n }\r\n\r\n public GetInstagramLoginUrl(id: string): string {\r\n return `${HttpConnection.hostOverride}/${HttpConnection.environmentPath}/${this.route}/GetInstagramLoginUrl/${id}`;\r\n }\r\n\r\n public async FetchCustomDataSource(dataSourceId: string): Promise {\r\n const response = await fetch(`${HttpConnection.hostOverride}/${HttpConnection.environmentPath}/${this.route}/FetchCustomDataSource/${dataSourceId}`); // Replace with your actual endpoint URL\r\n if (response.ok) {\r\n return await response.arrayBuffer();\r\n }\r\n }\r\n\r\n public async getPowerBiDashboards(dataSourceId: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/GetPowerBiDashboards/${dataSourceId}`);\r\n }\r\n\r\n public async getPowerBiReports(dataSourceId: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/GetPowerBiReports/${dataSourceId}`);\r\n }\r\n\r\n public async getPowerBiTiles(dataSourceId: string, dashboardId: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/GetPowerBiTiles/${dataSourceId}?dashboardId=${dashboardId}`);\r\n }\r\n\r\n public async uploadIcon(formData: FormData, dataSourceId: string, iconType: number, iconId?: string): Promise {\r\n let addition = `?ds=${dataSourceId}&iconType=${iconType}`;\r\n if (iconId)\r\n addition += `&iconId=${iconId}`;\r\n\r\n const response = await fetch(`${HttpConnection.hostOverride}/${HttpConnection.environmentPath}/${this.route}/UploadIcon${addition}`, {\r\n method: 'POST',\r\n body: formData,\r\n headers: {\r\n Accept: 'application/json'\r\n }\r\n });\r\n return await response.json();\r\n }\r\n\r\n public async getIcons(): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/GetIcons`);\r\n }\r\n\r\n public async removeIcon(iconId: string): Promise {\r\n return await HttpConnection.deleteAsync(iconId, `${this.route}/RemoveIcon`);\r\n }\r\n\r\n public async getRealWorksDeveloperId(): Promise {\r\n return await HttpConnection.getAsync(\"\", `${this.route}/getRealWorksDeveloperId`) as string;\r\n }\r\n \r\n public async getImportedTeosDataSourceIds(): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/importedTeosDataSources`) as number[];\r\n }\r\n\r\n public async powerBiLogin(urlParams: string): Promise {\r\n return await HttpConnection.getAsync(null, `dataSources/PowerBiLogin${urlParams}`, false) as string;\r\n }\r\n}\r\n\r\nexport type LocationResult = {\r\n name?: string,\r\n localNames?: string[],\r\n lat?: number,\r\n lon?: number,\r\n country?: string,\r\n state?: string,\r\n}\r\n\r\ninterface CategoryListDto {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface PageDataDto {\r\n access_token: string;\r\n category: string;\r\n category_list: CategoryListDto[];\r\n name: string;\r\n id: string;\r\n tasks: string[];\r\n}\r\n\r\nexport interface FacebookPagesDto {\r\n data?: PageDataDto[];\r\n}\r\n","import {EnvironmentDto} from \"shared/Generated/Dto/EnvironmentDto\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {EnvironmentValidationDto} from \"shared/Generated/Dto/EnvironmentValidationDto\";\r\nimport {MqttCredentialsDto} from \"shared/Generated/Dto/MqttCredentialsDto\";\r\nimport {CustomerDto} from \"shared/Generated/Dto/Licenses/CustomerDto\";\r\n\r\nexport class EnvironmentApiController {\r\n private readonly route = `environments/json`;\r\n\r\n public getAll(): Promise {\r\n return HttpConnection.getAsync(\"\", this.route, false) as Promise;\r\n }\r\n\r\n public get(id: string): Promise {\r\n return HttpConnection.getAsync(id, this.route, false) as Promise;\r\n }\r\n\r\n public getByPath(environmentPath: string): Promise {\r\n return HttpConnection.getAsync(environmentPath, `${this.route}/getByPath`, false) as Promise;\r\n }\r\n\r\n public post(dto: EnvironmentDto): Promise {\r\n return HttpConnection.postAsync(dto, this.route, false) as Promise;\r\n }\r\n\r\n public put(dto: EnvironmentDto, id: string): Promise {\r\n return HttpConnection.putAsync(dto, `${this.route}/${id}`, false) as Promise;\r\n }\r\n\r\n public validate(dto: EnvironmentDto): Promise {\r\n return HttpConnection.postAsync(dto, `${this.route}/validate`, false) as Promise;\r\n }\r\n\r\n public getDesignerCredentials(): Promise {\r\n if (!location.protocol.startsWith(\"https\")) {\r\n return this.getDesignerCredentialsPlain();\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n HttpConnection.getAsync(null, `${this.route}/GetDesignerCredentials`).then(async credentials => {\r\n const bytes = await credentials.arrayBuffer();\r\n const int32 = new Int32Array(bytes);\r\n const ivLength = int32[0];\r\n const hashLength = int32[1];\r\n const messageLength = int32[2];\r\n \r\n const uint8 = new Uint8Array(bytes.slice(12));\r\n const iv = uint8.slice(0, ivLength);\r\n const hash = uint8.slice(ivLength, ivLength + hashLength);\r\n const message = uint8.slice(ivLength + hashLength, ivLength + hashLength + messageLength);\r\n \r\n const settings: AesCbcParams = {name: \"AES-CBC\", iv: iv};\r\n const encoder = new TextEncoder();\r\n const rawKey = encoder.encode(\"ecq5azg6ukm!WQA6ueb\");\r\n\r\n const baseKey = await crypto.subtle.importKey(\"raw\", rawKey,{name: \"PBKDF2\"},false,[\"deriveBits\", \"deriveKey\"]);\r\n const key = await crypto.subtle.deriveKey({name: \"PBKDF2\", hash: \"SHA-256\", salt: iv, iterations: 1000}, baseKey, {name: \"AES-CBC\", length: 256}, true, [\"encrypt\", \"decrypt\"]);\r\n \r\n crypto.subtle.decrypt(settings, key, message).then(encodedCredentials => {\r\n const decoder = new TextDecoder();\r\n const jsonString = decoder.decode(encodedCredentials);\r\n resolve(JSON.parse(jsonString));\r\n }).catch(() => {\r\n reject();\r\n });\r\n }).catch(error => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n private getDesignerCredentialsPlain(): Promise {\r\n return HttpConnection.getAsync(null, `${this.route}/GetDesignerCredentialsPlain`) as Promise;\r\n }\r\n\r\n public getCustomer(): Promise {\r\n return HttpConnection.getAsync(null, `${this.route}/GetCustomer`) as Promise;\r\n }\r\n\r\n public async join(invitationId: string): Promise {\r\n return await HttpConnection.postAsync({}, `${this.route}/join/${invitationId}`, false);\r\n }\r\n\r\n public async getAvatar(environmentId: string) {\r\n return await HttpConnection.getAsync(\"\", `environments/${environmentId}/avatar`, false);\r\n }\r\n\r\n public async uploadAvatar(environmentId: string, formData: FormData): Promise {\r\n\r\n return fetch(`/environments/${environmentId}/uploadAvatar`, {\r\n method: 'POST',\r\n body: formData\r\n });\r\n }\r\n\r\n public search(query: string): Promise {\r\n return HttpConnection.getAsync(query, `${this.route}/search`, false);\r\n }\r\n \r\n public async getNotifications(environmentId: string): Promise {\r\n return HttpConnection.getAsync(null, `${this.route}/${environmentId}/notifications`, false);\r\n }\r\n}","import {JsonApiController} from \"./JsonApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\n\r\nexport class EnvironmentInvitationApiController extends JsonApiController {\r\n constructor(path: string) {\r\n super(path);\r\n }\r\n\r\n public get(id: string): Promise {\r\n return HttpConnection.getAsync(id, \"invitations/json\", false) as Promise;\r\n }\r\n\r\n public postMultiple(dto: EnvironmentInvitationDto[], environment: string): Promise {\r\n return HttpConnection.postAsync(dto, `${environment}/${this.route}/post`, false) as Promise;\r\n }\r\n\r\n public async resendInvitation(invitationId: string) {\r\n return await HttpConnection.postAsync(invitationId, `${this.route}/resendInvitation`);\r\n }\r\n}","import {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {FileDto} from \"../Dto/FileDto\";\r\nimport {FolderDto} from \"../Dto/FolderDto\";\r\nimport {Cookie} from \"../Util/Cookie\";\r\n\r\n\r\nexport class FileSystemApiController {\r\n protected readonly route: string;\r\n\r\n\r\n constructor() {\r\n this.route = \"fileSystem\";\r\n }\r\n\r\n public async createFolder(storageProviderId: string, folderName: string): Promise {\r\n return await HttpConnection.postAsync(null, `${this.route}/${storageProviderId}/Folder?storageProviderId=${storageProviderId}&folderName=${folderName}`);\r\n }\r\n\r\n public async getBreadcrumb(storageProviderId: string, fileUri: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/${storageProviderId}/Breadcrumb?storageProviderId=${storageProviderId}&fileUri=${fileUri}`);\r\n }\r\n\r\n public async search(storageProviderId: string, query: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/${storageProviderId}/Search?storageProviderId=${storageProviderId}&searchValue=${query}`);\r\n }\r\n\r\n public async getFolderContent(storageProviderId: string, folderId: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/${storageProviderId}/FolderContent?storageProviderId=${storageProviderId}&folderName=${encodeURIComponent(folderId)}`);\r\n }\r\n\r\n public async getFileContent(storageProviderId: string, fileUri: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/${storageProviderId}/FileContent?fileUri=${encodeURIComponent(fileUri)}`);\r\n }\r\n\r\n public async getFile(storageProviderId: string, fileUri: string): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/${storageProviderId}/File?fileUri=${encodeURIComponent(fileUri)}`);\r\n }\r\n\r\n public async uploadFile(storageProviderId: string, formData: FormData): Promise {\r\n return fetch(`${HttpConnection.hostOverride}/${HttpConnection.environmentPath}/${this.route}/${storageProviderId}/File`, {\r\n method: 'POST',\r\n body: formData\r\n });\r\n }\r\n\r\n public async uploadFileToDefault(formData: FormData): Promise {\r\n return fetch(`/${HttpConnection.environmentPath}/${this.route}/File`, {\r\n method: 'POST',\r\n body: formData\r\n });\r\n }\r\n\r\n public async getThumbnail(storageProviderId: string, id: string): Promise {\r\n return await HttpConnection.getAsync(id, `${this.route}/${storageProviderId}/getThumbnail`) as string;\r\n }\r\n\r\n public async copyFile(storageProviderId: string, fileUri: string): Promise {\r\n return await HttpConnection.getAsync(fileUri, `${this.route}/${storageProviderId}/copyFile`) as FileDto;\r\n }\r\n\r\n public async moveFile(storageProviderId: string, fileUri: string, destinationFileUri: string): Promise {\r\n return await HttpConnection.postAsync({\r\n fileUri: fileUri,\r\n destinationFileUri: destinationFileUri\r\n }, `${this.route}/${storageProviderId}/moveFile`);\r\n }\r\n\r\n public async moveFolder(storageProviderId: string, fileUri: string, destinationFileUri: string): Promise {\r\n return await HttpConnection.postAsync({\r\n fileUri: fileUri,\r\n destinationFileUri: destinationFileUri\r\n }, `${this.route}/${storageProviderId}/moveFolder`);\r\n }\r\n\r\n public async renameFile(storageProviderId: string, fileUri: string, newName: string): Promise {\r\n return await HttpConnection.postAsync({\r\n fileUri: fileUri,\r\n name: newName\r\n }, `${this.route}/${storageProviderId}/renameFile`) as FileDto;\r\n }\r\n\r\n public async renameFolder(storageProviderId: string, fileUri: string, newName: string): Promise {\r\n return await HttpConnection.postAsync({\r\n fileUri: fileUri,\r\n name: newName\r\n }, `${this.route}/${storageProviderId}/renameFolder`) as FolderDto;\r\n }\r\n\r\n public async deleteFile(storageProviderId: string, fileUri: string): Promise {\r\n return await HttpConnection.deleteAsync(fileUri, `${this.route}/${storageProviderId}/File`, true) as FolderDto;\r\n }\r\n\r\n public async deleteFolder(storageProviderId: string, folderUri: string): Promise {\r\n return await HttpConnection.deleteAsync(folderUri, `${this.route}/${storageProviderId}/Folder`, true) as FileDto;\r\n }\r\n}","import {JsonApiController} from \"./JsonApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {FontDto} from \"shared/Generated/Dto/FontDto\";\r\nimport {FontFamilyDto} from \"shared/Generated/Dto/FontFamilyDto\";\r\n\r\nexport class FontApiController extends JsonApiController {\r\n public constructor() {\r\n super(\"fonts\");\r\n }\r\n\r\n public async uploadFont(formData: FormData, fontFamilyId?: string): Promise {\r\n const addition = fontFamilyId != null ? `?fontFamilyId=${fontFamilyId}` : \"\";\r\n\r\n const response = await fetch(`${HttpConnection.hostOverride}/${HttpConnection.environmentPath}/${this.route}/uploadFont${addition}`, {\r\n method: 'POST',\r\n body: formData,\r\n headers: {\r\n Accept: 'application/json',\r\n },\r\n });\r\n return await response.json();\r\n }\r\n\r\n public async setDefaultFonts(): Promise {\r\n return await HttpConnection.getAsync(null, `${this.route}/SetDefaultFonts`) as FontFamilyDto[];\r\n }\r\n}\r\n\r\n","import {JsonApiController} from \"./JsonApiController\";\r\nimport {InteractionDto} from \"shared/Generated/Dto/Interactions/InteractionDto\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\n\r\nexport class InteractionController extends JsonApiController {\r\n public constructor() {\r\n super(\"interactions\");\r\n }\r\n\r\n public async updateToken(id: string): Promise {\r\n\r\n console.log(this.route);\r\n const response = await fetch(`/${HttpConnection.environmentPath}/${this.route}/updateToken/${id}`, {\r\n method: 'GET',\r\n headers: {\r\n Accept: 'application/json',\r\n },\r\n });\r\n return await response.json();\r\n }\r\n}","import {HttpConnection} from \"../Designer/RequestCreator\";\r\n\r\n/**\r\n * Interface for the JSON API provided by the TDM 5 website. Its methods and routes should match those in JsonApiController.cs.\r\n */\r\nexport class JsonApiController {\r\n protected readonly route;\r\n\r\n constructor(path: string) {\r\n this.route = `${path}/json`;\r\n }\r\n\r\n public getAll(env?: string): Promise {\r\n return HttpConnection.getAsync(\"\", (env ? env + \"/\" : \"\") + this.route, !env) as Promise;\r\n }\r\n\r\n public getFolderContent(folderId?: string, env?: string): Promise {\r\n return HttpConnection.getAsync(null, (env ? env + \"/\" : \"\") + this.route + \"/folder?id=\" + (folderId ? folderId : \"\"), !env) as Promise;\r\n }\r\n\r\n public get(id: string, env?: string): Promise {\r\n return HttpConnection.getAsync(id, (env ? env + \"/\" : \"\") + this.route, !env) as Promise;\r\n }\r\n\r\n public post(dto: TDto, env?: string): Promise {\r\n return HttpConnection.postAsync(dto, (env ? env + \"/\" : \"\") + this.route, !env) as Promise;\r\n }\r\n\r\n public put(dto: TDto, id: string, env?: string): Promise {\r\n return HttpConnection.putAsync(dto, `${env ? env + \"/\" : \"\"}${this.route}/${id}`) as Promise;\r\n }\r\n\r\n public move(id: string, toFolder: string, env?: string) {\r\n return HttpConnection.postAsync(null, `${(env ? env + \"/\" : \"\")}${this.route}/${id}/moveTo?folderId=${toFolder ? toFolder : \"\"}`, !env) as Promise;\r\n }\r\n\r\n public rename(id: string, name: string, env?: string) {\r\n return HttpConnection.postAsync(null, `${(env ? env + \"/\" : \"\")}${this.route}/${id}/rename?name=${encodeURIComponent(name)}`, !env) as Promise;\r\n }\r\n\r\n public delete(id: string, env?: string): Promise {\r\n return HttpConnection.deleteAsync(id, (env ? env + \"/\" : \"\") + this.route, !env);\r\n }\r\n\r\n public clone(id: string, env?: string): Promise {\r\n return HttpConnection.postAsync(\"\", `${env ? env + \"/\" : \"\"}${this.route}/${id}/clone`, !env) as Promise;\r\n }\r\n}","import {LicensePlanDto} from \"shared/Generated/Dto/Licenses/LicensePlanDto\";\r\nimport {LicensePermission} from \"shared/Generated/LicensePermission\";\r\nimport {OrderDto} from \"shared/Generated/Dto/Licenses/OrderDto\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {AssignLicenseDto} from \"shared/Generated/Dto/Licenses/AssignLicenseDto\";\r\nimport {ExtendLicenseDto} from \"shared/Generated/Dto/Licenses/ExtendLicenseDto\";\r\nimport {CustomerDto} from \"shared/Generated/Dto/Licenses/CustomerDto\";\r\nimport {LicenseTypeDto} from \"shared/Generated/Dto/Licenses/LicenseTypeDto\";\r\nimport {OrderConfirmationDto} from \"shared/Generated/Dto/Licenses/OrderConfirmationDto\";\r\nimport {OrderOverviewDto} from \"shared/Generated/Dto/OrderOverviewDto\";\r\nimport {DowngradeCurrentPlanDto} from \"shared/Generated/Dto/Licenses/DowngradeCurrentPlanDto\";\r\nimport {ProductCategory} from \"shared/Generated/ProductCategory\";\r\nimport {ProductDto} from \"shared/Generated/Dto/Licenses/ProductDto\";\r\n\r\nexport class LicenseController {\r\n\r\n private static permissions: Uint8Array;\r\n\r\n public async getLicensePlan(): Promise {\r\n return await HttpConnection.getAsync(null, 'licenses/plan/json', false);\r\n }\r\n\r\n public async getLicenseType(id: string): Promise {\r\n return await HttpConnection.getAsync(null, `licenses/licenseTypes/json/${id}`, false);\r\n }\r\n\r\n public async getLicenseTypesByIds(ids: string[]): Promise {\r\n return await HttpConnection.postAsync(ids, `licenses/licenseTypes/json/list`, false);\r\n }\r\n\r\n public async getLicenseTypes(baseTypes: boolean): Promise {\r\n return await HttpConnection.getAsync(null, `licenses/licenseTypes/json?packages=${baseTypes}`, false);\r\n }\r\n\r\n public async getDemoLicenseTypes(baseTypes: boolean): Promise {\r\n return await HttpConnection.getAsync(null, `licenses/demoLicenseTypes/json?packages=${baseTypes}`, false);\r\n }\r\n\r\n public async assign(dto: AssignLicenseDto) {\r\n return await HttpConnection.postAsync(dto, 'licenses/assign/json');\r\n }\r\n\r\n public async extend(dto: ExtendLicenseDto) {\r\n return await HttpConnection.postAsync(dto, 'licenses/extend/json');\r\n }\r\n\r\n public async getCustomer(): Promise {\r\n return await HttpConnection.getAsync(null, 'licenses/customer/json', false);\r\n }\r\n\r\n public async putCustomer(dto: CustomerDto): Promise {\r\n return await HttpConnection.putAsync(dto, 'licenses/customer/json', false);\r\n }\r\n\r\n public async getProducts(category?: ProductCategory): Promise {\r\n return await HttpConnection.getAsync(null, `licenses/products/json${typeof category !== \"undefined\" ? `?category=${category}` : \"\"}`, false);\r\n }\r\n\r\n public async reviewOrder(order: OrderDto): Promise {\r\n return await HttpConnection.postAsync(order, 'licenses/orders/json/review', false);\r\n }\r\n\r\n public async reviewProductOrder(order: OrderDto): Promise {\r\n return await HttpConnection.postAsync(order, 'licenses/ProductOrders/json/review', false);\r\n }\r\n\r\n public async placeOrder(order: OrderDto): Promise {\r\n return await HttpConnection.postAsync(order, 'licenses/orders/json', false);\r\n }\r\n\r\n public async placeProductOrder(order: OrderDto): Promise {\r\n return await HttpConnection.postAsync(order, 'licenses/productOrders/json', false);\r\n }\r\n\r\n public async activateDemoLicense(order: OrderDto): Promise {\r\n return await HttpConnection.postAsync(order, 'licenses/activateDemoLicense', false);\r\n }\r\n \r\n public async downgrade(dto: DowngradeCurrentPlanDto): Promise {\r\n return await HttpConnection.postAsync(dto, 'licenses/plan/downgrade', false);\r\n }\r\n \r\n public async cancelDowngrade(dto: DowngradeCurrentPlanDto): Promise {\r\n return await HttpConnection.postAsync(dto, 'licenses/plan/downgrade/cancel', false);\r\n }\r\n\r\n public async cancelLicensePlan(): Promise {\r\n return await HttpConnection.postAsync(null, 'licenses/plan/cancel', false);\r\n }\r\n\r\n public async uncancelLicensePlan(): Promise {\r\n return await HttpConnection.postAsync(null, 'licenses/plan/uncancel', false);\r\n }\r\n\r\n public async cancelModules(moduleIds: string[]): Promise {\r\n return await HttpConnection.postAsync(moduleIds, 'licenses/plan/cancelModules', false);\r\n }\r\n\r\n public async uncancelModules(moduleIds: string[]): Promise {\r\n return await HttpConnection.postAsync(moduleIds, 'licenses/plan/uncancelModules', false);\r\n }\r\n \r\n public async getNextPaymentInfo(id: string): Promise {\r\n return await HttpConnection.getAsync(id, 'licenses/orders/json/next', false);\r\n }\r\n\r\n public async getOrder(id: string): Promise {\r\n return await HttpConnection.getAsync(id, 'licenses/orders/json', false);\r\n }\r\n\r\n public async validateVatNumber(vatNumber: string): Promise {\r\n return await HttpConnection.getAsync(vatNumber, 'licenses/vat/json', false);\r\n }\r\n\r\n public allowed(permission: LicensePermission): boolean {\r\n if (!LicenseController.permissions) {\r\n const fromDom = document.querySelector(\"#react-component-user-license-permissions\") as HTMLInputElement;\r\n\r\n if (!fromDom) {\r\n console.log(\"License permissions checked, but page has no input with the user's permissions\");\r\n return false;\r\n }\r\n\r\n LicenseController.permissions = Uint8Array.from(atob(fromDom.value), c => c.charCodeAt(0));\r\n }\r\n\r\n return this.hasLicensePermission(LicenseController.permissions, permission);\r\n }\r\n\r\n public async allowedForUser(permission: LicensePermission): Promise {\r\n const json = await HttpConnection.getAsync(null, 'licenses/permissions', false) as { permissionsBase64: string };\r\n const permissions = Uint8Array.from(atob(json.permissionsBase64), c => c.charCodeAt(0));\r\n\r\n return this.hasLicensePermission(permissions, permission);\r\n }\r\n\r\n private hasLicensePermission(set: Uint8Array, action: LicensePermission): boolean {\r\n //Permissions are stored as an \"array of booleans\", where the int value of the permission enum represent the bit\r\n // offset in this array. It's not a perfectly efficient system, as we deliberately leave gaps in the enum between\r\n // sections for future expansion, but I think you'll agree that this is way more efficient than representing each\r\n // permission as a boolean in JSON.\r\n\r\n const offset = action as number;\r\n const byteOffset = ~~(offset / 8);\r\n const bitOffset = offset % 8;\r\n\r\n const byte = set[byteOffset];\r\n return (byte & (1 << bitOffset)) != 0;\r\n }\r\n}","import {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {JsonApiController} from \"./JsonApiController\";\r\n\r\n\r\nexport class MediaApiController extends JsonApiController {\r\n constructor(path) {\r\n super(path);\r\n }\r\n\r\n public async getFromStorageContent(storageProviderId: string, contentId: string): Promise {\r\n return await HttpConnection.getAsync(contentId, `${this.route}/getFromStorageContent/${storageProviderId}`) as MediaItemDto;\r\n }\r\n}","import {JsonApiController} from \"./JsonApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {PageDto} from \"../Generated/Dto/PageDto\";\r\n\r\nexport class PageApiController extends JsonApiController {\r\n public constructor() {\r\n super(\"pages\");\r\n }\r\n\r\n public async importPage(formData: FormData): Promise {\r\n const response = await fetch(`/${HttpConnection.environmentPath}/${this.route}/importPage`, {\r\n method: 'POST',\r\n body: formData,\r\n headers: {\r\n Accept: 'application/json',\r\n },\r\n });\r\n return await response.json();\r\n }\r\n \r\n \r\n public async exportPage(pageId: string): Promise{\r\n\r\n const response = await fetch(`/${HttpConnection.environmentPath}/${this.route}/exportPage/${pageId}`);\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to download file: ${response.statusText}`);\r\n }\r\n\r\n const blob = await response.blob();\r\n\r\n // Create a link element\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n\r\n \r\n // Set the filename for the downloaded file\r\n const filename = this.extractFilenameFromHeaders(response);\r\n link.setAttribute('download', filename);\r\n\r\n // Append the link to the body and trigger the download\r\n document.body.appendChild(link);\r\n link.click();\r\n\r\n // Clean up\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n \r\n return null;\r\n }\r\n\r\n\r\n public extractFilenameFromHeaders(response: Response): string {\r\n const contentDisposition = response.headers.get('Content-Disposition');\r\n if (contentDisposition && contentDisposition.includes('attachment')) {\r\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n const matches = filenameRegex.exec(contentDisposition);\r\n if (matches && matches[1]) {\r\n return matches[1].replace(/['\"]/g, '');\r\n }\r\n }\r\n // Fallback: generate a filename\r\n return `exported_file_${Date.now()}.pdf`;\r\n }\r\n\r\n}\r\n\r\n","import {JsonApiController} from \"./JsonApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {PageFolderDto} from \"shared/Generated/Dto/PageFolderDto\";\r\n\r\nexport class PageFolderApiController extends JsonApiController {\r\n public constructor() {\r\n super(\"pageFolders\");\r\n }\r\n\r\n public async getBreadCrumb(folderId: string): Promise {\r\n return await HttpConnection.getAsync(\"\", `${this.route}/${folderId}/breadCrumb`) as Promise;\r\n }\r\n}\r\n\r\n","import {JsonApiController} from \"./JsonApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {PlayerDto} from \"shared/Generated/Dto/PlayerDto\";\r\nimport {PlayerRegistrationDto} from \"shared/Generated/Dto/PlayerRegistrationDto\";\r\n\r\n\r\nexport class PlayerApiController extends JsonApiController {\r\n public constructor() {\r\n super(\"players\");\r\n }\r\n\r\n public async register(player: PlayerRegistrationDto): Promise {\r\n return await HttpConnection.postAsync(player, `${player.environmentIdentifier}/players/json/register`, false);\r\n }\r\n\r\n public async addLicenseToPlayer(playerId: string): Promise {\r\n return await HttpConnection.postAsync(null, `${this.route}/AddLicenseToDevice/${playerId}`);\r\n }\r\n\r\n public async removeLicenseFromPlayer(playerId: string): Promise {\r\n return await HttpConnection.postAsync(null, `${this.route}/RemoveLicenseFromDevice/${playerId}`);\r\n }\r\n}","import {JsonApiController} from \"./JsonApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {PlaylistDto} from \"../Dto/PlaylistDto\";\r\n\r\nexport class PlaylistController extends JsonApiController {\r\n public constructor() {\r\n super(\"playlists\");\r\n }\r\n\r\n public async wouldContainItself(playlist: PlaylistDto): Promise {\r\n return await HttpConnection.postAsync(playlist, `playlists/json/wouldContainItself`);\r\n }\r\n}","import {JsonApiController} from \"./JsonApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {PageFolderDto} from \"shared/Generated/Dto/PageFolderDto\";\r\nimport {PlaylistFolderDto} from \"shared/Generated/Dto/PlaylistFolderDto\";\r\n\r\nexport class PlaylistFolderApiController extends JsonApiController {\r\n public constructor() {\r\n super(\"playlistFolders\");\r\n }\r\n\r\n public async getBreadCrumb(folderId: string): Promise {\r\n return await HttpConnection.getAsync(\"\", `${this.route}/${folderId}/breadCrumb`) as Promise;\r\n }\r\n}\r\n\r\n","import {ResourceType} from \"./ResourceType\";\r\nimport {AccessLevel} from \"./ResourceAccessLevel\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\n\r\nexport class ResourcePermissionController {\r\n public async get(resourceType: ResourceType, resourceId: string): Promise<{ [userId: string]: AccessLevel }> {\r\n return await HttpConnection.getAsync(null, `acl?type=${resourceType}&id=${resourceId}`, true);\r\n }\r\n\r\n public async set(resourceType: ResourceType, resourceId: string, permissions: { [userId: string]: AccessLevel }) {\r\n return await HttpConnection.postAsync(permissions, `acl?type=${resourceType}&id=${resourceId}`, true);\r\n }\r\n}","import {JsonApiController} from \"./JsonApiController\";\r\nimport {EnvironmentInvitationDto} from \"shared/Generated/Dto/EnvironmentInvitationDto\";\r\nimport {DataSourceApiController} from \"./DataSourceApiController\";\r\nimport {UserRoleDto} from \"shared/Generated/Dto/UserRoleDto\";\r\nimport {MediaApiController} from \"./MediaApiController\";\r\nimport {PlayerApiController} from \"./PlayerApiController\";\r\nimport {EnvironmentApiController} from \"./EnvironmentApiController\";\r\nimport {UserApiController} from \"./UserApiController\";\r\nimport {PlayerGroupDto} from \"shared/Generated/Dto/PlayerGroupDto\";\r\nimport {FileSystemApiController} from \"./FileSystemApiController\";\r\nimport {ContentController} from \"./ContentController\";\r\nimport {ScheduleDto} from \"shared/Generated/Dto/Schedule/ScheduleDto\";\r\nimport {ElementDto} from \"shared/Generated/Dto/ElementDto\";\r\nimport {EnvironmentInvitationApiController} from \"./EnvironmentInvitationApiController\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport {SearchResultDto} from \"shared/Generated/Dto/SearchResultDto\";\r\nimport {FontFamilyDto} from \"shared/Generated/Dto/FontFamilyDto\";\r\nimport {FontApiController} from \"./FontController\";\r\nimport {DataSourceDto} from \"shared/Generated/Dto/DataSources/DataSourceDto\";\r\nimport {ResourcePermissionController} from \"./ResourcePermissionController\";\r\nimport {ConnectionController} from \"./ConnectionController\";\r\nimport {CalendarController} from \"./CalendarController\";\r\nimport {ActionPermission} from \"shared/Generated/ActionPermission\";\r\nimport {ActionPermissionService} from \"./ActionPermissionService\";\r\nimport {MediaItemDto} from \"shared/Generated/Dto/MediaItems/MediaItemDto\";\r\nimport {PlaylistController} from \"./PlaylistController\";\r\nimport {UtilController} from \"./UtilController\";\r\nimport {LicensePermission} from \"shared/Generated/LicensePermission\";\r\nimport {LicenseController} from \"./LicenseController\";\r\nimport {InteractionController} from \"./InteractionController\";\r\nimport {ContentLogController} from \"./ContentLogController\";\r\nimport {PageApiController} from \"shared/Api/PageController\";\r\nimport {PageFolderApiController} from \"shared/Api/PageFolderApiController\";\r\nimport {PlaylistFolderApiController} from \"shared/Api/PlaylistFolderApiController\";\r\nimport {VoucherController} from \"shared/Api/VoucherController\";\r\n\r\nexport class TdmApi {\r\n public static players = new PlayerApiController();\r\n public static playerGroups = new JsonApiController(\"playerGroups\");\r\n public static playlists = new PlaylistController();\r\n public static playlistFolders = new PlaylistFolderApiController();\r\n public static pages = new PageApiController();\r\n public static pageFolders = new PageFolderApiController();\r\n public static elements = new JsonApiController('elements');\r\n public static media = new MediaApiController('media');\r\n public static dataSources = new DataSourceApiController('dataSources');\r\n public static environments = new EnvironmentApiController();\r\n public static environmentInvitations = new EnvironmentInvitationApiController(\"invitations\");\r\n public static users = new UserApiController();\r\n public static userRoles = new JsonApiController('userRoles');\r\n public static content = new ContentController();\r\n public static fileSystem = new FileSystemApiController();\r\n public static schedules = new JsonApiController(\"schedules\");\r\n public static fonts = new FontApiController();\r\n public static fontFamilies = new JsonApiController(\"fontFamilies\");\r\n public static connections = new ConnectionController();\r\n public static calendars = new CalendarController();\r\n public static util = new UtilController();\r\n public static interactions = new InteractionController();\r\n public static search = (query: string) => HttpConnection.getAsync(null, 'search?q=' + encodeURIComponent(query)) as Promise;\r\n public static resourcePermissions = new ResourcePermissionController();\r\n public static actions = new ActionPermissionService();\r\n public static licenses = new LicenseController();\r\n public static contentLog = new ContentLogController();\r\n public static vouchers = new VoucherController();\r\n\r\n static allowed(permission?: ActionPermission) {\r\n if (!permission) return true;\r\n\r\n return TdmApi.actions.allowed(permission);\r\n }\r\n\r\n static allowedByLicense(permission?: LicensePermission) {\r\n if (!permission) return true;\r\n\r\n return TdmApi.licenses.allowed(permission);\r\n }\r\n}","import {UserDto} from \"shared/Generated/Dto/UserDto\";\r\nimport {HttpConnection} from \"../Designer/RequestCreator\";\r\n\r\n\r\nexport class UserApiController {\r\n private readonly route = `users/json`;\r\n private currentUser?: UserDto;\r\n\r\n public async getAllInEnvironment(environment?: string): Promise {\r\n if (environment) {\r\n return await HttpConnection.getAsync(\"\", `${environment}/` + this.route, false) as UserDto[];\r\n } else {\r\n return await HttpConnection.getAsync(\"\", this.route, true) as UserDto[];\r\n }\r\n }\r\n\r\n public async getAll(): Promise {\r\n return await HttpConnection.getAsync(\"\", this.route, false) as UserDto[];\r\n }\r\n\r\n public async get(id: string): Promise {\r\n return await HttpConnection.getAsync(id, this.route, false) as UserDto;\r\n }\r\n\r\n public async getCurrentUser(noCache: boolean = false): Promise {\r\n if (!noCache && this.currentUser) return this.currentUser;\r\n\r\n this.currentUser = await HttpConnection.getAsync(\"\", `${this.route}/getCurrentUser`, false) as UserDto;\r\n return this.currentUser;\r\n }\r\n\r\n public async putCurrentUser(dto: UserDto): Promise {\r\n this.currentUser = await HttpConnection.putAsync(dto, `${this.route}/putCurrentUser`, false) as UserDto;\r\n return this.currentUser;\r\n }\r\n\r\n public changeEmail(newEmailAddress: string): Promise {\r\n return HttpConnection.putAsync(newEmailAddress, `${this.route}/changeEmail`, false) as Promise;\r\n }\r\n\r\n public changePassword(currentPassword: string, newPassword: string): Promise {\r\n return HttpConnection.putAsync({\r\n currentPassword: currentPassword,\r\n newPassword: newPassword\r\n }, `${this.route}/changePassword`, false) as Promise;\r\n }\r\n\r\n public async getAvatar(userId: string) {\r\n return await HttpConnection.getAsync(\"\", `users/${userId}/avatar`, false) as UserDto;\r\n }\r\n\r\n public async uploadAvatar(userId: string, formData: FormData): Promise {\r\n return fetch(`/users/${userId}/uploadAvatar`, {\r\n method: 'POST',\r\n body: formData\r\n });\r\n }\r\n\r\n public async logout() : Promise {\r\n this.currentUser = undefined;\r\n\r\n return await HttpConnection.postAsync(\"\", `account/logout/json`, false) as Promise;\r\n }\r\n\r\n public async login(token: string, values: {username: string, password: string}) : Promise {\r\n this.currentUser = undefined;\r\n\r\n return fetch(`/account/login/json`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-CSRF-TOKEN': token\r\n },\r\n body: JSON.stringify(values)\r\n });\r\n }\r\n\r\n public async register(token: string, values: any) : Promise {\r\n this.currentUser = undefined;\r\n\r\n return fetch('/account/register/json', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-CSRF-TOKEN': token\r\n },\r\n body: JSON.stringify(values)\r\n });\r\n }\r\n}","import {HttpConnection} from \"../Designer/RequestCreator\";\r\nimport type {Dayjs} from 'dayjs';\r\nimport dayjs from \"dayjs\";\r\nimport {CspResultDto} from \"shared/Generated/Dto/CspResultDto\";\r\n\r\nexport class UtilController {\r\n\r\n public async utcTime(): Promise {\r\n const stringValue = await HttpConnection.getAsync(null, \"utctime\", false);\r\n return dayjs(stringValue);\r\n }\r\n\r\n public async getCspHeaders(url: string): Promise {\r\n return await HttpConnection.getAsync(url, \"FindCspHeader\", false) as CspResultDto;\r\n }\r\n}","import {HttpConnection} from \"shared/Designer/RequestCreator\";\r\nimport {VoucherResultDto} from \"shared/Generated/Dto/Licenses/VoucherResultDto\";\r\n\r\nexport class VoucherController {\r\n private route: string;\r\n public constructor() {\r\n this.route = \"vouchers\";\r\n }\r\n\r\n public async checkVoucherCode(code: string): Promise {\r\n return HttpConnection.getAsync(null, `${this.route}/checkVoucher?voucherCode=${code}`, false);\r\n }\r\n}","import React, {useEffect, useState} from 'react';\r\nimport {Defaults} from \"../../Tdm/Defaults\";\r\nimport Skeleton from \"react-loading-skeleton\";\r\nimport styles from \"./ListGridItem.scss\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\n\r\ninterface props {\r\n alt: string;\r\n id?: string;\r\n lastUpdated: Date;\r\n className?: string;\r\n fallBackImage?: string;\r\n style?: React.CSSProperties;\r\n noLoader?: boolean;\r\n loaderClass?: string;\r\n isFolder?: boolean;\r\n}\r\n\r\nconst Thumbnail: React.FC = ({\r\n alt,\r\n id = null,\r\n className,\r\n lastUpdated,\r\n fallBackImage,\r\n style,\r\n noLoader = false,\r\n loaderClass = \"\",\r\n isFolder\r\n }) => {\r\n let lastUpdatedTime = lastUpdated ? new Date(lastUpdated).getTime() : new Date().getTime();\r\n const [imageSrc, setImageSrc] = useState(id !== null ? TdmApi.content.thumbnailPath(id, lastUpdatedTime) : null);\r\n const [thumbnailLoaded, setThumbnailLoaded] = useState(false);\r\n const [retries, setRetries] = useState(0);\r\n \r\n let retryTimeout: NodeJS.Timeout | null = null;\r\n const maxRetries = 4;\r\n const retryInterval = 2000;\r\n\r\n useEffect(() => {\r\n if(isFolder) {\r\n setImageSrc(Defaults.FOLDER_URL);\r\n } else if(id !== null) {\r\n retryTimeout && clearTimeout(retryTimeout);\r\n setRetries(0);\r\n setImageSrc(TdmApi.content.thumbnailPath(id, lastUpdatedTime));\r\n } else {\r\n setImageSrc(fallBackImage ?? Defaults.IMAGE_URL);\r\n }\r\n }, [id]);\r\n \r\n function onLoaded(event: React.SyntheticEvent){\r\n if(imageSrc !== fallBackImage ?? Defaults.IMAGE_URL)\r\n setThumbnailLoaded(true);\r\n }\r\n \r\n function onError (error: React.SyntheticEvent) {\r\n setImageSrc(fallBackImage ?? Defaults.IMAGE_URL);\r\n if (retries >= maxRetries)\r\n return;\r\n \r\n retryTimeout = setTimeout(() => {\r\n setRetries(retries + 1);\r\n setImageSrc(TdmApi.content.thumbnailPath(id, lastUpdatedTime));\r\n }, retryInterval);\r\n }\r\n\r\n return (\r\n <>\r\n {alt}\r\n {!noLoader && !thumbnailLoaded && retries < maxRetries ?\r\n : null}\r\n \r\n );\r\n};\r\n\r\nexport default Thumbnail;","import React, {createContext, useContext, useEffect, useState} from \"react\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\nimport {HttpConnection} from \"../RequestCreator\";\r\nimport {EnvironmentDto} from \"shared/Generated/Dto/EnvironmentDto\";\r\n\r\ninterface EnvironmentContextProps {\r\n children: React.ReactNode;\r\n}\r\n\r\ntype EnvironmentContextType = {\r\n environment?: EnvironmentDto;\r\n updateEnvironment: (environmentDto: EnvironmentDto) => void;\r\n}\r\n\r\nconst EnvironmentContext = createContext({} as EnvironmentContextType);\r\n\r\nconst EnvironmentContextProvider: React.FC = ({children}) => {\r\n const [environment, setEnvironment] = useState(null);\r\n\r\n useEffect(() => {\r\n if (HttpConnection.environmentPath !== null)\r\n TdmApi.environments.getByPath(HttpConnection.environmentPath).then(setEnvironment);\r\n }, [HttpConnection.environmentPath]);\r\n\r\n function updateEnvironment(environmentDto: EnvironmentDto) {\r\n setEnvironment(environmentDto);\r\n }\r\n\r\n\r\n const context: EnvironmentContextType = {\r\n environment: environment,\r\n updateEnvironment: updateEnvironment,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst useEnvironment = () => useContext(EnvironmentContext);\r\n\r\nexport {useEnvironment};\r\nexport default EnvironmentContextProvider;","import React, {createContext, useContext, useState} from \"react\";\r\n\r\ninterface BreadcrumbPart {\r\n name: string;\r\n path?: string;\r\n}\r\n\r\ninterface BreadcrumbParams {\r\n parts: BreadcrumbPart[];\r\n base?: \"currentEnvironment\" | null;\r\n}\r\n\r\ninterface HeaderParams {\r\n enabled: boolean;\r\n compact?: boolean;\r\n}\r\n\r\ntype HeaderType = {\r\n breadcrumb?: BreadcrumbParams;\r\n updateBreadcrumb: (breadcrumbParams: BreadcrumbParams) => void;\r\n header?: HeaderParams;\r\n updateHeader: (headerParams: HeaderParams) => void;\r\n}\r\n\r\ninterface props{\r\n children: React.ReactNode\r\n}\r\n\r\nconst HeaderContext = createContext({} as HeaderType);\r\n\r\nconst HeaderContextProvider: React.FC= ({children}) => {\r\n const [breadcrumb, setBreadcrumb] = useState({parts: [{name: 'Home', path: '/environments'}]});\r\n const [header, setHeader] = useState({enabled: true});\r\n\r\n function updateBreadcrumb(params: BreadcrumbParams) {\r\n // console.log(\"updating breadcrumb\", params);\r\n setBreadcrumb(params);\r\n }\r\n\r\n function updateHeader(params: HeaderParams) {\r\n setHeader(params);\r\n }\r\n\r\n\r\n const contextValue: HeaderType = {\r\n breadcrumb: breadcrumb,\r\n updateBreadcrumb: updateBreadcrumb,\r\n header: header,\r\n updateHeader: updateHeader\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n );\r\n};\r\n\r\nconst useHeader = () => useContext(HeaderContext);\r\n\r\nexport {useHeader};\r\nexport default HeaderContextProvider;","import React, {createContext, useContext, useEffect, useState} from 'react';\r\nimport {TourStepProps} from \"antd/es/tour/interface\";\r\nimport {t} from \"i18next\";\r\nimport {Tour} from \"antd\";\r\nimport {HttpConnection} from \"shared/Designer/RequestCreator\";\r\nimport {TdmApi} from \"shared/Api/TdmApi\";\r\nimport {Size} from \"shared/Designer/Size\";\r\nimport {PageDto} from \"shared/Generated/Dto/PageDto\";\r\nimport {PlaylistDto} from \"shared/Generated/Dto/PlaylistDto\";\r\nimport {ScheduleDto} from \"shared/Generated/Dto/Schedule/ScheduleDto\";\r\n\r\ninterface props {\r\n children: React.ReactNode;\r\n}\r\n\r\n\r\ntype TourType = {\r\n tourEnabled: boolean;\r\n isShowingTour: boolean;\r\n startTour: (value: boolean) => void;\r\n setDashboardTargets: (elements: HTMLElement[]) => void;\r\n setPlayerTargets: (elements: HTMLElement[]) => void;\r\n setPageTargets: (elements: HTMLElement[]) => void;\r\n setDesignerTargets: (elements: HTMLElement[]) => void;\r\n setPlaylistTargets: (elements: HTMLElement[]) => void;\r\n setPlaylistEditTargets: (elements: HTMLElement[]) => void;\r\n setMediaBrowserTargets: (elements: HTMLElement[]) => void;\r\n setScheduleIndexTargets: (elements: HTMLElement[]) => void;\r\n setScheduleEditTargets: (elements: HTMLElement[]) => void;\r\n setDataSourceIndexTargets: (elements: HTMLElement[]) => void;\r\n setSearchTarget: (element: HTMLElement) => void;\r\n setAccountTarget: (element: HTMLElement) => void;\r\n}\r\n\r\nconst TourContext = createContext({} as TourType);\r\nconst TourContextProvider: React.FC = ({children}) => {\r\n const [dashboardTargets, setDashboardTargets] = useState();\r\n const [playerTargets, setPlayerTargets] = useState();\r\n const [pageTargets, setPageTargets] = useState();\r\n const [designerTargets, setDesignerTargets] = useState();\r\n const [playlistTargets, setPlaylistTargets] = useState();\r\n const [playlistEditTargets, setPlaylistEditTargets] = useState();\r\n const [mediaBrowserTargets, setMediaBrowserTargets] = useState();\r\n const [scheduleIndexTargets, setScheduleIndexTargets] = useState();\r\n const [scheduleEditTargets, setScheduleEditTargets] = useState();\r\n const [dataSourceIndexTargets, setDataSourceIndexTargets] = useState();\r\n const [searchTarget, setSearchTarget] = useState();\r\n const [accountTarget, setAccountTarget] = useState();\r\n const [open, setOpen] = useState(false);\r\n const [steps, setSteps] = useState();\r\n const [tourEnabled] = useState(!HttpConnection.isTeos);\r\n\r\n useEffect(() => {\r\n if (dashboardTargets)\r\n setDashboardSteps();\r\n }, [dashboardTargets]);\r\n\r\n useEffect(() => {\r\n if (playerTargets)\r\n setPlayerSteps();\r\n }, [playerTargets]);\r\n\r\n useEffect(() => {\r\n if (pageTargets)\r\n setPageSteps();\r\n }, [pageTargets]);\r\n\r\n useEffect(() => {\r\n if (designerTargets)\r\n setDesignerSteps();\r\n }, [designerTargets]);\r\n\r\n useEffect(() => {\r\n if (playlistTargets)\r\n setPlaylistSteps();\r\n }, [playlistTargets]);\r\n\r\n useEffect(() => {\r\n if (playlistEditTargets)\r\n setPlaylistEditSteps();\r\n }, [playlistEditTargets]);\r\n\r\n useEffect(() => {\r\n if (mediaBrowserTargets)\r\n setMediaBrowserSteps();\r\n }, [mediaBrowserTargets]);\r\n\r\n useEffect(() => {\r\n if (scheduleIndexTargets)\r\n setScheduleIndexSteps();\r\n }, [scheduleIndexTargets]);\r\n\r\n useEffect(() => {\r\n if (scheduleEditTargets)\r\n setScheduleEditSteps();\r\n }, [scheduleEditTargets]);\r\n\r\n useEffect(() => {\r\n if (dataSourceIndexTargets)\r\n setDataSourceIndexSteps();\r\n }, [dataSourceIndexTargets]);\r\n\r\n useEffect(() => {\r\n if(!tourEnabled)\r\n return;\r\n \r\n const showTour = localStorage.getItem(\"ShowTour\");\r\n if (!showTour) { //If no localstorage item is set, start the tour, because it is probably the first time you see the page.\r\n setOpen(false);\r\n return;\r\n }\r\n setOpen(localStorage.getItem(\"ShowTour\") == \"true\");\r\n }, []);\r\n\r\n\r\n useEffect(() => {\r\n if (open)\r\n localStorage.setItem(\"ShowTour\", \"true\");\r\n else\r\n localStorage.setItem(\"ShowTour\", \"false\");\r\n }, [open]);\r\n\r\n\r\n useEffect(() => {\r\n if (searchTarget && accountTarget && dashboardTargets)\r\n setHeaderSteps();\r\n }, [searchTarget, accountTarget]);\r\n \r\n const setDashboardSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Player status\"),\r\n description: t(\"From here you can quickly view the current state of each player(s). It also informs you about the current content each player is playing and quickly set content to a player. \"),\r\n target: () => dashboardTargets[0],\r\n },\r\n {\r\n title: t(\"License overview\"),\r\n description: t(\"This is an overview of your current license(s) and renewal date. For a more detailed view of the current licenses, managing your license plan, just click the Administration overview button.\"),\r\n target: () => dashboardTargets[1],\r\n },\r\n ]\r\n );\r\n };\r\n\r\n const setHeaderSteps = () => {\r\n setSteps(prev =>\r\n [\r\n ...prev,\r\n {\r\n title: t(\"Search\"),\r\n description: t(\"Use the Search bar to quickly to search and access anything (such as a page/playlist or a media item) within your environment.\"),\r\n target: () => searchTarget,\r\n },\r\n {\r\n title: t(\"User Dropdown\"),\r\n description: t(\"Quickly access your environments, edit your profile and log out.\"),\r\n target: () => accountTarget,\r\n onFinish: () => location.href = `/${HttpConnection.environmentPath}/players`,\r\n nextButtonProps: {\r\n children: t(\"Go to players\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n const setPlayerSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Add new player\"),\r\n description: t(\"Use the Search bar to quickly to search and access anything (such as a page/playlist or a media item) within your environment.\"),\r\n target: () => playerTargets[0],\r\n },\r\n {\r\n title: t(\"Add players to group\"),\r\n description: t(\"Use the Search bar to quickly to search and access anything (such as a page/playlist or a media item) within your environment.\"),\r\n target: () => playerTargets[1],\r\n },\r\n {\r\n title: t(\"Set default content\"),\r\n description: t(\"Quickly access your environments, edit your profile and log out.\"),\r\n target: () => playerTargets[2],\r\n onFinish: () => location.href = `/${HttpConnection.environmentPath}/pages`,\r\n nextButtonProps: {\r\n children: t(\"Go to pages\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n\r\n const setPageSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Import page\"),\r\n description: t(\"Use this button to import pages.\"),\r\n target: () => pageTargets[0],\r\n },\r\n {\r\n title: t(\"Add new folder\"),\r\n description: t(\"Use this button to create folders for your pages, and keep your environment organized\"),\r\n target: () => pageTargets[1],\r\n },\r\n {\r\n title: t(\"Add new page\"),\r\n description: t(\"Start creating new content with this button\"),\r\n target: () => pageTargets[2],\r\n onFinish: () => {\r\n const pageDto: PageDto = {\r\n id: undefined,\r\n resolution: new Size(1920, 1080),\r\n name: t(\"New Page\"),\r\n elements: [],\r\n dataSourceIds: [],\r\n duration: 10,\r\n scrolling: true,\r\n stepSize: 1,\r\n scrollDuringPageSwap: true,\r\n scrollTime: 10,\r\n createdUtc: undefined,\r\n lastUpdatedUtc: undefined\r\n };\r\n TdmApi.pages\r\n .post(pageDto)\r\n .then(result => location.href = `/${HttpConnection.environmentPath}/pages/${result.id}`);\r\n },\r\n nextButtonProps: {\r\n children: t(\"Create a page\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n const setDesignerSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Edit name\"),\r\n description: t(\"Edit the name of your page\"),\r\n target: () => designerTargets[0],\r\n },\r\n {\r\n title: t(\"Zoom buttons\"),\r\n description: t(\"Zoom your canvas in and out with this button, it is also possible to zoom using 'ctrl' + 'scroll'\"),\r\n target: () => designerTargets[1],\r\n },\r\n {\r\n title: t(\"Undo/Redo\"),\r\n description: t(\"Undo and redo your changes while editing your content\"),\r\n target: () => designerTargets[2],\r\n },\r\n {\r\n title: t(\"See a preview\"),\r\n description: t(\"See a preview of your content\"),\r\n target: () => designerTargets[3],\r\n },\r\n {\r\n title: t(\"Play and pause\"),\r\n description: t(\"Use this button to pause and play content while editing your content\"),\r\n target: () => designerTargets[4],\r\n },\r\n {\r\n title: t(\"Element types\"),\r\n description: t(\"All your element types are shown here. Select or drag one and start designing your content\"),\r\n target: () => designerTargets[5],\r\n },\r\n {\r\n title: t(\"Document properties\"),\r\n description: t(\"Here it is possible to edit all the properties of this page, for example: Resolution, background, foreground and export your page to use it in other environments\"),\r\n target: () => designerTargets[6],\r\n },\r\n {\r\n title: t(\"Layers\"),\r\n description: t(\"All your elements are displayed here, double click an element to rename one\"),\r\n target: () => designerTargets[7],\r\n onFinish: () => location.href = `/${HttpConnection.environmentPath}/playlists`,\r\n nextButtonProps: {\r\n children: t(\"Go to playlists\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n\r\n const setPlaylistSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Add new folder\"),\r\n description: t(\"Use this button to create folders for your playlists, and keep your environment organized\"),\r\n target: () => playlistTargets[0],\r\n },\r\n {\r\n title: t(\"Add a playlist\"),\r\n description: t(\"Start creating a playlists\"),\r\n target: () => playlistTargets[1],\r\n onFinish: () => {\r\n const playlistDto: PlaylistDto = {\r\n id: undefined,\r\n createdUtc: undefined,\r\n lastUpdatedUtc: undefined,\r\n resolution: new Size(1920, 1080),\r\n name: t(\"New Playlist\"),\r\n shuffle: false,\r\n items: []\r\n };\r\n TdmApi.playlists\r\n .post(playlistDto)\r\n .then(result => location.href = `/${HttpConnection.environmentPath}/playlists/${result.id}`);\r\n },\r\n nextButtonProps: {\r\n children: t(\"Create a playlist\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n const setPlaylistEditSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Edit name\"),\r\n description: t(\"Edit the name of your playlist\"),\r\n target: () => playlistEditTargets[0],\r\n },\r\n {\r\n title: t(\"Playlist\"),\r\n description: t(\"See all the content that is added to your playlist\"),\r\n target: () => playlistEditTargets[1],\r\n },\r\n {\r\n title: t(\"Menu\"),\r\n description: t(\"Choose the content type to add to your playlist\"),\r\n target: () => playlistEditTargets[2],\r\n },\r\n {\r\n title: t(\"Content\"),\r\n description: t(\"Drag pages, playlists, media items to your playlist\"),\r\n target: () => playlistEditTargets[3],\r\n onFinish: () => location.href = `/${HttpConnection.environmentPath}/media`,\r\n nextButtonProps: {\r\n children: t(\"Go to media\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n const setMediaBrowserSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Add storage provider\"),\r\n description: t(\"Connect your dropbox, or onedrive to directly show content from these providers\"),\r\n target: () => mediaBrowserTargets[0],\r\n },\r\n {\r\n title: t(\"Storage providers\"),\r\n description: t(\"See all the storage providers that are added to your environment\"),\r\n target: () => mediaBrowserTargets[1],\r\n },\r\n {\r\n title: t(\"Folders\"),\r\n description: t(\"Navigate trough your connected storage provider\"),\r\n target: () => mediaBrowserTargets[2],\r\n },\r\n {\r\n title: t(\"Files\"),\r\n description: t(\"See all the files that are present in the current folder\"),\r\n target: () => mediaBrowserTargets[3],\r\n },\r\n {\r\n title: t(\"Upload files\"),\r\n description: t(\"Upload files to the storage provider\"),\r\n target: () => mediaBrowserTargets[4],\r\n },\r\n {\r\n title: t(\"Details\"),\r\n description: t(\"See the details of a selected file\"),\r\n target: () => mediaBrowserTargets[5],\r\n onFinish: () => location.href = `/${HttpConnection.environmentPath}/schedules`,\r\n nextButtonProps: {\r\n children: t(\"Go to schedules\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n const setScheduleIndexSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Schedules list\"),\r\n description: t(\"See the list with created schedules\"),\r\n target: () => scheduleIndexTargets[0],\r\n },\r\n {\r\n title: t(\"Schedules overview\"),\r\n description: t(\"See all the schedules in one overview\"),\r\n target: () => scheduleIndexTargets[1],\r\n },\r\n {\r\n title: t(\"Create schedule\"),\r\n description: t(\"Create new Schedule\"),\r\n target: () => scheduleIndexTargets[2],\r\n onFinish: () => {\r\n const scheduleDto: ScheduleDto = {\r\n name: \"New Schedule\",\r\n actions: [],\r\n activePeriods: [],\r\n state: undefined,\r\n enabled: false,\r\n exceptions: [],\r\n targets: [],\r\n };\r\n TdmApi.schedules.post(scheduleDto).then((result) => {\r\n location.href = `/${HttpConnection.environmentPath}/schedules/${result.id}`;\r\n });\r\n\r\n },\r\n nextButtonProps: {\r\n children: t(\"Create a schedule\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n const setScheduleEditSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Active periods\"),\r\n description: t(\"Edit when the schedule should be active\"),\r\n target: () => scheduleEditTargets[0],\r\n },\r\n {\r\n title: t(\"State\"),\r\n description: t(\"Tell which state the players need to have when the schedule is active\"),\r\n target: () => scheduleEditTargets[1],\r\n },\r\n {\r\n title: t(\"Targets\"),\r\n description: t(\"Select the players or player groups where this schedule needs to be assigned to\"),\r\n target: () => scheduleEditTargets[2],\r\n },\r\n {\r\n title: t(\"Schedule overview\"),\r\n description: t(\"See an overview of when this schedule is active\"),\r\n target: () => scheduleEditTargets[3],\r\n onFinish: () => {\r\n location.href = `/${HttpConnection.environmentPath}/dataSources`;\r\n },\r\n nextButtonProps: {\r\n children: t(\"Go to data sources\"),\r\n }\r\n }\r\n ]\r\n );\r\n };\r\n\r\n const setDataSourceIndexSteps = () => {\r\n setSteps(\r\n [\r\n {\r\n title: t(\"Data sources\"),\r\n description: t(\"See the list with data sources you have created\"),\r\n target: () => dataSourceIndexTargets[0],\r\n },\r\n {\r\n title: t(\"Create a data source\"),\r\n description: t(\"Choose a datasource type you want to create and create that data source\"),\r\n target: () => dataSourceIndexTargets[1],\r\n }\r\n ]\r\n );\r\n };\r\n\r\n\r\n const contextValue: TourType = {\r\n tourEnabled: tourEnabled,\r\n startTour: setOpen,\r\n setDashboardTargets: setDashboardTargets,\r\n setSearchTarget: setSearchTarget,\r\n setAccountTarget: setAccountTarget,\r\n setPlayerTargets: setPlayerTargets,\r\n setPageTargets: setPageTargets,\r\n setDesignerTargets: setDesignerTargets,\r\n setPlaylistTargets: setPlaylistTargets,\r\n setPlaylistEditTargets: setPlaylistEditTargets,\r\n setMediaBrowserTargets: setMediaBrowserTargets,\r\n setScheduleIndexTargets: setScheduleIndexTargets,\r\n setScheduleEditTargets: setScheduleEditTargets,\r\n setDataSourceIndexTargets: setDataSourceIndexTargets,\r\n isShowingTour: open\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n setOpen(false)} steps={steps}/>\r\n );\r\n};\r\n\r\nexport default TourContextProvider;\r\n\r\nconst useTour = () => useContext(TourContext);\r\n\r\nexport {useTour};","import {Cookie} from \"../Util/Cookie\";\r\nimport {KeyValueIndexedDb} from \"shared/Util/KeyValueIndexedDb\";\r\nimport {Constants} from \"shared/Teos/Constants\";\r\n\r\nexport class HttpConnection {\r\n public static environmentPath: string = Cookie.getCookie(\"lastVisitedEnvironmentPath\");\r\n public static hostOverride: string = Cookie.getCookie(\"hostOverride\") ?? \"\";\r\n public static isTeos: boolean = HttpConnection.hostOverride !== \"\";\r\n\r\n static createUrl(id: string | null, route: string, withEnvironment = true) {\r\n return this.hostOverride + (withEnvironment ? `/${this.environmentPath}` : '') + `/${route}`;\r\n }\r\n\r\n static postAsync(object: any, route: string, withEnvironment = true) {\r\n const fullRoute = (withEnvironment ? `/${this.environmentPath}` : '') + `/${route}`;\r\n return this.send(object, this.hostOverride + fullRoute, \"POST\");\r\n }\r\n\r\n static getAsync(id: string | null, route: string, withEnvironment = true) {\r\n const fullRoute = (withEnvironment ? `/${this.environmentPath}` : '') + `/${route}`;\r\n return this.sendId(id, this.hostOverride + fullRoute, \"GET\");\r\n }\r\n\r\n static putAsync(object: any, route: string, withEnvironment = true) {\r\n const fullRoute = (withEnvironment ? `/${this.environmentPath}` : '') + `/${route}`;\r\n return this.send(object, this.hostOverride + fullRoute, \"PUT\");\r\n }\r\n\r\n static deleteAsync(id: string, route: string, withEnvironment = true) {\r\n const fullRoute = (withEnvironment ? `/${this.environmentPath}` : '') + `/${route}`;\r\n return this.sendId(id, this.hostOverride + fullRoute, \"DELETE\");\r\n }\r\n\r\n static async getBearerAuth(): Promise {\r\n const db = KeyValueIndexedDb.getDb(\"TdmVariables\");\r\n\r\n if (!db) return null;\r\n\r\n const tdmAccessToken = await db.get(Constants.TdmDb.AccessToken);\r\n\r\n if (!tdmAccessToken) return null;\r\n\r\n return tdmAccessToken;\r\n }\r\n\r\n static async sendId(id: string | null, route: string, method: string) {\r\n try {\r\n\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json, application/octet-stream',\r\n };\r\n\r\n const url = `${id != null ? `${route}/${encodeURIComponent(id)}` : route}`;\r\n const aToken = await HttpConnection.getBearerAuth();\r\n if (aToken)\r\n headers[\"Authorization\"] = `Bearer ${aToken}`;\r\n\r\n const response = await fetch(url, {\r\n method: method,\r\n headers: headers,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Error! status: ${response.status}`);\r\n }\r\n\r\n const contentType = response.headers.get(\"content-type\");\r\n if (contentType && contentType.indexOf(\"application/json\") !== -1)\r\n return response.json();\r\n\r\n return response;\r\n\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n console.log('error message: ', error.message);\r\n throw error.message;\r\n } else {\r\n console.log('unexpected error: ', error);\r\n throw 'An unexpected error occurred';\r\n }\r\n }\r\n }\r\n\r\n private static async send(object: any, route: string, method: string) {\r\n return new Promise((resolve, reject) => {\r\n\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n };\r\n\r\n HttpConnection.getBearerAuth().then((auth) => {\r\n if (auth)\r\n headers[\"Authorization\"] = `Bearer ${auth}`;\r\n\r\n fetch(`${route}`, {\r\n method: method,\r\n body: JSON.stringify(object),\r\n headers: headers,\r\n }).then(async response => {\r\n if (response.ok) {\r\n try {\r\n resolve(await response.json());\r\n } catch {\r\n resolve(null);\r\n }\r\n } else {\r\n console.error(response);\r\n try {\r\n reject(await response.json());\r\n } catch {\r\n reject(null);\r\n }\r\n }\r\n }).catch(error => {\r\n reject(error);\r\n });\r\n });\r\n });\r\n }\r\n}","export class Size {\r\n public width: number;\r\n public height: number;\r\n\r\n constructor(width: number, height: number) {\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n public equals(size: Size): boolean {\r\n return this.height == size.height && this.width == size.width;\r\n }\r\n}","export class TdmUrl {\r\n public static root = `${window.location.protocol}//${window.location.host}/`;\r\n public static account = {\r\n login: (returnUrl?: string) => `/account/login${returnUrl ? \"?returnUrl=\" + encodeURIComponent(returnUrl) : \"\"}`,\r\n register: (returnUrl?: string) => `/account/register${returnUrl ? \"?returnUrl=\" + encodeURIComponent(returnUrl) : \"\"}`\r\n };\r\n private static currentEnvironment: string = window.location.pathname.split('/')[1];\r\n public static environments = {\r\n environments: '/environments',\r\n join: (invitationId: string, environment?: string) => `${environment ?? TdmUrl.currentEnvironment}/join/${invitationId}`\r\n };\r\n}","// This code was generated by a Reinforced.Typings tool.\r\n// Changes to this file may cause incorrect behavior and will be lost if\r\n// the code is regenerated.\r\n\r\nexport enum ActionPermission {\r\n Pages = 0,\r\n PageOverview = 1,\r\n PageView = 2,\r\n PageEdit = 3,\r\n PageCreate = 4,\r\n PageDelete = 5,\r\n PageAll = 6,\r\n Playlists = 16,\r\n PlaylistOverview = 17,\r\n PlaylistView = 18,\r\n PlaylistEdit = 19,\r\n PlaylistCreate = 20,\r\n PlaylistDelete = 21,\r\n PlaylistAll = 22,\r\n Players = 32,\r\n PlayerOverview = 33,\r\n PlayerRegister = 34,\r\n PlayerConfigure = 35,\r\n PlayerControl = 36,\r\n PlayerAssignContent = 37,\r\n PlayerDelete = 38,\r\n PlayerAll = 39,\r\n Media = 48,\r\n MediaOverview = 49,\r\n MediaView = 50,\r\n MediaEdit = 51,\r\n MediaUpload = 52,\r\n MediaDelete = 53,\r\n MediaAll = 54,\r\n DataSources = 64,\r\n DataSourceOverview = 65,\r\n DataSourceView = 66,\r\n DataSourceEdit = 67,\r\n DataSourceCreate = 68,\r\n DataSourceDelete = 69,\r\n DataSourceAll = 70,\r\n Schedules = 80,\r\n ScheduleOverview = 81,\r\n ScheduleView = 82,\r\n ScheduleEdit = 83,\r\n ScheduleCreate = 84,\r\n ScheduleDelete = 85,\r\n ScheduleAll = 86,\r\n Fonts = 96,\r\n FontOverview = 97,\r\n FontView = 98,\r\n FontEdit = 99,\r\n FontCreate = 100,\r\n FontDelete = 101,\r\n FontAll = 102,\r\n Environments = 112,\r\n EnvironmentManage = 113,\r\n EnvironmentInviteUser = 114,\r\n EnvironmentSetUserRole = 115,\r\n EnvironmentSetAdminRole = 116,\r\n Interactions = 128,\r\n InteractionOverview = 129,\r\n InteractionView = 130,\r\n InteractionEdit = 131,\r\n InteractionCreate = 132,\r\n InteractionDelete = 133,\r\n InteractionAll = 134,\r\n AuthorizeExact = 144,\r\n ContentLog = 145\r\n}\r\n","// This code was generated by a Reinforced.Typings tool.\r\n// Changes to this file may cause incorrect behavior and will be lost if\r\n// the code is regenerated.\r\n\r\nexport enum LicensePermission {\r\n PlaySignage = 1,\r\n CreateEnvironment = 2,\r\n CreateMultipleEnvironments = 3,\r\n Interactivity = 4,\r\n ContentLog = 5,\r\n MailToSignage = 6,\r\n WindowsPlayers = 7,\r\n PowerBi = 8,\r\n ProofOfPlay = 9,\r\n CustomFonts = 10,\r\n CustomDataSources = 100,\r\n RealWorks = 101,\r\n Sharepoint = 102,\r\n Canva = 103,\r\n AzureSso = 104,\r\n Zermelo = 105,\r\n Amadeus = 106\r\n}\r\n","/* eslint-disable @typescript-eslint/no-var-requires */\r\nconst tdmLogo = \"/TdmStaticFiles/Img/shared/logo-tdm-sm.svg\";\r\nconst tdmLogoDark = \"/TdmStaticFiles/Img/shared/logo-tdm.svg\";\r\nconst teosLogo = \"/TdmStaticFiles/Img/shared/logo-teos-sm.svg\";\r\nconst teosLogoDark = \"/TdmStaticFiles/Img/shared/logo-teos.svg\";\r\nconst defaultImage = \"/TdmStaticFiles/Img/shared/template-placeholder.svg\";\r\nconst powerPointThumbnail = \"/TdmStaticFiles/Img/shared/icons/toolbar/icon-powerpoint.svg\";\r\nconst audioThumbnail = \"/TdmStaticFiles/Img/shared/icons/toolbar/icon-audio.svg\";\r\nconst videoThumbnail = \"/TdmStaticFiles/Img/shared/icons/toolbar/icon-video.svg\";\r\nconst folderImage = \"/TdmStaticFiles/Img/shared/icons/designer/icon-folder.svg\";\r\nexport {defaultImage};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nexport namespace Defaults {\r\n export const TDM_LOGO = tdmLogo;\r\n export const TDM_LOGO_DARK = tdmLogoDark;\r\n export const TEOS_LOGO = teosLogo;\r\n export const TEOS_LOGO_DARK = teosLogoDark;\r\n export const IMAGE_URL = defaultImage;\r\n export const FOLDER_URL = folderImage;\r\n export const POWERPOINT_THUMBNAIL = powerPointThumbnail;\r\n export const AUDIO_THUMBNAIL = audioThumbnail;\r\n export const VIDEO_THUMBNAIL = videoThumbnail;\r\n}\r\n","// eslint-disable-next-line @typescript-eslint/no-namespace\r\nexport namespace Constants {\r\n export const TdmDb = {\r\n Variables: \"TdmVariables\",\r\n BaseUrl: \"TdmBaseUrl\",\r\n AccessToken: \"TdmAccessToken\",\r\n };\r\n \r\n export const TdmCookies = {\r\n BaseUrl: \"hostOverride\",\r\n AccessToken: \"TeosTdmAccessToken\"\r\n };\r\n}\r\n","export class Cookie {\r\n static getCookie(name: string) {\r\n const result = decodeURIComponent(document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || null);\r\n return result == \"null\" ? undefined : result;\r\n }\r\n\r\n static addCookie(name: string, value: string, global: boolean = false) {\r\n document.cookie = `${name}=${value}; ${global ? \"path=/\" : \"\"}`;\r\n }\r\n\r\n static deleteCookie(name: string) {\r\n document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n }\r\n}","import {IDBPDatabase, openDB} from \"idb\";\r\n\r\nexport class KeyValueIndexedDb {\r\n private static dbInstances: { [key: string]: IndexedDbKeyValueStore } = {}\r\n\r\n public static getDb(name: string) {\r\n if (this.dbInstances[name] === undefined)\r\n this.dbInstances[name] = new IndexedDbKeyValueStore(name);\r\n\r\n return this.dbInstances[name];\r\n }\r\n}\r\n\r\nexport class IndexedDbKeyValueStore {\r\n private dbInstance: Promise;\r\n \r\n constructor(name: string) {\r\n this.dbInstance = openDB(name, 1, {\r\n upgrade(db) {\r\n db.createObjectStore(\"items\")\r\n }\r\n });\r\n }\r\n\r\n public async get(key: any) {\r\n return (await this.dbInstance).get(\"items\", key);\r\n }\r\n public async set(key: any, val: any) {\r\n return (await this.dbInstance).put(\"items\", val, key);\r\n }\r\n public async delete(key: any) {\r\n return (await this.dbInstance).delete(\"items\", key);\r\n }\r\n public async clear() {\r\n return (await this.dbInstance).clear(\"items\");\r\n }\r\n public async keys() {\r\n return (await this.dbInstance).getAllKeys(\"items\");\r\n }\r\n}","function hexToBase64(hex: string) {\r\n return btoa(\r\n hex\r\n .match(/\\w{2}/g)\r\n .map(\r\n (a) => String.fromCharCode(parseInt(a, 16))\r\n )\r\n .join(\"\")\r\n );\r\n}\r\n\r\nclass Md5 {\r\n\r\n public static hashToBase64(input: string): string {\r\n return hexToBase64(this.hashToHex(input));\r\n }\r\n\r\n // https://stackoverflow.com/a/60467595\r\n public static hashToHex(input: string): string {\r\n const hc = \"0123456789abcdef\";\r\n\r\n function rh(n: number): string {\r\n let j: number, s = \"\";\r\n for (j = 0; j <= 3; j++) s += hc.charAt((n >> (j * 8 + 4)) & 0x0F) + hc.charAt((n >> (j * 8)) & 0x0F);\r\n return s;\r\n }\r\n\r\n function ad(x: number, y: number): number {\r\n const l = (x & 0xFFFF) + (y & 0xFFFF);\r\n const m = (x >> 16) + (y >> 16) + (l >> 16);\r\n return (m << 16) | (l & 0xFFFF);\r\n }\r\n\r\n function rl(n: number, c: number): number {\r\n return (n << c) | (n >>> (32 - c));\r\n }\r\n\r\n function cm(q: number, a: number, b: number, x: number, s: number, t: number): number {\r\n return ad(rl(ad(ad(a, q), ad(x, t)), s), b);\r\n }\r\n\r\n function ff(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\r\n return cm((b & c) | ((~b) & d), a, b, x, s, t);\r\n }\r\n\r\n function gg(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\r\n return cm((b & d) | (c & (~d)), a, b, x, s, t);\r\n }\r\n\r\n function hh(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\r\n return cm(b ^ c ^ d, a, b, x, s, t);\r\n }\r\n\r\n function ii(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\r\n return cm(c ^ (b | (~d)), a, b, x, s, t);\r\n }\r\n\r\n function sb(x: string) {\r\n let i: number;\r\n const nblk = ((x.length + 8) >> 6) + 1;\r\n const blks = new Array(nblk * 16);\r\n for (i = 0; i < nblk * 16; i++) blks[i] = 0;\r\n for (i = 0; i < x.length; i++) blks[i >> 2] |= x.charCodeAt(i) << ((i % 4) * 8);\r\n blks[i >> 2] |= 0x80 << ((i % 4) * 8);\r\n blks[nblk * 16 - 2] = x.length * 8;\r\n return blks;\r\n }\r\n\r\n let i: number, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, olda: number,\r\n oldb: number, oldc: number, oldd: number;\r\n const x = sb(\"\" + input);\r\n for (i = 0; i < x.length; i += 16) {\r\n olda = a;\r\n oldb = b;\r\n oldc = c;\r\n oldd = d;\r\n a = ff(a, b, c, d, x[i], 7, -680876936);\r\n d = ff(d, a, b, c, x[i + 1], 12, -389564586);\r\n c = ff(c, d, a, b, x[i + 2], 17, 606105819);\r\n b = ff(b, c, d, a, x[i + 3], 22, -1044525330);\r\n a = ff(a, b, c, d, x[i + 4], 7, -176418897);\r\n d = ff(d, a, b, c, x[i + 5], 12, 1200080426);\r\n c = ff(c, d, a, b, x[i + 6], 17, -1473231341);\r\n b = ff(b, c, d, a, x[i + 7], 22, -45705983);\r\n a = ff(a, b, c, d, x[i + 8], 7, 1770035416);\r\n d = ff(d, a, b, c, x[i + 9], 12, -1958414417);\r\n c = ff(c, d, a, b, x[i + 10], 17, -42063);\r\n b = ff(b, c, d, a, x[i + 11], 22, -1990404162);\r\n a = ff(a, b, c, d, x[i + 12], 7, 1804603682);\r\n d = ff(d, a, b, c, x[i + 13], 12, -40341101);\r\n c = ff(c, d, a, b, x[i + 14], 17, -1502002290);\r\n b = ff(b, c, d, a, x[i + 15], 22, 1236535329);\r\n a = gg(a, b, c, d, x[i + 1], 5, -165796510);\r\n d = gg(d, a, b, c, x[i + 6], 9, -1069501632);\r\n c = gg(c, d, a, b, x[i + 11], 14, 643717713);\r\n b = gg(b, c, d, a, x[i], 20, -373897302);\r\n a = gg(a, b, c, d, x[i + 5], 5, -701558691);\r\n d = gg(d, a, b, c, x[i + 10], 9, 38016083);\r\n c = gg(c, d, a, b, x[i + 15], 14, -660478335);\r\n b = gg(b, c, d, a, x[i + 4], 20, -405537848);\r\n a = gg(a, b, c, d, x[i + 9], 5, 568446438);\r\n d = gg(d, a, b, c, x[i + 14], 9, -1019803690);\r\n c = gg(c, d, a, b, x[i + 3], 14, -187363961);\r\n b = gg(b, c, d, a, x[i + 8], 20, 1163531501);\r\n a = gg(a, b, c, d, x[i + 13], 5, -1444681467);\r\n d = gg(d, a, b, c, x[i + 2], 9, -51403784);\r\n c = gg(c, d, a, b, x[i + 7], 14, 1735328473);\r\n b = gg(b, c, d, a, x[i + 12], 20, -1926607734);\r\n a = hh(a, b, c, d, x[i + 5], 4, -378558);\r\n d = hh(d, a, b, c, x[i + 8], 11, -2022574463);\r\n c = hh(c, d, a, b, x[i + 11], 16, 1839030562);\r\n b = hh(b, c, d, a, x[i + 14], 23, -35309556);\r\n a = hh(a, b, c, d, x[i + 1], 4, -1530992060);\r\n d = hh(d, a, b, c, x[i + 4], 11, 1272893353);\r\n c = hh(c, d, a, b, x[i + 7], 16, -155497632);\r\n b = hh(b, c, d, a, x[i + 10], 23, -1094730640);\r\n a = hh(a, b, c, d, x[i + 13], 4, 681279174);\r\n d = hh(d, a, b, c, x[i], 11, -358537222);\r\n c = hh(c, d, a, b, x[i + 3], 16, -722521979);\r\n b = hh(b, c, d, a, x[i + 6], 23, 76029189);\r\n a = hh(a, b, c, d, x[i + 9], 4, -640364487);\r\n d = hh(d, a, b, c, x[i + 12], 11, -421815835);\r\n c = hh(c, d, a, b, x[i + 15], 16, 530742520);\r\n b = hh(b, c, d, a, x[i + 2], 23, -995338651);\r\n a = ii(a, b, c, d, x[i], 6, -198630844);\r\n d = ii(d, a, b, c, x[i + 7], 10, 1126891415);\r\n c = ii(c, d, a, b, x[i + 14], 15, -1416354905);\r\n b = ii(b, c, d, a, x[i + 5], 21, -57434055);\r\n a = ii(a, b, c, d, x[i + 12], 6, 1700485571);\r\n d = ii(d, a, b, c, x[i + 3], 10, -1894986606);\r\n c = ii(c, d, a, b, x[i + 10], 15, -1051523);\r\n b = ii(b, c, d, a, x[i + 1], 21, -2054922799);\r\n a = ii(a, b, c, d, x[i + 8], 6, 1873313359);\r\n d = ii(d, a, b, c, x[i + 15], 10, -30611744);\r\n c = ii(c, d, a, b, x[i + 6], 15, -1560198380);\r\n b = ii(b, c, d, a, x[i + 13], 21, 1309151649);\r\n a = ii(a, b, c, d, x[i + 4], 6, -145523070);\r\n d = ii(d, a, b, c, x[i + 11], 10, -1120210379);\r\n c = ii(c, d, a, b, x[i + 2], 15, 718787259);\r\n b = ii(b, c, d, a, x[i + 9], 21, -343485551);\r\n a = ad(a, olda);\r\n b = ad(b, oldb);\r\n c = ad(c, oldc);\r\n d = ad(d, oldd);\r\n }\r\n\r\n return rh(a) + rh(b) + rh(c) + rh(d);\r\n }\r\n}\r\n\r\nexport default Md5;","import i18n from \"i18next\";\r\n\r\ntype Language = {\r\n languageCode: string\r\n label: string\r\n flagCode: string\r\n}\r\n\r\nexport class SupportedLanguages {\r\n\r\n private static SupportedLanguages: Language[] = [\r\n {languageCode: \"en\", label: \"English\", flagCode: \"GB\"},\r\n //{languageCode : \"en-US\" , label : \"American\", flagCode: \"US\"},\r\n {languageCode: \"nl\", label: \"Dutch\", flagCode: \"NL\"},\r\n {languageCode: \"fr\" , label: \"French\", flagCode: \"FR\"},\r\n {languageCode: \"de\" , label: \"German\", flagCode: \"DE\"},\r\n {languageCode: \"pl\" , label: \"Polish\", flagCode: \"PL\"},\r\n {languageCode: \"es\" , label: \"Spanish\", flagCode: \"ES\"},\r\n // {languageCode: \"it\" , label: \"Italian\", flagCode: \"IT\"},\r\n {languageCode: \"da\" , label: \"Danish\", flagCode: \"DA\"},\r\n // {languageCode: \"fy\" , label: \"Frisian\", flagCode: \"FRL\"},\r\n {languageCode: \"sv\" , label: \"Swedish\", flagCode: \"SE\"}\r\n ];\r\n\r\n public static getCountryCodes(): string[] {\r\n return this.SupportedLanguages.map(lang => lang.languageCode);\r\n }\r\n\r\n public static getCountryFlagCode(): string[] {\r\n return this.SupportedLanguages.map(lang => lang.flagCode);\r\n }\r\n\r\n public static getCountryLabels() {\r\n const result: { [key: string]: string } = {};\r\n this.SupportedLanguages.map(language => result[language.flagCode] = i18n.t(language.label));\r\n return result;\r\n }\r\n\r\n public static getLanguageCodeByFlagCode(flagCode: string): string {\r\n return this.SupportedLanguages.find(e => e.flagCode === flagCode)?.languageCode;\r\n }\r\n\r\n public static getFlagCodeByCountyCode(countryCode: string): string {\r\n return this.SupportedLanguages.find(e => e.languageCode === countryCode)?.flagCode;\r\n }\r\n}","import {SupportedLanguages} from \"./SupportedLanguages\";\r\nimport i18next from 'i18next';\r\nimport ChainedBackend from \"i18next-chained-backend\";\r\nimport HttpBackend from \"i18next-http-backend\";\r\nimport LocalStorageBackend from \"i18next-localstorage-backend\";\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport {initReactI18next} from 'react-i18next';\r\nimport {Cookie} from \"./Cookie\";\r\n\r\nconst hostOverride = Cookie.getCookie(\"hostOverride\") ?? \"\";\r\n\r\n\r\ni18next\r\n .use(LanguageDetector)\r\n .use(ChainedBackend)\r\n .use(initReactI18next)\r\n .init({\r\n fallbackLng: 'en',\r\n debug: false,\r\n load: 'languageOnly',\r\n saveMissing: true,\r\n saveMissingTo: \"all\",\r\n saveMissingPlurals: true,\r\n ns: [\r\n 'common',\r\n 'designer'\r\n ],\r\n supportedLngs: SupportedLanguages.getCountryCodes(),\r\n defaultNS: \"common\",\r\n backend: {\r\n backends: [\r\n LocalStorageBackend,\r\n HttpBackend\r\n ],\r\n backendOptions: [\r\n //LocalStorageBackend options\r\n {\r\n expirationTime: 7 * 24 * 60 * 60 * 1000 // 7 days\r\n },\r\n //HttpBackend options\r\n {\r\n loadPath: `${hostOverride}/Locales/{{lng}}/{{ns}}`,\r\n addPath: `${hostOverride}/Locales/{{lng}}/{{ns}}`,\r\n }]\r\n },\r\n detection: {\r\n order: ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator'],\r\n lookupQuerystring: 'lang',\r\n lookupCookie: 'i18next',\r\n caches: ['cookie'],\r\n cookieMinutes: 10,\r\n cookieDomain: window.location.hostname,\r\n convertDetectedLanguage: (lng) => {\r\n if(lng && lng.includes(\"-\"))\r\n return lng.split(\"-\")[0];\r\n if(lng === \"fy\")\r\n return \"nl\";\r\n return lng;\r\n }\r\n }\r\n }\r\n );\r\n\r\nexport default i18next;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"site\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkasp_net\"] = self[\"webpackChunkasp_net\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [\"node_vendors\"], () => (__webpack_require__(\"./ReactComponents/Site/Site.tsx\")))\n__webpack_require__.O(undefined, [\"node_vendors\"], () => (__webpack_require__(\"./ReactComponents/Site/Pages.tsx\")))\n__webpack_require__.O(undefined, [\"node_vendors\"], () => (__webpack_require__(\"./ReactComponents/Site/Menu.tsx\")))\n__webpack_require__.O(undefined, [\"node_vendors\"], () => (__webpack_require__(\"./ReactComponents/Site/BellIcon.tsx\")))\n__webpack_require__.O(undefined, [\"node_vendors\"], () => (__webpack_require__(\"./ReactComponents/Site/FrontPages/Product.tsx\")))\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"node_vendors\"], () => (__webpack_require__(\"./ReactComponents/Site/FrontPages/Home.tsx\")))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","AccountActions","user","setUser","useState","isAccountDropdownVisible","setIsAccountDropdownVisible","accountActionsRef","useRef","accountRef","t","useTranslation","setAccountTarget","isShowingTour","useTour","useEffect","TdmApi","users","getCurrentUser","then","current","handleClickOutside","e","contains","target","document","addEventListener","removeEventListener","rootClassName","placement","content","AccountPopover","trigger","destroyTooltipOnHide","className","AccountActionWrapper","ref","onClick","AccountActionDropdownBtn","AvatarWrapper","UserName","name","environmentsOpen","setEnvironmentsOpen","envSearchFocused","setEnvSearchFocused","id","AccountActionDropdown","AvatarLarge","onSearchFocusChanged","open","onOpenChange","newOpen","onMouseLeave","event","preventDefault","stopPropagation","href","TdmUrl","environments","stringToHslColor","str","s","l","hash","i","length","charCodeAt","header","useHeader","setOpen","enabled","compact","headerContainer","expanded","backdrop","expandHandle","headerWrapper","AccountWidgetWrapper","environment","onChange","source","setSource","setName","avatarFetched","setAvatarFetched","fetchAvatar","controller","getAvatar","catch","finally","console","error","initials","bgColor","names","replace","split","map","n","index","join","toUpperCase","substring","FallbackSvg","xmlns","viewBox","fill","width","height","fontFamily","fontSize","fontWeight","x","y","dominantBaseline","textAnchor","style","backgroundColor","src","Defaults","TDM_LOGO","alt","environmentFallbackImage","value","fallbackElement","imageClassName","breadcrumb","useEnvironment","parts","setParts","base","newParts","part","path","unshift","Fragment","key","breadcrumbPart","breadcrumbSeparator","children","functionalityName","isHovered","setHovered","container","onMouseEnter","overlay","text","functionality","imageWrapper","input","type","accept","files","URL","createObjectURL","undefined","hidden","selected","setSelected","SupportedLanguages","getFlagCodeByCountyCode","language","LanguageSelect","countries","getCountryFlagCode","customLabels","getCountryLabels","showOptionLabel","showSelectedLabel","optionsSize","fullWidth","onSelect","flagCode","changeLanguage","getLanguageCodeByFlagCode","changeLanguages","setEnvironments","query","setQuery","searchTimeout","setFromCookie","userEmailDigest","hashToBase64","emailAddress","environmentPromises","Cookie","getCookie","environmentId","get","Promise","allSettled","results","successResults","filter","result","status","recentEnvironments","autoFocus","placeholder","currentTarget","clearTimeout","setTimeout","search","onFocus","onBlur","title","environmentList","identifier","avatar","urlForSearchResult","env","HttpConnection","environmentPath","SearchResult","searchResult","lastUpdated","Date","objectFit","searchResultTitle","searchResultType","searching","setSearching","setResults","setSearchTarget","location","pathname","searchRef","searchBar","queryInput","log","onChanged","searchResultsContainer","props","animationSpeed","color","animate","active","other","overflow","stroke","strokeWidth","fillRule","attributeName","attributeType","keyTimes","values","dur","begin","repeatCount","d","addPageFunction","featureContainer","querySelector","focusStamp","elementsToObserve","querySelectorAll","focusStampParent","parentNode","classList","curFocus","remove","add","insertBefore","nextSibling","prepend","observer","IntersectionObserver","entries","forEach","isIntersecting","parentElement","el","observe","testimonialCarousel","getElementById","quoteImages","getElementsByClassName","from","to","industriesMenu","industriesContent","on","ev","data","find","addClass","siblings","removeClass","videoElements","videoEl","getElementsByTagName","item","playButton","handlePlayButton","paused","play","err","playVideo","pause","menuItemsOutsideEnvironment","icon","items","menuItemsInsideEnvironment","permissions","ActionPermission","PlayerOverview","licensePermissions","LicensePermission","PlaySignage","PageOverview","PlaylistOverview","MediaOverview","ScheduleOverview","FontOverview","CustomFonts","ContentLog","DataSourceOverview","InteractionOverview","Interactivity","MenuWrapper","menuItems","setMenuItems","expandedSubmenu","setExpandedSubmenu","expandedMenu","setExpandedMenu","setEnvironment","licenseNotification","setLicenseNotification","isMenuItemActive","some","isSubmenuLinkCurrent","subMenuItemAllowed","perm","allowed","allowedByLicense","startsWith","environmentCookie","getByPath","licenses","getLicensePlan","plan","renewalDate","toDate","nextRenewal","now","differenceInDays","getTime","isDemo","includes","sku","description","days","Math","round","handleSubmenuClick","submenuName","dataset","submenu","menu","prevState","logoWrapper","logo","menuItemAllowed","comingSoon","labelWrapper","label","menuSpacer","badge","count","size","licensePopupContent","arrow","expandButton","collapsed","submenus","submenuContent","submenuHeader","submenuItems","idx","MenuRenderer","render","menuWrapper","pageFunctions","pageName","pageFunction","getPageFunction","currentPage","getCurrentPageName","curMenuItem","ActionPermissionService","fetchAllPermissions","allPermissions","fetch","response","ok","Error","statusText","json","allowedForEnvironment","permission","permString","perms","Uint8Array","atob","c","this","hasActionPermission","fromDom","set","action","bitOffset","CalendarController","route","getCalendars","connectionId","getAsync","ConnectionController","JsonApiController","super","getStorageProviders","createBlueAndRedConnection","GetConnectedServicesFromConnection","getOAuthLogInURl","selectedType","extraOptions","encodeURI","window","login","urlParams","ContentController","constructor","contentId","getThumbnail","lastUpdatedTime","encodeURIComponent","thumbnailPath","createUrl","ContentLogController","filterValues","postAsync","DataSourceApiController","GetCoordinatesFromLocation","GetPowerBiAuthUrl","getFacebookPages","dataSourceId","getNsStations","GetInstagramLoginUrl","hostOverride","FetchCustomDataSource","arrayBuffer","getPowerBiDashboards","getPowerBiReports","getPowerBiTiles","dashboardId","uploadIcon","formData","iconType","iconId","addition","method","body","headers","Accept","getIcons","removeIcon","deleteAsync","getRealWorksDeveloperId","getImportedTeosDataSourceIds","powerBiLogin","EnvironmentApiController","getAll","post","dto","put","putAsync","validate","getDesignerCredentials","protocol","resolve","reject","credentials","bytes","int32","Int32Array","ivLength","hashLength","messageLength","uint8","slice","iv","message","settings","rawKey","TextEncoder","encode","baseKey","crypto","subtle","importKey","deriveKey","salt","iterations","decrypt","encodedCredentials","jsonString","TextDecoder","decode","JSON","parse","getDesignerCredentialsPlain","getCustomer","invitationId","uploadAvatar","getNotifications","EnvironmentInvitationApiController","postMultiple","resendInvitation","FileSystemApiController","createFolder","storageProviderId","folderName","getBreadcrumb","fileUri","getFolderContent","folderId","getFileContent","getFile","uploadFile","uploadFileToDefault","copyFile","moveFile","destinationFileUri","moveFolder","renameFile","newName","renameFolder","deleteFile","deleteFolder","folderUri","FontApiController","uploadFont","fontFamilyId","setDefaultFonts","InteractionController","updateToken","move","toFolder","rename","clone","LicenseController","getLicenseType","getLicenseTypesByIds","ids","getLicenseTypes","baseTypes","getDemoLicenseTypes","assign","extend","putCustomer","getProducts","category","reviewOrder","order","reviewProductOrder","placeOrder","placeProductOrder","activateDemoLicense","downgrade","cancelDowngrade","cancelLicensePlan","uncancelLicensePlan","cancelModules","moduleIds","uncancelModules","getNextPaymentInfo","getOrder","validateVatNumber","vatNumber","hasLicensePermission","allowedForUser","permissionsBase64","MediaApiController","getFromStorageContent","PageApiController","importPage","exportPage","pageId","blob","url","link","createElement","filename","extractFilenameFromHeaders","setAttribute","appendChild","click","removeChild","revokeObjectURL","contentDisposition","matches","exec","PageFolderApiController","getBreadCrumb","PlayerApiController","register","player","environmentIdentifier","addLicenseToPlayer","playerId","removeLicenseFromPlayer","PlaylistController","wouldContainItself","playlist","PlaylistFolderApiController","ResourcePermissionController","resourceType","resourceId","actions","players","playerGroups","playlists","playlistFolders","pages","pageFolders","elements","media","dataSources","environmentInvitations","UserApiController","userRoles","fileSystem","schedules","fonts","fontFamilies","connections","calendars","util","UtilController","interactions","resourcePermissions","contentLog","vouchers","VoucherController","getAllInEnvironment","noCache","currentUser","putCurrentUser","changeEmail","newEmailAddress","changePassword","currentPassword","newPassword","userId","logout","token","stringify","utcTime","stringValue","getCspHeaders","checkVoucherCode","code","fallBackImage","noLoader","loaderClass","isFolder","imageSrc","setImageSrc","thumbnailLoaded","setThumbnailLoaded","retries","setRetries","retryTimeout","FOLDER_URL","IMAGE_URL","onLoad","onError","draggable","skeletonImage","EnvironmentContext","createContext","useContext","context","updateEnvironment","environmentDto","Provider","HeaderContext","setBreadcrumb","setHeader","contextValue","updateBreadcrumb","params","updateHeader","TourContext","dashboardTargets","setDashboardTargets","playerTargets","setPlayerTargets","pageTargets","setPageTargets","designerTargets","setDesignerTargets","playlistTargets","setPlaylistTargets","playlistEditTargets","setPlaylistEditTargets","mediaBrowserTargets","setMediaBrowserTargets","scheduleIndexTargets","setScheduleIndexTargets","scheduleEditTargets","setScheduleEditTargets","dataSourceIndexTargets","setDataSourceIndexTargets","searchTarget","accountTarget","steps","setSteps","tourEnabled","isTeos","setDashboardSteps","setPlayerSteps","setPageSteps","setDesignerSteps","setPlaylistSteps","setPlaylistEditSteps","setMediaBrowserSteps","setScheduleIndexSteps","setScheduleEditSteps","setDataSourceIndexSteps","localStorage","getItem","setItem","setHeaderSteps","prev","onFinish","nextButtonProps","pageDto","resolution","Size","dataSourceIds","duration","scrolling","stepSize","scrollDuringPageSwap","scrollTime","createdUtc","lastUpdatedUtc","playlistDto","shuffle","scheduleDto","activePeriods","state","exceptions","targets","startTour","onClose","withEnvironment","object","fullRoute","send","sendId","getBearerAuth","db","KeyValueIndexedDb","getDb","tdmAccessToken","Constants","TdmDb","AccessToken","aToken","contentType","indexOf","auth","equals","root","host","account","returnUrl","currentEnvironment","defaultImage","TDM_LOGO_DARK","TEOS_LOGO","TEOS_LOGO_DARK","POWERPOINT_THUMBNAIL","AUDIO_THUMBNAIL","VIDEO_THUMBNAIL","Variables","BaseUrl","TdmCookies","decodeURIComponent","cookie","match","pop","addCookie","global","deleteCookie","dbInstances","IndexedDbKeyValueStore","dbInstance","openDB","upgrade","createObjectStore","val","delete","clear","keys","getAllKeys","hex","hashToHex","btoa","a","String","fromCharCode","parseInt","hc","rh","j","charAt","ad","cm","q","b","rl","ff","gg","hh","ii","olda","oldb","oldc","oldd","nblk","blks","Array","sb","getCountryCodes","lang","languageCode","countryCode","use","initReactI18next","init","fallbackLng","debug","load","saveMissing","saveMissingTo","saveMissingPlurals","ns","supportedLngs","defaultNS","backend","backends","backendOptions","expirationTime","loadPath","addPath","detection","lookupQuerystring","lookupCookie","caches","cookieMinutes","cookieDomain","hostname","convertDetectedLanguage","lng","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","Object","every","splice","r","getter","__esModule","getPrototypeOf","obj","mode","create","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","g","globalThis","Function","hmd","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","push","__webpack_exports__"],"sourceRoot":""}