wcz-layout 5.2.2 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "wcz-layout",
3
+ "license": "MIT",
4
+ "author": "Dalibor Homola",
5
+ "version": "0.1.8",
6
+ "main": "dist/src/index.js",
7
+ "module": "dist/src/index.js",
8
+ "exports": {
9
+ ".": "./dist/src/index.js"
10
+ },
11
+ "scripts": {
12
+ "npm-install": "npm install",
13
+ "npm-update": "npm update",
14
+ "analyze": "cem analyze --litelement",
15
+ "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
16
+ "build": "tsc && npm run analyze -- --exclude dist",
17
+ "prepublish": "tsc && npm run analyze -- --exclude dist",
18
+ "publish": "npm publish"
19
+ },
20
+ "dependencies": {
21
+ "guid-ts": "^1.1.2",
22
+ "i18next": "^22.0.6",
23
+ "i18next-browser-languagedetector": "^7.0.1",
24
+ "i18next-http-backend": "^2.0.1",
25
+ "keycloak-js": "^19.0.2",
26
+ "react-i18next": "^12.0.0"
27
+ },
28
+ "devDependencies": {
29
+ "@custom-elements-manifest/analyzer": "^0.4.17",
30
+ "@web/dev-server": "^0.1.28",
31
+ "concurrently": "^5.3.0",
32
+ "lit": "^2.0.2",
33
+ "react": "18.2.0",
34
+ "react-dom": "18.2.0",
35
+ "tslib": "^2.3.1",
36
+ "typescript": "^4.8.4"
37
+ },
38
+ "peerDependencies": {
39
+ "@emotion/react": "11.x",
40
+ "@emotion/styled": "11.x",
41
+ "@mui/icons-material": "5.x",
42
+ "@mui/material": "5.x",
43
+ "@tanstack/react-query": "4.x",
44
+ "moment": "2.x",
45
+ "react-router-dom": "6.x"
46
+ },
47
+ "customElements": "custom-elements.json",
48
+ "keycloak": {}
49
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../../../src/components/layout/leftDrawer/LeftDrawerItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAWrD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAA0B;IACzD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG;YACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEpC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAA;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM;QACxC,OAAO,IAAI,CAAC;IAEhB,OAAO,CACH,MAAC,QAAQ,IAAC,MAAM,QAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,GAAG,EAAE,OAAO,EAAE,aAAa,aACxE,KAAC,YAAY,cACR,IAAI,GACM,EACf,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,GAAI,IACzB,CACd,CAAA;AACL,CAAC","sourcesContent":["import { ListItem, ListItemIcon, ListItemText } from '@mui/material';\r\nimport React from 'react';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { hasRole } from '../../../utils/UserService';\r\n\r\ninterface LeftDrawerItemProps {\r\n title: string,\r\n url: string,\r\n icon: React.ReactNode,\r\n forRole?: string[],\r\n setDrawerOpen: (drawerOpen: boolean) => void,\r\n hidden?: boolean\r\n}\r\n\r\nexport default function DrawerItem(props: LeftDrawerItemProps) {\r\n const { title, url, icon, forRole, setDrawerOpen, hidden } = props;\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n const handleOnClick = () => {\r\n navigate(url);\r\n\r\n if (location.pathname === url)\r\n return window.location.reload();\r\n\r\n setDrawerOpen(false);\r\n }\r\n\r\n if ((forRole && !hasRole(forRole)) || hidden)\r\n return null;\r\n\r\n return (\r\n <ListItem button selected={location.pathname === url} onClick={handleOnClick}>\r\n <ListItemIcon>\r\n {icon}\r\n </ListItemIcon>\r\n <ListItemText primary={title} />\r\n </ListItem>\r\n )\r\n}\r\n"]}
1
+ {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../../../src/components/layout/leftDrawer/LeftDrawerItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAWrD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAA0B;IACzD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG;YACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEpC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAA;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM;QACxC,OAAO,IAAI,CAAC;IAEhB,OAAO,CACH,MAAC,QAAQ,IAAC,MAAM,QAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,GAAG,EAAE,OAAO,EAAE,aAAa,aACxE,KAAC,YAAY,cACR,IAAI,GACM,EACf,KAAC,YAAY,IAAC,OAAO,EAAE,KAAK,GAAI,IACzB,CACd,CAAA;AACL,CAAC","sourcesContent":["import { ListItem, ListItemIcon, ListItemText } from '@mui/material';\nimport React from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { hasRole } from '../../../utils/UserService';\n\ninterface LeftDrawerItemProps {\n title: string,\n url: string,\n icon: React.ReactNode,\n forRole?: string[],\n setDrawerOpen: (drawerOpen: boolean) => void,\n hidden?: boolean\n}\n\nexport default function DrawerItem(props: LeftDrawerItemProps) {\n const { title, url, icon, forRole, setDrawerOpen, hidden } = props;\n const navigate = useNavigate();\n const location = useLocation();\n\n const handleOnClick = () => {\n navigate(url);\n\n if (location.pathname === url)\n return window.location.reload();\n\n setDrawerOpen(false);\n }\n\n if ((forRole && !hasRole(forRole)) || hidden)\n return null;\n\n return (\n <ListItem button selected={location.pathname === url} onClick={handleOnClick}>\n <ListItemIcon>\n {icon}\n </ListItemIcon>\n <ListItemText primary={title} />\n </ListItem>\n )\n}\n"]}
@@ -7,8 +7,8 @@ import I18NextHttpBackend from 'i18next-http-backend';
7
7
  import moment from 'moment';
8
8
  import { createContext, useCallback, useEffect, useMemo, useState } from 'react';
9
9
  import { initReactI18next, useTranslation } from 'react-i18next';
10
- import Layout from '../components/Layout';
11
10
  import CenteredBox from '../components/common/CenteredBox';
11
+ import Layout from '../components/Layout';
12
12
  import { persistStorage } from '../utils/PersistStorage';
13
13
  import { doLogin, doLogout, initKeycloak, loggedIn } from '../utils/UserService';
14
14
  export const LayoutContext = createContext({});
@@ -23,7 +23,6 @@ i18next
23
23
  .use(LanguageDetector)
24
24
  .use(I18NextHttpBackend)
25
25
  .init({ fallbackLng: 'en' });
26
- //Moment
27
26
  moment.defaultFormat = 'YYYY-MM-DD';
28
27
  moment.fn.formatDate = function () {
29
28
  if (!this.isValid())
@@ -65,10 +64,11 @@ export function LayoutProvider(props) {
65
64
  queries: {
66
65
  enabled: enabled,
67
66
  refetchOnWindowFocus: false,
68
- onError: message => setSnackbar({ message: String(message), severity: "error" })
67
+ onError: message => setSnackbar({ message: String(message), severity: "error" }),
68
+ retry: false
69
69
  },
70
70
  mutations: {
71
- onError: message => setSnackbar({ message: String(message), severity: "error" })
71
+ onError: message => setSnackbar({ message: String(message), severity: "error" }),
72
72
  }
73
73
  });
74
74
  };
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutContext.js","sourceRoot":"","sources":["../../../src/contexts/LayoutContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Alert, Snackbar, Stack } from '@mui/material';\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\r\nimport i18next, { i18n, TFunction } from 'i18next';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport I18NextHttpBackend from 'i18next-http-backend';\r\nimport moment from 'moment';\r\nimport { createContext, ReactNode, SyntheticEvent, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { initReactI18next, useTranslation } from 'react-i18next';\r\nimport Layout from '../components/Layout';\r\nimport CenteredBox from '../components/common/CenteredBox';\r\nimport KeycloakExtendedConfig from '../models/KeycloakExtendedConfig';\r\nimport { LeftDrawerItem } from '../models/LeftDrawerItem';\r\nimport SnackbarModel from '../models/SnackbarModel';\r\nimport { ExtendedUser, User } from '../models/User';\r\nimport { persistStorage } from '../utils/PersistStorage';\r\nimport { doLogin, doLogout, initKeycloak, loggedIn } from '../utils/UserService';\r\n\r\ninterface LayoutContextInterface {\r\n changeTitle: (title: string) => void,\r\n snackbar: (snackbar: SnackbarModel) => void,\r\n user: User,\r\n t: TFunction<\"translation\", undefined>,\r\n i18n: i18n\r\n}\r\n\r\nexport const LayoutContext = createContext({} as LayoutContextInterface);\r\n\r\n//User\r\ninitKeycloak();\r\nconst initialUser: ExtendedUser = { login: doLogin, logout: doLogout, loggedIn: loggedIn(), department: \"\", id: \"\", name: \"\" };\r\n\r\n//QueryClient\r\nconst queryClient = new QueryClient({ defaultOptions: { queries: { enabled: false } } });\r\n\r\n//Localization\r\ni18next\r\n .use(initReactI18next)\r\n .use(LanguageDetector)\r\n .use(I18NextHttpBackend)\r\n .init({ fallbackLng: 'en' });\r\n\r\n//Moment\r\nmoment.defaultFormat = 'YYYY-MM-DD';\r\n\r\ndeclare module \"moment\" {\r\n interface Moment {\r\n formatDate(): string;\r\n formatDateTime(): string;\r\n }\r\n}\r\n\r\nmoment.fn.formatDate = function (): string {\r\n if (!this.isValid()) return \"\";\r\n return this.format();\r\n};\r\n\r\nmoment.fn.formatDateTime = function (): string {\r\n if (!this.isValid()) return \"\";\r\n return this.format(\"YYYY-MM-DD HH:mm\");\r\n};\r\n\r\ninterface LayoutProviderProps {\r\n title: string,\r\n appVersion: string,\r\n leftDrawerItems: LeftDrawerItem[],\r\n primaryColor: string,\r\n secondaryColor: string,\r\n children: ReactNode\r\n}\r\n\r\nexport function LayoutProvider(props: LayoutProviderProps) {\r\n const [user, setUser] = useState<ExtendedUser>(initialUser);\r\n const [title, setTitle] = useState(props.title);\r\n const [snackbar, setSnackbar] = useState({} as SnackbarModel);\r\n const [initialized, setInitialized] = useState<boolean>(false);\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n window.addEventListener('user', initUserInfo);\r\n return () => window.removeEventListener('user', initUserInfo);\r\n }, []);\r\n\r\n const initUserInfo = () => {\r\n const userInfo: User | null = persistStorage.getObject<User>(\"user\");\r\n if (userInfo)\r\n setUser({\r\n ...user,\r\n id: userInfo.id,\r\n department: userInfo.department,\r\n name: userInfo.name,\r\n loggedIn: loggedIn()\r\n });\r\n };\r\n\r\n useEffect(() => setQueryClientDefaultOptions(), [user.loggedIn]);\r\n\r\n const setQueryClientDefaultOptions = () => {\r\n const storedKeycloak: KeycloakExtendedConfig | null = persistStorage.getObject<KeycloakExtendedConfig>(\"keycloak\");\r\n const enabled = storedKeycloak ? (storedKeycloak.autoLogin && user.loggedIn) || !storedKeycloak.autoLogin : false;\r\n setInitialized(enabled);\r\n\r\n queryClient.setDefaultOptions({\r\n queries: {\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n onError: message => setSnackbar({ message: String(message), severity: \"error\" })\r\n },\r\n mutations: {\r\n onError: message => setSnackbar({ message: String(message), severity: \"error\" })\r\n }\r\n });\r\n };\r\n\r\n const changeTitle = useCallback((newTitle: string) => {\r\n document.title = newTitle;\r\n setTitle(newTitle);\r\n }, []);\r\n\r\n const handleOnSnackbarClose = useCallback((event?: SyntheticEvent | Event, reason?: string) => {\r\n if (reason === 'clickaway') return;\r\n setSnackbar({ ...snackbar, message: \"\" });\r\n }, []);\r\n\r\n const providerValue: LayoutContextInterface = useMemo(() => ({ changeTitle: changeTitle, snackbar: setSnackbar, user: user, t: t, i18n: i18n }), [changeTitle, setSnackbar, user, t, i18n]);\r\n\r\n return (\r\n <QueryClientProvider client={queryClient}>\r\n <LayoutContext.Provider value={providerValue}>\r\n <Layout title={title} appVersion={props.appVersion} primaryColor={props.primaryColor} secondaryColor={props.secondaryColor} leftDrawerItems={props.leftDrawerItems} user={user} initialized={initialized}>\r\n {initialized ? props.children : <CenteredBox circularProgress />}\r\n\r\n <Stack spacing={2} sx={{ width: '100%' }}>\r\n <Snackbar open={!!snackbar.message} autoHideDuration={6000} onClose={handleOnSnackbarClose}>\r\n <Alert onClose={handleOnSnackbarClose} severity={snackbar.severity} sx={{ width: '100%' }} variant=\"filled\">{snackbar.message}</Alert>\r\n </Snackbar>\r\n </Stack>\r\n </Layout>\r\n </LayoutContext.Provider>\r\n </QueryClientProvider>\r\n );\r\n}"]}
1
+ {"version":3,"file":"LayoutContext.js","sourceRoot":"","sources":["../../../src/contexts/LayoutContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Alert, Snackbar, Stack } from '@mui/material';\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\r\nimport i18next, { i18n, TFunction } from 'i18next';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport I18NextHttpBackend from 'i18next-http-backend';\r\nimport moment from 'moment';\r\nimport { createContext, ReactNode, SyntheticEvent, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { initReactI18next, useTranslation } from 'react-i18next';\r\nimport CenteredBox from '../components/common/CenteredBox';\r\nimport Layout from '../components/Layout';\r\nimport KeycloakExtendedConfig from '../models/KeycloakExtendedConfig';\r\nimport { LeftDrawerItem } from '../models/LeftDrawerItem';\r\nimport SnackbarModel from '../models/SnackbarModel';\r\nimport { ExtendedUser, User } from '../models/User';\r\nimport { persistStorage } from '../utils/PersistStorage';\r\nimport { doLogin, doLogout, initKeycloak, loggedIn } from '../utils/UserService';\r\n\r\ninterface LayoutContextInterface {\r\n changeTitle: (title: string) => void,\r\n snackbar: (snackbar: SnackbarModel) => void,\r\n user: User,\r\n t: TFunction<\"translation\", undefined>,\r\n i18n: i18n\r\n}\r\n\r\nexport const LayoutContext = createContext({} as LayoutContextInterface);\r\n\r\n//User\r\ninitKeycloak();\r\nconst initialUser: ExtendedUser = { login: doLogin, logout: doLogout, loggedIn: loggedIn(), department: \"\", id: \"\", name: \"\" };\r\n\r\n//QueryClient\r\nconst queryClient = new QueryClient({ defaultOptions: { queries: { enabled: false } } });\r\n\r\n//Localization\r\ni18next\r\n .use(initReactI18next)\r\n .use(LanguageDetector)\r\n .use(I18NextHttpBackend)\r\n .init({ fallbackLng: 'en' });\r\n\r\nmoment.defaultFormat = 'YYYY-MM-DD';\r\n\r\ndeclare module \"moment\" {\r\n interface Moment {\r\n formatDate(): string;\r\n formatDateTime(): string;\r\n }\r\n}\r\n\r\nmoment.fn.formatDate = function (): string {\r\n if (!this.isValid()) return \"\";\r\n return this.format();\r\n};\r\n\r\nmoment.fn.formatDateTime = function (): string {\r\n if (!this.isValid()) return \"\";\r\n return this.format(\"YYYY-MM-DD HH:mm\");\r\n};\r\n\r\ninterface LayoutProviderProps {\r\n title: string,\r\n appVersion: string,\r\n leftDrawerItems: LeftDrawerItem[],\r\n primaryColor: string,\r\n secondaryColor: string,\r\n children: ReactNode\r\n}\r\n\r\nexport function LayoutProvider(props: LayoutProviderProps) {\r\n const [user, setUser] = useState<ExtendedUser>(initialUser);\r\n const [title, setTitle] = useState(props.title);\r\n const [snackbar, setSnackbar] = useState({} as SnackbarModel);\r\n const [initialized, setInitialized] = useState<boolean>(false);\r\n const { t, i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n window.addEventListener('user', initUserInfo);\r\n return () => window.removeEventListener('user', initUserInfo);\r\n }, []);\r\n\r\n const initUserInfo = () => {\r\n const userInfo: User | null = persistStorage.getObject<User>(\"user\");\r\n if (userInfo)\r\n setUser({\r\n ...user,\r\n id: userInfo.id,\r\n department: userInfo.department,\r\n name: userInfo.name,\r\n loggedIn: loggedIn()\r\n });\r\n };\r\n\r\n useEffect(() => setQueryClientDefaultOptions(), [user.loggedIn]);\r\n\r\n const setQueryClientDefaultOptions = () => {\r\n const storedKeycloak: KeycloakExtendedConfig | null = persistStorage.getObject<KeycloakExtendedConfig>(\"keycloak\");\r\n const enabled = storedKeycloak ? (storedKeycloak.autoLogin && user.loggedIn) || !storedKeycloak.autoLogin : false;\r\n setInitialized(enabled);\r\n\r\n queryClient.setDefaultOptions({\r\n queries: {\r\n enabled: enabled,\r\n refetchOnWindowFocus: false,\r\n onError: message => setSnackbar({ message: String(message), severity: \"error\" }),\r\n retry: false\r\n },\r\n mutations: {\r\n onError: message => setSnackbar({ message: String(message), severity: \"error\" }),\r\n }\r\n });\r\n };\r\n\r\n const changeTitle = useCallback((newTitle: string) => {\r\n document.title = newTitle;\r\n setTitle(newTitle);\r\n }, []);\r\n\r\n const handleOnSnackbarClose = useCallback((event?: SyntheticEvent | Event, reason?: string) => {\r\n if (reason === 'clickaway') return;\r\n setSnackbar({ ...snackbar, message: \"\" });\r\n }, []);\r\n\r\n const providerValue: LayoutContextInterface = useMemo(() => ({ changeTitle: changeTitle, snackbar: setSnackbar, user: user, t: t, i18n: i18n }), [changeTitle, setSnackbar, user, t, i18n]);\r\n\r\n return (\r\n <QueryClientProvider client={queryClient}>\r\n <LayoutContext.Provider value={providerValue}>\r\n <Layout title={title} appVersion={props.appVersion} primaryColor={props.primaryColor} secondaryColor={props.secondaryColor} leftDrawerItems={props.leftDrawerItems} user={user} initialized={initialized}>\r\n {initialized ? props.children : <CenteredBox circularProgress />}\r\n\r\n <Stack spacing={2} sx={{ width: '100%' }}>\r\n <Snackbar open={!!snackbar.message} autoHideDuration={6000} onClose={handleOnSnackbarClose}>\r\n <Alert onClose={handleOnSnackbarClose} severity={snackbar.severity} sx={{ width: '100%' }} variant=\"filled\">{snackbar.message}</Alert>\r\n </Snackbar>\r\n </Stack>\r\n </Layout>\r\n </LayoutContext.Provider>\r\n </QueryClientProvider>\r\n );\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"KeycloakExtendedConfig.js","sourceRoot":"","sources":["../../../src/models/KeycloakExtendedConfig.ts"],"names":[],"mappings":"","sourcesContent":["export default interface KeycloakExtendedConfig {\r\n autoLogin?: boolean,\r\n confidential?: Confidential,\r\n realm: string,\r\n \"auth-server-url\": string,\r\n idpHint?: string\r\n}\r\n\r\nexport interface Confidential {\r\n client: string,\r\n secret: string\r\n}"]}
1
+ {"version":3,"file":"KeycloakExtendedConfig.js","sourceRoot":"","sources":["../../../src/models/KeycloakExtendedConfig.ts"],"names":[],"mappings":"","sourcesContent":["export default interface KeycloakExtendedConfig {\n autoLogin?: boolean,\n confidential?: Confidential,\n realm: string,\n \"auth-server-url\": string,\n idpHint?: string\n}\n\nexport interface Confidential {\n client: string,\n secret: string\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../src/models/LeftDrawerItem.ts"],"names":[],"mappings":"","sourcesContent":["export interface LeftDrawerItem {\r\n title: string,\r\n path: string,\r\n icon: React.ReactNode,\r\n hidden?: boolean\r\n}\r\n"]}
1
+ {"version":3,"file":"LeftDrawerItem.js","sourceRoot":"","sources":["../../../src/models/LeftDrawerItem.ts"],"names":[],"mappings":"","sourcesContent":["export interface LeftDrawerItem {\n title: string,\n path: string,\n icon: React.ReactNode,\n hidden?: boolean\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarModel.js","sourceRoot":"","sources":["../../../src/models/SnackbarModel.ts"],"names":[],"mappings":"","sourcesContent":["import { AlertColor } from \"@mui/material\";\r\n\r\nexport default interface SnackbarModel {\r\n message: string,\r\n severity?: AlertColor\r\n}"]}
1
+ {"version":3,"file":"SnackbarModel.js","sourceRoot":"","sources":["../../../src/models/SnackbarModel.ts"],"names":[],"mappings":"","sourcesContent":["import { AlertColor } from \"@mui/material\";\n\nexport default interface SnackbarModel {\n message: string,\n severity?: AlertColor\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"","sourcesContent":["import { KeycloakPromise } from \"keycloak-js\";\r\n\r\nexport interface User {\r\n id: string,\r\n name: string,\r\n department: string\r\n}\r\n\r\nexport interface ExtendedUser extends User {\r\n loggedIn: boolean,\r\n login: () => KeycloakPromise<void, void>,\r\n logout: () => KeycloakPromise<void, void> \r\n}"]}
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../../../src/models/User.ts"],"names":[],"mappings":"","sourcesContent":["import { KeycloakPromise } from \"keycloak-js\";\n\nexport interface User {\n id: string,\n name: string,\n department: string\n}\n\nexport interface ExtendedUser extends User {\n loggedIn: boolean,\n login: () => KeycloakPromise<void, void>,\n logout: () => KeycloakPromise<void, void> \n}"]}
@@ -59,9 +59,9 @@ const getRequestInit = async (method, data, signal) => {
59
59
  return request;
60
60
  };
