@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.
- package/dist/admin/admin/src/components/Filters.js +9 -9
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +10 -10
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js +2 -2
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.mjs +3 -3
- package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.js +7 -8
- package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.mjs +8 -9
- package/dist/admin/admin/src/components/SearchInput.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +2 -2
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +3 -3
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js +35 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.mjs +34 -2
- package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/AuthPage.js +14 -9
- package/dist/admin/admin/src/pages/Auth/AuthPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/AuthPage.mjs +15 -10
- package/dist/admin/admin/src/pages/Auth/AuthPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.js +2 -6
- package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.mjs +2 -6
- package/dist/admin/admin/src/pages/Auth/components/Login.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/constants.js +24 -8
- package/dist/admin/admin/src/pages/Auth/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/constants.mjs +23 -9
- package/dist/admin/admin/src/pages/Auth/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/utils.js +34 -0
- package/dist/admin/admin/src/pages/Auth/utils.js.map +1 -0
- package/dist/admin/admin/src/pages/Auth/utils.mjs +32 -0
- package/dist/admin/admin/src/pages/Auth/utils.mjs.map +1 -0
- package/dist/admin/admin/src/translations/pt-BR.json.js +1 -1
- package/dist/admin/admin/src/translations/pt-BR.json.mjs +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +4 -0
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +4 -0
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.js +27 -9
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs +2 -2
- package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +9 -9
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +10 -10
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/Filters.d.ts +1 -0
- package/dist/admin/src/hooks/useQueryParams.d.ts +13 -1
- package/dist/admin/src/index.d.ts +1 -1
- package/dist/admin/src/pages/Auth/constants.d.ts +19 -5
- package/dist/admin/src/pages/Auth/utils.d.ts +7 -0
- package/dist/admin/src/utils/rulesEngine.d.ts +9 -13
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +22 -4
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +22 -4
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/server/src/controllers/validation/schema.js +36 -16
- package/dist/server/server/src/controllers/validation/schema.js.map +1 -1
- package/dist/server/server/src/controllers/validation/schema.mjs +1 -1
- package/dist/server/server/src/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/server/src/services/content-type.js +8 -3
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/content-type.mjs +8 -3
- package/dist/server/server/src/services/content-type.mjs.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +3 -1
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.mjs +3 -1
- package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts +8 -48
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/services/content-type.d.ts.map +1 -1
- package/dist/server/src/services/permission/queries.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -43,7 +43,12 @@ const useQueryParams = (initialParams)=>{
|
|
|
43
43
|
...nextParams
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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 !==
|
|
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 ===
|
|
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 !==
|
|
62
|
+
if (!hasAdmin && authType !== constants.AUTH_TYPES.REGISTER_ADMIN) {
|
|
58
63
|
return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
|
|
59
64
|
to: {
|
|
60
|
-
pathname:
|
|
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 ===
|
|
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 ===
|
|
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
|
|
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 !==
|
|
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 ===
|
|
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 !==
|
|
60
|
+
if (!hasAdmin && authType !== AUTH_TYPES.REGISTER_ADMIN) {
|
|
56
61
|
return /*#__PURE__*/ jsx(Navigate, {
|
|
57
62
|
to: {
|
|
58
|
-
pathname:
|
|
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 ===
|
|
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 ===
|
|
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
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAMA,YAAAA,GAAeC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AACtCC,IAAAA,KAAAA,EAAOH,eACJI,MAAM,EAAA,CACNC,QAAQ,EAAA,CACRF,KAAK,CAAC;QACLG,EAAAA,EAAIC,iCAAAA,CAAiBJ,KAAK,CAACG,EAAE;QAC7BE,cAAAA,EAAgB;KAClB,CAAA,CACCC,QAAQ,CAACF,iCAAAA,CAAiBE,QAAQ,CAAA;IACrCC,QAAAA,EAAUV,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ,CAACF,iCAAAA,CAAiBE,QAAQ,EAAEJ,QAAQ,EAAA;IACnEM,UAAAA,EAAYX,cAAAA,CAAIY,IAAI,EAAA,CAAGP,QAAQ;AACjC,CAAA,CAAA;AAEA,MAAMQ,KAAAA,GAAQ,CAAC,EAAEC,QAAQ,EAAc,GAAA;AACrC,IAAA,MAAM,CAACC,QAAAA,EAAUC,WAAAA,CAAY,GAAGC,iBAAMC,QAAQ,EAAA;IAC9C,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,MAAAA,EAAQC,YAAY,EAAE,GAAGC,0BAAAA,EAAAA;AACjC,IAAA,MAAMC,QAAQP,gBAAAA,CAAMQ,OAAO,CAAC,IAAM,IAAIC,gBAAgBJ,YAAAA,CAAAA,EAAe;AAACA,QAAAA;AAAa,KAAA,CAAA;AACnF,IAAA,MAAMK,QAAAA,GAAWC,0BAAAA,EAAAA;AAEjB,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,YAAAA,CAAQ,OAAA,EAAS,CAACC,IAAAA,GAASA,IAAAA,CAAAA;AAE7C,IAAA,MAAMC,cAAc,OAAOC,IAAAA,GAAAA;QACzBjB,WAAAA,CAAYkB,SAAAA,CAAAA;QAEZ,MAAMC,GAAAA,GAAM,MAAMN,KAAAA,CAAMI,IAAAA,CAAAA;AAExB,QAAA,IAAI,WAAWE,GAAAA,EAAK;AAClB,YAAA,MAAMC,OAAAA,GAAUD,GAAAA,CAAIE,KAAK,CAACD,OAAO,IAAI,sBAAA;AAErC,YAAA,IAAIE,0BAAAA,CAAUF,OAAAA,CAAAA,CAASG,WAAW,EAAA,KAAO,eAAA,EAAiB;gBACxDZ,QAAAA,CAAS,YAAA,CAAA;AACT,gBAAA;AACF,YAAA;YAEAX,WAAAA,CAAYoB,OAAAA,CAAAA;QACd,CAAA,MAAO;YACL,MAAMI,UAAAA,GAAahB,KAAAA,CAAMiB,GAAG,CAAC,YAAA,CAAA;YAC7B,MAAMC,WAAAA,GAAcF,UAAAA,GAAaG,kBAAAA,CAAmBH,UAAAA,CAAAA,GAAc,GAAA;YAElEb,QAAAA,CAASe,WAAAA,CAAAA;AACX,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEE,cAAA,CAACC,2CAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAC,eAAA,CAACC,iBAAAA,EAAAA;;8BACCD,eAAA,CAACE,mCAAAA,EAAAA;;sCACCF,eAAA,CAACG,4BAAAA,EAAAA;;8CACCL,cAAA,CAACM,wBAAAA,EAAAA,EAAAA,CAAAA;8CACDN,cAAA,CAACO,gBAAAA,EAAAA;oCAAIC,UAAAA,EAAY,CAAA;oCAAGC,aAAAA,EAAe,CAAA;AACjC,oCAAA,QAAA,gBAAAT,cAAA,CAACU,uBAAAA,EAAAA;wCAAWC,OAAAA,EAAQ,OAAA;wCAAQC,GAAAA,EAAI,IAAA;wCAAKC,SAAAA,EAAU,QAAA;kDAC5CtC,aAAAA,CAAc;4CACbb,EAAAA,EAAI,yBAAA;4CACJE,cAAAA,EAAgB;AAClB,yCAAA;;;8CAGJoC,cAAA,CAACO,gBAAAA,EAAAA;oCAAIE,aAAAA,EAAe,CAAA;AAClB,oCAAA,QAAA,gBAAAT,cAAA,CAACU,uBAAAA,EAAAA;wCACCC,OAAAA,EAAQ,SAAA;wCACRG,SAAAA,EAAU,YAAA;wCACVD,SAAAA,EAAU,QAAA;wCACVE,OAAAA,EAAQ,OAAA;kDAEPxC,aAAAA,CAAc;4CACbb,EAAAA,EAAI,4BAAA;4CACJE,cAAAA,EAAgB;AAClB,yCAAA;;;AAGHO,gCAAAA,QAAAA,iBACC6B,cAAA,CAACU,uBAAAA,EAAAA;oCAAWhD,EAAAA,EAAG,mBAAA;oCAAoBsD,IAAAA,EAAK,OAAA;AAAQC,oCAAAA,QAAAA,EAAU,EAAC;oCAAGH,SAAAA,EAAU,WAAA;AACrE3C,oCAAAA,QAAAA,EAAAA;AAED,iCAAA,CAAA,GAAA;;;sCAEN6B,cAAA,CAACkB,SAAAA,EAAAA;4BACCC,MAAAA,EAAO,KAAA;4BACPC,aAAAA,EAAe;gCACb7D,KAAAA,EAAO,EAAA;gCACPO,QAAAA,EAAU,EAAA;gCACVC,UAAAA,EAAY;AACd,6BAAA;AACAsD,4BAAAA,QAAAA,EAAU,CAACC,MAAAA,GAAAA;gCACTlC,WAAAA,CAAYkC,MAAAA,CAAAA;AACd,4BAAA,CAAA;4BACAC,gBAAAA,EAAkBpE,YAAAA;AAElB,4BAAA,QAAA,gBAAA+C,eAAA,CAACsB,iBAAAA,EAAAA;gCAAKC,SAAAA,EAAU,QAAA;gCAASC,UAAAA,EAAW,SAAA;gCAAUC,GAAAA,EAAK,CAAA;;AAChD,oCAAA;AACC,wCAAA;AACEC,4CAAAA,KAAAA,EAAOrD,aAAAA,CAAc;gDAAEb,EAAAA,EAAI,uBAAA;gDAAyBE,cAAAA,EAAgB;AAAQ,6CAAA,CAAA;4CAC5EiE,IAAAA,EAAM,OAAA;AACNC,4CAAAA,WAAAA,EAAavD,aAAAA,CAAc;gDACzBb,EAAAA,EAAI,6BAAA;gDACJE,cAAAA,EAAgB;AAClB,6CAAA,CAAA;4CACAC,QAAAA,EAAU,IAAA;4CACVkE,IAAAA,EAAM;AACR,yCAAA;AACA,wCAAA;AACEH,4CAAAA,KAAAA,EAAOrD,aAAAA,CAAc;gDACnBb,EAAAA,EAAI,iBAAA;gDACJE,cAAAA,EAAgB;AAClB,6CAAA,CAAA;4CACAiE,IAAAA,EAAM,UAAA;4CACNhE,QAAAA,EAAU,IAAA;4CACVkE,IAAAA,EAAM;AACR,yCAAA;AACA,wCAAA;AACEH,4CAAAA,KAAAA,EAAOrD,aAAAA,CAAc;gDACnBb,EAAAA,EAAI,4BAAA;gDACJE,cAAAA,EAAgB;AAClB,6CAAA,CAAA;4CACAiE,IAAAA,EAAM,YAAA;4CACNE,IAAAA,EAAM;AACR;AACD,qCAAA,CAACC,GAAG,CAAC,CAACC,KAAAA,iBACLjC,cAAA,CAACkC,sBAAAA,EAAAA;AAAgC,4CAAA,GAAGD;AAAhBA,yCAAAA,EAAAA,KAAAA,CAAMJ,IAAI,CAAA,CAAA;kDAEhC7B,cAAA,CAACmC,mBAAAA,EAAAA;wCAAOC,SAAS,EAAA,IAAA;wCAACL,IAAAA,EAAK,QAAA;kDACpBxD,aAAAA,CAAc;4CAAEb,EAAAA,EAAI,wBAAA;4CAA0BE,cAAAA,EAAgB;AAAQ,yCAAA;;;;;AAI5EM,wBAAAA;;;8BAEH8B,cAAA,CAACwB,iBAAAA,EAAAA;oBAAKa,cAAAA,EAAe,QAAA;AACnB,oBAAA,QAAA,gBAAArC,cAAA,CAACO,gBAAAA,EAAAA;wBAAIC,UAAAA,EAAY,CAAA;AACf,wBAAA,QAAA,gBAAAR,cAAA,CAACsC,iBAAAA,EAAAA;4BAAKC,UAAAA,EAAY,KAAA;4BAAO3B,GAAAA,EAAK4B,sBAAAA;4BAASC,EAAAA,EAAG,uBAAA;sCACvClE,aAAAA,CAAc;gCACbb,EAAAA,EAAI,2BAAA;gCACJE,cAAAA,EAAgB;AAClB,6BAAA;;;;;;;AAOd;;;;"}
|
|
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
|
-
|
|
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
|
-
|
|
11
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
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;;;;;;"}
|