@webiny/cognito 6.4.4-beta.3 → 6.4.4-beta.4
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/Cognito.d.ts +51 -0
- package/Cognito.js +75 -4
- package/Cognito.js.map +1 -1
- package/admin/DefaultCognitoSignInConfig.d.ts +23 -0
- package/admin/DefaultCognitoSignInConfig.js +51 -0
- package/admin/DefaultCognitoSignInConfig.js.map +1 -0
- package/admin/Extension.js +3 -0
- package/admin/Extension.js.map +1 -1
- package/admin/index.d.ts +2 -0
- package/admin/index.js +2 -0
- package/admin/presentation/Cognito/CognitoLoginScreen.js +9 -0
- package/admin/presentation/Cognito/CognitoLoginScreen.js.map +1 -1
- package/admin/presentation/Cognito/CognitoPresenter.d.ts +25 -1
- package/admin/presentation/Cognito/CognitoPresenter.js +122 -10
- package/admin/presentation/Cognito/CognitoPresenter.js.map +1 -1
- package/admin/presentation/Cognito/CognitoSignInConfig.d.ts +31 -0
- package/admin/presentation/Cognito/CognitoSignInConfig.js +5 -0
- package/admin/presentation/Cognito/CognitoSignInConfig.js.map +1 -0
- package/admin/presentation/Cognito/abstractions.d.ts +20 -1
- package/admin/presentation/Cognito/abstractions.js.map +1 -1
- package/admin/presentation/Cognito/components/ConfirmTotpCode.d.ts +26 -0
- package/admin/presentation/Cognito/components/ConfirmTotpCode.js +45 -0
- package/admin/presentation/Cognito/components/ConfirmTotpCode.js.map +1 -0
- package/admin/presentation/Cognito/components/Divider.d.ts +19 -1
- package/admin/presentation/Cognito/components/Divider.js +3 -2
- package/admin/presentation/Cognito/components/Divider.js.map +1 -1
- package/admin/presentation/Cognito/components/FederatedLogin.d.ts +22 -5
- package/admin/presentation/Cognito/components/FederatedLogin.js +19 -6
- package/admin/presentation/Cognito/components/FederatedLogin.js.map +1 -1
- package/admin/presentation/Cognito/components/FooterSignIn.d.ts +20 -3
- package/admin/presentation/Cognito/components/FooterSignIn.js +3 -2
- package/admin/presentation/Cognito/components/FooterSignIn.js.map +1 -1
- package/admin/presentation/Cognito/components/PasswordResetCodeSent.d.ts +19 -1
- package/admin/presentation/Cognito/components/PasswordResetCodeSent.js +3 -2
- package/admin/presentation/Cognito/components/PasswordResetCodeSent.js.map +1 -1
- package/admin/presentation/Cognito/components/RequestPasswordResetCode.d.ts +19 -1
- package/admin/presentation/Cognito/components/RequestPasswordResetCode.js +3 -2
- package/admin/presentation/Cognito/components/RequestPasswordResetCode.js.map +1 -1
- package/admin/presentation/Cognito/components/RequireNewPassword.d.ts +19 -1
- package/admin/presentation/Cognito/components/RequireNewPassword.js +3 -2
- package/admin/presentation/Cognito/components/RequireNewPassword.js.map +1 -1
- package/admin/presentation/Cognito/components/SetNewPassword.d.ts +19 -1
- package/admin/presentation/Cognito/components/SetNewPassword.js +3 -2
- package/admin/presentation/Cognito/components/SetNewPassword.js.map +1 -1
- package/admin/presentation/Cognito/components/SetupTotp.d.ts +25 -0
- package/admin/presentation/Cognito/components/SetupTotp.js +60 -0
- package/admin/presentation/Cognito/components/SetupTotp.js.map +1 -0
- package/admin/presentation/Cognito/components/SignIn.d.ts +19 -3
- package/admin/presentation/Cognito/components/SignIn.js +14 -7
- package/admin/presentation/Cognito/components/SignIn.js.map +1 -1
- package/admin/presentation/Cognito/components/index.d.ts +292 -0
- package/admin/presentation/Cognito/components/index.js +29 -0
- package/admin/presentation/Cognito/components/index.js.map +1 -0
- package/admin/presentation/Cognito/signInFeature.d.ts +1 -0
- package/admin/presentation/Cognito/signInFeature.js +11 -0
- package/admin/presentation/Cognito/signInFeature.js.map +1 -0
- package/admin/ui/views/Users/UsersForm.js +21 -15
- package/admin/ui/views/Users/UsersForm.js.map +1 -1
- package/admin/ui/views/Users/hooks/useUserForm.js +3 -1
- package/admin/ui/views/Users/hooks/useUserForm.js.map +1 -1
- package/api/features/CognitoIdp/CognitoIdentityProvider.js +15 -11
- package/api/features/CognitoIdp/CognitoIdentityProvider.js.map +1 -1
- package/api/features/CognitoIdp/abstractions.d.ts +1 -1
- package/api/features/CognitoIdp/abstractions.js.map +1 -1
- package/api/index.d.ts +1 -0
- package/api/index.js +1 -0
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/infra/CognitoFederationPulumi.d.ts +8 -0
- package/infra/CognitoFederationPulumi.js +17 -0
- package/infra/CognitoFederationPulumi.js.map +1 -0
- package/package.json +19 -17
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
export declare const Components: {
|
|
2
|
+
SignIn: ((props: import("./SignIn.js").SignInProps) => import("react").JSX.Element) & {
|
|
3
|
+
original: (props: import("./SignIn.js").SignInProps) => import("react").JSX.Element;
|
|
4
|
+
originalName: string;
|
|
5
|
+
displayName: string;
|
|
6
|
+
} & {
|
|
7
|
+
original: ((props: import("./SignIn.js").SignInProps) => import("react").JSX.Element) & {
|
|
8
|
+
original: (props: import("./SignIn.js").SignInProps) => import("react").JSX.Element;
|
|
9
|
+
originalName: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
};
|
|
12
|
+
originalName: string;
|
|
13
|
+
displayName: string;
|
|
14
|
+
} & {
|
|
15
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<((props: import("./SignIn.js").SignInProps) => import("react").JSX.Element) & {
|
|
16
|
+
original: (props: import("./SignIn.js").SignInProps) => import("react").JSX.Element;
|
|
17
|
+
originalName: string;
|
|
18
|
+
displayName: string;
|
|
19
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
20
|
+
};
|
|
21
|
+
ConfirmTotpCode: ((props: import("./ConfirmTotpCode.js").ConfirmTotpCodeProps) => import("react").JSX.Element) & {
|
|
22
|
+
original: (props: import("./ConfirmTotpCode.js").ConfirmTotpCodeProps) => import("react").JSX.Element;
|
|
23
|
+
originalName: string;
|
|
24
|
+
displayName: string;
|
|
25
|
+
} & {
|
|
26
|
+
original: ((props: import("./ConfirmTotpCode.js").ConfirmTotpCodeProps) => import("react").JSX.Element) & {
|
|
27
|
+
original: (props: import("./ConfirmTotpCode.js").ConfirmTotpCodeProps) => import("react").JSX.Element;
|
|
28
|
+
originalName: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
};
|
|
31
|
+
originalName: string;
|
|
32
|
+
displayName: string;
|
|
33
|
+
} & {
|
|
34
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<((props: import("./ConfirmTotpCode.js").ConfirmTotpCodeProps) => import("react").JSX.Element) & {
|
|
35
|
+
original: (props: import("./ConfirmTotpCode.js").ConfirmTotpCodeProps) => import("react").JSX.Element;
|
|
36
|
+
originalName: string;
|
|
37
|
+
displayName: string;
|
|
38
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
39
|
+
};
|
|
40
|
+
SetupTotp: ((props: import("./SetupTotp.js").SetupTotpProps) => import("react").JSX.Element) & {
|
|
41
|
+
original: (props: import("./SetupTotp.js").SetupTotpProps) => import("react").JSX.Element;
|
|
42
|
+
originalName: string;
|
|
43
|
+
displayName: string;
|
|
44
|
+
} & {
|
|
45
|
+
original: ((props: import("./SetupTotp.js").SetupTotpProps) => import("react").JSX.Element) & {
|
|
46
|
+
original: (props: import("./SetupTotp.js").SetupTotpProps) => import("react").JSX.Element;
|
|
47
|
+
originalName: string;
|
|
48
|
+
displayName: string;
|
|
49
|
+
};
|
|
50
|
+
originalName: string;
|
|
51
|
+
displayName: string;
|
|
52
|
+
} & {
|
|
53
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<((props: import("./SetupTotp.js").SetupTotpProps) => import("react").JSX.Element) & {
|
|
54
|
+
original: (props: import("./SetupTotp.js").SetupTotpProps) => import("react").JSX.Element;
|
|
55
|
+
originalName: string;
|
|
56
|
+
displayName: string;
|
|
57
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
58
|
+
};
|
|
59
|
+
RequireNewPassword: ((props: import("./RequireNewPassword.js").RequireNewPasswordProps) => import("react").JSX.Element) & {
|
|
60
|
+
original: (props: import("./RequireNewPassword.js").RequireNewPasswordProps) => import("react").JSX.Element;
|
|
61
|
+
originalName: string;
|
|
62
|
+
displayName: string;
|
|
63
|
+
} & {
|
|
64
|
+
original: ((props: import("./RequireNewPassword.js").RequireNewPasswordProps) => import("react").JSX.Element) & {
|
|
65
|
+
original: (props: import("./RequireNewPassword.js").RequireNewPasswordProps) => import("react").JSX.Element;
|
|
66
|
+
originalName: string;
|
|
67
|
+
displayName: string;
|
|
68
|
+
};
|
|
69
|
+
originalName: string;
|
|
70
|
+
displayName: string;
|
|
71
|
+
} & {
|
|
72
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<((props: import("./RequireNewPassword.js").RequireNewPasswordProps) => import("react").JSX.Element) & {
|
|
73
|
+
original: (props: import("./RequireNewPassword.js").RequireNewPasswordProps) => import("react").JSX.Element;
|
|
74
|
+
originalName: string;
|
|
75
|
+
displayName: string;
|
|
76
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
77
|
+
};
|
|
78
|
+
RequestPasswordResetCode: ((props: import("./RequestPasswordResetCode.js").ForgotPasswordProps) => import("react").JSX.Element) & {
|
|
79
|
+
original: (props: import("./RequestPasswordResetCode.js").ForgotPasswordProps) => import("react").JSX.Element;
|
|
80
|
+
originalName: string;
|
|
81
|
+
displayName: string;
|
|
82
|
+
} & {
|
|
83
|
+
original: ((props: import("./RequestPasswordResetCode.js").ForgotPasswordProps) => import("react").JSX.Element) & {
|
|
84
|
+
original: (props: import("./RequestPasswordResetCode.js").ForgotPasswordProps) => import("react").JSX.Element;
|
|
85
|
+
originalName: string;
|
|
86
|
+
displayName: string;
|
|
87
|
+
};
|
|
88
|
+
originalName: string;
|
|
89
|
+
displayName: string;
|
|
90
|
+
} & {
|
|
91
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<((props: import("./RequestPasswordResetCode.js").ForgotPasswordProps) => import("react").JSX.Element) & {
|
|
92
|
+
original: (props: import("./RequestPasswordResetCode.js").ForgotPasswordProps) => import("react").JSX.Element;
|
|
93
|
+
originalName: string;
|
|
94
|
+
displayName: string;
|
|
95
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
96
|
+
};
|
|
97
|
+
PasswordResetCodeSent: ((props: import("./PasswordResetCodeSent.js").PasswordResetCodeSentProps) => import("react").JSX.Element) & {
|
|
98
|
+
original: (props: import("./PasswordResetCodeSent.js").PasswordResetCodeSentProps) => import("react").JSX.Element;
|
|
99
|
+
originalName: string;
|
|
100
|
+
displayName: string;
|
|
101
|
+
} & {
|
|
102
|
+
original: ((props: import("./PasswordResetCodeSent.js").PasswordResetCodeSentProps) => import("react").JSX.Element) & {
|
|
103
|
+
original: (props: import("./PasswordResetCodeSent.js").PasswordResetCodeSentProps) => import("react").JSX.Element;
|
|
104
|
+
originalName: string;
|
|
105
|
+
displayName: string;
|
|
106
|
+
};
|
|
107
|
+
originalName: string;
|
|
108
|
+
displayName: string;
|
|
109
|
+
} & {
|
|
110
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<((props: import("./PasswordResetCodeSent.js").PasswordResetCodeSentProps) => import("react").JSX.Element) & {
|
|
111
|
+
original: (props: import("./PasswordResetCodeSent.js").PasswordResetCodeSentProps) => import("react").JSX.Element;
|
|
112
|
+
originalName: string;
|
|
113
|
+
displayName: string;
|
|
114
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
115
|
+
};
|
|
116
|
+
SetNewPassword: ((props: import("./SetNewPassword.js").SetNewPasswordProps) => import("react").JSX.Element) & {
|
|
117
|
+
original: (props: import("./SetNewPassword.js").SetNewPasswordProps) => import("react").JSX.Element;
|
|
118
|
+
originalName: string;
|
|
119
|
+
displayName: string;
|
|
120
|
+
} & {
|
|
121
|
+
original: ((props: import("./SetNewPassword.js").SetNewPasswordProps) => import("react").JSX.Element) & {
|
|
122
|
+
original: (props: import("./SetNewPassword.js").SetNewPasswordProps) => import("react").JSX.Element;
|
|
123
|
+
originalName: string;
|
|
124
|
+
displayName: string;
|
|
125
|
+
};
|
|
126
|
+
originalName: string;
|
|
127
|
+
displayName: string;
|
|
128
|
+
} & {
|
|
129
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<((props: import("./SetNewPassword.js").SetNewPasswordProps) => import("react").JSX.Element) & {
|
|
130
|
+
original: (props: import("./SetNewPassword.js").SetNewPasswordProps) => import("react").JSX.Element;
|
|
131
|
+
originalName: string;
|
|
132
|
+
displayName: string;
|
|
133
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
134
|
+
};
|
|
135
|
+
FederatedLogin: (({ providers }: import("./FederatedLogin.js").FederatedLoginProps) => import("react").JSX.Element) & {
|
|
136
|
+
original: ({ providers }: import("./FederatedLogin.js").FederatedLoginProps) => import("react").JSX.Element;
|
|
137
|
+
originalName: string;
|
|
138
|
+
displayName: string;
|
|
139
|
+
} & {
|
|
140
|
+
original: (({ providers }: import("./FederatedLogin.js").FederatedLoginProps) => import("react").JSX.Element) & {
|
|
141
|
+
original: ({ providers }: import("./FederatedLogin.js").FederatedLoginProps) => import("react").JSX.Element;
|
|
142
|
+
originalName: string;
|
|
143
|
+
displayName: string;
|
|
144
|
+
};
|
|
145
|
+
originalName: string;
|
|
146
|
+
displayName: string;
|
|
147
|
+
} & {
|
|
148
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(({ providers }: import("./FederatedLogin.js").FederatedLoginProps) => import("react").JSX.Element) & {
|
|
149
|
+
original: ({ providers }: import("./FederatedLogin.js").FederatedLoginProps) => import("react").JSX.Element;
|
|
150
|
+
originalName: string;
|
|
151
|
+
displayName: string;
|
|
152
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
153
|
+
};
|
|
154
|
+
FederatedProviders: {
|
|
155
|
+
Container: (({ children }: import("./FederatedProviders.js").ContainerProps) => import("react").JSX.Element) & {
|
|
156
|
+
original: ({ children }: import("./FederatedProviders.js").ContainerProps) => import("react").JSX.Element;
|
|
157
|
+
originalName: string;
|
|
158
|
+
displayName: string;
|
|
159
|
+
} & {
|
|
160
|
+
original: (({ children }: import("./FederatedProviders.js").ContainerProps) => import("react").JSX.Element) & {
|
|
161
|
+
original: ({ children }: import("./FederatedProviders.js").ContainerProps) => import("react").JSX.Element;
|
|
162
|
+
originalName: string;
|
|
163
|
+
displayName: string;
|
|
164
|
+
};
|
|
165
|
+
originalName: string;
|
|
166
|
+
displayName: string;
|
|
167
|
+
} & {
|
|
168
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(({ children }: import("./FederatedProviders.js").ContainerProps) => import("react").JSX.Element) & {
|
|
169
|
+
original: ({ children }: import("./FederatedProviders.js").ContainerProps) => import("react").JSX.Element;
|
|
170
|
+
originalName: string;
|
|
171
|
+
displayName: string;
|
|
172
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
Divider: (() => import("react").JSX.Element) & {
|
|
176
|
+
original: () => import("react").JSX.Element;
|
|
177
|
+
originalName: string;
|
|
178
|
+
displayName: string;
|
|
179
|
+
} & {
|
|
180
|
+
original: (() => import("react").JSX.Element) & {
|
|
181
|
+
original: () => import("react").JSX.Element;
|
|
182
|
+
originalName: string;
|
|
183
|
+
displayName: string;
|
|
184
|
+
};
|
|
185
|
+
originalName: string;
|
|
186
|
+
displayName: string;
|
|
187
|
+
} & {
|
|
188
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(() => import("react").JSX.Element) & {
|
|
189
|
+
original: () => import("react").JSX.Element;
|
|
190
|
+
originalName: string;
|
|
191
|
+
displayName: string;
|
|
192
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
193
|
+
};
|
|
194
|
+
FooterSignIn: (({ onSignIn }: import("./FooterSignIn.js").FooterSignInProps) => import("react").JSX.Element) & {
|
|
195
|
+
original: ({ onSignIn }: import("./FooterSignIn.js").FooterSignInProps) => import("react").JSX.Element;
|
|
196
|
+
originalName: string;
|
|
197
|
+
displayName: string;
|
|
198
|
+
} & {
|
|
199
|
+
original: (({ onSignIn }: import("./FooterSignIn.js").FooterSignInProps) => import("react").JSX.Element) & {
|
|
200
|
+
original: ({ onSignIn }: import("./FooterSignIn.js").FooterSignInProps) => import("react").JSX.Element;
|
|
201
|
+
originalName: string;
|
|
202
|
+
displayName: string;
|
|
203
|
+
};
|
|
204
|
+
originalName: string;
|
|
205
|
+
displayName: string;
|
|
206
|
+
} & {
|
|
207
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(({ onSignIn }: import("./FooterSignIn.js").FooterSignInProps) => import("react").JSX.Element) & {
|
|
208
|
+
original: ({ onSignIn }: import("./FooterSignIn.js").FooterSignInProps) => import("react").JSX.Element;
|
|
209
|
+
originalName: string;
|
|
210
|
+
displayName: string;
|
|
211
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
212
|
+
};
|
|
213
|
+
View: {
|
|
214
|
+
Container: (({ children }: import("./View.js").ContainerProps) => import("react").JSX.Element) & {
|
|
215
|
+
original: ({ children }: import("./View.js").ContainerProps) => import("react").JSX.Element;
|
|
216
|
+
originalName: string;
|
|
217
|
+
displayName: string;
|
|
218
|
+
} & {
|
|
219
|
+
original: (({ children }: import("./View.js").ContainerProps) => import("react").JSX.Element) & {
|
|
220
|
+
original: ({ children }: import("./View.js").ContainerProps) => import("react").JSX.Element;
|
|
221
|
+
originalName: string;
|
|
222
|
+
displayName: string;
|
|
223
|
+
};
|
|
224
|
+
originalName: string;
|
|
225
|
+
displayName: string;
|
|
226
|
+
} & {
|
|
227
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(({ children }: import("./View.js").ContainerProps) => import("react").JSX.Element) & {
|
|
228
|
+
original: ({ children }: import("./View.js").ContainerProps) => import("react").JSX.Element;
|
|
229
|
+
originalName: string;
|
|
230
|
+
displayName: string;
|
|
231
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
232
|
+
};
|
|
233
|
+
Content: (({ children }: import("./View.js").ContentProps) => import("react").JSX.Element) & {
|
|
234
|
+
original: ({ children }: import("./View.js").ContentProps) => import("react").JSX.Element;
|
|
235
|
+
originalName: string;
|
|
236
|
+
displayName: string;
|
|
237
|
+
} & {
|
|
238
|
+
original: (({ children }: import("./View.js").ContentProps) => import("react").JSX.Element) & {
|
|
239
|
+
original: ({ children }: import("./View.js").ContentProps) => import("react").JSX.Element;
|
|
240
|
+
originalName: string;
|
|
241
|
+
displayName: string;
|
|
242
|
+
};
|
|
243
|
+
originalName: string;
|
|
244
|
+
displayName: string;
|
|
245
|
+
} & {
|
|
246
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(({ children }: import("./View.js").ContentProps) => import("react").JSX.Element) & {
|
|
247
|
+
original: ({ children }: import("./View.js").ContentProps) => import("react").JSX.Element;
|
|
248
|
+
originalName: string;
|
|
249
|
+
displayName: string;
|
|
250
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
251
|
+
};
|
|
252
|
+
Title: (({ title, description }: import("./View.js").TitleProps) => import("react").JSX.Element) & {
|
|
253
|
+
original: ({ title, description }: import("./View.js").TitleProps) => import("react").JSX.Element;
|
|
254
|
+
originalName: string;
|
|
255
|
+
displayName: string;
|
|
256
|
+
} & {
|
|
257
|
+
original: (({ title, description }: import("./View.js").TitleProps) => import("react").JSX.Element) & {
|
|
258
|
+
original: ({ title, description }: import("./View.js").TitleProps) => import("react").JSX.Element;
|
|
259
|
+
originalName: string;
|
|
260
|
+
displayName: string;
|
|
261
|
+
};
|
|
262
|
+
originalName: string;
|
|
263
|
+
displayName: string;
|
|
264
|
+
} & {
|
|
265
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(({ title, description }: import("./View.js").TitleProps) => import("react").JSX.Element) & {
|
|
266
|
+
original: ({ title, description }: import("./View.js").TitleProps) => import("react").JSX.Element;
|
|
267
|
+
originalName: string;
|
|
268
|
+
displayName: string;
|
|
269
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
270
|
+
};
|
|
271
|
+
Footer: (({ children }: import("./View.js").FooterProps) => import("react").JSX.Element) & {
|
|
272
|
+
original: ({ children }: import("./View.js").FooterProps) => import("react").JSX.Element;
|
|
273
|
+
originalName: string;
|
|
274
|
+
displayName: string;
|
|
275
|
+
} & {
|
|
276
|
+
original: (({ children }: import("./View.js").FooterProps) => import("react").JSX.Element) & {
|
|
277
|
+
original: ({ children }: import("./View.js").FooterProps) => import("react").JSX.Element;
|
|
278
|
+
originalName: string;
|
|
279
|
+
displayName: string;
|
|
280
|
+
};
|
|
281
|
+
originalName: string;
|
|
282
|
+
displayName: string;
|
|
283
|
+
} & {
|
|
284
|
+
createDecorator: (decorator: import("@webiny/app/index.js").ComponentDecorator<(({ children }: import("./View.js").FooterProps) => import("react").JSX.Element) & {
|
|
285
|
+
original: ({ children }: import("./View.js").FooterProps) => import("react").JSX.Element;
|
|
286
|
+
originalName: string;
|
|
287
|
+
displayName: string;
|
|
288
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
289
|
+
};
|
|
290
|
+
Error: ({ title, description }: import("./View.js").ErrorProps) => import("react").JSX.Element | null;
|
|
291
|
+
};
|
|
292
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SignIn } from "./SignIn.js";
|
|
2
|
+
import { ConfirmTotpCode } from "./ConfirmTotpCode.js";
|
|
3
|
+
import { SetupTotp } from "./SetupTotp.js";
|
|
4
|
+
import { RequireNewPassword } from "./RequireNewPassword.js";
|
|
5
|
+
import { RequestPasswordResetCode } from "./RequestPasswordResetCode.js";
|
|
6
|
+
import { PasswordResetCodeSent } from "./PasswordResetCodeSent.js";
|
|
7
|
+
import { SetNewPassword } from "./SetNewPassword.js";
|
|
8
|
+
import { FederatedLogin } from "./FederatedLogin.js";
|
|
9
|
+
import { FederatedProviders } from "./FederatedProviders.js";
|
|
10
|
+
import { Divider } from "./Divider.js";
|
|
11
|
+
import { FooterSignIn } from "./FooterSignIn.js";
|
|
12
|
+
import { View } from "./View.js";
|
|
13
|
+
const Components = {
|
|
14
|
+
SignIn: SignIn,
|
|
15
|
+
ConfirmTotpCode: ConfirmTotpCode,
|
|
16
|
+
SetupTotp: SetupTotp,
|
|
17
|
+
RequireNewPassword: RequireNewPassword,
|
|
18
|
+
RequestPasswordResetCode: RequestPasswordResetCode,
|
|
19
|
+
PasswordResetCodeSent: PasswordResetCodeSent,
|
|
20
|
+
SetNewPassword: SetNewPassword,
|
|
21
|
+
FederatedLogin: FederatedLogin,
|
|
22
|
+
FederatedProviders: FederatedProviders,
|
|
23
|
+
Divider: Divider,
|
|
24
|
+
FooterSignIn: FooterSignIn,
|
|
25
|
+
View: View
|
|
26
|
+
};
|
|
27
|
+
export { Components };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/presentation/Cognito/components/index.js","sources":["../../../../../src/admin/presentation/Cognito/components/index.ts"],"sourcesContent":["import { SignIn } from \"./SignIn.js\";\nimport { ConfirmTotpCode } from \"./ConfirmTotpCode.js\";\nimport { SetupTotp } from \"./SetupTotp.js\";\nimport { RequireNewPassword } from \"./RequireNewPassword.js\";\nimport { RequestPasswordResetCode } from \"./RequestPasswordResetCode.js\";\nimport { PasswordResetCodeSent } from \"./PasswordResetCodeSent.js\";\nimport { SetNewPassword } from \"./SetNewPassword.js\";\nimport { FederatedLogin } from \"./FederatedLogin.js\";\nimport { FederatedProviders } from \"./FederatedProviders.js\";\nimport { Divider } from \"./Divider.js\";\nimport { FooterSignIn } from \"./FooterSignIn.js\";\nimport { View } from \"./View.js\";\n\nexport const Components = {\n SignIn,\n ConfirmTotpCode,\n SetupTotp,\n RequireNewPassword,\n RequestPasswordResetCode,\n PasswordResetCodeSent,\n SetNewPassword,\n FederatedLogin,\n FederatedProviders,\n Divider,\n FooterSignIn,\n View\n};\n"],"names":["Components","SignIn","ConfirmTotpCode","SetupTotp","RequireNewPassword","RequestPasswordResetCode","PasswordResetCodeSent","SetNewPassword","FederatedLogin","FederatedProviders","Divider","FooterSignIn","View"],"mappings":";;;;;;;;;;;;AAaO,MAAMA,aAAa;IACtBC,QAAMA;IACNC,iBAAeA;IACfC,WAASA;IACTC,oBAAkBA;IAClBC,0BAAwBA;IACxBC,uBAAqBA;IACrBC,gBAAcA;IACdC,gBAAcA;IACdC,oBAAkBA;IAClBC,SAAOA;IACPC,cAAYA;IACZC,MAAIA;AACR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CognitoSignInFeature: import("@webiny/feature/admin").FeatureDefinition<any, []>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { DefaultCognitoSignInConfig } from "../../DefaultCognitoSignInConfig.js";
|
|
3
|
+
const CognitoSignInFeature = createFeature({
|
|
4
|
+
name: "CognitoSignIn",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(DefaultCognitoSignInConfig).inSingletonScope();
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { CognitoSignInFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=signInFeature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/presentation/Cognito/signInFeature.js","sources":["../../../../src/admin/presentation/Cognito/signInFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { DefaultCognitoSignInConfig } from \"~/admin/DefaultCognitoSignInConfig.js\";\n\nexport const CognitoSignInFeature = createFeature({\n name: \"CognitoSignIn\",\n register(container) {\n container.register(DefaultCognitoSignInConfig).inSingletonScope();\n }\n});\n"],"names":["CognitoSignInFeature","createFeature","container","DefaultCognitoSignInConfig"],"mappings":";;AAGO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,4BAA4B,gBAAgB;IACnE;AACJ"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import react, { useMemo } from "react";
|
|
2
2
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
3
3
|
import { Form } from "@webiny/form";
|
|
4
|
-
import { validation } from "@webiny/validation";
|
|
4
|
+
import { validation as validation_validation } from "@webiny/validation";
|
|
5
5
|
import { EmptyView, RolesMultiAutocomplete, SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader, TeamsMultiAutocomplete, useAuthentication, useRouter } from "@webiny/app-admin";
|
|
6
6
|
import { ReactComponent } from "@webiny/icons/add.svg";
|
|
7
7
|
import { ReactComponent as gpp_maybe_svg_ReactComponent } from "@webiny/icons/gpp_maybe.svg";
|
|
@@ -24,7 +24,7 @@ const UserForm = ({ teams })=>{
|
|
|
24
24
|
const isNewUser = userForm.isNewUser;
|
|
25
25
|
const emailIsDisabled = config.getKey("ADMIN_USER_CAN_CHANGE_EMAIL", "false" === process.env.REACT_APP_ADMIN_USER_CAN_CHANGE_EMAIL);
|
|
26
26
|
const groupValidators = useMemo(()=>teams ? [] : [
|
|
27
|
-
|
|
27
|
+
validation_validation.create("required")
|
|
28
28
|
], [
|
|
29
29
|
teams
|
|
30
30
|
]);
|
|
@@ -82,7 +82,7 @@ const UserForm = ({ teams })=>{
|
|
|
82
82
|
span: 12
|
|
83
83
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
84
84
|
name: "firstName",
|
|
85
|
-
validators:
|
|
85
|
+
validators: validation_validation.create("required")
|
|
86
86
|
}, /*#__PURE__*/ react.createElement(Input, {
|
|
87
87
|
label: t`First Name`,
|
|
88
88
|
disabled: isDisabled,
|
|
@@ -91,7 +91,7 @@ const UserForm = ({ teams })=>{
|
|
|
91
91
|
span: 12
|
|
92
92
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
93
93
|
name: "lastName",
|
|
94
|
-
validators:
|
|
94
|
+
validators: validation_validation.create("required")
|
|
95
95
|
}, /*#__PURE__*/ react.createElement(Input, {
|
|
96
96
|
label: t`Last Name`,
|
|
97
97
|
disabled: isDisabled,
|
|
@@ -100,7 +100,7 @@ const UserForm = ({ teams })=>{
|
|
|
100
100
|
span: 12
|
|
101
101
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
102
102
|
name: "email",
|
|
103
|
-
validators:
|
|
103
|
+
validators: validation_validation.create("required,email")
|
|
104
104
|
}, /*#__PURE__*/ react.createElement(Input, {
|
|
105
105
|
value: data.email,
|
|
106
106
|
label: t`Email`,
|
|
@@ -129,11 +129,14 @@ const UserForm = ({ teams })=>{
|
|
|
129
129
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
130
130
|
name: "roles",
|
|
131
131
|
validators: groupValidators
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
}, ({ value, onChange, validation })=>/*#__PURE__*/ react.createElement(RolesMultiAutocomplete, {
|
|
133
|
+
values: value,
|
|
134
|
+
onChange: onChange,
|
|
135
|
+
validation: validation,
|
|
136
|
+
label: "Roles",
|
|
137
|
+
"data-testid": "roles-autocomplete",
|
|
138
|
+
disabled: isDisabled
|
|
139
|
+
}))))), teams ? /*#__PURE__*/ react.createElement(Accordion.Item, {
|
|
137
140
|
title: "Teams",
|
|
138
141
|
description: "Assign to teams",
|
|
139
142
|
icon: /*#__PURE__*/ react.createElement(admin_panel_settings_svg_ReactComponent, null)
|
|
@@ -141,11 +144,14 @@ const UserForm = ({ teams })=>{
|
|
|
141
144
|
span: 12
|
|
142
145
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
143
146
|
name: "teams"
|
|
144
|
-
},
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
}, ({ value, onChange, validation })=>/*#__PURE__*/ react.createElement(TeamsMultiAutocomplete, {
|
|
148
|
+
values: value,
|
|
149
|
+
onChange: onChange,
|
|
150
|
+
validation: validation,
|
|
151
|
+
label: "Teams",
|
|
152
|
+
"data-testid": "teams-autocomplete",
|
|
153
|
+
disabled: isDisabled
|
|
154
|
+
}))))) : null)), /*#__PURE__*/ react.createElement(SimpleFormFooter, {
|
|
149
155
|
"data-testid": "form-footer"
|
|
150
156
|
}, /*#__PURE__*/ react.createElement(Button, {
|
|
151
157
|
variant: "secondary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/ui/views/Users/UsersForm.js","sources":["../../../../../src/admin/ui/views/Users/UsersForm.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Form } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormHeader,\n SimpleFormFooter,\n SimpleFormContent,\n EmptyView,\n RolesMultiAutocomplete,\n TeamsMultiAutocomplete,\n useAuthentication,\n useRouter\n} from \"@webiny/app-admin\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as SecurityIcon } from \"@webiny/icons/gpp_maybe.svg\";\nimport { ReactComponent as SecurityTeamsIcon } from \"@webiny/icons/admin_panel_settings.svg\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { Accordion, Alert, OverlayLoader, Button, Input, Grid, Link } from \"@webiny/admin-ui\";\nimport { config as appConfig } from \"@webiny/app/config.js\";\nimport { AvatarImage } from \"../../components/AvatarImage/index.js\";\nimport { useUserForm } from \"~/admin/ui/views/Users/hooks/useUserForm.js\";\nimport { usePasswordValidator } from \"~/admin/presentation/shared/usePasswordValidator.js\";\nimport { Routes } from \"~/admin/routes.js\";\n\nconst t = i18n.ns(\"app-security-admin-users/account-form\");\n\nexport interface UserFormProps {\n teams: boolean;\n}\n\nexport const UserForm = ({ teams }: UserFormProps) => {\n const { identity } = useAuthentication();\n const userForm = useUserForm();\n const passwordValidator = usePasswordValidator();\n const { getLink } = useRouter();\n\n const isExternal = userForm.user?.external === true;\n const formTitle = userForm.isNewUser ? \"New User\" : userForm.fullName;\n const isNewUser = userForm.isNewUser;\n\n const emailIsDisabled = appConfig.getKey(\n \"ADMIN_USER_CAN_CHANGE_EMAIL\",\n process.env.REACT_APP_ADMIN_USER_CAN_CHANGE_EMAIL === \"false\"\n );\n\n const groupValidators = useMemo(() => {\n return teams ? [] : [validation.create(\"required\")];\n }, [teams]);\n\n const accountLink = getLink(Routes.Users.Account);\n\n // Render \"No content\" selected view.\n if (userForm.showEmptyView) {\n return (\n <EmptyView\n icon={<SettingsIcon />}\n title={t`Click on the left side list to display user details or create a...`}\n action={\n <Button\n icon={<AddIcon />}\n text={t`New User`}\n data-testid=\"new-record-button\"\n onClick={userForm.createUser}\n />\n }\n />\n );\n }\n\n const isSelf = userForm.user.id === identity.id;\n const isDisabled = isExternal || isSelf;\n\n return (\n <Form data={userForm.user} onSubmit={userForm.onSubmit}>\n {({ data, form, Bind }) => (\n <SimpleForm size={\"lg\"}>\n {userForm.loading && <OverlayLoader />}\n <div className={\"mb-xl\"}>\n <Bind name=\"avatar\">\n <AvatarImage round disabled={isDisabled} />\n </Bind>\n </div>\n <SimpleFormHeader title={formTitle} />\n <SimpleFormContent>\n {isExternal && (\n <Grid className={\"mb-lg\"}>\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"External User\"}>\n This user is an external user and cannot be edited.\n </Alert>\n </Grid.Column>\n </Grid>\n )}\n {isSelf && (\n <Grid className={\"mb-lg\"}>\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Own Profile\"}>\n You cannot edit your own profile using this form. Please use\n the <Link to={accountLink}>account settings</Link> instead.\n </Alert>\n </Grid.Column>\n </Grid>\n )}\n <Accordion variant={\"underline\"}>\n <Accordion.Item\n title={\"Bio\"}\n description={\"Account information\"}\n icon={<SettingsIcon />}\n defaultOpen={true}\n >\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name=\"firstName\"\n validators={validation.create(\"required\")}\n >\n <Input\n label={t`First Name`}\n disabled={isDisabled}\n data-testid=\"account.firstname\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"lastName\"\n validators={validation.create(\"required\")}\n >\n <Input\n label={t`Last Name`}\n disabled={isDisabled}\n data-testid=\"account.lastname\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"email\"\n validators={validation.create(\"required,email\")}\n >\n <Input\n value={data.email}\n label={t`Email`}\n disabled={emailIsDisabled || isDisabled}\n data-testid=\"account.email\"\n autoComplete=\"new-password\"\n description={\n \"Email is your unique identifier used to login!\"\n }\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"password\" validators={passwordValidator}>\n <Input\n autoComplete=\"new-password\"\n disabled={isDisabled}\n description={\n data.id && \"Type a new password to reset it.\"\n }\n type=\"password\"\n label={\"Password\"}\n data-testid=\"account.password\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </Accordion.Item>\n <Accordion.Item\n title={\"Roles\"}\n description={\"Assign to security roles\"}\n icon={<SecurityIcon />}\n >\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"roles\"} validators={groupValidators}>\n <RolesMultiAutocomplete\n label={\"Roles\"}\n data-testid=\"roles-autocomplete\"\n disabled={isDisabled}\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </Accordion.Item>\n {teams ? (\n <Accordion.Item\n title={\"Teams\"}\n description={\"Assign to teams\"}\n icon={<SecurityTeamsIcon />}\n >\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"teams\"}>\n <TeamsMultiAutocomplete\n label={\"Teams\"}\n data-testid=\"teams-autocomplete\"\n disabled={isDisabled}\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </Accordion.Item>\n ) : null}\n </Accordion>\n </SimpleFormContent>\n <SimpleFormFooter data-testid={\"form-footer\"}>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={userForm.cancelEditing}\n />\n <Button\n variant={\"primary\"}\n text={isNewUser ? t`Create user` : t`Update user`}\n disabled={isDisabled}\n onClick={form.submit}\n />\n </SimpleFormFooter>\n </SimpleForm>\n )}\n </Form>\n );\n};\n"],"names":["t","i18n","UserForm","teams","identity","useAuthentication","userForm","useUserForm","passwordValidator","usePasswordValidator","getLink","useRouter","isExternal","formTitle","isNewUser","emailIsDisabled","appConfig","process","groupValidators","useMemo","validation","accountLink","Routes","EmptyView","SettingsIcon","Button","AddIcon","isSelf","isDisabled","Form","data","form","Bind","SimpleForm","OverlayLoader","AvatarImage","SimpleFormHeader","SimpleFormContent","Grid","Alert","Link","Accordion","Input","SecurityIcon","RolesMultiAutocomplete","SecurityTeamsIcon","TeamsMultiAutocomplete","SimpleFormFooter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin/ui/views/Users/UsersForm.js","sources":["../../../../../src/admin/ui/views/Users/UsersForm.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Form } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormHeader,\n SimpleFormFooter,\n SimpleFormContent,\n EmptyView,\n RolesMultiAutocomplete,\n TeamsMultiAutocomplete,\n useAuthentication,\n useRouter\n} from \"@webiny/app-admin\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as SecurityIcon } from \"@webiny/icons/gpp_maybe.svg\";\nimport { ReactComponent as SecurityTeamsIcon } from \"@webiny/icons/admin_panel_settings.svg\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { Accordion, Alert, OverlayLoader, Button, Input, Grid, Link } from \"@webiny/admin-ui\";\nimport { config as appConfig } from \"@webiny/app/config.js\";\nimport { AvatarImage } from \"../../components/AvatarImage/index.js\";\nimport { useUserForm } from \"~/admin/ui/views/Users/hooks/useUserForm.js\";\nimport { usePasswordValidator } from \"~/admin/presentation/shared/usePasswordValidator.js\";\nimport { Routes } from \"~/admin/routes.js\";\n\nconst t = i18n.ns(\"app-security-admin-users/account-form\");\n\nexport interface UserFormProps {\n teams: boolean;\n}\n\nexport const UserForm = ({ teams }: UserFormProps) => {\n const { identity } = useAuthentication();\n const userForm = useUserForm();\n const passwordValidator = usePasswordValidator();\n const { getLink } = useRouter();\n\n const isExternal = userForm.user?.external === true;\n const formTitle = userForm.isNewUser ? \"New User\" : userForm.fullName;\n const isNewUser = userForm.isNewUser;\n\n const emailIsDisabled = appConfig.getKey(\n \"ADMIN_USER_CAN_CHANGE_EMAIL\",\n process.env.REACT_APP_ADMIN_USER_CAN_CHANGE_EMAIL === \"false\"\n );\n\n const groupValidators = useMemo(() => {\n return teams ? [] : [validation.create(\"required\")];\n }, [teams]);\n\n const accountLink = getLink(Routes.Users.Account);\n\n // Render \"No content\" selected view.\n if (userForm.showEmptyView) {\n return (\n <EmptyView\n icon={<SettingsIcon />}\n title={t`Click on the left side list to display user details or create a...`}\n action={\n <Button\n icon={<AddIcon />}\n text={t`New User`}\n data-testid=\"new-record-button\"\n onClick={userForm.createUser}\n />\n }\n />\n );\n }\n\n const isSelf = userForm.user.id === identity.id;\n const isDisabled = isExternal || isSelf;\n\n return (\n <Form data={userForm.user} onSubmit={userForm.onSubmit}>\n {({ data, form, Bind }) => (\n <SimpleForm size={\"lg\"}>\n {userForm.loading && <OverlayLoader />}\n <div className={\"mb-xl\"}>\n <Bind name=\"avatar\">\n <AvatarImage round disabled={isDisabled} />\n </Bind>\n </div>\n <SimpleFormHeader title={formTitle} />\n <SimpleFormContent>\n {isExternal && (\n <Grid className={\"mb-lg\"}>\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"External User\"}>\n This user is an external user and cannot be edited.\n </Alert>\n </Grid.Column>\n </Grid>\n )}\n {isSelf && (\n <Grid className={\"mb-lg\"}>\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Own Profile\"}>\n You cannot edit your own profile using this form. Please use\n the <Link to={accountLink}>account settings</Link> instead.\n </Alert>\n </Grid.Column>\n </Grid>\n )}\n <Accordion variant={\"underline\"}>\n <Accordion.Item\n title={\"Bio\"}\n description={\"Account information\"}\n icon={<SettingsIcon />}\n defaultOpen={true}\n >\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name=\"firstName\"\n validators={validation.create(\"required\")}\n >\n <Input\n label={t`First Name`}\n disabled={isDisabled}\n data-testid=\"account.firstname\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"lastName\"\n validators={validation.create(\"required\")}\n >\n <Input\n label={t`Last Name`}\n disabled={isDisabled}\n data-testid=\"account.lastname\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"email\"\n validators={validation.create(\"required,email\")}\n >\n <Input\n value={data.email}\n label={t`Email`}\n disabled={emailIsDisabled || isDisabled}\n data-testid=\"account.email\"\n autoComplete=\"new-password\"\n description={\n \"Email is your unique identifier used to login!\"\n }\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"password\" validators={passwordValidator}>\n <Input\n autoComplete=\"new-password\"\n disabled={isDisabled}\n description={\n data.id && \"Type a new password to reset it.\"\n }\n type=\"password\"\n label={\"Password\"}\n data-testid=\"account.password\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </Accordion.Item>\n <Accordion.Item\n title={\"Roles\"}\n description={\"Assign to security roles\"}\n icon={<SecurityIcon />}\n >\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"roles\"} validators={groupValidators}>\n {({ value, onChange, validation }) => (\n <RolesMultiAutocomplete\n values={value}\n onChange={onChange}\n validation={validation}\n label={\"Roles\"}\n data-testid=\"roles-autocomplete\"\n disabled={isDisabled}\n />\n )}\n </Bind>\n </Grid.Column>\n </Grid>\n </Accordion.Item>\n {teams ? (\n <Accordion.Item\n title={\"Teams\"}\n description={\"Assign to teams\"}\n icon={<SecurityTeamsIcon />}\n >\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"teams\"}>\n {({ value, onChange, validation }) => (\n <TeamsMultiAutocomplete\n values={value}\n onChange={onChange}\n validation={validation}\n label={\"Teams\"}\n data-testid=\"teams-autocomplete\"\n disabled={isDisabled}\n />\n )}\n </Bind>\n </Grid.Column>\n </Grid>\n </Accordion.Item>\n ) : null}\n </Accordion>\n </SimpleFormContent>\n <SimpleFormFooter data-testid={\"form-footer\"}>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={userForm.cancelEditing}\n />\n <Button\n variant={\"primary\"}\n text={isNewUser ? t`Create user` : t`Update user`}\n disabled={isDisabled}\n onClick={form.submit}\n />\n </SimpleFormFooter>\n </SimpleForm>\n )}\n </Form>\n );\n};\n"],"names":["t","i18n","UserForm","teams","identity","useAuthentication","userForm","useUserForm","passwordValidator","usePasswordValidator","getLink","useRouter","isExternal","formTitle","isNewUser","emailIsDisabled","appConfig","process","groupValidators","useMemo","validation","accountLink","Routes","EmptyView","SettingsIcon","Button","AddIcon","isSelf","isDisabled","Form","data","form","Bind","SimpleForm","OverlayLoader","AvatarImage","SimpleFormHeader","SimpleFormContent","Grid","Alert","Link","Accordion","Input","SecurityIcon","value","onChange","RolesMultiAutocomplete","SecurityTeamsIcon","TeamsMultiAutocomplete","SimpleFormFooter"],"mappings":"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"}
|
|
@@ -96,7 +96,9 @@ function useUserForm() {
|
|
|
96
96
|
user: {
|
|
97
97
|
...user,
|
|
98
98
|
group: user.group ? user.group.id : void 0,
|
|
99
|
-
team: user.team ? user.team.id : void 0
|
|
99
|
+
team: user.team ? user.team.id : void 0,
|
|
100
|
+
roles: user.roles ? user.roles.map((r)=>r.id) : [],
|
|
101
|
+
teams: user.teams ? user.teams.map((t)=>t.id) : []
|
|
100
102
|
},
|
|
101
103
|
onSubmit,
|
|
102
104
|
isNewUser: newUser,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/ui/views/Users/hooks/useUserForm.js","sources":["../../../../../../src/admin/ui/views/Users/hooks/useUserForm.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { useRoute, useRouter, useWcp } from \"@webiny/app-admin\";\nimport { CREATE_USER, LIST_USERS, READ_USER, UPDATE_USER } from \"~/admin/ui/views/Users/graphql.js\";\nimport omit from \"lodash/omit.js\";\nimport { Routes } from \"~/admin/routes.js\";\nimport { useToast } from \"@webiny/admin-ui\";\n\nexport type UseUserForm = ReturnType<typeof useUserForm>;\n\ninterface SubmitUserCallableParams {\n id?: string;\n firstName: string;\n lastName: string;\n email: string;\n password?: string;\n avatar: {\n src?: string;\n };\n external?: boolean;\n}\n\ninterface SubmitUserCallable {\n (data: SubmitUserCallableParams): Promise<void>;\n}\n\nexport function useUserForm() {\n const { goToRoute } = useRouter();\n const { route } = useRoute(Routes.Users.List);\n const toast = useToast();\n\n const wcp = useWcp();\n const teams = wcp.canUseTeams();\n\n const id = route.params.id;\n const newUser = route.params.new === true;\n\n const { data, loading: userLoading } = useQuery(READ_USER({ teams }), {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.adminUsers.user;\n if (error) {\n goToRoute(Routes.Users.List);\n toast.showWarningToast({\n title: \"Error loading user profile\",\n description: error.message,\n duration: Infinity\n });\n }\n }\n });\n\n const [create, { loading: createLoading }] = useMutation(CREATE_USER, {\n refetchQueries: [{ query: LIST_USERS }]\n });\n\n const [update, { loading: updateLoading }] = useMutation(UPDATE_USER({ teams }), {\n refetchQueries: [{ query: LIST_USERS }]\n });\n\n const loading = userLoading || createLoading || updateLoading;\n\n const onSubmit = useCallback<SubmitUserCallable>(\n async data => {\n const { id, ...rest } = data;\n const [operation, args] = !newUser\n ? [update, { variables: { id, data: omit(rest, [\"external\"]) } }]\n : [create, { variables: { data } }];\n\n const result = await operation(args);\n\n const { data: user, error } = result.data.adminUsers.user;\n\n if (error) {\n toast.showWarningToast({\n title: \"Error updating user profile\",\n description: error.message,\n duration: Infinity\n });\n return;\n }\n\n if (newUser) {\n goToRoute(Routes.Users.List, { id: user.id });\n }\n toast.showSuccessToast({\n title: \"User saved successfully.\"\n });\n },\n [id, newUser]\n );\n\n const user = userLoading ? {} : data ? data.adminUsers.user.data : {};\n\n const showEmptyView = !newUser && !userLoading && isEmpty(user);\n\n return {\n id,\n loading,\n user: {\n ...user,\n group: user.group ? user.group.id : undefined,\n team: user.team ? user.team.id : undefined\n },\n onSubmit,\n isNewUser: newUser,\n fullName: `${user.firstName || \"\"} ${user.lastName || \"\"}`.trim(),\n showEmptyView,\n createUser() {\n goToRoute(Routes.Users.List, { new: true });\n },\n cancelEditing() {\n goToRoute(Routes.Users.List);\n }\n };\n}\n"],"names":["useUserForm","goToRoute","useRouter","route","useRoute","Routes","toast","useToast","wcp","useWcp","teams","id","newUser","data","userLoading","useQuery","READ_USER","error","Infinity","create","createLoading","useMutation","CREATE_USER","LIST_USERS","update","updateLoading","UPDATE_USER","loading","onSubmit","useCallback","rest","operation","args","omit","result","user","showEmptyView","isEmpty","undefined"],"mappings":";;;;;;;;AA2BO,SAASA;IACZ,MAAM,EAAEC,SAAS,EAAE,GAAGC;IACtB,MAAM,EAAEC,KAAK,EAAE,GAAGC,SAASC,OAAO,KAAK,CAAC,IAAI;IAC5C,MAAMC,QAAQC;IAEd,MAAMC,MAAMC;IACZ,MAAMC,QAAQF,IAAI,WAAW;IAE7B,MAAMG,KAAKR,MAAM,MAAM,CAAC,EAAE;IAC1B,MAAMS,UAAUT,AAAqB,SAArBA,MAAM,MAAM,CAAC,GAAG;IAEhC,MAAM,EAAEU,IAAI,EAAE,SAASC,WAAW,EAAE,GAAGC,SAASC,UAAU;QAAEN;IAAM,IAAI;QAClE,WAAW;YAAEC;QAAG;QAChB,MAAM,CAACA;QACP,aAAaE,CAAAA;YACT,IAAI,CAACA,MACD;YAGJ,MAAM,EAAEI,KAAK,EAAE,GAAGJ,KAAK,UAAU,CAAC,IAAI;YACtC,IAAII,OAAO;gBACPhB,UAAUI,OAAO,KAAK,CAAC,IAAI;gBAC3BC,MAAM,gBAAgB,CAAC;oBACnB,OAAO;oBACP,aAAaW,MAAM,OAAO;oBAC1B,UAAUC;gBACd;YACJ;QACJ;IACJ;IAEA,MAAM,CAACC,QAAQ,EAAE,SAASC,aAAa,EAAE,CAAC,GAAGC,YAAYC,aAAa;QAClE,gBAAgB;YAAC;gBAAE,OAAOC;YAAW;SAAE;IAC3C;IAEA,MAAM,CAACC,QAAQ,EAAE,SAASC,aAAa,EAAE,CAAC,GAAGJ,YAAYK,YAAY;QAAEhB;IAAM,IAAI;QAC7E,gBAAgB;YAAC;gBAAE,OAAOa;YAAW;SAAE;IAC3C;IAEA,MAAMI,UAAUb,eAAeM,iBAAiBK;IAEhD,MAAMG,WAAWC,YACb,OAAMhB;QACF,MAAM,EAAEF,EAAE,EAAE,GAAGmB,MAAM,GAAGjB;QACxB,MAAM,CAACkB,WAAWC,KAAK,GAAG,AAACpB,UAErB;YAACO;YAAQ;gBAAE,WAAW;oBAAEN;gBAAK;YAAE;SAAE,GADjC;YAACW;YAAQ;gBAAE,WAAW;oBAAEb;oBAAI,MAAMsB,KAAKH,MAAM;wBAAC;qBAAW;gBAAE;YAAE;SAAE;QAGrE,MAAMI,SAAS,MAAMH,UAAUC;QAE/B,MAAM,EAAE,MAAMG,IAAI,EAAElB,KAAK,EAAE,GAAGiB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI;QAEzD,IAAIjB,OAAO,YACPX,MAAM,gBAAgB,CAAC;YACnB,OAAO;YACP,aAAaW,MAAM,OAAO;YAC1B,UAAUC;QACd;QAIJ,IAAIN,SACAX,UAAUI,OAAO,KAAK,CAAC,IAAI,EAAE;YAAE,IAAI8B,KAAK,EAAE;QAAC;QAE/C7B,MAAM,gBAAgB,CAAC;YACnB,OAAO;QACX;IACJ,GACA;QAACK;QAAIC;KAAQ;IAGjB,MAAMuB,OAAOrB,cAAc,CAAC,IAAID,OAAOA,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;IAEpE,MAAMuB,gBAAgB,CAACxB,WAAW,CAACE,eAAeuB,QAAQF;IAE1D,OAAO;QACHxB;QACAgB;QACA,MAAM;YACF,GAAGQ,IAAI;YACP,OAAOA,KAAK,KAAK,GAAGA,KAAK,KAAK,CAAC,EAAE,GAAGG;YACpC,MAAMH,KAAK,IAAI,GAAGA,KAAK,IAAI,CAAC,EAAE,GAAGG;
|
|
1
|
+
{"version":3,"file":"admin/ui/views/Users/hooks/useUserForm.js","sources":["../../../../../../src/admin/ui/views/Users/hooks/useUserForm.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { useRoute, useRouter, useWcp } from \"@webiny/app-admin\";\nimport { CREATE_USER, LIST_USERS, READ_USER, UPDATE_USER } from \"~/admin/ui/views/Users/graphql.js\";\nimport omit from \"lodash/omit.js\";\nimport { Routes } from \"~/admin/routes.js\";\nimport { useToast } from \"@webiny/admin-ui\";\n\nexport type UseUserForm = ReturnType<typeof useUserForm>;\n\ninterface SubmitUserCallableParams {\n id?: string;\n firstName: string;\n lastName: string;\n email: string;\n password?: string;\n avatar: {\n src?: string;\n };\n external?: boolean;\n}\n\ninterface SubmitUserCallable {\n (data: SubmitUserCallableParams): Promise<void>;\n}\n\nexport function useUserForm() {\n const { goToRoute } = useRouter();\n const { route } = useRoute(Routes.Users.List);\n const toast = useToast();\n\n const wcp = useWcp();\n const teams = wcp.canUseTeams();\n\n const id = route.params.id;\n const newUser = route.params.new === true;\n\n const { data, loading: userLoading } = useQuery(READ_USER({ teams }), {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.adminUsers.user;\n if (error) {\n goToRoute(Routes.Users.List);\n toast.showWarningToast({\n title: \"Error loading user profile\",\n description: error.message,\n duration: Infinity\n });\n }\n }\n });\n\n const [create, { loading: createLoading }] = useMutation(CREATE_USER, {\n refetchQueries: [{ query: LIST_USERS }]\n });\n\n const [update, { loading: updateLoading }] = useMutation(UPDATE_USER({ teams }), {\n refetchQueries: [{ query: LIST_USERS }]\n });\n\n const loading = userLoading || createLoading || updateLoading;\n\n const onSubmit = useCallback<SubmitUserCallable>(\n async data => {\n const { id, ...rest } = data;\n const [operation, args] = !newUser\n ? [update, { variables: { id, data: omit(rest, [\"external\"]) } }]\n : [create, { variables: { data } }];\n\n const result = await operation(args);\n\n const { data: user, error } = result.data.adminUsers.user;\n\n if (error) {\n toast.showWarningToast({\n title: \"Error updating user profile\",\n description: error.message,\n duration: Infinity\n });\n return;\n }\n\n if (newUser) {\n goToRoute(Routes.Users.List, { id: user.id });\n }\n toast.showSuccessToast({\n title: \"User saved successfully.\"\n });\n },\n [id, newUser]\n );\n\n const user = userLoading ? {} : data ? data.adminUsers.user.data : {};\n\n const showEmptyView = !newUser && !userLoading && isEmpty(user);\n\n return {\n id,\n loading,\n user: {\n ...user,\n group: user.group ? user.group.id : undefined,\n team: user.team ? user.team.id : undefined,\n roles: user.roles ? user.roles.map((r: any) => r.id) : [],\n teams: user.teams ? user.teams.map((t: any) => t.id) : []\n },\n onSubmit,\n isNewUser: newUser,\n fullName: `${user.firstName || \"\"} ${user.lastName || \"\"}`.trim(),\n showEmptyView,\n createUser() {\n goToRoute(Routes.Users.List, { new: true });\n },\n cancelEditing() {\n goToRoute(Routes.Users.List);\n }\n };\n}\n"],"names":["useUserForm","goToRoute","useRouter","route","useRoute","Routes","toast","useToast","wcp","useWcp","teams","id","newUser","data","userLoading","useQuery","READ_USER","error","Infinity","create","createLoading","useMutation","CREATE_USER","LIST_USERS","update","updateLoading","UPDATE_USER","loading","onSubmit","useCallback","rest","operation","args","omit","result","user","showEmptyView","isEmpty","undefined","r","t"],"mappings":"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"}
|
|
@@ -14,20 +14,12 @@ class CognitoIdentityProviderImpl {
|
|
|
14
14
|
return issuer === this.issuer;
|
|
15
15
|
}
|
|
16
16
|
async getIdentity(token) {
|
|
17
|
-
const
|
|
18
|
-
if (customIdentity) return {
|
|
19
|
-
...customIdentity,
|
|
20
|
-
type: "admin",
|
|
21
|
-
profile: {
|
|
22
|
-
...customIdentity,
|
|
23
|
-
external: false
|
|
24
|
-
}
|
|
25
|
-
};
|
|
17
|
+
const isFederated = Array.isArray(token.identities) && token.identities.length > 0;
|
|
26
18
|
const customId = token["custom:id"];
|
|
27
19
|
const givenName = token["given_name"];
|
|
28
20
|
const familyName = token["family_name"];
|
|
29
21
|
const email = token["email"];
|
|
30
|
-
|
|
22
|
+
const defaultIdentity = {
|
|
31
23
|
id: customId || token.sub || "",
|
|
32
24
|
displayName: `${givenName || ""} ${familyName || ""}`.trim() || email || "Unknown User",
|
|
33
25
|
type: "admin",
|
|
@@ -35,7 +27,19 @@ class CognitoIdentityProviderImpl {
|
|
|
35
27
|
email: email || "",
|
|
36
28
|
firstName: givenName || "",
|
|
37
29
|
lastName: familyName || "",
|
|
38
|
-
external:
|
|
30
|
+
external: isFederated
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const customIdentity = this.config ? await this.config.getIdentity(token) : null;
|
|
34
|
+
if (!customIdentity) return defaultIdentity;
|
|
35
|
+
return {
|
|
36
|
+
...defaultIdentity,
|
|
37
|
+
...customIdentity,
|
|
38
|
+
type: "admin",
|
|
39
|
+
profile: {
|
|
40
|
+
...defaultIdentity.profile,
|
|
41
|
+
...customIdentity.profile,
|
|
42
|
+
external: isFederated
|
|
39
43
|
}
|
|
40
44
|
};
|
|
41
45
|
}
|