61
61
  const getQueryErrorMessage = async (response) => {
62
- let message = `Error connecting to server`;
62
+ let message = `[${response.status}] ${response.statusText}`;
63
63
  const detailMessage = await response.json()
64
- .then(data => { var _a; return (_a = data.message) !== null && _a !== void 0 ? _a : data.title; })
64
+ .then(data => `[${response.status}] ${data.message}`)
65
65
  .catch(() => (message));
66
66
  if (detailMessage)
67
67
  message = detailMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"Fetches.js","sourceRoot":"","sources":["../../../src/utils/Fetches.ts"],"names":[],"mappings":"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","sourcesContent":["import { getToken } from \"./UserService\";\r\n\r\nexport const fetchGet = async (url: string, signal: AbortSignal | undefined): Promise<any> => {\r\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response.json();\r\n};\r\n\r\nexport const fetchFileGet = async (url: string, signal: AbortSignal | undefined): Promise<Blob> => {\r\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response.blob();\r\n};\r\n\r\nexport const fetchPost = async (url: string, data: unknown): Promise<any> => {\r\n const initReq: RequestInit = await getRequestInit(\"POST\", data);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response.json();\r\n};\r\n\r\nexport const fetchPut = async (url: string, data: unknown): Promise<Response> => {\r\n const initReq: RequestInit = await getRequestInit(\"PUT\", data);\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response;\r\n};\r\n\r\nexport const fetchDelete = async (url: string): Promise<Response> => {\r\n const initReq: RequestInit = await getRequestInit(\"DELETE\");\r\n\r\n const response: Response = await fetch(url, initReq);\r\n if (!response.ok)\r\n throw await getQueryErrorMessage(response);\r\n\r\n return response;\r\n};\r\n\r\nconst getRequestInit = async (method: string, data?: unknown, signal?: AbortSignal): Promise<RequestInit> => {\r\n const request: RequestInit = {\r\n method: method,\r\n signal: signal,\r\n credentials: 'include'\r\n };\r\n\r\n if (data) {\r\n if (data instanceof FormData)\r\n request.body = data;\r\n else\r\n request.body = JSON.stringify(data);\r\n }\r\n\r\n if (data instanceof FormData)\r\n request.headers = {\r\n 'Authorization': `Bearer ${await getToken()}`\r\n };\r\n else {\r\n request.headers = {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${await getToken()}`\r\n };\r\n }\r\n\r\n return request;\r\n};\r\n\r\nconst getQueryErrorMessage = async (response: Response): Promise<string> => {\r\n let message: string = `Error connecting to server`;\r\n\r\n const detailMessage: string | undefined = await response.json()\r\n .then(data => data.message ?? data.title)\r\n .catch(() => (message));\r\n\r\n if (detailMessage)\r\n message = detailMessage;\r\n\r\n return message;\r\n};"]}
