@strapi/admin 5.52.1 → 5.52.3

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.
Files changed (85) hide show
  1. package/dist/admin/admin/src/components/Filters.js +9 -9
  2. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  3. package/dist/admin/admin/src/components/Filters.mjs +10 -10
  4. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Pagination.js +2 -2
  6. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  7. package/dist/admin/admin/src/components/Pagination.mjs +3 -3
  8. package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/SearchInput.js +7 -8
  10. package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
  11. package/dist/admin/admin/src/components/SearchInput.mjs +8 -9
  12. package/dist/admin/admin/src/components/SearchInput.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/Table.js +2 -2
  14. package/dist/admin/admin/src/components/Table.js.map +1 -1
  15. package/dist/admin/admin/src/components/Table.mjs +3 -3
  16. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  17. package/dist/admin/admin/src/hooks/useQueryParams.js +35 -1
  18. package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
  19. package/dist/admin/admin/src/hooks/useQueryParams.mjs +34 -2
  20. package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
  21. package/dist/admin/admin/src/pages/Auth/AuthPage.js +14 -9
  22. package/dist/admin/admin/src/pages/Auth/AuthPage.js.map +1 -1
  23. package/dist/admin/admin/src/pages/Auth/AuthPage.mjs +15 -10
  24. package/dist/admin/admin/src/pages/Auth/AuthPage.mjs.map +1 -1
  25. package/dist/admin/admin/src/pages/Auth/components/Login.js +2 -6
  26. package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
  27. package/dist/admin/admin/src/pages/Auth/components/Login.mjs +2 -6
  28. package/dist/admin/admin/src/pages/Auth/components/Login.mjs.map +1 -1
  29. package/dist/admin/admin/src/pages/Auth/constants.js +24 -8
  30. package/dist/admin/admin/src/pages/Auth/constants.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Auth/constants.mjs +23 -9
  32. package/dist/admin/admin/src/pages/Auth/constants.mjs.map +1 -1
  33. package/dist/admin/admin/src/pages/Auth/utils.js +34 -0
  34. package/dist/admin/admin/src/pages/Auth/utils.js.map +1 -0
  35. package/dist/admin/admin/src/pages/Auth/utils.mjs +32 -0
  36. package/dist/admin/admin/src/pages/Auth/utils.mjs.map +1 -0
  37. package/dist/admin/admin/src/translations/pt-BR.json.js +1 -1
  38. package/dist/admin/admin/src/translations/pt-BR.json.mjs +1 -1
  39. package/dist/admin/admin/src/utils/getFetchClient.js +4 -0
  40. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  41. package/dist/admin/admin/src/utils/getFetchClient.mjs +4 -0
  42. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  43. package/dist/admin/admin/src/utils/rulesEngine.js +27 -9
  44. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  45. package/dist/admin/admin/src/utils/rulesEngine.mjs +2 -2
  46. package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
  47. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +9 -9
  48. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
  49. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +10 -10
  50. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
  51. package/dist/admin/index.js +2 -1
  52. package/dist/admin/index.js.map +1 -1
  53. package/dist/admin/index.mjs +2 -2
  54. package/dist/admin/src/components/Filters.d.ts +1 -0
  55. package/dist/admin/src/hooks/useQueryParams.d.ts +13 -1
  56. package/dist/admin/src/index.d.ts +1 -1
  57. package/dist/admin/src/pages/Auth/constants.d.ts +19 -5
  58. package/dist/admin/src/pages/Auth/utils.d.ts +7 -0
  59. package/dist/admin/src/utils/rulesEngine.d.ts +9 -13
  60. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
  61. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +22 -4
  62. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
  63. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +22 -4
  64. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
  65. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
  66. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  67. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
  68. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  69. package/dist/server/server/src/controllers/validation/schema.js +36 -16
  70. package/dist/server/server/src/controllers/validation/schema.js.map +1 -1
  71. package/dist/server/server/src/controllers/validation/schema.mjs +1 -1
  72. package/dist/server/server/src/controllers/validation/schema.mjs.map +1 -1
  73. package/dist/server/server/src/services/content-type.js +8 -3
  74. package/dist/server/server/src/services/content-type.js.map +1 -1
  75. package/dist/server/server/src/services/content-type.mjs +8 -3
  76. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  77. package/dist/server/server/src/services/permission/queries.js +3 -1
  78. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  79. package/dist/server/server/src/services/permission/queries.mjs +3 -1
  80. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  81. package/dist/server/src/controllers/validation/schema.d.ts +8 -48
  82. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  83. package/dist/server/src/services/content-type.d.ts.map +1 -1
  84. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  85. package/package.json +8 -8
@@ -43,7 +43,12 @@ const useQueryParams = (initialParams)=>{
43
43
  ...nextParams
44
44
  };
45
45
  }
