@verdaccio/ui-components 5.0.0-next-9.9 → 5.0.0-next-9.11

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.
@@ -8,6 +8,7 @@ const require_utils$1 = require("./utils.js");
8
8
  let react = require("react");
9
9
  react = require_runtime.__toESM(react);
10
10
  let react_jsx_runtime = require("react/jsx-runtime");
11
+ let swr = require("swr");
11
12
  //#region src/providers/AuthProvider/AuthProvider.tsx
12
13
  var AuthContext = (0, react.createContext)({
13
14
  userState: {
@@ -21,22 +22,22 @@ var AuthContext = (0, react.createContext)({
21
22
  var basePath = require_utils.stripTrailingSlash(require_configuration.getConfiguration().base);
22
23
  var AuthProvider = ({ children }) => {
23
24
  const [userState, setUserState] = react.default.useState(require_utils$1.getDefaultUserState());
24
- const { data, isMutating, trigger } = require_use_data_mutation.useDataMutation(basePath, require_routes.APIRoute.LOGIN, "POST");
25
+ const { trigger } = require_use_data_mutation.useDataMutation(basePath, require_routes.APIRoute.LOGIN, "POST");
26
+ const { mutate } = (0, swr.useSWRConfig)();
25
27
  const handleLogin = async (body) => {
26
- await trigger(body);
28
+ const result = await trigger(body);
29
+ if (result && result.username && result.token) {
30
+ require_storage.saveAuth(result.username, result.token);
31
+ setUserState(result);
32
+ mutate(`${basePath}${require_routes.APIRoute.PACKAGES}`);
33
+ }
27
34
  };
28
35
  const logOutUser = () => {
29
36
  setUserState(require_utils$1.getDefaultUserState());
30
37
  require_storage.clearAuth();
31
38
  window.location?.reload();
32
39
  };
33
- (0, react.useEffect)(() => {
34
- if (data && !isMutating) {
35
- setUserState(data);
36
- if (data.username && data.token) require_storage.saveAuth(data.username, data.token);
37
- }
38
- }, [data, isMutating]);
39
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AuthContext.Provider, {
40
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AuthContext, {
40
41
  value: {
41
42
  handleLogin,
42
43
  userState,
@@ -46,7 +47,7 @@ var AuthProvider = ({ children }) => {
46
47
  children
47
48
  });
48
49
  };
49
- var useAuth = () => (0, react.useContext)(AuthContext);
50
+ var useAuth = () => (0, react.use)(AuthContext);
50
51
  //#endregion
51
52
  exports.AuthContext = AuthContext;
52
53
  exports.AuthProvider = AuthProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.js","names":[],"sources":["../../../src/providers/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext, useEffect } from 'react';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { clearAuth, saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { LoginBody } from './types';\nimport { getDefaultUserState } from './utils';\n\ninterface AuthContextProps {\n handleLogin: (body: { username: string; password: string }) => Promise<any>;\n setUserState: React.Dispatch<React.SetStateAction<LoginBody>>;\n logOutUser: () => void;\n userState: LoginBody;\n}\n\nexport const AuthContext = createContext<Partial<AuthContextProps>>({\n userState: { token: null, username: null },\n setUserState: () => {},\n handleLogin: async () => {},\n logOutUser: () => {},\n});\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst AuthProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const [userState, setUserState] = React.useState<LoginBody>(getDefaultUserState());\n const { data, isMutating, trigger } = useDataMutation<LoginBody>(\n basePath,\n APIRoute.LOGIN,\n 'POST'\n );\n\n const handleLogin = async (body: { username: string; password: string }) => {\n await trigger(body);\n };\n\n const logOutUser = () => {\n setUserState(getDefaultUserState());\n clearAuth();\n window.location?.reload();\n };\n\n useEffect(() => {\n if (data && !isMutating) {\n setUserState(data as LoginBody);\n if (data.username && data.token) {\n saveAuth(data.username, data.token);\n }\n }\n }, [data, isMutating]);\n\n return (\n <AuthContext.Provider\n value={{\n handleLogin,\n userState,\n logOutUser,\n setUserState,\n }}\n >\n {children}\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n\nexport const useAuth = () => useContext(AuthContext);\n"],"mappings":";;;;;;;;;;;AAkBA,IAAa,eAAA,GAAA,MAAA,eAAuD;CAClE,WAAW;EAAE,OAAO;EAAM,UAAU;EAAM;CAC1C,oBAAoB;CACpB,aAAa,YAAY;CACzB,kBAAkB;CACnB,CAAC;AAGF,IAAM,WAAW,cAAA,mBADK,sBAAA,kBAAkB,CACU,KAAK;AAEvD,IAAM,gBAAsD,EAAE,eAAe;CAC3E,MAAM,CAAC,WAAW,gBAAgB,MAAA,QAAM,SAAoB,gBAAA,qBAAqB,CAAC;CAClF,MAAM,EAAE,MAAM,YAAY,YAAY,0BAAA,gBACpC,UACA,eAAA,SAAS,OACT,OACD;CAED,MAAM,cAAc,OAAO,SAAiD;AAC1E,QAAM,QAAQ,KAAK;;CAGrB,MAAM,mBAAmB;AACvB,eAAa,gBAAA,qBAAqB,CAAC;AACnC,kBAAA,WAAW;AACX,SAAO,UAAU,QAAQ;;AAG3B,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,QAAQ,CAAC,YAAY;AACvB,gBAAa,KAAkB;AAC/B,OAAI,KAAK,YAAY,KAAK,MACxB,iBAAA,SAAS,KAAK,UAAU,KAAK,MAAM;;IAGtC,CAAC,MAAM,WAAW,CAAC;AAEtB,QACE,iBAAA,GAAA,kBAAA,KAAC,YAAY,UAAb;EACE,OAAO;GACL;GACA;GACA;GACA;GACD;EAEA;EACoB,CAAA;;AAM3B,IAAa,iBAAA,GAAA,MAAA,YAA2B,YAAY"}
1
+ {"version":3,"file":"AuthProvider.js","names":[],"sources":["../../../src/providers/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, use } from 'react';\nimport { useSWRConfig } from 'swr';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { clearAuth, saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { LoginBody } from './types';\nimport { getDefaultUserState } from './utils';\n\ninterface AuthContextProps {\n handleLogin: (body: { username: string; password: string }) => Promise<any>;\n setUserState: React.Dispatch<React.SetStateAction<LoginBody>>;\n logOutUser: () => void;\n userState: LoginBody;\n}\n\nexport const AuthContext = createContext<Partial<AuthContextProps>>({\n userState: { token: null, username: null },\n setUserState: () => {},\n handleLogin: async () => {},\n logOutUser: () => {},\n});\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst AuthProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const [userState, setUserState] = React.useState<LoginBody>(getDefaultUserState());\n const { trigger } = useDataMutation<LoginBody>(basePath, APIRoute.LOGIN, 'POST');\n const { mutate } = useSWRConfig();\n\n const handleLogin = async (body: { username: string; password: string }) => {\n const result = await trigger(body);\n if (result && result.username && result.token) {\n saveAuth(result.username, result.token);\n setUserState(result as LoginBody);\n // Revalidate the packages list so it reflects authenticated access\n mutate(`${basePath}${APIRoute.PACKAGES}`);\n }\n };\n\n const logOutUser = () => {\n setUserState(getDefaultUserState());\n clearAuth();\n window.location?.reload();\n };\n\n return (\n <AuthContext\n value={{\n handleLogin,\n userState,\n logOutUser,\n setUserState,\n }}\n >\n {children}\n </AuthContext>\n );\n};\n\nexport { AuthProvider };\n\nexport const useAuth = () => use(AuthContext);\n"],"mappings":";;;;;;;;;;;;AAmBA,IAAa,eAAA,GAAA,MAAA,eAAuD;CAClE,WAAW;EAAE,OAAO;EAAM,UAAU;EAAM;CAC1C,oBAAoB;CACpB,aAAa,YAAY;CACzB,kBAAkB;CACnB,CAAC;AAGF,IAAM,WAAW,cAAA,mBADK,sBAAA,kBAAkB,CACU,KAAK;AAEvD,IAAM,gBAAsD,EAAE,eAAe;CAC3E,MAAM,CAAC,WAAW,gBAAgB,MAAA,QAAM,SAAoB,gBAAA,qBAAqB,CAAC;CAClF,MAAM,EAAE,YAAY,0BAAA,gBAA2B,UAAU,eAAA,SAAS,OAAO,OAAO;CAChF,MAAM,EAAE,YAAA,GAAA,IAAA,eAAyB;CAEjC,MAAM,cAAc,OAAO,SAAiD;EAC1E,MAAM,SAAS,MAAM,QAAQ,KAAK;AAClC,MAAI,UAAU,OAAO,YAAY,OAAO,OAAO;AAC7C,mBAAA,SAAS,OAAO,UAAU,OAAO,MAAM;AACvC,gBAAa,OAAoB;AAEjC,UAAO,GAAG,WAAW,eAAA,SAAS,WAAW;;;CAI7C,MAAM,mBAAmB;AACvB,eAAa,gBAAA,qBAAqB,CAAC;AACnC,kBAAA,WAAW;AACX,SAAO,UAAU,QAAQ;;AAG3B,QACE,iBAAA,GAAA,kBAAA,KAAC,aAAD;EACE,OAAO;GACL;GACA;GACA;GACA;GACD;EAEA;EACW,CAAA;;AAMlB,IAAa,iBAAA,GAAA,MAAA,KAAoB,YAAY"}
@@ -4,8 +4,9 @@ import { APIRoute } from "../../store/routes.mjs";
4
4
  import { stripTrailingSlash } from "../../store/utils.mjs";
5
5
  import { useDataMutation } from "../../api/use-data-mutation.mjs";
6
6
  import { getDefaultUserState } from "./utils.mjs";
7
- import React, { createContext, useContext, useEffect } from "react";
7
+ import React, { createContext, use } from "react";
8
8
  import { jsx } from "react/jsx-runtime";
9
+ import { useSWRConfig } from "swr";
9
10
  //#region src/providers/AuthProvider/AuthProvider.tsx
10
11
  var AuthContext = createContext({
11
12
  userState: {
@@ -19,22 +20,22 @@ var AuthContext = createContext({
19
20
  var basePath = stripTrailingSlash(getConfiguration().base);
20
21
  var AuthProvider = ({ children }) => {
21
22
  const [userState, setUserState] = React.useState(getDefaultUserState());
22
- const { data, isMutating, trigger } = useDataMutation(basePath, APIRoute.LOGIN, "POST");
23
+ const { trigger } = useDataMutation(basePath, APIRoute.LOGIN, "POST");
24
+ const { mutate } = useSWRConfig();
23
25
  const handleLogin = async (body) => {
24
- await trigger(body);
26
+ const result = await trigger(body);
27
+ if (result && result.username && result.token) {
28
+ saveAuth(result.username, result.token);
29
+ setUserState(result);
30
+ mutate(`${basePath}${APIRoute.PACKAGES}`);
31
+ }
25
32
  };
26
33
  const logOutUser = () => {
27
34
  setUserState(getDefaultUserState());
28
35
  clearAuth();
29
36
  window.location?.reload();
30
37
  };
31
- useEffect(() => {
32
- if (data && !isMutating) {
33
- setUserState(data);
34
- if (data.username && data.token) saveAuth(data.username, data.token);
35
- }
36
- }, [data, isMutating]);
37
- return /* @__PURE__ */ jsx(AuthContext.Provider, {
38
+ return /* @__PURE__ */ jsx(AuthContext, {
38
39
  value: {
39
40
  handleLogin,
40
41
  userState,
@@ -44,7 +45,7 @@ var AuthProvider = ({ children }) => {
44
45
  children
45
46
  });
46
47
  };
47
- var useAuth = () => useContext(AuthContext);
48
+ var useAuth = () => use(AuthContext);
48
49
  //#endregion
49
50
  export { AuthContext, AuthProvider, useAuth };
50
51
 
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.mjs","names":[],"sources":["../../../src/providers/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext, useEffect } from 'react';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { clearAuth, saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { LoginBody } from './types';\nimport { getDefaultUserState } from './utils';\n\ninterface AuthContextProps {\n handleLogin: (body: { username: string; password: string }) => Promise<any>;\n setUserState: React.Dispatch<React.SetStateAction<LoginBody>>;\n logOutUser: () => void;\n userState: LoginBody;\n}\n\nexport const AuthContext = createContext<Partial<AuthContextProps>>({\n userState: { token: null, username: null },\n setUserState: () => {},\n handleLogin: async () => {},\n logOutUser: () => {},\n});\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst AuthProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const [userState, setUserState] = React.useState<LoginBody>(getDefaultUserState());\n const { data, isMutating, trigger } = useDataMutation<LoginBody>(\n basePath,\n APIRoute.LOGIN,\n 'POST'\n );\n\n const handleLogin = async (body: { username: string; password: string }) => {\n await trigger(body);\n };\n\n const logOutUser = () => {\n setUserState(getDefaultUserState());\n clearAuth();\n window.location?.reload();\n };\n\n useEffect(() => {\n if (data && !isMutating) {\n setUserState(data as LoginBody);\n if (data.username && data.token) {\n saveAuth(data.username, data.token);\n }\n }\n }, [data, isMutating]);\n\n return (\n <AuthContext.Provider\n value={{\n handleLogin,\n userState,\n logOutUser,\n setUserState,\n }}\n >\n {children}\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n\nexport const useAuth = () => useContext(AuthContext);\n"],"mappings":";;;;;;;;;AAkBA,IAAa,cAAc,cAAyC;CAClE,WAAW;EAAE,OAAO;EAAM,UAAU;EAAM;CAC1C,oBAAoB;CACpB,aAAa,YAAY;CACzB,kBAAkB;CACnB,CAAC;AAGF,IAAM,WAAW,mBADK,kBAAkB,CACU,KAAK;AAEvD,IAAM,gBAAsD,EAAE,eAAe;CAC3E,MAAM,CAAC,WAAW,gBAAgB,MAAM,SAAoB,qBAAqB,CAAC;CAClF,MAAM,EAAE,MAAM,YAAY,YAAY,gBACpC,UACA,SAAS,OACT,OACD;CAED,MAAM,cAAc,OAAO,SAAiD;AAC1E,QAAM,QAAQ,KAAK;;CAGrB,MAAM,mBAAmB;AACvB,eAAa,qBAAqB,CAAC;AACnC,aAAW;AACX,SAAO,UAAU,QAAQ;;AAG3B,iBAAgB;AACd,MAAI,QAAQ,CAAC,YAAY;AACvB,gBAAa,KAAkB;AAC/B,OAAI,KAAK,YAAY,KAAK,MACxB,UAAS,KAAK,UAAU,KAAK,MAAM;;IAGtC,CAAC,MAAM,WAAW,CAAC;AAEtB,QACE,oBAAC,YAAY,UAAb;EACE,OAAO;GACL;GACA;GACA;GACA;GACD;EAEA;EACoB,CAAA;;AAM3B,IAAa,gBAAgB,WAAW,YAAY"}
1
+ {"version":3,"file":"AuthProvider.mjs","names":[],"sources":["../../../src/providers/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, use } from 'react';\nimport { useSWRConfig } from 'swr';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { clearAuth, saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { LoginBody } from './types';\nimport { getDefaultUserState } from './utils';\n\ninterface AuthContextProps {\n handleLogin: (body: { username: string; password: string }) => Promise<any>;\n setUserState: React.Dispatch<React.SetStateAction<LoginBody>>;\n logOutUser: () => void;\n userState: LoginBody;\n}\n\nexport const AuthContext = createContext<Partial<AuthContextProps>>({\n userState: { token: null, username: null },\n setUserState: () => {},\n handleLogin: async () => {},\n logOutUser: () => {},\n});\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst AuthProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const [userState, setUserState] = React.useState<LoginBody>(getDefaultUserState());\n const { trigger } = useDataMutation<LoginBody>(basePath, APIRoute.LOGIN, 'POST');\n const { mutate } = useSWRConfig();\n\n const handleLogin = async (body: { username: string; password: string }) => {\n const result = await trigger(body);\n if (result && result.username && result.token) {\n saveAuth(result.username, result.token);\n setUserState(result as LoginBody);\n // Revalidate the packages list so it reflects authenticated access\n mutate(`${basePath}${APIRoute.PACKAGES}`);\n }\n };\n\n const logOutUser = () => {\n setUserState(getDefaultUserState());\n clearAuth();\n window.location?.reload();\n };\n\n return (\n <AuthContext\n value={{\n handleLogin,\n userState,\n logOutUser,\n setUserState,\n }}\n >\n {children}\n </AuthContext>\n );\n};\n\nexport { AuthProvider };\n\nexport const useAuth = () => use(AuthContext);\n"],"mappings":";;;;;;;;;;AAmBA,IAAa,cAAc,cAAyC;CAClE,WAAW;EAAE,OAAO;EAAM,UAAU;EAAM;CAC1C,oBAAoB;CACpB,aAAa,YAAY;CACzB,kBAAkB;CACnB,CAAC;AAGF,IAAM,WAAW,mBADK,kBAAkB,CACU,KAAK;AAEvD,IAAM,gBAAsD,EAAE,eAAe;CAC3E,MAAM,CAAC,WAAW,gBAAgB,MAAM,SAAoB,qBAAqB,CAAC;CAClF,MAAM,EAAE,YAAY,gBAA2B,UAAU,SAAS,OAAO,OAAO;CAChF,MAAM,EAAE,WAAW,cAAc;CAEjC,MAAM,cAAc,OAAO,SAAiD;EAC1E,MAAM,SAAS,MAAM,QAAQ,KAAK;AAClC,MAAI,UAAU,OAAO,YAAY,OAAO,OAAO;AAC7C,YAAS,OAAO,UAAU,OAAO,MAAM;AACvC,gBAAa,OAAoB;AAEjC,UAAO,GAAG,WAAW,SAAS,WAAW;;;CAI7C,MAAM,mBAAmB;AACvB,eAAa,qBAAqB,CAAC;AACnC,aAAW;AACX,SAAO,UAAU,QAAQ;;AAG3B,QACE,oBAAC,aAAD;EACE,OAAO;GACL;GACA;GACA;GACA;GACD;EAEA;EACW,CAAA;;AAMlB,IAAa,gBAAgB,IAAI,YAAY"}
@@ -33,14 +33,14 @@ var Login = () => {
33
33
  const { next } = require_utils$2.getSecurityUrlParams(location);
34
34
  const createUserEnabled = configuration?.flags?.createUser;
35
35
  const addUserLink = require_routes.Route.ADD_USER + (next ? "?next=" + next : "");
36
- const { data, isMutating, trigger } = require_use_data_mutation.useDataMutation(basePath, next, "POST");
36
+ const { trigger } = require_use_data_mutation.useDataMutation(basePath, next, "POST");
37
37
  const { setError, handleSubmit, register, formState: { isValid, errors } } = (0, react_hook_form.useForm)({
38
38
  mode: "onChange",
39
39
  resolver: (0, _hookform_resolvers_yup.yupResolver)(require_schemas.loginSchema)
40
40
  });
41
41
  const handleLogin = async (body) => {
42
42
  try {
43
- await trigger(body);
43
+ return await trigger(body);
44
44
  } catch (err) {
45
45
  throw require_utils$1.normalizeAuthError(err);
46
46
  }
@@ -50,7 +50,8 @@ var Login = () => {
50
50
  }, [navigate]);
51
51
  const onSubmit = (0, react.useCallback)(async (data) => {
52
52
  try {
53
- await handleLogin?.(data);
53
+ const result = await handleLogin?.(data);
54
+ if (result && result.username && result.token) require_storage.saveAuth(result.username, result.token);
54
55
  onSuccess();
55
56
  } catch {
56
57
  setError("root", {
@@ -63,9 +64,6 @@ var Login = () => {
63
64
  setError,
64
65
  onSuccess
65
66
  ]);
66
- (0, react.useEffect)(() => {
67
- if (data && !isMutating && data.username && data.token) require_storage.saveAuth(data.username, data.token);
68
- }, [data, isMutating]);
69
67
  return !next ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_NotFound.default, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Dialog.default, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles$1.SecurityContainer, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_styles$1.SecurityForm, { children: [
70
68
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.default, {}),
71
69
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Login.default, {
@@ -1 +1 @@
1
- {"version":3,"file":"Login.js","names":[],"sources":["../../../src/sections/Security/Login.tsx"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { Link, Typography } from '@mui/material';\nimport React, { useCallback, useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useLocation, useNavigate } from 'react-router';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport type { LoginFormValues } from '../../components/LoginForm/Login';\nimport LoginForm from '../../components/LoginForm/Login';\nimport LoginFormHeader from '../../components/LoginForm/styles';\nimport NotFound from '../../components/NotFound';\nimport { getConfiguration } from '../../configuration';\nimport SecurityLayout from '../../layouts/Security/Dialog';\nimport type { LoginBody } from '../../providers/AuthProvider/types';\nimport { normalizeAuthError } from '../../providers/AuthProvider/utils';\nimport { saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport { Route } from '../../utils';\nimport { loginSchema } from '../../utils/schemas';\nimport { MessageType } from './Success';\nimport { SecurityContainer, SecurityForm } from './styles';\nimport { getSecurityUrlParams } from './utils';\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst Login: React.FC = () => {\n const { t } = useTranslation();\n const location = useLocation();\n const navigate = useNavigate();\n const { next } = getSecurityUrlParams(location);\n const createUserEnabled = configuration?.flags?.createUser;\n const addUserLink = Route.ADD_USER + (next ? '?next=' + next : '');\n\n const { data, isMutating, trigger } = useDataMutation<LoginBody>(basePath, next, 'POST');\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const {\n setError,\n handleSubmit,\n register,\n formState: { isValid, errors },\n } = form;\n\n const handleLogin = async (body: { username: string; password: string }) => {\n try {\n await trigger(body);\n } catch (err) {\n throw normalizeAuthError(err);\n }\n };\n\n const onSuccess = useCallback(() => {\n navigate(`${Route.SUCCESS}?messageType=${MessageType.Login}`);\n }, [navigate]);\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n try {\n await handleLogin?.(data);\n onSuccess();\n } catch {\n setError('root', {\n type: 'server',\n // TODO: add translation key\n message: 'Invalid username or password',\n });\n }\n },\n [handleLogin, setError, onSuccess]\n );\n\n useEffect(() => {\n if (data && !isMutating && data.username && data.token) {\n saveAuth(data.username, data.token);\n }\n }, [data, isMutating]);\n\n return !next ? (\n <NotFound />\n ) : (\n <SecurityLayout>\n <SecurityContainer>\n <SecurityForm>\n <LoginFormHeader />\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n {createUserEnabled && (\n <Typography align=\"center\" sx={{ mt: 2, fontSize: 12 }} variant=\"body2\">\n {t('security.login.noUserQuestion')}\n <Link href={addUserLink} sx={{ ml: 1 }}>\n {t('security.login.createUser')}\n </Link>\n </Typography>\n )}\n </SecurityForm>\n </SecurityContainer>\n </SecurityLayout>\n );\n};\n\nexport default Login;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAM,gBAAgB,sBAAA,kBAAkB;AACxC,IAAM,WAAW,cAAA,mBAAmB,cAAc,KAAK;AAEvD,IAAM,cAAwB;CAC5B,MAAM,EAAE,OAAA,GAAA,cAAA,iBAAsB;CAC9B,MAAM,YAAA,GAAA,aAAA,cAAwB;CAC9B,MAAM,YAAA,GAAA,aAAA,cAAwB;CAC9B,MAAM,EAAE,SAAS,gBAAA,qBAAqB,SAAS;CAC/C,MAAM,oBAAoB,eAAe,OAAO;CAChD,MAAM,cAAc,eAAA,MAAM,YAAY,OAAO,WAAW,OAAO;CAE/D,MAAM,EAAE,MAAM,YAAY,YAAY,0BAAA,gBAA2B,UAAU,MAAM,OAAO;CAOxF,MAAM,EACJ,UACA,cACA,UACA,WAAW,EAAE,SAAS,cAAA,GAAA,gBAAA,SATc;EACpC,MAAM;EACN,WAAA,GAAA,wBAAA,aAAsB,gBAAA,YAAY;EACnC,CAAC;CASF,MAAM,cAAc,OAAO,SAAiD;AAC1E,MAAI;AACF,SAAM,QAAQ,KAAK;WACZ,KAAK;AACZ,SAAM,gBAAA,mBAAmB,IAAI;;;CAIjC,MAAM,aAAA,GAAA,MAAA,mBAA8B;AAClC,WAAS,GAAG,eAAA,MAAM,QAAQ,eAAe,gBAAA,YAAY,QAAQ;IAC5D,CAAC,SAAS,CAAC;CAEd,MAAM,YAAA,GAAA,MAAA,aACJ,OAAO,SAA0B;AAC/B,MAAI;AACF,SAAM,cAAc,KAAK;AACzB,cAAW;UACL;AACN,YAAS,QAAQ;IACf,MAAM;IAEN,SAAS;IACV,CAAC;;IAGN;EAAC;EAAa;EAAU;EAAU,CACnC;AAED,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,QAAQ,CAAC,cAAc,KAAK,YAAY,KAAK,MAC/C,iBAAA,SAAS,KAAK,UAAU,KAAK,MAAM;IAEpC,CAAC,MAAM,WAAW,CAAC;AAEtB,QAAO,CAAC,OACN,iBAAA,GAAA,kBAAA,KAAC,iBAAA,SAAD,EAAY,CAAA,GAEZ,iBAAA,GAAA,kBAAA,KAAC,eAAA,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,iBAAA,mBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAAC,iBAAA,cAAD,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,KAAC,eAAA,SAAD,EAAmB,CAAA;EACnB,iBAAA,GAAA,kBAAA,KAAC,cAAA,SAAD;GACU;GACM;GACL;GACC;GACA;GACV,CAAA;EACD,qBACC,iBAAA,GAAA,kBAAA,MAAC,cAAA,YAAD;GAAY,OAAM;GAAS,IAAI;IAAE,IAAI;IAAG,UAAU;IAAI;GAAE,SAAQ;aAAhE,CACG,EAAE,gCAAgC,EACnC,iBAAA,GAAA,kBAAA,KAAC,cAAA,MAAD;IAAM,MAAM;IAAa,IAAI,EAAE,IAAI,GAAG;cACnC,EAAE,4BAA4B;IAC1B,CAAA,CACI;;EAEF,EAAA,CAAA,EACG,CAAA,EACL,CAAA"}
1
+ {"version":3,"file":"Login.js","names":[],"sources":["../../../src/sections/Security/Login.tsx"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { Link, Typography } from '@mui/material';\nimport React, { useCallback } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useLocation, useNavigate } from 'react-router';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport type { LoginFormValues } from '../../components/LoginForm/Login';\nimport LoginForm from '../../components/LoginForm/Login';\nimport LoginFormHeader from '../../components/LoginForm/styles';\nimport NotFound from '../../components/NotFound';\nimport { getConfiguration } from '../../configuration';\nimport SecurityLayout from '../../layouts/Security/Dialog';\nimport type { LoginBody } from '../../providers/AuthProvider/types';\nimport { normalizeAuthError } from '../../providers/AuthProvider/utils';\nimport { saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport { Route } from '../../utils';\nimport { loginSchema } from '../../utils/schemas';\nimport { MessageType } from './Success';\nimport { SecurityContainer, SecurityForm } from './styles';\nimport { getSecurityUrlParams } from './utils';\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst Login: React.FC = () => {\n const { t } = useTranslation();\n const location = useLocation();\n const navigate = useNavigate();\n const { next } = getSecurityUrlParams(location);\n const createUserEnabled = configuration?.flags?.createUser;\n const addUserLink = Route.ADD_USER + (next ? '?next=' + next : '');\n\n const { trigger } = useDataMutation<LoginBody>(basePath, next, 'POST');\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const {\n setError,\n handleSubmit,\n register,\n formState: { isValid, errors },\n } = form;\n\n const handleLogin = async (body: { username: string; password: string }) => {\n try {\n return await trigger(body);\n } catch (err) {\n throw normalizeAuthError(err);\n }\n };\n\n const onSuccess = useCallback(() => {\n navigate(`${Route.SUCCESS}?messageType=${MessageType.Login}`);\n }, [navigate]);\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n try {\n const result = await handleLogin?.(data);\n if (result && result.username && result.token) {\n saveAuth(result.username, result.token);\n }\n onSuccess();\n } catch {\n setError('root', {\n type: 'server',\n // TODO: add translation key\n message: 'Invalid username or password',\n });\n }\n },\n [handleLogin, setError, onSuccess]\n );\n\n return !next ? (\n <NotFound />\n ) : (\n <SecurityLayout>\n <SecurityContainer>\n <SecurityForm>\n <LoginFormHeader />\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n {createUserEnabled && (\n <Typography align=\"center\" sx={{ mt: 2, fontSize: 12 }} variant=\"body2\">\n {t('security.login.noUserQuestion')}\n <Link href={addUserLink} sx={{ ml: 1 }}>\n {t('security.login.createUser')}\n </Link>\n </Typography>\n )}\n </SecurityForm>\n </SecurityContainer>\n </SecurityLayout>\n );\n};\n\nexport default Login;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAM,gBAAgB,sBAAA,kBAAkB;AACxC,IAAM,WAAW,cAAA,mBAAmB,cAAc,KAAK;AAEvD,IAAM,cAAwB;CAC5B,MAAM,EAAE,OAAA,GAAA,cAAA,iBAAsB;CAC9B,MAAM,YAAA,GAAA,aAAA,cAAwB;CAC9B,MAAM,YAAA,GAAA,aAAA,cAAwB;CAC9B,MAAM,EAAE,SAAS,gBAAA,qBAAqB,SAAS;CAC/C,MAAM,oBAAoB,eAAe,OAAO;CAChD,MAAM,cAAc,eAAA,MAAM,YAAY,OAAO,WAAW,OAAO;CAE/D,MAAM,EAAE,YAAY,0BAAA,gBAA2B,UAAU,MAAM,OAAO;CAOtE,MAAM,EACJ,UACA,cACA,UACA,WAAW,EAAE,SAAS,cAAA,GAAA,gBAAA,SATc;EACpC,MAAM;EACN,WAAA,GAAA,wBAAA,aAAsB,gBAAA,YAAY;EACnC,CAAC;CASF,MAAM,cAAc,OAAO,SAAiD;AAC1E,MAAI;AACF,UAAO,MAAM,QAAQ,KAAK;WACnB,KAAK;AACZ,SAAM,gBAAA,mBAAmB,IAAI;;;CAIjC,MAAM,aAAA,GAAA,MAAA,mBAA8B;AAClC,WAAS,GAAG,eAAA,MAAM,QAAQ,eAAe,gBAAA,YAAY,QAAQ;IAC5D,CAAC,SAAS,CAAC;CAEd,MAAM,YAAA,GAAA,MAAA,aACJ,OAAO,SAA0B;AAC/B,MAAI;GACF,MAAM,SAAS,MAAM,cAAc,KAAK;AACxC,OAAI,UAAU,OAAO,YAAY,OAAO,MACtC,iBAAA,SAAS,OAAO,UAAU,OAAO,MAAM;AAEzC,cAAW;UACL;AACN,YAAS,QAAQ;IACf,MAAM;IAEN,SAAS;IACV,CAAC;;IAGN;EAAC;EAAa;EAAU;EAAU,CACnC;AAED,QAAO,CAAC,OACN,iBAAA,GAAA,kBAAA,KAAC,iBAAA,SAAD,EAAY,CAAA,GAEZ,iBAAA,GAAA,kBAAA,KAAC,eAAA,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,iBAAA,mBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAAC,iBAAA,cAAD,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,KAAC,eAAA,SAAD,EAAmB,CAAA;EACnB,iBAAA,GAAA,kBAAA,KAAC,cAAA,SAAD;GACU;GACM;GACL;GACC;GACA;GACV,CAAA;EACD,qBACC,iBAAA,GAAA,kBAAA,MAAC,cAAA,YAAD;GAAY,OAAM;GAAS,IAAI;IAAE,IAAI;IAAG,UAAU;IAAI;GAAE,SAAQ;aAAhE,CACG,EAAE,gCAAgC,EACnC,iBAAA,GAAA,kBAAA,KAAC,cAAA,MAAD;IAAM,MAAM;IAAa,IAAI,EAAE,IAAI,GAAG;cACnC,EAAE,4BAA4B;IAC1B,CAAA,CACI;;EAEF,EAAA,CAAA,EACG,CAAA,EACL,CAAA"}
@@ -14,7 +14,7 @@ import SecurityLayout from "../../layouts/Security/Dialog.mjs";
14
14
  import { SecurityContainer, SecurityForm } from "./styles.mjs";
15
15
  import { MessageType } from "./Success.mjs";
16
16
  import { getSecurityUrlParams } from "./utils.mjs";
17
- import { useCallback, useEffect } from "react";
17
+ import { useCallback } from "react";
18
18
  import { jsx, jsxs } from "react/jsx-runtime";
19
19
  import { useTranslation } from "react-i18next";
20
20
  import { useLocation, useNavigate } from "react-router";
@@ -31,14 +31,14 @@ var Login = () => {
31
31
  const { next } = getSecurityUrlParams(location);
32
32
  const createUserEnabled = configuration?.flags?.createUser;
33
33
  const addUserLink = Route$1.ADD_USER + (next ? "?next=" + next : "");
34
- const { data, isMutating, trigger } = useDataMutation(basePath, next, "POST");
34
+ const { trigger } = useDataMutation(basePath, next, "POST");
35
35
  const { setError, handleSubmit, register, formState: { isValid, errors } } = useForm({
36
36
  mode: "onChange",
37
37
  resolver: yupResolver(loginSchema)
38
38
  });
39
39
  const handleLogin = async (body) => {
40
40
  try {
41
- await trigger(body);
41
+ return await trigger(body);
42
42
  } catch (err) {
43
43
  throw normalizeAuthError(err);
44
44
  }
@@ -48,7 +48,8 @@ var Login = () => {
48
48
  }, [navigate]);
49
49
  const onSubmit = useCallback(async (data) => {
50
50
  try {
51
- await handleLogin?.(data);
51
+ const result = await handleLogin?.(data);
52
+ if (result && result.username && result.token) saveAuth(result.username, result.token);
52
53
  onSuccess();
53
54
  } catch {
54
55
  setError("root", {
@@ -61,9 +62,6 @@ var Login = () => {
61
62
  setError,
62
63
  onSuccess
63
64
  ]);
64
- useEffect(() => {
65
- if (data && !isMutating && data.username && data.token) saveAuth(data.username, data.token);
66
- }, [data, isMutating]);
67
65
  return !next ? /* @__PURE__ */ jsx(NotFound, {}) : /* @__PURE__ */ jsx(SecurityLayout, { children: /* @__PURE__ */ jsx(SecurityContainer, { children: /* @__PURE__ */ jsxs(SecurityForm, { children: [
68
66
  /* @__PURE__ */ jsx(LoginFormHeader, {}),
69
67
  /* @__PURE__ */ jsx(LoginForm, {
@@ -1 +1 @@
1
- {"version":3,"file":"Login.mjs","names":[],"sources":["../../../src/sections/Security/Login.tsx"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { Link, Typography } from '@mui/material';\nimport React, { useCallback, useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useLocation, useNavigate } from 'react-router';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport type { LoginFormValues } from '../../components/LoginForm/Login';\nimport LoginForm from '../../components/LoginForm/Login';\nimport LoginFormHeader from '../../components/LoginForm/styles';\nimport NotFound from '../../components/NotFound';\nimport { getConfiguration } from '../../configuration';\nimport SecurityLayout from '../../layouts/Security/Dialog';\nimport type { LoginBody } from '../../providers/AuthProvider/types';\nimport { normalizeAuthError } from '../../providers/AuthProvider/utils';\nimport { saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport { Route } from '../../utils';\nimport { loginSchema } from '../../utils/schemas';\nimport { MessageType } from './Success';\nimport { SecurityContainer, SecurityForm } from './styles';\nimport { getSecurityUrlParams } from './utils';\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst Login: React.FC = () => {\n const { t } = useTranslation();\n const location = useLocation();\n const navigate = useNavigate();\n const { next } = getSecurityUrlParams(location);\n const createUserEnabled = configuration?.flags?.createUser;\n const addUserLink = Route.ADD_USER + (next ? '?next=' + next : '');\n\n const { data, isMutating, trigger } = useDataMutation<LoginBody>(basePath, next, 'POST');\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const {\n setError,\n handleSubmit,\n register,\n formState: { isValid, errors },\n } = form;\n\n const handleLogin = async (body: { username: string; password: string }) => {\n try {\n await trigger(body);\n } catch (err) {\n throw normalizeAuthError(err);\n }\n };\n\n const onSuccess = useCallback(() => {\n navigate(`${Route.SUCCESS}?messageType=${MessageType.Login}`);\n }, [navigate]);\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n try {\n await handleLogin?.(data);\n onSuccess();\n } catch {\n setError('root', {\n type: 'server',\n // TODO: add translation key\n message: 'Invalid username or password',\n });\n }\n },\n [handleLogin, setError, onSuccess]\n );\n\n useEffect(() => {\n if (data && !isMutating && data.username && data.token) {\n saveAuth(data.username, data.token);\n }\n }, [data, isMutating]);\n\n return !next ? (\n <NotFound />\n ) : (\n <SecurityLayout>\n <SecurityContainer>\n <SecurityForm>\n <LoginFormHeader />\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n {createUserEnabled && (\n <Typography align=\"center\" sx={{ mt: 2, fontSize: 12 }} variant=\"body2\">\n {t('security.login.noUserQuestion')}\n <Link href={addUserLink} sx={{ ml: 1 }}>\n {t('security.login.createUser')}\n </Link>\n </Typography>\n )}\n </SecurityForm>\n </SecurityContainer>\n </SecurityLayout>\n );\n};\n\nexport default Login;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAM,gBAAgB,kBAAkB;AACxC,IAAM,WAAW,mBAAmB,cAAc,KAAK;AAEvD,IAAM,cAAwB;CAC5B,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,EAAE,SAAS,qBAAqB,SAAS;CAC/C,MAAM,oBAAoB,eAAe,OAAO;CAChD,MAAM,cAAc,QAAM,YAAY,OAAO,WAAW,OAAO;CAE/D,MAAM,EAAE,MAAM,YAAY,YAAY,gBAA2B,UAAU,MAAM,OAAO;CAOxF,MAAM,EACJ,UACA,cACA,UACA,WAAW,EAAE,SAAS,aATX,QAAyB;EACpC,MAAM;EACN,UAAU,YAAY,YAAY;EACnC,CAAC;CASF,MAAM,cAAc,OAAO,SAAiD;AAC1E,MAAI;AACF,SAAM,QAAQ,KAAK;WACZ,KAAK;AACZ,SAAM,mBAAmB,IAAI;;;CAIjC,MAAM,YAAY,kBAAkB;AAClC,WAAS,GAAG,QAAM,QAAQ,eAAe,YAAY,QAAQ;IAC5D,CAAC,SAAS,CAAC;CAEd,MAAM,WAAW,YACf,OAAO,SAA0B;AAC/B,MAAI;AACF,SAAM,cAAc,KAAK;AACzB,cAAW;UACL;AACN,YAAS,QAAQ;IACf,MAAM;IAEN,SAAS;IACV,CAAC;;IAGN;EAAC;EAAa;EAAU;EAAU,CACnC;AAED,iBAAgB;AACd,MAAI,QAAQ,CAAC,cAAc,KAAK,YAAY,KAAK,MAC/C,UAAS,KAAK,UAAU,KAAK,MAAM;IAEpC,CAAC,MAAM,WAAW,CAAC;AAEtB,QAAO,CAAC,OACN,oBAAC,UAAD,EAAY,CAAA,GAEZ,oBAAC,gBAAD,EAAA,UACE,oBAAC,mBAAD,EAAA,UACE,qBAAC,cAAD,EAAA,UAAA;EACE,oBAAC,iBAAD,EAAmB,CAAA;EACnB,oBAAC,WAAD;GACU;GACM;GACL;GACC;GACA;GACV,CAAA;EACD,qBACC,qBAAC,YAAD;GAAY,OAAM;GAAS,IAAI;IAAE,IAAI;IAAG,UAAU;IAAI;GAAE,SAAQ;aAAhE,CACG,EAAE,gCAAgC,EACnC,oBAAC,QAAD;IAAM,MAAM;IAAa,IAAI,EAAE,IAAI,GAAG;cACnC,EAAE,4BAA4B;IAC1B,CAAA,CACI;;EAEF,EAAA,CAAA,EACG,CAAA,EACL,CAAA"}
1
+ {"version":3,"file":"Login.mjs","names":[],"sources":["../../../src/sections/Security/Login.tsx"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { Link, Typography } from '@mui/material';\nimport React, { useCallback } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useLocation, useNavigate } from 'react-router';\n\nimport { useDataMutation } from '../../api/use-data-mutation';\nimport type { LoginFormValues } from '../../components/LoginForm/Login';\nimport LoginForm from '../../components/LoginForm/Login';\nimport LoginFormHeader from '../../components/LoginForm/styles';\nimport NotFound from '../../components/NotFound';\nimport { getConfiguration } from '../../configuration';\nimport SecurityLayout from '../../layouts/Security/Dialog';\nimport type { LoginBody } from '../../providers/AuthProvider/types';\nimport { normalizeAuthError } from '../../providers/AuthProvider/utils';\nimport { saveAuth } from '../../store/storage';\nimport { stripTrailingSlash } from '../../store/utils';\nimport { Route } from '../../utils';\nimport { loginSchema } from '../../utils/schemas';\nimport { MessageType } from './Success';\nimport { SecurityContainer, SecurityForm } from './styles';\nimport { getSecurityUrlParams } from './utils';\n\nconst configuration = getConfiguration();\nconst basePath = stripTrailingSlash(configuration.base);\n\nconst Login: React.FC = () => {\n const { t } = useTranslation();\n const location = useLocation();\n const navigate = useNavigate();\n const { next } = getSecurityUrlParams(location);\n const createUserEnabled = configuration?.flags?.createUser;\n const addUserLink = Route.ADD_USER + (next ? '?next=' + next : '');\n\n const { trigger } = useDataMutation<LoginBody>(basePath, next, 'POST');\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const {\n setError,\n handleSubmit,\n register,\n formState: { isValid, errors },\n } = form;\n\n const handleLogin = async (body: { username: string; password: string }) => {\n try {\n return await trigger(body);\n } catch (err) {\n throw normalizeAuthError(err);\n }\n };\n\n const onSuccess = useCallback(() => {\n navigate(`${Route.SUCCESS}?messageType=${MessageType.Login}`);\n }, [navigate]);\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n try {\n const result = await handleLogin?.(data);\n if (result && result.username && result.token) {\n saveAuth(result.username, result.token);\n }\n onSuccess();\n } catch {\n setError('root', {\n type: 'server',\n // TODO: add translation key\n message: 'Invalid username or password',\n });\n }\n },\n [handleLogin, setError, onSuccess]\n );\n\n return !next ? (\n <NotFound />\n ) : (\n <SecurityLayout>\n <SecurityContainer>\n <SecurityForm>\n <LoginFormHeader />\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n {createUserEnabled && (\n <Typography align=\"center\" sx={{ mt: 2, fontSize: 12 }} variant=\"body2\">\n {t('security.login.noUserQuestion')}\n <Link href={addUserLink} sx={{ ml: 1 }}>\n {t('security.login.createUser')}\n </Link>\n </Typography>\n )}\n </SecurityForm>\n </SecurityContainer>\n </SecurityLayout>\n );\n};\n\nexport default Login;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAM,gBAAgB,kBAAkB;AACxC,IAAM,WAAW,mBAAmB,cAAc,KAAK;AAEvD,IAAM,cAAwB;CAC5B,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,EAAE,SAAS,qBAAqB,SAAS;CAC/C,MAAM,oBAAoB,eAAe,OAAO;CAChD,MAAM,cAAc,QAAM,YAAY,OAAO,WAAW,OAAO;CAE/D,MAAM,EAAE,YAAY,gBAA2B,UAAU,MAAM,OAAO;CAOtE,MAAM,EACJ,UACA,cACA,UACA,WAAW,EAAE,SAAS,aATX,QAAyB;EACpC,MAAM;EACN,UAAU,YAAY,YAAY;EACnC,CAAC;CASF,MAAM,cAAc,OAAO,SAAiD;AAC1E,MAAI;AACF,UAAO,MAAM,QAAQ,KAAK;WACnB,KAAK;AACZ,SAAM,mBAAmB,IAAI;;;CAIjC,MAAM,YAAY,kBAAkB;AAClC,WAAS,GAAG,QAAM,QAAQ,eAAe,YAAY,QAAQ;IAC5D,CAAC,SAAS,CAAC;CAEd,MAAM,WAAW,YACf,OAAO,SAA0B;AAC/B,MAAI;GACF,MAAM,SAAS,MAAM,cAAc,KAAK;AACxC,OAAI,UAAU,OAAO,YAAY,OAAO,MACtC,UAAS,OAAO,UAAU,OAAO,MAAM;AAEzC,cAAW;UACL;AACN,YAAS,QAAQ;IACf,MAAM;IAEN,SAAS;IACV,CAAC;;IAGN;EAAC;EAAa;EAAU;EAAU,CACnC;AAED,QAAO,CAAC,OACN,oBAAC,UAAD,EAAY,CAAA,GAEZ,oBAAC,gBAAD,EAAA,UACE,oBAAC,mBAAD,EAAA,UACE,qBAAC,cAAD,EAAA,UAAA;EACE,oBAAC,iBAAD,EAAmB,CAAA;EACnB,oBAAC,WAAD;GACU;GACM;GACL;GACC;GACA;GACV,CAAA;EACD,qBACC,qBAAC,YAAD;GAAY,OAAM;GAAS,IAAI;IAAE,IAAI;IAAG,UAAU;IAAI;GAAE,SAAQ;aAAhE,CACG,EAAE,gCAAgC,EACnC,oBAAC,QAAD;IAAM,MAAM;IAAa,IAAI,EAAE,IAAI,GAAG;cACnC,EAAE,4BAA4B;IAC1B,CAAA,CACI;;EAEF,EAAA,CAAA,EACG,CAAA,EACL,CAAA"}