1
+ {"version":3,"file":"Fetches.js","sourceRoot":"","sources":["../../../src/utils/Fetches.ts"],"names":[],"mappings":"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","sourcesContent":["import { getToken } from \"./UserService\";\n\nexport const fetchGet = async (url: string, signal: AbortSignal | undefined): Promise<any> => {\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response.json();\n};\n\nexport const fetchFileGet = async (url: string, signal: AbortSignal | undefined): Promise<Blob> => {\n const initReq: RequestInit = await getRequestInit(\"GET\", null, signal);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response.blob();\n};\n\nexport const fetchPost = async (url: string, data: unknown): Promise<any> => {\n const initReq: RequestInit = await getRequestInit(\"POST\", data);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response.json();\n};\n\nexport const fetchPut = async (url: string, data: unknown): Promise<Response> => {\n const initReq: RequestInit = await getRequestInit(\"PUT\", data);\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response;\n};\n\nexport const fetchDelete = async (url: string): Promise<Response> => {\n const initReq: RequestInit = await getRequestInit(\"DELETE\");\n\n const response: Response = await fetch(url, initReq);\n if (!response.ok)\n throw await getQueryErrorMessage(response);\n\n return response;\n};\n\nconst getRequestInit = async (method: string, data?: unknown, signal?: AbortSignal): Promise<RequestInit> => {\n const request: RequestInit = {\n method: method,\n signal: signal,\n credentials: 'include'\n };\n\n if (data) {\n if (data instanceof FormData)\n request.body = data;\n else\n request.body = JSON.stringify(data);\n }\n\n if (data instanceof FormData)\n request.headers = {\n 'Authorization': `Bearer ${await getToken()}`\n };\n else {\n request.headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${await getToken()}`\n };\n }\n\n return request;\n};\n\nconst getQueryErrorMessage = async (response: Response): Promise<string> => {\n let message: string = `[${response.status}] ${response.statusText}`;\n\n const detailMessage: string | undefined = await response.json()\n .then(data => `[${response.status}] ${data.message}`)\n .catch(() => (message));\n\n if (detailMessage)\n message = detailMessage;\n\n return message;\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../../src/utils/Helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAY,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAY,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAY,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE1H,MAAM,CAAC,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["import { Guid } from \"guid-ts\";\r\n\r\nexport const isAndroid: boolean = /(android)/i.test(navigator.userAgent);\r\nexport const isMobile: boolean = /(android|iphone)/i.test(navigator.userAgent);\r\n\r\nexport const isDevelopment: boolean = window.location.href.includes(\".dev\") || window.location.href.includes(\"localhost\");\r\n\r\nexport const newGuid = (): string => Guid.newGuid().toString();\r\n"]}
1
+ {"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../../src/utils/Helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAY,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAY,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAY,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE1H,MAAM,CAAC,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC","sourcesContent":["import { Guid } from \"guid-ts\";\n\nexport const isAndroid: boolean = /(android)/i.test(navigator.userAgent);\nexport const isMobile: boolean = /(android|iphone)/i.test(navigator.userAgent);\n\nexport const isDevelopment: boolean = window.location.href.includes(\".dev\") || window.location.href.includes(\"localhost\");\n\nexport const newGuid = (): string => Guid.newGuid().toString();"]}