46
- navigate({
46
+ /**
47
+ * TODO V6: Encoding should be enabled in this step, via `{ encodeValuesOnly: true }`
48
+ * So the rest of the app doesn't have to worry about it,
49
+ * It's considered a breaking change because callers currently encode values themselves,
50
+ * including the user's custom code, and would end up double-encoding them.
51
+ */ navigate({
47
52
  search: qs.stringify(nextQuery, {
48
53
  encode: false
49
54
  })
@@ -62,6 +67,35 @@ const useQueryParams = (initialParams)=>{
62
67
  setQuery
63
68
  ];
64
69
  };
70
+ /**
71
+ * These functions are used to encode query values when writing them to the URL.
72
+ * As stated above, it should be handled by `useQueryParams` instead, but that would be a breaking change.
73
+ */ const deepEncodeQueryValues = (value)=>{
74
+ if (typeof value === 'string') {
75
+ return encodeURIComponent(value);
76
+ }
77
+ if (Array.isArray(value)) {
78
+ return value.map(deepEncodeQueryValues);
79
+ }
80
+ if (value !== null && typeof value === 'object') {
81
+ return Object.fromEntries(Object.entries(value).map(([key, entry])=>[
82
+ key,
83
+ deepEncodeQueryValues(entry)
84
+ ]));
85
+ }
86
+ return value;
87
+ };
88
+ const withEncodedUserParams = (query, nextParams)=>({
89
+ ...query.filters === undefined ? {} : {
90
+ filters: deepEncodeQueryValues(query.filters)
91
+ },
92
+ ...query._q === undefined ? {} : {
93
+ _q: deepEncodeQueryValues(query._q)
94
+ },
95
+ ...nextParams
96
+ });
65
97
 
98
+ exports.deepEncodeQueryValues = deepEncodeQueryValues;
66
99
  exports.useQueryParams = useQueryParams;
100
+ exports.withEncodedUserParams = withEncodedUserParams;
67
101
  //# sourceMappingURL=useQueryParams.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryParams.js","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\ntype QueryParams = Record<string, unknown>;\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object = QueryParams>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\nexport { useQueryParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery"],"mappings":";;;;;;AAOA,MAAMA,SAAAA,GAAY,IAAA;IAChB,MAAM,EAAEC,MAAM,EAAE,GAAGC,0BAAAA,EAAAA;IAEnB,OAAOC,aAAAA,CAAQ,IAAMF,MAAAA,EAAQ;AAACA,QAAAA;AAAO,KAAA,CAAA;AACvC,CAAA;AAEA,MAAMG,iBAAiB,CAAsCC,aAAAA,GAAAA;AAC3D,IAAA,MAAMJ,MAAAA,GAASD,SAAAA,EAAAA;AACf,IAAA,MAAMM,QAAAA,GAAWC,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,QAAQL,aAAAA,CAAQ,IAAA;;QAEpB,MAAMM,WAAAA,GAAcR,OAAOS,UAAU,CAAC,OAAOT,MAAAA,CAAOU,KAAK,CAAC,CAAA,CAAA,GAAKV,MAAAA;QAC/D,IAAI,CAACA,UAAUI,aAAAA,EAAe;YAC5B,OAAOA,aAAAA;AACT,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGA,aAAa;AAAE,YAAA,GAAGO,SAAMH,WAAAA;AAAa,SAAA;IACnD,CAAA,EAAG;AAACR,QAAAA,MAAAA;AAAQI,QAAAA;AAAc,KAAA,CAAA;IAE1B,MAAMQ,QAAAA,GAAWC,kBACf,CAACC,UAAAA,EAAoBC,SAA4B,MAAM,EAAEC,UAAU,KAAK,GAAA;AACtE,QAAA,IAAIC,SAAAA,GAA6B;AAAE,YAAA,GAAGV;AAAM,SAAA;AAE5C,QAAA,IAAIQ,WAAW,QAAA,EAAU;AACvBG,YAAAA,MAAAA,CAAOC,IAAI,CAACL,UAAAA,CAAAA,CAAYM,OAAO,CAAC,CAACC,GAAAA,GAAAA;gBAC/B,IAAIH,MAAAA,CAAOI,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAWI,GAAAA,CAAAA,EAAM;oBACxD,OAAOJ,SAAS,CAACI,GAAAA,CAAoB;AACvC,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,CAAA,MAAO;YACLJ,SAAAA,GAAY;AAAE,gBAAA,GAAGV,KAAK;AAAE,gBAAA,GAAGO;AAAW,aAAA;AACxC,QAAA;QAEAT,QAAAA,CAAS;AAAEL,YAAAA,MAAAA,EAAQyB,aAAUR,SAAAA,EAAW;gBAAES,MAAAA,EAAQ;AAAM,aAAA;SAAG,EAAG;AAAEV,YAAAA;AAAQ,SAAA,CAAA;IAC1E,CAAA,EACA;AAACX,QAAAA,QAAAA;AAAUE,QAAAA;AAAM,KAAA,CAAA;IAGnB,OAAO;AAAC,QAAA;AAAEA,YAAAA,KAAAA;YAAOoB,QAAAA,EAAU3B;AAAO,SAAA;AAAGY,QAAAA;AAAS,KAAA;AAChD;;;;"}
1
+ {"version":3,"file":"useQueryParams.js","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\ntype QueryParams = Record<string, unknown>;\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object = QueryParams>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n /**\n * TODO V6: Encoding should be enabled in this step, via `{ encodeValuesOnly: true }`\n * So the rest of the app doesn't have to worry about it,\n * It's considered a breaking change because callers currently encode values themselves,\n * including the user's custom code, and would end up double-encoding them.\n */\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\n/**\n * These functions are used to encode query values when writing them to the URL.\n * As stated above, it should be handled by `useQueryParams` instead, but that would be a breaking change.\n */\n\nconst deepEncodeQueryValues = <T>(value: T): T => {\n if (typeof value === 'string') {\n return encodeURIComponent(value) as T;\n }\n\n if (Array.isArray(value)) {\n return value.map(deepEncodeQueryValues) as T;\n }\n\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, deepEncodeQueryValues(entry)])\n ) as T;\n }\n\n return value;\n};\n\nconst withEncodedUserParams = <\n T extends object,\n TQuery extends { filters?: unknown; _q?: unknown },\n>(\n query: TQuery,\n nextParams: T\n): T & { filters?: TQuery['filters']; _q?: TQuery['_q'] } => ({\n ...(query.filters === undefined ? {} : { filters: deepEncodeQueryValues(query.filters) }),\n ...(query._q === undefined ? {} : { _q: deepEncodeQueryValues(query._q) }),\n ...nextParams,\n});\n\nexport { useQueryParams, deepEncodeQueryValues, withEncodedUserParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery","deepEncodeQueryValues","value","encodeURIComponent","Array","isArray","map","fromEntries","entries","entry","withEncodedUserParams","filters","undefined","_q"],"mappings":"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"}
@@ -41,7 +41,12 @@ const useQueryParams = (initialParams)=>{
41
41
  ...nextParams
42
42
  };
43
43
  }
44
- navigate({
44
+ /**
45
+ * TODO V6: Encoding should be enabled in this step, via `{ encodeValuesOnly: true }`
46
+ * So the rest of the app doesn't have to worry about it,
47
+ * It's considered a breaking change because callers currently encode values themselves,
48
+ * including the user's custom code, and would end up double-encoding them.
49
+ */ navigate({
45
50
  search: stringify(nextQuery, {
46
51
  encode: false
47
52
  })
@@ -60,6 +65,33 @@ const useQueryParams = (initialParams)=>{
60
65
  setQuery
61
66
  ];
62
67
  };
68
+ /**
69
+ * These functions are used to encode query values when writing them to the URL.
70
+ * As stated above, it should be handled by `useQueryParams` instead, but that would be a breaking change.
71
+ */ const deepEncodeQueryValues = (value)=>{
72
+ if (typeof value === 'string') {
73
+ return encodeURIComponent(value);
74
+ }
75
+ if (Array.isArray(value)) {
76
+ return value.map(deepEncodeQueryValues);
77
+ }
78
+ if (value !== null && typeof value === 'object') {
79
+ return Object.fromEntries(Object.entries(value).map(([key, entry])=>[
80
+ key,
81
+ deepEncodeQueryValues(entry)
82
+ ]));
83
+ }
84
+ return value;
85
+ };
86
+ const withEncodedUserParams = (query, nextParams)=>({
87
+ ...query.filters === undefined ? {} : {
88
+ filters: deepEncodeQueryValues(query.filters)
89
+ },
90
+ ...query._q === undefined ? {} : {
91
+ _q: deepEncodeQueryValues(query._q)
92
+ },
93
+ ...nextParams
94
+ });
63
95
 
64
- export { useQueryParams };
96
+ export { deepEncodeQueryValues, useQueryParams, withEncodedUserParams };
65
97
  //# sourceMappingURL=useQueryParams.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryParams.mjs","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\ntype QueryParams = Record<string, unknown>;\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object = QueryParams>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\nexport { useQueryParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery"],"mappings":";;;;AAOA,MAAMA,SAAAA,GAAY,IAAA;IAChB,MAAM,EAAEC,MAAM,EAAE,GAAGC,WAAAA,EAAAA;IAEnB,OAAOC,OAAAA,CAAQ,IAAMF,MAAAA,EAAQ;AAACA,QAAAA;AAAO,KAAA,CAAA;AACvC,CAAA;AAEA,MAAMG,iBAAiB,CAAsCC,aAAAA,GAAAA;AAC3D,IAAA,MAAMJ,MAAAA,GAASD,SAAAA,EAAAA;AACf,IAAA,MAAMM,QAAAA,GAAWC,WAAAA,EAAAA;AAEjB,IAAA,MAAMC,QAAQL,OAAAA,CAAQ,IAAA;;QAEpB,MAAMM,WAAAA,GAAcR,OAAOS,UAAU,CAAC,OAAOT,MAAAA,CAAOU,KAAK,CAAC,CAAA,CAAA,GAAKV,MAAAA;QAC/D,IAAI,CAACA,UAAUI,aAAAA,EAAe;YAC5B,OAAOA,aAAAA;AACT,QAAA;QAEA,OAAO;AAAE,YAAA,GAAGA,aAAa;AAAE,YAAA,GAAGO,MAAMH,WAAAA;AAAa,SAAA;IACnD,CAAA,EAAG;AAACR,QAAAA,MAAAA;AAAQI,QAAAA;AAAc,KAAA,CAAA;IAE1B,MAAMQ,QAAAA,GAAWC,YACf,CAACC,UAAAA,EAAoBC,SAA4B,MAAM,EAAEC,UAAU,KAAK,GAAA;AACtE,QAAA,IAAIC,SAAAA,GAA6B;AAAE,YAAA,GAAGV;AAAM,SAAA;AAE5C,QAAA,IAAIQ,WAAW,QAAA,EAAU;AACvBG,YAAAA,MAAAA,CAAOC,IAAI,CAACL,UAAAA,CAAAA,CAAYM,OAAO,CAAC,CAACC,GAAAA,GAAAA;gBAC/B,IAAIH,MAAAA,CAAOI,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAWI,GAAAA,CAAAA,EAAM;oBACxD,OAAOJ,SAAS,CAACI,GAAAA,CAAoB;AACvC,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,CAAA,MAAO;YACLJ,SAAAA,GAAY;AAAE,gBAAA,GAAGV,KAAK;AAAE,gBAAA,GAAGO;AAAW,aAAA;AACxC,QAAA;QAEAT,QAAAA,CAAS;AAAEL,YAAAA,MAAAA,EAAQyB,UAAUR,SAAAA,EAAW;gBAAES,MAAAA,EAAQ;AAAM,aAAA;SAAG,EAAG;AAAEV,YAAAA;AAAQ,SAAA,CAAA;IAC1E,CAAA,EACA;AAACX,QAAAA,QAAAA;AAAUE,QAAAA;AAAM,KAAA,CAAA;IAGnB,OAAO;AAAC,QAAA;AAAEA,YAAAA,KAAAA;YAAOoB,QAAAA,EAAU3B;AAAO,SAAA;AAAGY,QAAAA;AAAS,KAAA;AAChD;;;;"}
1
+ {"version":3,"file":"useQueryParams.mjs","sources":["../../../../../admin/src/hooks/useQueryParams.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { parse, stringify } from 'qs';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\ntype QueryParams = Record<string, unknown>;\n\nconst useSearch = () => {\n const { search } = useLocation();\n\n return useMemo(() => search, [search]);\n};\n\nconst useQueryParams = <TQuery extends object = QueryParams>(initialParams?: TQuery) => {\n const search = useSearch();\n const navigate = useNavigate();\n\n const query = useMemo(() => {\n // TODO: investigate why sometimes we're getting the search with a leading `?` and sometimes not.\n const searchQuery = search.startsWith('?') ? search.slice(1) : search;\n if (!search && initialParams) {\n return initialParams;\n }\n\n return { ...initialParams, ...parse(searchQuery) } as TQuery;\n }, [search, initialParams]);\n\n const setQuery = useCallback(\n (nextParams: TQuery, method: 'push' | 'remove' = 'push', replace = false) => {\n let nextQuery: Partial<TQuery> = { ...query };\n\n if (method === 'remove') {\n Object.keys(nextParams).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {\n delete nextQuery[key as keyof TQuery];\n }\n });\n } else {\n nextQuery = { ...query, ...nextParams };\n }\n\n /**\n * TODO V6: Encoding should be enabled in this step, via `{ encodeValuesOnly: true }`\n * So the rest of the app doesn't have to worry about it,\n * It's considered a breaking change because callers currently encode values themselves,\n * including the user's custom code, and would end up double-encoding them.\n */\n navigate({ search: stringify(nextQuery, { encode: false }) }, { replace });\n },\n [navigate, query]\n );\n\n return [{ query, rawQuery: search }, setQuery] as const;\n};\n\n/**\n * These functions are used to encode query values when writing them to the URL.\n * As stated above, it should be handled by `useQueryParams` instead, but that would be a breaking change.\n */\n\nconst deepEncodeQueryValues = <T>(value: T): T => {\n if (typeof value === 'string') {\n return encodeURIComponent(value) as T;\n }\n\n if (Array.isArray(value)) {\n return value.map(deepEncodeQueryValues) as T;\n }\n\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, deepEncodeQueryValues(entry)])\n ) as T;\n }\n\n return value;\n};\n\nconst withEncodedUserParams = <\n T extends object,\n TQuery extends { filters?: unknown; _q?: unknown },\n>(\n query: TQuery,\n nextParams: T\n): T & { filters?: TQuery['filters']; _q?: TQuery['_q'] } => ({\n ...(query.filters === undefined ? {} : { filters: deepEncodeQueryValues(query.filters) }),\n ...(query._q === undefined ? {} : { _q: deepEncodeQueryValues(query._q) }),\n ...nextParams,\n});\n\nexport { useQueryParams, deepEncodeQueryValues, withEncodedUserParams };\n"],"names":["useSearch","search","useLocation","useMemo","useQueryParams","initialParams","navigate","useNavigate","query","searchQuery","startsWith","slice","parse","setQuery","useCallback","nextParams","method","replace","nextQuery","Object","keys","forEach","key","prototype","hasOwnProperty","call","stringify","encode","rawQuery","deepEncodeQueryValues","value","encodeURIComponent","Array","isArray","map","fromEntries","entries","entry","withEncodedUserParams","filters","undefined","_q"],"mappings":"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"}
@@ -8,6 +8,7 @@ var admin = require('../../services/admin.js');
8
8
  var retryDynamicImport = require('../../utils/retryDynamicImport.js');
9
9
  var Login = require('./components/Login.js');
10
10
  var constants = require('./constants.js');
11
+ var utils = require('./utils.js');
11
12
 
12
13
  /* -------------------------------------------------------------------------------------------------
13
14
  * AuthPage
@@ -28,7 +29,7 @@ var constants = require('./constants.js');
28
29
  defaultValue: constants.FORMS
29
30
  });
30
31
  const { token } = Auth.useAuth('AuthPage', (auth)=>auth);
31
- if (!authType || !forms) {
32
+ if (!constants.isAuthType(authType) || !forms) {
32
33
  return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
33
34
  to: "/"
34
35
  });
@@ -42,32 +43,36 @@ var constants = require('./constants.js');
42
43
  });
43
44
  }
44
45
  // User is already logged in
45
- if (authType !== 'register-admin' && authType !== 'register' && token) {
46
+ if (authType !== constants.AUTH_TYPES.REGISTER_ADMIN && authType !== constants.AUTH_TYPES.REGISTER && token) {
47
+ // Honour the `?redirectTo` the user was sent here with, otherwise logging in from a
48
+ // deep link always lands on the home page. `login()` sets the token before the login
49
+ // form gets to navigate, so this branch is what actually performs the redirect.
50
+ // See https://github.com/strapi/strapi/issues/19557
46
51
  return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
47
- to: "/"
52
+ to: utils.getRedirectTo(search)
48
53
  });
49
54
  }
50
55
  // there is already an admin user oo
51
- if (hasAdmin && authType === 'register-admin' && token) {
56
+ if (hasAdmin && authType === constants.AUTH_TYPES.REGISTER_ADMIN && token) {
52
57
  return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
53
- to: "/"
58
+ to: utils.getRedirectTo(search)
54
59
  });
55
60
  }
56
61
  // Redirect the user to the register-admin if it is the first user
57
- if (!hasAdmin && authType !== 'register-admin') {
62
+ if (!hasAdmin && authType !== constants.AUTH_TYPES.REGISTER_ADMIN) {
58
63
  return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
59
64
  to: {
60
- pathname: '/auth/register-admin',
65
+ pathname: `/auth/${constants.AUTH_TYPES.REGISTER_ADMIN}`,
61
66
  // Forward the `?redirectTo` from /auth/login
62
67
  // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc
63
68
  search
64
69
  }
65
70
  });
66
71
  }
67
- if (Login$1 && authType === 'login') {
72
+ if (Login$1 && authType === constants.AUTH_TYPES.LOGIN) {
68
73
  // Assign the component to render for the login form
69
74
  return /*#__PURE__*/ jsxRuntime.jsx(Login$1, {});
70
- } else if (authType === 'login' && !Login$1) {
75
+ } else if (authType === constants.AUTH_TYPES.LOGIN && !Login$1) {
71
76
  // block rendering until the Login EE component is fully loaded
72
77
  return null;
73
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPage.js","sources":["../../../../../../admin/src/pages/Auth/AuthPage.tsx"],"sourcesContent":["import { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { useAuth } from '../../features/Auth';\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useInitQuery } from '../../services/admin';\nimport { retryDynamicImport } from '../../utils/retryDynamicImport';\n\nimport { Login as LoginCE } from './components/Login';\nimport { FORMS, FormDictionary } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * AuthPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AuthPage = () => {\n const { search } = useLocation();\n const match = useMatch('/auth/:authType');\n const authType = match?.params.authType;\n const { data } = useInitQuery();\n const { hasAdmin } = data ?? {};\n const Login = useEnterprise(\n LoginCE,\n async () =>\n (\n await retryDynamicImport(\n () => import('../../../../ee/admin/src/pages/AuthPage/components/Login')\n )\n ).LoginEE\n );\n const forms = useEnterprise<FormDictionary, Partial<FormDictionary>>(\n FORMS,\n async () =>\n (await retryDynamicImport(() => import('../../../../ee/admin/src/pages/AuthPage/constants')))\n .FORMS,\n {\n combine(ceForms, eeForms) {\n return {\n ...ceForms,\n ...eeForms,\n };\n },\n defaultValue: FORMS,\n }\n );\n\n const { token } = useAuth('AuthPage', (auth) => auth);\n\n if (!authType || !forms) {\n return <Navigate to=\"/\" />;\n }\n\n const Component = forms[authType as keyof FormDictionary];\n\n // Redirect the user to the login page if\n // the endpoint does not exists\n if (!Component) {\n return <Navigate to=\"/\" />;\n }\n\n // User is already logged in\n if (authType !== 'register-admin' && authType !== 'register' && token) {\n return <Navigate to=\"/\" />;\n }\n\n // there is already an admin user oo\n if (hasAdmin && authType === 'register-admin' && token) {\n return <Navigate to=\"/\" />;\n }\n\n // Redirect the user to the register-admin if it is the first user\n if (!hasAdmin && authType !== 'register-admin') {\n return (\n <Navigate\n to={{\n pathname: '/auth/register-admin',\n // Forward the `?redirectTo` from /auth/login\n // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc\n search,\n }}\n />\n );\n }\n\n if (Login && authType === 'login') {\n // Assign the component to render for the login form\n return <Login />;\n } else if (authType === 'login' && !Login) {\n // block rendering until the Login EE component is fully loaded\n return null;\n }\n\n return <Component hasAdmin={hasAdmin} />;\n};\n\nexport { AuthPage };\n"],"names":["AuthPage","search","useLocation","match","useMatch","authType","params","data","useInitQuery","hasAdmin","Login","useEnterprise","LoginCE","retryDynamicImport","LoginEE","forms","FORMS","combine","ceForms","eeForms","defaultValue","token","useAuth","auth","_jsx","Navigate","to","Component","pathname"],"mappings":";;;;;;;;;;;AAUA;;AAEkG,2GAE5FA,QAAAA,GAAW,IAAA;IACf,MAAM,EAAEC,MAAM,EAAE,GAAGC,0BAAAA,EAAAA;AACnB,IAAA,MAAMC,QAAQC,uBAAAA,CAAS,iBAAA,CAAA;IACvB,MAAMC,QAAAA,GAAWF,OAAOG,MAAAA,CAAOD,QAAAA;IAC/B,MAAM,EAAEE,IAAI,EAAE,GAAGC,kBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGF,QAAQ,EAAC;AAC9B,IAAA,MAAMG,OAAAA,GAAQC,2BAAAA,CACZC,WAAAA,EACA,UACE,CACE,MAAMC,qCAAAA,CACJ,IAAM,oDAAO,6DAAA,KAAA,CACf,EACAC,OAAO,CAAA;AAEb,IAAA,MAAMC,KAAAA,GAAQJ,2BAAAA,CACZK,eAAAA,EACA,UACE,CAAC,MAAMH,qCAAAA,CAAmB,IAAM,oDAAO,sDAAA,KAAA,CAAoD,EACxFG,KAAK,EACV;QACEC,OAAAA,CAAAA,CAAQC,OAAO,EAAEC,OAAO,EAAA;YACtB,OAAO;AACL,gBAAA,GAAGD,OAAO;AACV,gBAAA,GAAGC;AACL,aAAA;AACF,QAAA,CAAA;QACAC,YAAAA,EAAcJ;AAChB,KAAA,CAAA;AAGF,IAAA,MAAM,EAAEK,KAAK,EAAE,GAAGC,YAAAA,CAAQ,UAAA,EAAY,CAACC,IAAAA,GAASA,IAAAA,CAAAA;IAEhD,IAAI,CAAClB,QAAAA,IAAY,CAACU,KAAAA,EAAO;AACvB,QAAA,qBAAOS,cAAA,CAACC,uBAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;IAEA,MAAMC,SAAAA,GAAYZ,KAAK,CAACV,QAAAA,CAAiC;;;AAIzD,IAAA,IAAI,CAACsB,SAAAA,EAAW;AACd,QAAA,qBAAOH,cAAA,CAACC,uBAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;AAGA,IAAA,IAAIrB,QAAAA,KAAa,gBAAA,IAAoBA,QAAAA,KAAa,UAAA,IAAcgB,KAAAA,EAAO;AACrE,QAAA,qBAAOG,cAAA,CAACC,uBAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;IAGA,IAAIjB,QAAAA,IAAYJ,QAAAA,KAAa,gBAAA,IAAoBgB,KAAAA,EAAO;AACtD,QAAA,qBAAOG,cAAA,CAACC,uBAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;IAGA,IAAI,CAACjB,QAAAA,IAAYJ,QAAAA,KAAa,gBAAA,EAAkB;AAC9C,QAAA,qBACEmB,cAAA,CAACC,uBAAAA,EAAAA;YACCC,EAAAA,EAAI;gBACFE,QAAAA,EAAU,sBAAA;;;AAGV3B,gBAAAA;AACF;;AAGN,IAAA;IAEA,IAAIS,OAAAA,IAASL,aAAa,OAAA,EAAS;;AAEjC,QAAA,qBAAOmB,cAAA,CAACd,OAAAA,EAAAA,EAAAA,CAAAA;AACV,IAAA,CAAA,MAAO,IAAIL,QAAAA,KAAa,OAAA,IAAW,CAACK,OAAAA,EAAO;;QAEzC,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBAAOc,cAAA,CAACG,SAAAA,EAAAA;QAAUlB,QAAAA,EAAUA;;AAC9B;;;;"}
1
+ {"version":3,"file":"AuthPage.js","sources":["../../../../../../admin/src/pages/Auth/AuthPage.tsx"],"sourcesContent":["import { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { useAuth } from '../../features/Auth';\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useInitQuery } from '../../services/admin';\nimport { retryDynamicImport } from '../../utils/retryDynamicImport';\n\nimport { Login as LoginCE } from './components/Login';\nimport { AUTH_TYPES, FORMS, FormDictionary, isAuthType } from './constants';\nimport { getRedirectTo } from './utils';\n\n/* -------------------------------------------------------------------------------------------------\n * AuthPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AuthPage = () => {\n const { search } = useLocation();\n const match = useMatch('/auth/:authType');\n const authType = match?.params.authType;\n const { data } = useInitQuery();\n const { hasAdmin } = data ?? {};\n const Login = useEnterprise(\n LoginCE,\n async () =>\n (\n await retryDynamicImport(\n () => import('../../../../ee/admin/src/pages/AuthPage/components/Login')\n )\n ).LoginEE\n );\n const forms = useEnterprise<FormDictionary, Partial<FormDictionary>>(\n FORMS,\n async () =>\n (await retryDynamicImport(() => import('../../../../ee/admin/src/pages/AuthPage/constants')))\n .FORMS,\n {\n combine(ceForms, eeForms) {\n return {\n ...ceForms,\n ...eeForms,\n };\n },\n defaultValue: FORMS,\n }\n );\n\n const { token } = useAuth('AuthPage', (auth) => auth);\n\n if (!isAuthType(authType) || !forms) {\n return <Navigate to=\"/\" />;\n }\n\n const Component = forms[authType];\n\n // Redirect the user to the login page if\n // the endpoint does not exists\n if (!Component) {\n return <Navigate to=\"/\" />;\n }\n\n // User is already logged in\n if (authType !== AUTH_TYPES.REGISTER_ADMIN && authType !== AUTH_TYPES.REGISTER && token) {\n // Honour the `?redirectTo` the user was sent here with, otherwise logging in from a\n // deep link always lands on the home page. `login()` sets the token before the login\n // form gets to navigate, so this branch is what actually performs the redirect.\n // See https://github.com/strapi/strapi/issues/19557\n return <Navigate to={getRedirectTo(search)} />;\n }\n\n // there is already an admin user oo\n if (hasAdmin && authType === AUTH_TYPES.REGISTER_ADMIN && token) {\n return <Navigate to={getRedirectTo(search)} />;\n }\n\n // Redirect the user to the register-admin if it is the first user\n if (!hasAdmin && authType !== AUTH_TYPES.REGISTER_ADMIN) {\n return (\n <Navigate\n to={{\n pathname: `/auth/${AUTH_TYPES.REGISTER_ADMIN}`,\n // Forward the `?redirectTo` from /auth/login\n // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc\n search,\n }}\n />\n );\n }\n\n if (Login && authType === AUTH_TYPES.LOGIN) {\n // Assign the component to render for the login form\n return <Login />;\n } else if (authType === AUTH_TYPES.LOGIN && !Login) {\n // block rendering until the Login EE component is fully loaded\n return null;\n }\n\n return <Component hasAdmin={hasAdmin} />;\n};\n\nexport { AuthPage };\n"],"names":["AuthPage","search","useLocation","match","useMatch","authType","params","data","useInitQuery","hasAdmin","Login","useEnterprise","LoginCE","retryDynamicImport","LoginEE","forms","FORMS","combine","ceForms","eeForms","defaultValue","token","useAuth","auth","isAuthType","_jsx","Navigate","to","Component","AUTH_TYPES","REGISTER_ADMIN","REGISTER","getRedirectTo","pathname","LOGIN"],"mappings":";;;;;;;;;;;;AAWA;;AAEkG,2GAE5FA,QAAAA,GAAW,IAAA;IACf,MAAM,EAAEC,MAAM,EAAE,GAAGC,0BAAAA,EAAAA;AACnB,IAAA,MAAMC,QAAQC,uBAAAA,CAAS,iBAAA,CAAA;IACvB,MAAMC,QAAAA,GAAWF,OAAOG,MAAAA,CAAOD,QAAAA;IAC/B,MAAM,EAAEE,IAAI,EAAE,GAAGC,kBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGF,QAAQ,EAAC;AAC9B,IAAA,MAAMG,OAAAA,GAAQC,2BAAAA,CACZC,WAAAA,EACA,UACE,CACE,MAAMC,qCAAAA,CACJ,IAAM,oDAAO,6DAAA,KAAA,CACf,EACAC,OAAO,CAAA;AAEb,IAAA,MAAMC,KAAAA,GAAQJ,2BAAAA,CACZK,eAAAA,EACA,UACE,CAAC,MAAMH,qCAAAA,CAAmB,IAAM,oDAAO,sDAAA,KAAA,CAAoD,EACxFG,KAAK,EACV;QACEC,OAAAA,CAAAA,CAAQC,OAAO,EAAEC,OAAO,EAAA;YACtB,OAAO;AACL,gBAAA,GAAGD,OAAO;AACV,gBAAA,GAAGC;AACL,aAAA;AACF,QAAA,CAAA;QACAC,YAAAA,EAAcJ;AAChB,KAAA,CAAA;AAGF,IAAA,MAAM,EAAEK,KAAK,EAAE,GAAGC,YAAAA,CAAQ,UAAA,EAAY,CAACC,IAAAA,GAASA,IAAAA,CAAAA;AAEhD,IAAA,IAAI,CAACC,oBAAAA,CAAWnB,QAAAA,CAAAA,IAAa,CAACU,KAAAA,EAAO;AACnC,QAAA,qBAAOU,cAAA,CAACC,uBAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;IAEA,MAAMC,SAAAA,GAAYb,KAAK,CAACV,QAAAA,CAAS;;;AAIjC,IAAA,IAAI,CAACuB,SAAAA,EAAW;AACd,QAAA,qBAAOH,cAAA,CAACC,uBAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;IAGA,IAAItB,QAAAA,KAAawB,qBAAWC,cAAc,IAAIzB,aAAawB,oBAAAA,CAAWE,QAAQ,IAAIV,KAAAA,EAAO;;;;;AAKvF,QAAA,qBAAOI,cAAA,CAACC,uBAAAA,EAAAA;AAASC,YAAAA,EAAAA,EAAIK,mBAAAA,CAAc/B,MAAAA;;AACrC,IAAA;;AAGA,IAAA,IAAIQ,QAAAA,IAAYJ,QAAAA,KAAawB,oBAAAA,CAAWC,cAAc,IAAIT,KAAAA,EAAO;AAC/D,QAAA,qBAAOI,cAAA,CAACC,uBAAAA,EAAAA;AAASC,YAAAA,EAAAA,EAAIK,mBAAAA,CAAc/B,MAAAA;;AACrC,IAAA;;AAGA,IAAA,IAAI,CAACQ,QAAAA,IAAYJ,QAAAA,KAAawB,oBAAAA,CAAWC,cAAc,EAAE;AACvD,QAAA,qBACEL,cAAA,CAACC,uBAAAA,EAAAA;YACCC,EAAAA,EAAI;AACFM,gBAAAA,QAAAA,EAAU,CAAC,MAAM,EAAEJ,oBAAAA,CAAWC,cAAc,CAAA,CAAE;;;AAG9C7B,gBAAAA;AACF;;AAGN,IAAA;AAEA,IAAA,IAAIS,OAAAA,IAASL,QAAAA,KAAawB,oBAAAA,CAAWK,KAAK,EAAE;;AAE1C,QAAA,qBAAOT,cAAA,CAACf,OAAAA,EAAAA,EAAAA,CAAAA;AACV,IAAA,CAAA,MAAO,IAAIL,QAAAA,KAAawB,oBAAAA,CAAWK,KAAK,IAAI,CAACxB,OAAAA,EAAO;;QAElD,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBAAOe,cAAA,CAACG,SAAAA,EAAAA;QAAUnB,QAAAA,EAAUA;;AAC9B;;;;"}
@@ -5,7 +5,8 @@ import { useEnterprise } from '../../hooks/useEnterprise.mjs';
5
5
  import { useInitQuery } from '../../services/admin.mjs';
6
6
  import { retryDynamicImport } from '../../utils/retryDynamicImport.mjs';
7
7
  import { Login } from './components/Login.mjs';
8
- import { FORMS } from './constants.mjs';
8
+ import { FORMS, isAuthType, AUTH_TYPES } from './constants.mjs';
9
+ import { getRedirectTo } from './utils.mjs';
9
10
 
10
11
  /* -------------------------------------------------------------------------------------------------
11
12
  * AuthPage
@@ -26,7 +27,7 @@ import { FORMS } from './constants.mjs';
26
27
  defaultValue: FORMS
27
28
  });
28
29
  const { token } = useAuth('AuthPage', (auth)=>auth);
29
- if (!authType || !forms) {
30
+ if (!isAuthType(authType) || !forms) {
30
31
  return /*#__PURE__*/ jsx(Navigate, {
31
32
  to: "/"
32
33
  });
@@ -40,32 +41,36 @@ import { FORMS } from './constants.mjs';
40
41
  });
41
42
  }
42
43
  // User is already logged in
43
- if (authType !== 'register-admin' && authType !== 'register' && token) {
44
+ if (authType !== AUTH_TYPES.REGISTER_ADMIN && authType !== AUTH_TYPES.REGISTER && token) {
45
+ // Honour the `?redirectTo` the user was sent here with, otherwise logging in from a
46
+ // deep link always lands on the home page. `login()` sets the token before the login
47
+ // form gets to navigate, so this branch is what actually performs the redirect.
48
+ // See https://github.com/strapi/strapi/issues/19557
44
49
  return /*#__PURE__*/ jsx(Navigate, {
45
- to: "/"
50
+ to: getRedirectTo(search)
46
51
  });
47
52
  }
48
53
  // there is already an admin user oo
49
- if (hasAdmin && authType === 'register-admin' && token) {
54
+ if (hasAdmin && authType === AUTH_TYPES.REGISTER_ADMIN && token) {
50
55
  return /*#__PURE__*/ jsx(Navigate, {
51
- to: "/"
56
+ to: getRedirectTo(search)
52
57
  });
53
58
  }
54
59
  // Redirect the user to the register-admin if it is the first user
55
- if (!hasAdmin && authType !== 'register-admin') {
60
+ if (!hasAdmin && authType !== AUTH_TYPES.REGISTER_ADMIN) {
56
61
  return /*#__PURE__*/ jsx(Navigate, {
57
62
  to: {
58
- pathname: '/auth/register-admin',
63
+ pathname: `/auth/${AUTH_TYPES.REGISTER_ADMIN}`,
59
64
  // Forward the `?redirectTo` from /auth/login
60
65
  // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc
61
66
  search
62
67
  }
63
68
  });
64
69
  }
65
- if (Login$1 && authType === 'login') {
70
+ if (Login$1 && authType === AUTH_TYPES.LOGIN) {
66
71
  // Assign the component to render for the login form
67
72
  return /*#__PURE__*/ jsx(Login$1, {});
68
- } else if (authType === 'login' && !Login$1) {
73
+ } else if (authType === AUTH_TYPES.LOGIN && !Login$1) {
69
74
  // block rendering until the Login EE component is fully loaded
70
75
  return null;
71
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPage.mjs","sources":["../../../../../../admin/src/pages/Auth/AuthPage.tsx"],"sourcesContent":["import { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { useAuth } from '../../features/Auth';\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useInitQuery } from '../../services/admin';\nimport { retryDynamicImport } from '../../utils/retryDynamicImport';\n\nimport { Login as LoginCE } from './components/Login';\nimport { FORMS, FormDictionary } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * AuthPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AuthPage = () => {\n const { search } = useLocation();\n const match = useMatch('/auth/:authType');\n const authType = match?.params.authType;\n const { data } = useInitQuery();\n const { hasAdmin } = data ?? {};\n const Login = useEnterprise(\n LoginCE,\n async () =>\n (\n await retryDynamicImport(\n () => import('../../../../ee/admin/src/pages/AuthPage/components/Login')\n )\n ).LoginEE\n );\n const forms = useEnterprise<FormDictionary, Partial<FormDictionary>>(\n FORMS,\n async () =>\n (await retryDynamicImport(() => import('../../../../ee/admin/src/pages/AuthPage/constants')))\n .FORMS,\n {\n combine(ceForms, eeForms) {\n return {\n ...ceForms,\n ...eeForms,\n };\n },\n defaultValue: FORMS,\n }\n );\n\n const { token } = useAuth('AuthPage', (auth) => auth);\n\n if (!authType || !forms) {\n return <Navigate to=\"/\" />;\n }\n\n const Component = forms[authType as keyof FormDictionary];\n\n // Redirect the user to the login page if\n // the endpoint does not exists\n if (!Component) {\n return <Navigate to=\"/\" />;\n }\n\n // User is already logged in\n if (authType !== 'register-admin' && authType !== 'register' && token) {\n return <Navigate to=\"/\" />;\n }\n\n // there is already an admin user oo\n if (hasAdmin && authType === 'register-admin' && token) {\n return <Navigate to=\"/\" />;\n }\n\n // Redirect the user to the register-admin if it is the first user\n if (!hasAdmin && authType !== 'register-admin') {\n return (\n <Navigate\n to={{\n pathname: '/auth/register-admin',\n // Forward the `?redirectTo` from /auth/login\n // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc\n search,\n }}\n />\n );\n }\n\n if (Login && authType === 'login') {\n // Assign the component to render for the login form\n return <Login />;\n } else if (authType === 'login' && !Login) {\n // block rendering until the Login EE component is fully loaded\n return null;\n }\n\n return <Component hasAdmin={hasAdmin} />;\n};\n\nexport { AuthPage };\n"],"names":["AuthPage","search","useLocation","match","useMatch","authType","params","data","useInitQuery","hasAdmin","Login","useEnterprise","LoginCE","retryDynamicImport","LoginEE","forms","FORMS","combine","ceForms","eeForms","defaultValue","token","useAuth","auth","_jsx","Navigate","to","Component","pathname"],"mappings":";;;;;;;;;AAUA;;AAEkG,2GAE5FA,QAAAA,GAAW,IAAA;IACf,MAAM,EAAEC,MAAM,EAAE,GAAGC,WAAAA,EAAAA;AACnB,IAAA,MAAMC,QAAQC,QAAAA,CAAS,iBAAA,CAAA;IACvB,MAAMC,QAAAA,GAAWF,OAAOG,MAAAA,CAAOD,QAAAA;IAC/B,MAAM,EAAEE,IAAI,EAAE,GAAGC,YAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGF,QAAQ,EAAC;AAC9B,IAAA,MAAMG,OAAAA,GAAQC,aAAAA,CACZC,KAAAA,EACA,UACE,CACE,MAAMC,kBAAAA,CACJ,IAAM,OAAO,8DAAA,CAAA,CACf,EACAC,OAAO,CAAA;AAEb,IAAA,MAAMC,KAAAA,GAAQJ,aAAAA,CACZK,KAAAA,EACA,UACE,CAAC,MAAMH,kBAAAA,CAAmB,IAAM,OAAO,uDAAA,CAAA,CAAoD,EACxFG,KAAK,EACV;QACEC,OAAAA,CAAAA,CAAQC,OAAO,EAAEC,OAAO,EAAA;YACtB,OAAO;AACL,gBAAA,GAAGD,OAAO;AACV,gBAAA,GAAGC;AACL,aAAA;AACF,QAAA,CAAA;QACAC,YAAAA,EAAcJ;AAChB,KAAA,CAAA;AAGF,IAAA,MAAM,EAAEK,KAAK,EAAE,GAAGC,OAAAA,CAAQ,UAAA,EAAY,CAACC,IAAAA,GAASA,IAAAA,CAAAA;IAEhD,IAAI,CAAClB,QAAAA,IAAY,CAACU,KAAAA,EAAO;AACvB,QAAA,qBAAOS,GAAA,CAACC,QAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;IAEA,MAAMC,SAAAA,GAAYZ,KAAK,CAACV,QAAAA,CAAiC;;;AAIzD,IAAA,IAAI,CAACsB,SAAAA,EAAW;AACd,QAAA,qBAAOH,GAAA,CAACC,QAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;AAGA,IAAA,IAAIrB,QAAAA,KAAa,gBAAA,IAAoBA,QAAAA,KAAa,UAAA,IAAcgB,KAAAA,EAAO;AACrE,QAAA,qBAAOG,GAAA,CAACC,QAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;IAGA,IAAIjB,QAAAA,IAAYJ,QAAAA,KAAa,gBAAA,IAAoBgB,KAAAA,EAAO;AACtD,QAAA,qBAAOG,GAAA,CAACC,QAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;IAGA,IAAI,CAACjB,QAAAA,IAAYJ,QAAAA,KAAa,gBAAA,EAAkB;AAC9C,QAAA,qBACEmB,GAAA,CAACC,QAAAA,EAAAA;YACCC,EAAAA,EAAI;gBACFE,QAAAA,EAAU,sBAAA;;;AAGV3B,gBAAAA;AACF;;AAGN,IAAA;IAEA,IAAIS,OAAAA,IAASL,aAAa,OAAA,EAAS;;AAEjC,QAAA,qBAAOmB,GAAA,CAACd,OAAAA,EAAAA,EAAAA,CAAAA;AACV,IAAA,CAAA,MAAO,IAAIL,QAAAA,KAAa,OAAA,IAAW,CAACK,OAAAA,EAAO;;QAEzC,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBAAOc,GAAA,CAACG,SAAAA,EAAAA;QAAUlB,QAAAA,EAAUA;;AAC9B;;;;"}
1
+ {"version":3,"file":"AuthPage.mjs","sources":["../../../../../../admin/src/pages/Auth/AuthPage.tsx"],"sourcesContent":["import { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { useAuth } from '../../features/Auth';\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useInitQuery } from '../../services/admin';\nimport { retryDynamicImport } from '../../utils/retryDynamicImport';\n\nimport { Login as LoginCE } from './components/Login';\nimport { AUTH_TYPES, FORMS, FormDictionary, isAuthType } from './constants';\nimport { getRedirectTo } from './utils';\n\n/* -------------------------------------------------------------------------------------------------\n * AuthPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AuthPage = () => {\n const { search } = useLocation();\n const match = useMatch('/auth/:authType');\n const authType = match?.params.authType;\n const { data } = useInitQuery();\n const { hasAdmin } = data ?? {};\n const Login = useEnterprise(\n LoginCE,\n async () =>\n (\n await retryDynamicImport(\n () => import('../../../../ee/admin/src/pages/AuthPage/components/Login')\n )\n ).LoginEE\n );\n const forms = useEnterprise<FormDictionary, Partial<FormDictionary>>(\n FORMS,\n async () =>\n (await retryDynamicImport(() => import('../../../../ee/admin/src/pages/AuthPage/constants')))\n .FORMS,\n {\n combine(ceForms, eeForms) {\n return {\n ...ceForms,\n ...eeForms,\n };\n },\n defaultValue: FORMS,\n }\n );\n\n const { token } = useAuth('AuthPage', (auth) => auth);\n\n if (!isAuthType(authType) || !forms) {\n return <Navigate to=\"/\" />;\n }\n\n const Component = forms[authType];\n\n // Redirect the user to the login page if\n // the endpoint does not exists\n if (!Component) {\n return <Navigate to=\"/\" />;\n }\n\n // User is already logged in\n if (authType !== AUTH_TYPES.REGISTER_ADMIN && authType !== AUTH_TYPES.REGISTER && token) {\n // Honour the `?redirectTo` the user was sent here with, otherwise logging in from a\n // deep link always lands on the home page. `login()` sets the token before the login\n // form gets to navigate, so this branch is what actually performs the redirect.\n // See https://github.com/strapi/strapi/issues/19557\n return <Navigate to={getRedirectTo(search)} />;\n }\n\n // there is already an admin user oo\n if (hasAdmin && authType === AUTH_TYPES.REGISTER_ADMIN && token) {\n return <Navigate to={getRedirectTo(search)} />;\n }\n\n // Redirect the user to the register-admin if it is the first user\n if (!hasAdmin && authType !== AUTH_TYPES.REGISTER_ADMIN) {\n return (\n <Navigate\n to={{\n pathname: `/auth/${AUTH_TYPES.REGISTER_ADMIN}`,\n // Forward the `?redirectTo` from /auth/login\n // /abc => /auth/login?redirectTo=%2Fabc => /auth/register-admin?redirectTo=%2Fabc\n search,\n }}\n />\n );\n }\n\n if (Login && authType === AUTH_TYPES.LOGIN) {\n // Assign the component to render for the login form\n return <Login />;\n } else if (authType === AUTH_TYPES.LOGIN && !Login) {\n // block rendering until the Login EE component is fully loaded\n return null;\n }\n\n return <Component hasAdmin={hasAdmin} />;\n};\n\nexport { AuthPage };\n"],"names":["AuthPage","search","useLocation","match","useMatch","authType","params","data","useInitQuery","hasAdmin","Login","useEnterprise","LoginCE","retryDynamicImport","LoginEE","forms","FORMS","combine","ceForms","eeForms","defaultValue","token","useAuth","auth","isAuthType","_jsx","Navigate","to","Component","AUTH_TYPES","REGISTER_ADMIN","REGISTER","getRedirectTo","pathname","LOGIN"],"mappings":";;;;;;;;;;AAWA;;AAEkG,2GAE5FA,QAAAA,GAAW,IAAA;IACf,MAAM,EAAEC,MAAM,EAAE,GAAGC,WAAAA,EAAAA;AACnB,IAAA,MAAMC,QAAQC,QAAAA,CAAS,iBAAA,CAAA;IACvB,MAAMC,QAAAA,GAAWF,OAAOG,MAAAA,CAAOD,QAAAA;IAC/B,MAAM,EAAEE,IAAI,EAAE,GAAGC,YAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGF,QAAQ,EAAC;AAC9B,IAAA,MAAMG,OAAAA,GAAQC,aAAAA,CACZC,KAAAA,EACA,UACE,CACE,MAAMC,kBAAAA,CACJ,IAAM,OAAO,8DAAA,CAAA,CACf,EACAC,OAAO,CAAA;AAEb,IAAA,MAAMC,KAAAA,GAAQJ,aAAAA,CACZK,KAAAA,EACA,UACE,CAAC,MAAMH,kBAAAA,CAAmB,IAAM,OAAO,uDAAA,CAAA,CAAoD,EACxFG,KAAK,EACV;QACEC,OAAAA,CAAAA,CAAQC,OAAO,EAAEC,OAAO,EAAA;YACtB,OAAO;AACL,gBAAA,GAAGD,OAAO;AACV,gBAAA,GAAGC;AACL,aAAA;AACF,QAAA,CAAA;QACAC,YAAAA,EAAcJ;AAChB,KAAA,CAAA;AAGF,IAAA,MAAM,EAAEK,KAAK,EAAE,GAAGC,OAAAA,CAAQ,UAAA,EAAY,CAACC,IAAAA,GAASA,IAAAA,CAAAA;AAEhD,IAAA,IAAI,CAACC,UAAAA,CAAWnB,QAAAA,CAAAA,IAAa,CAACU,KAAAA,EAAO;AACnC,QAAA,qBAAOU,GAAA,CAACC,QAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;IAEA,MAAMC,SAAAA,GAAYb,KAAK,CAACV,QAAAA,CAAS;;;AAIjC,IAAA,IAAI,CAACuB,SAAAA,EAAW;AACd,QAAA,qBAAOH,GAAA,CAACC,QAAAA,EAAAA;YAASC,EAAAA,EAAG;;AACtB,IAAA;;IAGA,IAAItB,QAAAA,KAAawB,WAAWC,cAAc,IAAIzB,aAAawB,UAAAA,CAAWE,QAAQ,IAAIV,KAAAA,EAAO;;;;;AAKvF,QAAA,qBAAOI,GAAA,CAACC,QAAAA,EAAAA;AAASC,YAAAA,EAAAA,EAAIK,aAAAA,CAAc/B,MAAAA;;AACrC,IAAA;;AAGA,IAAA,IAAIQ,QAAAA,IAAYJ,QAAAA,KAAawB,UAAAA,CAAWC,cAAc,IAAIT,KAAAA,EAAO;AAC/D,QAAA,qBAAOI,GAAA,CAACC,QAAAA,EAAAA;AAASC,YAAAA,EAAAA,EAAIK,aAAAA,CAAc/B,MAAAA;;AACrC,IAAA;;AAGA,IAAA,IAAI,CAACQ,QAAAA,IAAYJ,QAAAA,KAAawB,UAAAA,CAAWC,cAAc,EAAE;AACvD,QAAA,qBACEL,GAAA,CAACC,QAAAA,EAAAA;YACCC,EAAAA,EAAI;AACFM,gBAAAA,QAAAA,EAAU,CAAC,MAAM,EAAEJ,UAAAA,CAAWC,cAAc,CAAA,CAAE;;;AAG9C7B,gBAAAA;AACF;;AAGN,IAAA;AAEA,IAAA,IAAIS,OAAAA,IAASL,QAAAA,KAAawB,UAAAA,CAAWK,KAAK,EAAE;;AAE1C,QAAA,qBAAOT,GAAA,CAACf,OAAAA,EAAAA,EAAAA,CAAAA;AACV,IAAA,CAAA,MAAO,IAAIL,QAAAA,KAAawB,UAAAA,CAAWK,KAAK,IAAI,CAACxB,OAAAA,EAAO;;QAElD,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBAAOe,GAAA,CAACG,SAAAA,EAAAA;QAAUnB,QAAAA,EAAUA;;AAC9B;;;;"}
@@ -13,6 +13,7 @@ var UnauthenticatedLogo = require('../../../components/UnauthenticatedLogo.js');
13
13
  var Auth = require('../../../features/Auth.js');
14
14
  var UnauthenticatedLayout = require('../../../layouts/UnauthenticatedLayout.js');
15
15
  var translatedErrors = require('../../../utils/translatedErrors.js');
16
+ var utils = require('../utils.js');
16
17
 
17
18
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
18
19
 
@@ -50,9 +51,6 @@ const Login = ({ children })=>{
50
51
  const [apiError, setApiError] = React__namespace.useState();
51
52
  const { formatMessage } = reactIntl.useIntl();
52
53
  const { search: searchString } = reactRouterDom.useLocation();
53
- const query = React__namespace.useMemo(()=>new URLSearchParams(searchString), [
54
- searchString
55
- ]);
56
54
  const navigate = reactRouterDom.useNavigate();
57
55
  const { login } = Auth.useAuth('Login', (auth)=>auth);
58
56
  const handleLogin = async (body)=>{
@@ -66,9 +64,7 @@ const Login = ({ children })=>{
66
64
  }
67
65
  setApiError(message);
68
66
  } else {
69
- const redirectTo = query.get('redirectTo');
70
- const redirectUrl = redirectTo ? decodeURIComponent(redirectTo) : '/';
71
- navigate(redirectUrl);
67
+ navigate(utils.getRedirectTo(searchString));
72
68
  }
73
69
  };
74
70
  return /*#__PURE__*/ jsxRuntime.jsx(UnauthenticatedLayout.UnauthenticatedLayout, {
@@ -1 +1 @@
1
- {"version":3,"file":"Login.js","sources":["../../../../../../../admin/src/pages/Auth/components/Login.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport camelCase from 'lodash/camelCase';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useAuth } from '../../../features/Auth';\nimport {\n UnauthenticatedLayout,\n Column,\n LayoutContent,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nimport type { Login } from '../../../../../shared/contracts/authentication';\n\ninterface LoginProps {\n children?: React.ReactNode;\n}\n\nconst LOGIN_SCHEMA = yup.object().shape({\n email: yup\n .string()\n .nullable()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .required(translatedErrors.required),\n password: yup.string().required(translatedErrors.required).nullable(),\n rememberMe: yup.bool().nullable(),\n});\n\nconst Login = ({ children }: LoginProps) => {\n const [apiError, setApiError] = React.useState<string>();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const navigate = useNavigate();\n\n const { login } = useAuth('Login', (auth) => auth);\n\n const handleLogin = async (body: Parameters<typeof login>[0]) => {\n setApiError(undefined);\n\n const res = await login(body);\n\n if ('error' in res) {\n const message = res.error.message ?? 'Something went wrong';\n\n if (camelCase(message).toLowerCase() === 'usernotactive') {\n navigate('/auth/oops');\n return;\n }\n\n setApiError(message);\n } else {\n const redirectTo = query.get('redirectTo');\n const redirectUrl = redirectTo ? decodeURIComponent(redirectTo) : '/';\n\n navigate(redirectUrl);\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={1}>\n <Typography variant=\"alpha\" tag=\"h1\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome!',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={7}>\n <Typography\n variant=\"epsilon\"\n textColor=\"neutral600\"\n textAlign=\"center\"\n display=\"block\"\n >\n {formatMessage({\n id: 'Auth.form.welcome.subtitle',\n defaultMessage: 'Log in to your Strapi account',\n })}\n </Typography>\n </Box>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"PUT\"\n initialValues={{\n email: '',\n password: '',\n rememberMe: false,\n }}\n onSubmit={(values) => {\n handleLogin(values);\n }}\n validationSchema={LOGIN_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n label: formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' }),\n name: 'email',\n placeholder: formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n }),\n required: true,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.rememberMe.label',\n defaultMessage: 'Remember me',\n }),\n name: 'rememberMe',\n type: 'checkbox' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({ id: 'Auth.form.button.login', defaultMessage: 'Login' })}\n </Button>\n </Flex>\n </Form>\n {children}\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link isExternal={false} tag={NavLink} to=\"/auth/forgot-password\">\n {formatMessage({\n id: 'Auth.link.forgot-password',\n defaultMessage: 'Forgot your password?',\n })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { Login };\nexport type { LoginProps };\n"],"names":["LOGIN_SCHEMA","yup","object","shape","email","string","nullable","id","translatedErrors","defaultMessage","required","password","rememberMe","bool","Login","children","apiError","setApiError","React","useState","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","navigate","useNavigate","login","useAuth","auth","handleLogin","body","undefined","res","message","error","camelCase","toLowerCase","redirectTo","get","redirectUrl","decodeURIComponent","_jsx","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","variant","tag","textAlign","textColor","display","role","tabIndex","Form","method","initialValues","onSubmit","values","validationSchema","Flex","direction","alignItems","gap","label","name","placeholder","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","isExternal","NavLink","to"],"mappings":"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"}
1
+ {"version":3,"file":"Login.js","sources":["../../../../../../../admin/src/pages/Auth/components/Login.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport camelCase from 'lodash/camelCase';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useAuth } from '../../../features/Auth';\nimport {\n UnauthenticatedLayout,\n Column,\n LayoutContent,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { translatedErrors } from '../../../utils/translatedErrors';\nimport { getRedirectTo } from '../utils';\n\nimport type { Login } from '../../../../../shared/contracts/authentication';\n\ninterface LoginProps {\n children?: React.ReactNode;\n}\n\nconst LOGIN_SCHEMA = yup.object().shape({\n email: yup\n .string()\n .nullable()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .required(translatedErrors.required),\n password: yup.string().required(translatedErrors.required).nullable(),\n rememberMe: yup.bool().nullable(),\n});\n\nconst Login = ({ children }: LoginProps) => {\n const [apiError, setApiError] = React.useState<string>();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const navigate = useNavigate();\n\n const { login } = useAuth('Login', (auth) => auth);\n\n const handleLogin = async (body: Parameters<typeof login>[0]) => {\n setApiError(undefined);\n\n const res = await login(body);\n\n if ('error' in res) {\n const message = res.error.message ?? 'Something went wrong';\n\n if (camelCase(message).toLowerCase() === 'usernotactive') {\n navigate('/auth/oops');\n return;\n }\n\n setApiError(message);\n } else {\n navigate(getRedirectTo(searchString));\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={1}>\n <Typography variant=\"alpha\" tag=\"h1\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome!',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={7}>\n <Typography\n variant=\"epsilon\"\n textColor=\"neutral600\"\n textAlign=\"center\"\n display=\"block\"\n >\n {formatMessage({\n id: 'Auth.form.welcome.subtitle',\n defaultMessage: 'Log in to your Strapi account',\n })}\n </Typography>\n </Box>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"PUT\"\n initialValues={{\n email: '',\n password: '',\n rememberMe: false,\n }}\n onSubmit={(values) => {\n handleLogin(values);\n }}\n validationSchema={LOGIN_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n label: formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' }),\n name: 'email',\n placeholder: formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n }),\n required: true,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.rememberMe.label',\n defaultMessage: 'Remember me',\n }),\n name: 'rememberMe',\n type: 'checkbox' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({ id: 'Auth.form.button.login', defaultMessage: 'Login' })}\n </Button>\n </Flex>\n </Form>\n {children}\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link isExternal={false} tag={NavLink} to=\"/auth/forgot-password\">\n {formatMessage({\n id: 'Auth.link.forgot-password',\n defaultMessage: 'Forgot your password?',\n })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { Login };\nexport type { LoginProps };\n"],"names":["LOGIN_SCHEMA","yup","object","shape","email","string","nullable","id","translatedErrors","defaultMessage","required","password","rememberMe","bool","Login","children","apiError","setApiError","React","useState","formatMessage","useIntl","search","searchString","useLocation","navigate","useNavigate","login","useAuth","auth","handleLogin","body","undefined","res","message","error","camelCase","toLowerCase","getRedirectTo","_jsx","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","variant","tag","textAlign","textColor","display","role","tabIndex","Form","method","initialValues","onSubmit","values","validationSchema","Flex","direction","alignItems","gap","label","name","placeholder","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","isExternal","NavLink","to"],"mappings":"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"}
@@ -11,6 +11,7 @@ import { Logo } from '../../../components/UnauthenticatedLogo.mjs';
11
11
  import { useAuth } from '../../../features/Auth.mjs';
12
12
  import { UnauthenticatedLayout, LayoutContent, Column } from '../../../layouts/UnauthenticatedLayout.mjs';
13
13
  import { translatedErrors as errorsTrads } from '../../../utils/translatedErrors.mjs';
14
+ import { getRedirectTo } from '../utils.mjs';
14
15
 
15
16
  const LOGIN_SCHEMA = yup.object().shape({
16
17
  email: yup.string().nullable().email({
@@ -24,9 +25,6 @@ const Login = ({ children })=>{
24
25
  const [apiError, setApiError] = React.useState();
25
26
  const { formatMessage } = useIntl();
26
27
  const { search: searchString } = useLocation();
27
- const query = React.useMemo(()=>new URLSearchParams(searchString), [
28
- searchString
29
- ]);
30
28
  const navigate = useNavigate();
31
29
  const { login } = useAuth('Login', (auth)=>auth);
32
30
  const handleLogin = async (body)=>{
@@ -40,9 +38,7 @@ const Login = ({ children })=>{
40
38
  }
41
39
  setApiError(message);
42
40
  } else {
43
- const redirectTo = query.get('redirectTo');
44
- const redirectUrl = redirectTo ? decodeURIComponent(redirectTo) : '/';
45
- navigate(redirectUrl);
41
+ navigate(getRedirectTo(searchString));
46
42
  }
47
43
  };
48
44
  return /*#__PURE__*/ jsx(UnauthenticatedLayout, {
@@ -1 +1 @@
1
- {"version":3,"file":"Login.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/Login.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport camelCase from 'lodash/camelCase';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useAuth } from '../../../features/Auth';\nimport {\n UnauthenticatedLayout,\n Column,\n LayoutContent,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nimport type { Login } from '../../../../../shared/contracts/authentication';\n\ninterface LoginProps {\n children?: React.ReactNode;\n}\n\nconst LOGIN_SCHEMA = yup.object().shape({\n email: yup\n .string()\n .nullable()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .required(translatedErrors.required),\n password: yup.string().required(translatedErrors.required).nullable(),\n rememberMe: yup.bool().nullable(),\n});\n\nconst Login = ({ children }: LoginProps) => {\n const [apiError, setApiError] = React.useState<string>();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const navigate = useNavigate();\n\n const { login } = useAuth('Login', (auth) => auth);\n\n const handleLogin = async (body: Parameters<typeof login>[0]) => {\n setApiError(undefined);\n\n const res = await login(body);\n\n if ('error' in res) {\n const message = res.error.message ?? 'Something went wrong';\n\n if (camelCase(message).toLowerCase() === 'usernotactive') {\n navigate('/auth/oops');\n return;\n }\n\n setApiError(message);\n } else {\n const redirectTo = query.get('redirectTo');\n const redirectUrl = redirectTo ? decodeURIComponent(redirectTo) : '/';\n\n navigate(redirectUrl);\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={1}>\n <Typography variant=\"alpha\" tag=\"h1\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome!',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={7}>\n <Typography\n variant=\"epsilon\"\n textColor=\"neutral600\"\n textAlign=\"center\"\n display=\"block\"\n >\n {formatMessage({\n id: 'Auth.form.welcome.subtitle',\n defaultMessage: 'Log in to your Strapi account',\n })}\n </Typography>\n </Box>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"PUT\"\n initialValues={{\n email: '',\n password: '',\n rememberMe: false,\n }}\n onSubmit={(values) => {\n handleLogin(values);\n }}\n validationSchema={LOGIN_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n label: formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' }),\n name: 'email',\n placeholder: formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n }),\n required: true,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.rememberMe.label',\n defaultMessage: 'Remember me',\n }),\n name: 'rememberMe',\n type: 'checkbox' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({ id: 'Auth.form.button.login', defaultMessage: 'Login' })}\n </Button>\n </Flex>\n </Form>\n {children}\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link isExternal={false} tag={NavLink} to=\"/auth/forgot-password\">\n {formatMessage({\n id: 'Auth.link.forgot-password',\n defaultMessage: 'Forgot your password?',\n })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { Login };\nexport type { LoginProps };\n"],"names":["LOGIN_SCHEMA","yup","object","shape","email","string","nullable","id","translatedErrors","defaultMessage","required","password","rememberMe","bool","Login","children","apiError","setApiError","React","useState","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","navigate","useNavigate","login","useAuth","auth","handleLogin","body","undefined","res","message","error","camelCase","toLowerCase","redirectTo","get","redirectUrl","decodeURIComponent","_jsx","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","variant","tag","textAlign","textColor","display","role","tabIndex","Form","method","initialValues","onSubmit","values","validationSchema","Flex","direction","alignItems","gap","label","name","placeholder","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","isExternal","NavLink","to"],"mappings":"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"}
1
+ {"version":3,"file":"Login.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/Login.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport camelCase from 'lodash/camelCase';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useAuth } from '../../../features/Auth';\nimport {\n UnauthenticatedLayout,\n Column,\n LayoutContent,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { translatedErrors } from '../../../utils/translatedErrors';\nimport { getRedirectTo } from '../utils';\n\nimport type { Login } from '../../../../../shared/contracts/authentication';\n\ninterface LoginProps {\n children?: React.ReactNode;\n}\n\nconst LOGIN_SCHEMA = yup.object().shape({\n email: yup\n .string()\n .nullable()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .required(translatedErrors.required),\n password: yup.string().required(translatedErrors.required).nullable(),\n rememberMe: yup.bool().nullable(),\n});\n\nconst Login = ({ children }: LoginProps) => {\n const [apiError, setApiError] = React.useState<string>();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const navigate = useNavigate();\n\n const { login } = useAuth('Login', (auth) => auth);\n\n const handleLogin = async (body: Parameters<typeof login>[0]) => {\n setApiError(undefined);\n\n const res = await login(body);\n\n if ('error' in res) {\n const message = res.error.message ?? 'Something went wrong';\n\n if (camelCase(message).toLowerCase() === 'usernotactive') {\n navigate('/auth/oops');\n return;\n }\n\n setApiError(message);\n } else {\n navigate(getRedirectTo(searchString));\n }\n };\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={1}>\n <Typography variant=\"alpha\" tag=\"h1\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome!',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={7}>\n <Typography\n variant=\"epsilon\"\n textColor=\"neutral600\"\n textAlign=\"center\"\n display=\"block\"\n >\n {formatMessage({\n id: 'Auth.form.welcome.subtitle',\n defaultMessage: 'Log in to your Strapi account',\n })}\n </Typography>\n </Box>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"PUT\"\n initialValues={{\n email: '',\n password: '',\n rememberMe: false,\n }}\n onSubmit={(values) => {\n handleLogin(values);\n }}\n validationSchema={LOGIN_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n label: formatMessage({ id: 'Auth.form.email.label', defaultMessage: 'Email' }),\n name: 'email',\n placeholder: formatMessage({\n id: 'Auth.form.email.placeholder',\n defaultMessage: 'kai@doe.com',\n }),\n required: true,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.rememberMe.label',\n defaultMessage: 'Remember me',\n }),\n name: 'rememberMe',\n type: 'checkbox' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({ id: 'Auth.form.button.login', defaultMessage: 'Login' })}\n </Button>\n </Flex>\n </Form>\n {children}\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link isExternal={false} tag={NavLink} to=\"/auth/forgot-password\">\n {formatMessage({\n id: 'Auth.link.forgot-password',\n defaultMessage: 'Forgot your password?',\n })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { Login };\nexport type { LoginProps };\n"],"names":["LOGIN_SCHEMA","yup","object","shape","email","string","nullable","id","translatedErrors","defaultMessage","required","password","rememberMe","bool","Login","children","apiError","setApiError","React","useState","formatMessage","useIntl","search","searchString","useLocation","navigate","useNavigate","login","useAuth","auth","handleLogin","body","undefined","res","message","error","camelCase","toLowerCase","getRedirectTo","_jsx","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","variant","tag","textAlign","textColor","display","role","tabIndex","Form","method","initialValues","onSubmit","values","validationSchema","Flex","direction","alignItems","gap","label","name","placeholder","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","isExternal","NavLink","to"],"mappings":"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"}
@@ -6,18 +6,34 @@ var Oops = require('./components/Oops.js');
6
6
  var Register = require('./components/Register.js');
7
7
  var ResetPassword = require('./components/ResetPassword.js');
8
8
 
9
+ const AUTH_TYPES = {
10
+ LOGIN: 'login',
11
+ REGISTER: 'register',
12
+ REGISTER_ADMIN: 'register-admin',
13
+ FORGOT_PASSWORD: 'forgot-password',
14
+ RESET_PASSWORD: 'reset-password',
15
+ FORGOT_PASSWORD_SUCCESS: 'forgot-password-success',
16
+ OOPS: 'oops',
17
+ PROVIDERS: 'providers'
18
+ };
19
+ const AUTH_TYPE_VALUES = Object.values(AUTH_TYPES);
20
+ /**
21
+ * Narrows the `:authType` route param, which is an arbitrary string, to a known auth type.
22
+ */ const isAuthType = (value)=>value !== undefined && AUTH_TYPE_VALUES.includes(value);
9
23
  const FORMS = {
10
- 'forgot-password': ForgotPassword.ForgotPassword,
11
- 'forgot-password-success': ForgotPasswordSuccess.ForgotPasswordSuccess,
24
+ [AUTH_TYPES.FORGOT_PASSWORD]: ForgotPassword.ForgotPassword,
25
+ [AUTH_TYPES.FORGOT_PASSWORD_SUCCESS]: ForgotPasswordSuccess.ForgotPasswordSuccess,
12
26
  // the `Component` attribute is set after all forms and CE/EE components are loaded, but since we
13
27
  // are here outside of a React component we can not use the hook directly
14
- login: ()=>null,
15
- oops: Oops.Oops,
16
- register: Register.Register,
17
- 'register-admin': Register.Register,
18
- 'reset-password': ResetPassword.ResetPassword,
19
- providers: ()=>null
28
+ [AUTH_TYPES.LOGIN]: ()=>null,
29
+ [AUTH_TYPES.OOPS]: Oops.Oops,
30
+ [AUTH_TYPES.REGISTER]: Register.Register,
31
+ [AUTH_TYPES.REGISTER_ADMIN]: Register.Register,
32
+ [AUTH_TYPES.RESET_PASSWORD]: ResetPassword.ResetPassword,
33
+ [AUTH_TYPES.PROVIDERS]: ()=>null
20
34
  };
21
35
 
36
+ exports.AUTH_TYPES = AUTH_TYPES;
22
37
  exports.FORMS = FORMS;
38
+ exports.isAuthType = isAuthType;
23
39
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../../../admin/src/pages/Auth/constants.ts"],"sourcesContent":["import type { ComponentType } from 'react';\n\nimport { ForgotPassword } from './components/ForgotPassword';\nimport { ForgotPasswordSuccess } from './components/ForgotPasswordSuccess';\nimport { Oops } from './components/Oops';\nimport { Register, RegisterProps } from './components/Register';\nimport { ResetPassword } from './components/ResetPassword';\n\nexport type AuthType =\n | 'login'\n | 'register'\n | 'register-admin'\n | 'forgot-password'\n | 'reset-password'\n | 'forgot-password-success'\n | 'oops'\n | 'providers';\n\nexport type FormDictionary = Record<AuthType, ComponentType | ComponentType<RegisterProps>>;\n\nexport const FORMS = {\n 'forgot-password': ForgotPassword,\n 'forgot-password-success': ForgotPasswordSuccess,\n // the `Component` attribute is set after all forms and CE/EE components are loaded, but since we\n // are here outside of a React component we can not use the hook directly\n login: () => null,\n oops: Oops,\n register: Register,\n 'register-admin': Register,\n 'reset-password': ResetPassword,\n providers: () => null,\n} satisfies FormDictionary;\n"],"names":["FORMS","ForgotPassword","ForgotPasswordSuccess","login","oops","Oops","register","Register","ResetPassword","providers"],"mappings":";;;;;;;;MAoBaA,KAAAA,GAAQ;IACnB,iBAAA,EAAmBC,6BAAAA;IACnB,yBAAA,EAA2BC,2CAAAA;;;AAG3BC,IAAAA,KAAAA,EAAO,IAAM,IAAA;IACbC,IAAAA,EAAMC,SAAAA;IACNC,QAAAA,EAAUC,iBAAAA;IACV,gBAAA,EAAkBA,iBAAAA;IAClB,gBAAA,EAAkBC,2BAAAA;AAClBC,IAAAA,SAAAA,EAAW,IAAM;AACnB;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../../../admin/src/pages/Auth/constants.ts"],"sourcesContent":["import type { ComponentType } from 'react';\n\nimport { ForgotPassword } from './components/ForgotPassword';\nimport { ForgotPasswordSuccess } from './components/ForgotPasswordSuccess';\nimport { Oops } from './components/Oops';\nimport { Register, RegisterProps } from './components/Register';\nimport { ResetPassword } from './components/ResetPassword';\n\nexport const AUTH_TYPES = {\n LOGIN: 'login',\n REGISTER: 'register',\n REGISTER_ADMIN: 'register-admin',\n FORGOT_PASSWORD: 'forgot-password',\n RESET_PASSWORD: 'reset-password',\n FORGOT_PASSWORD_SUCCESS: 'forgot-password-success',\n OOPS: 'oops',\n PROVIDERS: 'providers',\n} as const;\n\nexport type AuthType = (typeof AUTH_TYPES)[keyof typeof AUTH_TYPES];\n\nconst AUTH_TYPE_VALUES: readonly string[] = Object.values(AUTH_TYPES);\n\n/**\n * Narrows the `:authType` route param, which is an arbitrary string, to a known auth type.\n */\nexport const isAuthType = (value: string | undefined): value is AuthType =>\n value !== undefined && AUTH_TYPE_VALUES.includes(value);\n\nexport type FormDictionary = Record<AuthType, ComponentType | ComponentType<RegisterProps>>;\n\nexport const FORMS = {\n [AUTH_TYPES.FORGOT_PASSWORD]: ForgotPassword,\n [AUTH_TYPES.FORGOT_PASSWORD_SUCCESS]: ForgotPasswordSuccess,\n // the `Component` attribute is set after all forms and CE/EE components are loaded, but since we\n // are here outside of a React component we can not use the hook directly\n [AUTH_TYPES.LOGIN]: () => null,\n [AUTH_TYPES.OOPS]: Oops,\n [AUTH_TYPES.REGISTER]: Register,\n [AUTH_TYPES.REGISTER_ADMIN]: Register,\n [AUTH_TYPES.RESET_PASSWORD]: ResetPassword,\n [AUTH_TYPES.PROVIDERS]: () => null,\n} satisfies FormDictionary;\n"],"names":["AUTH_TYPES","LOGIN","REGISTER","REGISTER_ADMIN","FORGOT_PASSWORD","RESET_PASSWORD","FORGOT_PASSWORD_SUCCESS","OOPS","PROVIDERS","AUTH_TYPE_VALUES","Object","values","isAuthType","value","undefined","includes","FORMS","ForgotPassword","ForgotPasswordSuccess","Oops","Register","ResetPassword"],"mappings":";;;;;;;;MAQaA,UAAAA,GAAa;IACxBC,KAAAA,EAAO,OAAA;IACPC,QAAAA,EAAU,UAAA;IACVC,cAAAA,EAAgB,gBAAA;IAChBC,eAAAA,EAAiB,iBAAA;IACjBC,cAAAA,EAAgB,gBAAA;IAChBC,uBAAAA,EAAyB,yBAAA;IACzBC,IAAAA,EAAM,MAAA;IACNC,SAAAA,EAAW;AACb;AAIA,MAAMC,gBAAAA,GAAsCC,MAAAA,CAAOC,MAAM,CAACX,UAAAA,CAAAA;AAE1D;;IAGO,MAAMY,UAAAA,GAAa,CAACC,KAAAA,GACzBA,UAAUC,SAAAA,IAAaL,gBAAAA,CAAiBM,QAAQ,CAACF,KAAAA;MAItCG,KAAAA,GAAQ;IACnB,CAAChB,UAAAA,CAAWI,eAAe,GAAGa,6BAAAA;IAC9B,CAACjB,UAAAA,CAAWM,uBAAuB,GAAGY,2CAAAA;;;AAGtC,IAAA,CAAClB,UAAAA,CAAWC,KAAK,GAAG,IAAM,IAAA;IAC1B,CAACD,UAAAA,CAAWO,IAAI,GAAGY,SAAAA;IACnB,CAACnB,UAAAA,CAAWE,QAAQ,GAAGkB,iBAAAA;IACvB,CAACpB,UAAAA,CAAWG,cAAc,GAAGiB,iBAAAA;IAC7B,CAACpB,UAAAA,CAAWK,cAAc,GAAGgB,2BAAAA;AAC7B,IAAA,CAACrB,UAAAA,CAAWQ,SAAS,GAAG,IAAM;AAChC;;;;;;"}