@payloadcms/ui 3.64.0-internal.fc1e451 → 3.64.0
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/elements/Autosave/index.js +2 -2
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/DeleteMany/index.d.ts.map +1 -1
- package/dist/elements/DeleteMany/index.js +1 -0
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +1 -0
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/PublishMany/DrawerContent.js +1 -0
- package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/RestoreMany/index.d.ts.map +1 -1
- package/dist/elements/RestoreMany/index.js +1 -0
- package/dist/elements/RestoreMany/index.js.map +1 -1
- package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
- package/dist/elements/UnpublishMany/DrawerContent.js +1 -0
- package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
- package/dist/elements/withMergedProps/index.d.ts +1 -1
- package/dist/elements/withMergedProps/index.js +1 -1
- package/dist/elements/withMergedProps/index.js.map +1 -1
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.js.map +1 -1
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +54 -25
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +7 -3
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/providers/Auth/index.d.ts +34 -0
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/Locale/index.d.ts.map +1 -1
- package/dist/providers/Locale/index.js +14 -19
- package/dist/providers/Locale/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +19 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/utilities/normalizeRelationshipValue.d.ts +29 -0
- package/dist/utilities/normalizeRelationshipValue.d.ts.map +1 -0
- package/dist/utilities/normalizeRelationshipValue.js +59 -0
- package/dist/utilities/normalizeRelationshipValue.js.map +1 -0
- package/dist/utilities/normalizeRelationshipValue.spec.js +373 -0
- package/dist/utilities/normalizeRelationshipValue.spec.js.map +1 -0
- package/dist/views/Edit/Auth/index.d.ts.map +1 -1
- package/dist/views/Edit/Auth/index.js +2 -7
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import { describe, expect, it } from '@jest/globals';
|
|
2
|
+
import { normalizeRelationshipValue } from './normalizeRelationshipValue.js';
|
|
3
|
+
describe('normalizeRelationshipValue', () => {
|
|
4
|
+
describe('Monomorphic relationships (string relationTo)', () => {
|
|
5
|
+
const relationTo = 'users';
|
|
6
|
+
it('should return simple string ID as-is', () => {
|
|
7
|
+
const result = normalizeRelationshipValue('user123', relationTo);
|
|
8
|
+
expect(result).toBe('user123');
|
|
9
|
+
});
|
|
10
|
+
it('should return simple number ID as-is', () => {
|
|
11
|
+
const result = normalizeRelationshipValue(123, relationTo);
|
|
12
|
+
expect(result).toBe(123);
|
|
13
|
+
});
|
|
14
|
+
it('should extract ID from object with relationTo and value', () => {
|
|
15
|
+
const value = {
|
|
16
|
+
relationTo: 'users',
|
|
17
|
+
value: 'user456'
|
|
18
|
+
};
|
|
19
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
20
|
+
expect(result).toBe('user456');
|
|
21
|
+
});
|
|
22
|
+
it('should extract ID from nested value structure', () => {
|
|
23
|
+
const value = {
|
|
24
|
+
relationTo: 'users',
|
|
25
|
+
value: {
|
|
26
|
+
value: 'user789'
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
30
|
+
expect(result).toBe('user789');
|
|
31
|
+
});
|
|
32
|
+
it('should extract ID from deeply nested value structure', () => {
|
|
33
|
+
const value = {
|
|
34
|
+
relationTo: 'users',
|
|
35
|
+
value: {
|
|
36
|
+
value: {
|
|
37
|
+
value: 'user999'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
42
|
+
expect(result).toBe('user999');
|
|
43
|
+
});
|
|
44
|
+
it('should extract ID from populated document', () => {
|
|
45
|
+
const value = {
|
|
46
|
+
relationTo: 'users',
|
|
47
|
+
value: {
|
|
48
|
+
id: 'user111',
|
|
49
|
+
name: 'John Doe',
|
|
50
|
+
email: 'john@example.com'
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
54
|
+
expect(result).toBe('user111');
|
|
55
|
+
});
|
|
56
|
+
it('should extract ID from populated document without relationTo wrapper', () => {
|
|
57
|
+
const value = {
|
|
58
|
+
id: 'user222',
|
|
59
|
+
name: 'Jane Doe',
|
|
60
|
+
email: 'jane@example.com'
|
|
61
|
+
};
|
|
62
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
63
|
+
expect(result).toBe('user222');
|
|
64
|
+
});
|
|
65
|
+
it('should handle null values', () => {
|
|
66
|
+
const result = normalizeRelationshipValue(null, relationTo);
|
|
67
|
+
expect(result).toBeNull();
|
|
68
|
+
});
|
|
69
|
+
it('should handle undefined values', () => {
|
|
70
|
+
const result = normalizeRelationshipValue(undefined, relationTo);
|
|
71
|
+
expect(result).toBeUndefined();
|
|
72
|
+
});
|
|
73
|
+
it('should handle empty object', () => {
|
|
74
|
+
const result = normalizeRelationshipValue({}, relationTo);
|
|
75
|
+
expect(result).toEqual({});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('Polymorphic relationships (array relationTo)', () => {
|
|
79
|
+
const relationTo = ['users', 'posts', 'pages'];
|
|
80
|
+
it('should return simple string ID as-is', () => {
|
|
81
|
+
const result = normalizeRelationshipValue('user123', relationTo);
|
|
82
|
+
expect(result).toBe('user123');
|
|
83
|
+
});
|
|
84
|
+
it('should return simple number ID as-is', () => {
|
|
85
|
+
const result = normalizeRelationshipValue(456, relationTo);
|
|
86
|
+
expect(result).toBe(456);
|
|
87
|
+
});
|
|
88
|
+
it('should preserve relationTo structure with string value', () => {
|
|
89
|
+
const value = {
|
|
90
|
+
relationTo: 'users',
|
|
91
|
+
value: 'user789'
|
|
92
|
+
};
|
|
93
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
94
|
+
expect(result).toEqual({
|
|
95
|
+
relationTo: 'users',
|
|
96
|
+
value: 'user789'
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
it('should preserve relationTo structure with number value', () => {
|
|
100
|
+
const value = {
|
|
101
|
+
relationTo: 'posts',
|
|
102
|
+
value: 123
|
|
103
|
+
};
|
|
104
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
105
|
+
expect(result).toEqual({
|
|
106
|
+
relationTo: 'posts',
|
|
107
|
+
value: 123
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
it('should extract ID from nested value structure', () => {
|
|
111
|
+
const value = {
|
|
112
|
+
relationTo: 'posts',
|
|
113
|
+
value: {
|
|
114
|
+
value: 'post456'
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
118
|
+
expect(result).toEqual({
|
|
119
|
+
relationTo: 'posts',
|
|
120
|
+
value: 'post456'
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
it('should extract ID from deeply nested value structure', () => {
|
|
124
|
+
const value = {
|
|
125
|
+
relationTo: 'pages',
|
|
126
|
+
value: {
|
|
127
|
+
value: {
|
|
128
|
+
value: 'page789'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
133
|
+
expect(result).toEqual({
|
|
134
|
+
relationTo: 'pages',
|
|
135
|
+
value: 'page789'
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
it('should extract ID from populated document', () => {
|
|
139
|
+
const value = {
|
|
140
|
+
relationTo: 'users',
|
|
141
|
+
value: {
|
|
142
|
+
id: 'user999',
|
|
143
|
+
name: 'John Smith',
|
|
144
|
+
email: 'john.smith@example.com'
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
148
|
+
expect(result).toEqual({
|
|
149
|
+
relationTo: 'users',
|
|
150
|
+
value: 'user999'
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
it('should extract ID from complex populated document', () => {
|
|
154
|
+
const value = {
|
|
155
|
+
relationTo: 'posts',
|
|
156
|
+
value: {
|
|
157
|
+
id: 'post123',
|
|
158
|
+
title: 'My Post',
|
|
159
|
+
author: {
|
|
160
|
+
id: 'author456',
|
|
161
|
+
name: 'Author Name'
|
|
162
|
+
},
|
|
163
|
+
createdAt: '2023-01-01T00:00:00.000Z'
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
167
|
+
expect(result).toEqual({
|
|
168
|
+
relationTo: 'posts',
|
|
169
|
+
value: 'post123'
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
it('should handle different relationTo values', () => {
|
|
173
|
+
const values = [{
|
|
174
|
+
relationTo: 'users',
|
|
175
|
+
value: 'user1'
|
|
176
|
+
}, {
|
|
177
|
+
relationTo: 'posts',
|
|
178
|
+
value: 'post2'
|
|
179
|
+
}, {
|
|
180
|
+
relationTo: 'pages',
|
|
181
|
+
value: 'page3'
|
|
182
|
+
}];
|
|
183
|
+
const results = values.map(v => normalizeRelationshipValue(v, relationTo));
|
|
184
|
+
expect(results).toEqual([{
|
|
185
|
+
relationTo: 'users',
|
|
186
|
+
value: 'user1'
|
|
187
|
+
}, {
|
|
188
|
+
relationTo: 'posts',
|
|
189
|
+
value: 'post2'
|
|
190
|
+
}, {
|
|
191
|
+
relationTo: 'pages',
|
|
192
|
+
value: 'page3'
|
|
193
|
+
}]);
|
|
194
|
+
});
|
|
195
|
+
it('should handle null values', () => {
|
|
196
|
+
const result = normalizeRelationshipValue(null, relationTo);
|
|
197
|
+
expect(result).toBeNull();
|
|
198
|
+
});
|
|
199
|
+
it('should handle undefined values', () => {
|
|
200
|
+
const result = normalizeRelationshipValue(undefined, relationTo);
|
|
201
|
+
expect(result).toBeUndefined();
|
|
202
|
+
});
|
|
203
|
+
it('should extract ID from populated document without relationTo wrapper', () => {
|
|
204
|
+
const value = {
|
|
205
|
+
id: 'doc123',
|
|
206
|
+
title: 'Document Title'
|
|
207
|
+
};
|
|
208
|
+
const result = normalizeRelationshipValue(value, relationTo);
|
|
209
|
+
expect(result).toBe('doc123');
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
describe('Edge cases', () => {
|
|
213
|
+
it('should handle object with only value property (no relationTo)', () => {
|
|
214
|
+
const value = {
|
|
215
|
+
value: 'someValue'
|
|
216
|
+
};
|
|
217
|
+
const result = normalizeRelationshipValue(value, 'users');
|
|
218
|
+
// Since there's no 'id' field and no relationTo, it should return the value as-is
|
|
219
|
+
expect(result).toEqual({
|
|
220
|
+
value: 'someValue'
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
it('should handle object with relationTo but no value', () => {
|
|
224
|
+
const value = {
|
|
225
|
+
relationTo: 'users'
|
|
226
|
+
};
|
|
227
|
+
const result = normalizeRelationshipValue(value, ['users', 'posts']);
|
|
228
|
+
expect(result).toEqual({
|
|
229
|
+
relationTo: 'users'
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
it('should handle empty array relationTo', () => {
|
|
233
|
+
const result = normalizeRelationshipValue('user123', []);
|
|
234
|
+
expect(result).toBe('user123');
|
|
235
|
+
});
|
|
236
|
+
it('should handle single-item array relationTo as polymorphic', () => {
|
|
237
|
+
const value = {
|
|
238
|
+
relationTo: 'users',
|
|
239
|
+
value: 'user123'
|
|
240
|
+
};
|
|
241
|
+
const result = normalizeRelationshipValue(value, ['users']);
|
|
242
|
+
expect(result).toEqual({
|
|
243
|
+
relationTo: 'users',
|
|
244
|
+
value: 'user123'
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
it('should handle numeric IDs in populated documents', () => {
|
|
248
|
+
const value = {
|
|
249
|
+
relationTo: 'users',
|
|
250
|
+
value: {
|
|
251
|
+
id: 12345,
|
|
252
|
+
name: 'User with numeric ID'
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
const result = normalizeRelationshipValue(value, ['users', 'posts']);
|
|
256
|
+
expect(result).toEqual({
|
|
257
|
+
relationTo: 'users',
|
|
258
|
+
value: 12345
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
it('should handle nested null values', () => {
|
|
262
|
+
const value = {
|
|
263
|
+
relationTo: 'users',
|
|
264
|
+
value: null
|
|
265
|
+
};
|
|
266
|
+
const result = normalizeRelationshipValue(value, 'users');
|
|
267
|
+
expect(result).toBeNull();
|
|
268
|
+
});
|
|
269
|
+
it('should handle zero as a valid ID', () => {
|
|
270
|
+
const result = normalizeRelationshipValue(0, 'users');
|
|
271
|
+
expect(result).toBe(0);
|
|
272
|
+
});
|
|
273
|
+
it('should handle empty string as a valid ID', () => {
|
|
274
|
+
const result = normalizeRelationshipValue('', 'users');
|
|
275
|
+
expect(result).toBe('');
|
|
276
|
+
});
|
|
277
|
+
it('should handle false as a value', () => {
|
|
278
|
+
const result = normalizeRelationshipValue(false, 'users');
|
|
279
|
+
expect(result).toBe(false);
|
|
280
|
+
});
|
|
281
|
+
it('should handle array values (return as-is)', () => {
|
|
282
|
+
const result = normalizeRelationshipValue(['user1', 'user2'], 'users');
|
|
283
|
+
expect(result).toEqual(['user1', 'user2']);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
describe('Real-world scenarios', () => {
|
|
287
|
+
it('should normalize upload field value for monomorphic upload', () => {
|
|
288
|
+
// Upload field with populated media document
|
|
289
|
+
const value = {
|
|
290
|
+
id: 'media123',
|
|
291
|
+
filename: 'image.jpg',
|
|
292
|
+
mimeType: 'image/jpeg',
|
|
293
|
+
filesize: 12345,
|
|
294
|
+
url: '/media/image.jpg'
|
|
295
|
+
};
|
|
296
|
+
const result = normalizeRelationshipValue(value, 'media');
|
|
297
|
+
expect(result).toBe('media123');
|
|
298
|
+
});
|
|
299
|
+
it('should normalize upload field value for polymorphic upload', () => {
|
|
300
|
+
// Upload field with relationTo structure
|
|
301
|
+
const value = {
|
|
302
|
+
relationTo: 'images',
|
|
303
|
+
value: {
|
|
304
|
+
id: 'image456',
|
|
305
|
+
filename: 'photo.png',
|
|
306
|
+
url: '/media/photo.png'
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
const result = normalizeRelationshipValue(value, ['images', 'videos']);
|
|
310
|
+
expect(result).toEqual({
|
|
311
|
+
relationTo: 'images',
|
|
312
|
+
value: 'image456'
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
it('should normalize form submission data', () => {
|
|
316
|
+
// Data coming from form with populated relationship
|
|
317
|
+
const value = {
|
|
318
|
+
relationTo: 'posts',
|
|
319
|
+
value: {
|
|
320
|
+
id: 'post789',
|
|
321
|
+
title: 'Blog Post Title',
|
|
322
|
+
author: {
|
|
323
|
+
id: 'author123',
|
|
324
|
+
name: 'Author'
|
|
325
|
+
},
|
|
326
|
+
publishedDate: '2023-12-01'
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
const result = normalizeRelationshipValue(value, ['posts', 'pages']);
|
|
330
|
+
expect(result).toEqual({
|
|
331
|
+
relationTo: 'posts',
|
|
332
|
+
value: 'post789'
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
it('should normalize API response with nested relationships', () => {
|
|
336
|
+
// Complex nested structure from API
|
|
337
|
+
const value = {
|
|
338
|
+
relationTo: 'categories',
|
|
339
|
+
value: {
|
|
340
|
+
value: {
|
|
341
|
+
id: 'cat123',
|
|
342
|
+
name: 'Category Name'
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
const result = normalizeRelationshipValue(value, ['categories', 'tags']);
|
|
347
|
+
expect(result).toEqual({
|
|
348
|
+
relationTo: 'categories',
|
|
349
|
+
value: 'cat123'
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
it('should handle table cell data normalization', () => {
|
|
353
|
+
// Cell data from table that might be just an ID
|
|
354
|
+
const simpleValue = 'user123';
|
|
355
|
+
const result = normalizeRelationshipValue(simpleValue, 'users');
|
|
356
|
+
expect(result).toBe('user123');
|
|
357
|
+
// Cell data with full structure
|
|
358
|
+
const complexValue = {
|
|
359
|
+
relationTo: 'users',
|
|
360
|
+
value: {
|
|
361
|
+
id: 'user456',
|
|
362
|
+
name: 'John Doe'
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
const result2 = normalizeRelationshipValue(complexValue, ['users', 'admins']);
|
|
366
|
+
expect(result2).toEqual({
|
|
367
|
+
relationTo: 'users',
|
|
368
|
+
value: 'user456'
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
});
|
|
372
|
+
});
|
|
373
|
+
//# sourceMappingURL=normalizeRelationshipValue.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeRelationshipValue.spec.js","names":["describe","expect","it","normalizeRelationshipValue","relationTo","result","toBe","value","id","name","email","toBeNull","undefined","toBeUndefined","toEqual","title","author","createdAt","values","results","map","v","filename","mimeType","filesize","url","publishedDate","simpleValue","complexValue","result2"],"sources":["../../src/utilities/normalizeRelationshipValue.spec.ts"],"sourcesContent":["import { describe, expect, it } from '@jest/globals'\n\nimport { normalizeRelationshipValue } from './normalizeRelationshipValue.js'\n\ndescribe('normalizeRelationshipValue', () => {\n describe('Monomorphic relationships (string relationTo)', () => {\n const relationTo = 'users'\n\n it('should return simple string ID as-is', () => {\n const result = normalizeRelationshipValue('user123', relationTo)\n expect(result).toBe('user123')\n })\n\n it('should return simple number ID as-is', () => {\n const result = normalizeRelationshipValue(123, relationTo)\n expect(result).toBe(123)\n })\n\n it('should extract ID from object with relationTo and value', () => {\n const value = { relationTo: 'users', value: 'user456' }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toBe('user456')\n })\n\n it('should extract ID from nested value structure', () => {\n const value = {\n relationTo: 'users',\n value: {\n value: 'user789',\n },\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toBe('user789')\n })\n\n it('should extract ID from deeply nested value structure', () => {\n const value = {\n relationTo: 'users',\n value: {\n value: {\n value: 'user999',\n },\n },\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toBe('user999')\n })\n\n it('should extract ID from populated document', () => {\n const value = {\n relationTo: 'users',\n value: {\n id: 'user111',\n name: 'John Doe',\n email: 'john@example.com',\n },\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toBe('user111')\n })\n\n it('should extract ID from populated document without relationTo wrapper', () => {\n const value = {\n id: 'user222',\n name: 'Jane Doe',\n email: 'jane@example.com',\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toBe('user222')\n })\n\n it('should handle null values', () => {\n const result = normalizeRelationshipValue(null, relationTo)\n expect(result).toBeNull()\n })\n\n it('should handle undefined values', () => {\n const result = normalizeRelationshipValue(undefined, relationTo)\n expect(result).toBeUndefined()\n })\n\n it('should handle empty object', () => {\n const result = normalizeRelationshipValue({}, relationTo)\n expect(result).toEqual({})\n })\n })\n\n describe('Polymorphic relationships (array relationTo)', () => {\n const relationTo = ['users', 'posts', 'pages']\n\n it('should return simple string ID as-is', () => {\n const result = normalizeRelationshipValue('user123', relationTo)\n expect(result).toBe('user123')\n })\n\n it('should return simple number ID as-is', () => {\n const result = normalizeRelationshipValue(456, relationTo)\n expect(result).toBe(456)\n })\n\n it('should preserve relationTo structure with string value', () => {\n const value = { relationTo: 'users', value: 'user789' }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toEqual({ relationTo: 'users', value: 'user789' })\n })\n\n it('should preserve relationTo structure with number value', () => {\n const value = { relationTo: 'posts', value: 123 }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toEqual({ relationTo: 'posts', value: 123 })\n })\n\n it('should extract ID from nested value structure', () => {\n const value = {\n relationTo: 'posts',\n value: {\n value: 'post456',\n },\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toEqual({ relationTo: 'posts', value: 'post456' })\n })\n\n it('should extract ID from deeply nested value structure', () => {\n const value = {\n relationTo: 'pages',\n value: {\n value: {\n value: 'page789',\n },\n },\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toEqual({ relationTo: 'pages', value: 'page789' })\n })\n\n it('should extract ID from populated document', () => {\n const value = {\n relationTo: 'users',\n value: {\n id: 'user999',\n name: 'John Smith',\n email: 'john.smith@example.com',\n },\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toEqual({ relationTo: 'users', value: 'user999' })\n })\n\n it('should extract ID from complex populated document', () => {\n const value = {\n relationTo: 'posts',\n value: {\n id: 'post123',\n title: 'My Post',\n author: {\n id: 'author456',\n name: 'Author Name',\n },\n createdAt: '2023-01-01T00:00:00.000Z',\n },\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toEqual({ relationTo: 'posts', value: 'post123' })\n })\n\n it('should handle different relationTo values', () => {\n const values = [\n { relationTo: 'users', value: 'user1' },\n { relationTo: 'posts', value: 'post2' },\n { relationTo: 'pages', value: 'page3' },\n ]\n\n const results = values.map((v) => normalizeRelationshipValue(v, relationTo))\n\n expect(results).toEqual([\n { relationTo: 'users', value: 'user1' },\n { relationTo: 'posts', value: 'post2' },\n { relationTo: 'pages', value: 'page3' },\n ])\n })\n\n it('should handle null values', () => {\n const result = normalizeRelationshipValue(null, relationTo)\n expect(result).toBeNull()\n })\n\n it('should handle undefined values', () => {\n const result = normalizeRelationshipValue(undefined, relationTo)\n expect(result).toBeUndefined()\n })\n\n it('should extract ID from populated document without relationTo wrapper', () => {\n const value = {\n id: 'doc123',\n title: 'Document Title',\n }\n const result = normalizeRelationshipValue(value, relationTo)\n expect(result).toBe('doc123')\n })\n })\n\n describe('Edge cases', () => {\n it('should handle object with only value property (no relationTo)', () => {\n const value = { value: 'someValue' }\n const result = normalizeRelationshipValue(value, 'users')\n // Since there's no 'id' field and no relationTo, it should return the value as-is\n expect(result).toEqual({ value: 'someValue' })\n })\n\n it('should handle object with relationTo but no value', () => {\n const value = { relationTo: 'users' }\n const result = normalizeRelationshipValue(value, ['users', 'posts'])\n expect(result).toEqual({ relationTo: 'users' })\n })\n\n it('should handle empty array relationTo', () => {\n const result = normalizeRelationshipValue('user123', [])\n expect(result).toBe('user123')\n })\n\n it('should handle single-item array relationTo as polymorphic', () => {\n const value = { relationTo: 'users', value: 'user123' }\n const result = normalizeRelationshipValue(value, ['users'])\n expect(result).toEqual({ relationTo: 'users', value: 'user123' })\n })\n\n it('should handle numeric IDs in populated documents', () => {\n const value = {\n relationTo: 'users',\n value: {\n id: 12345,\n name: 'User with numeric ID',\n },\n }\n const result = normalizeRelationshipValue(value, ['users', 'posts'])\n expect(result).toEqual({ relationTo: 'users', value: 12345 })\n })\n\n it('should handle nested null values', () => {\n const value = {\n relationTo: 'users',\n value: null,\n }\n const result = normalizeRelationshipValue(value, 'users')\n expect(result).toBeNull()\n })\n\n it('should handle zero as a valid ID', () => {\n const result = normalizeRelationshipValue(0, 'users')\n expect(result).toBe(0)\n })\n\n it('should handle empty string as a valid ID', () => {\n const result = normalizeRelationshipValue('', 'users')\n expect(result).toBe('')\n })\n\n it('should handle false as a value', () => {\n const result = normalizeRelationshipValue(false, 'users')\n expect(result).toBe(false)\n })\n\n it('should handle array values (return as-is)', () => {\n const result = normalizeRelationshipValue(['user1', 'user2'], 'users')\n expect(result).toEqual(['user1', 'user2'])\n })\n })\n\n describe('Real-world scenarios', () => {\n it('should normalize upload field value for monomorphic upload', () => {\n // Upload field with populated media document\n const value = {\n id: 'media123',\n filename: 'image.jpg',\n mimeType: 'image/jpeg',\n filesize: 12345,\n url: '/media/image.jpg',\n }\n const result = normalizeRelationshipValue(value, 'media')\n expect(result).toBe('media123')\n })\n\n it('should normalize upload field value for polymorphic upload', () => {\n // Upload field with relationTo structure\n const value = {\n relationTo: 'images',\n value: {\n id: 'image456',\n filename: 'photo.png',\n url: '/media/photo.png',\n },\n }\n const result = normalizeRelationshipValue(value, ['images', 'videos'])\n expect(result).toEqual({ relationTo: 'images', value: 'image456' })\n })\n\n it('should normalize form submission data', () => {\n // Data coming from form with populated relationship\n const value = {\n relationTo: 'posts',\n value: {\n id: 'post789',\n title: 'Blog Post Title',\n author: { id: 'author123', name: 'Author' },\n publishedDate: '2023-12-01',\n },\n }\n const result = normalizeRelationshipValue(value, ['posts', 'pages'])\n expect(result).toEqual({ relationTo: 'posts', value: 'post789' })\n })\n\n it('should normalize API response with nested relationships', () => {\n // Complex nested structure from API\n const value = {\n relationTo: 'categories',\n value: {\n value: {\n id: 'cat123',\n name: 'Category Name',\n },\n },\n }\n const result = normalizeRelationshipValue(value, ['categories', 'tags'])\n expect(result).toEqual({ relationTo: 'categories', value: 'cat123' })\n })\n\n it('should handle table cell data normalization', () => {\n // Cell data from table that might be just an ID\n const simpleValue = 'user123'\n const result = normalizeRelationshipValue(simpleValue, 'users')\n expect(result).toBe('user123')\n\n // Cell data with full structure\n const complexValue = {\n relationTo: 'users',\n value: {\n id: 'user456',\n name: 'John Doe',\n },\n }\n const result2 = normalizeRelationshipValue(complexValue, ['users', 'admins'])\n expect(result2).toEqual({ relationTo: 'users', value: 'user456' })\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Auth/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA8D,MAAM,OAAO,CAAA;AAGlF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Auth/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA8D,MAAM,OAAO,CAAA;AAGlF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAWvC,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAqRhC,CAAA"}
|
|
@@ -11,7 +11,6 @@ import { CheckboxField } from '../../../fields/Checkbox/index.js';
|
|
|
11
11
|
import { ConfirmPasswordField } from '../../../fields/ConfirmPassword/index.js';
|
|
12
12
|
import { PasswordField } from '../../../fields/Password/index.js';
|
|
13
13
|
import { useFormFields, useFormModified } from '../../../forms/Form/context.js';
|
|
14
|
-
import { useAuth } from '../../../providers/Auth/index.js';
|
|
15
14
|
import { useConfig } from '../../../providers/Config/index.js';
|
|
16
15
|
import { useDocumentInfo } from '../../../providers/DocumentInfo/index.js';
|
|
17
16
|
import { useTranslation } from '../../../providers/Translation/index.js';
|
|
@@ -34,9 +33,6 @@ export const Auth = props => {
|
|
|
34
33
|
username,
|
|
35
34
|
verify
|
|
36
35
|
} = props;
|
|
37
|
-
const {
|
|
38
|
-
permissions
|
|
39
|
-
} = useAuth();
|
|
40
36
|
const [changingPassword, setChangingPassword] = useState(requirePassword);
|
|
41
37
|
const enableAPIKey = useFormFields(_temp);
|
|
42
38
|
const dispatchFields = useFormFields(_temp2);
|
|
@@ -141,9 +137,8 @@ export const Auth = props => {
|
|
|
141
137
|
const canReadApiKey = apiKeyPermissions === true || apiKeyPermissions?.read;
|
|
142
138
|
let t2;
|
|
143
139
|
bb0: {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
t2 = Boolean("unlock" in collection ? collection.unlock : undefined);
|
|
140
|
+
if (docPermissions) {
|
|
141
|
+
t2 = Boolean("unlock" in docPermissions ? docPermissions.unlock : undefined);
|
|
147
142
|
break bb0;
|
|
148
143
|
}
|
|
149
144
|
t2 = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","getFieldPermissions","React","Fragment","useCallback","useEffect","useMemo","useState","toast","Button","EmailAndUsernameFields","CheckboxField","ConfirmPasswordField","PasswordField","useFormFields","useFormModified","useAuth","useConfig","useDocumentInfo","useTranslation","APIKey","baseClass","Auth","props","$","className","collectionSlug","disableLocalStrategy","email","loginWithUsername","operation","readOnly","requirePassword","setValidateBeforeSubmit","useAPIKey","username","verify","permissions","changingPassword","setChangingPassword","enableAPIKey","_temp","dispatchFields","_temp2","modified","i18n","t","docPermissions","isEditing","isInitializing","isTrashed","config","t0","routes","t1","serverURL","api","showPasswordFields","showUnlock","hasPasswordFieldOverride","fields","hasLoginFieldOverride","passwordPermissions","field","name","type","parentName","create","update","hasEmailAndUsernameFields","requireEmail","allowEmailLogin","t2","emailPermission","t3","usernamePermission","enableFields","disabled","apiKeyPermissions","apiKeyReadOnly","enableAPIKeyReadOnly","canReadApiKey","read","bb0","collection","collections","Boolean","unlock","undefined","hasPermissionToUnlock","changingPassword_0","errorMessage","path","valid","handleChangePassword","t4","url","response","fetch","body","JSON","stringify","credentials","headers","language","method","status","success","error","t5","t6","showAuthBlock","showAPIKeyBlock","showVerifyBlock","t7","filter","_jsxs","join","children","_jsx","autoComplete","label","required","indexPath","parentPath","parentSchemaPath","schemaPath","buttonStyle","id","onClick","size","admin","enabled","value","reducer"],"sources":["../../../../src/views/Edit/Auth/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedFieldPermissions } from 'payload'\n\nimport { getFieldPermissions } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props } from './types.js'\n\nimport { Button } from '../../../elements/Button/index.js'\nimport { EmailAndUsernameFields } from '../../../elements/EmailAndUsername/index.js'\nimport { CheckboxField } from '../../../fields/Checkbox/index.js'\nimport { ConfirmPasswordField } from '../../../fields/ConfirmPassword/index.js'\nimport { PasswordField } from '../../../fields/Password/index.js'\nimport { useFormFields, useFormModified } from '../../../forms/Form/context.js'\nimport { useAuth } from '../../../providers/Auth/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport './index.scss'\nimport { APIKey } from './APIKey.js'\n\nconst baseClass = 'auth-fields'\n\nexport const Auth: React.FC<Props> = (props) => {\n const {\n className,\n collectionSlug,\n disableLocalStrategy,\n email,\n loginWithUsername,\n operation,\n readOnly,\n requirePassword,\n setValidateBeforeSubmit,\n useAPIKey,\n username,\n verify,\n } = props\n\n const { permissions } = useAuth()\n const [changingPassword, setChangingPassword] = useState(requirePassword)\n const enableAPIKey = useFormFields(([fields]) => (fields && fields?.enableAPIKey) || null)\n const dispatchFields = useFormFields((reducer) => reducer[1])\n const modified = useFormModified()\n const { i18n, t } = useTranslation()\n const { docPermissions, isEditing, isInitializing, isTrashed } = useDocumentInfo()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n let showPasswordFields: SanitizedFieldPermissions = true\n let showUnlock = true\n const hasPasswordFieldOverride =\n typeof docPermissions.fields === 'object' && 'password' in docPermissions.fields\n const hasLoginFieldOverride =\n typeof docPermissions.fields === 'object' &&\n ('username' in docPermissions.fields || 'email' in docPermissions.fields)\n\n if (hasPasswordFieldOverride) {\n const { permissions: passwordPermissions } = getFieldPermissions({\n field: { name: 'password', type: 'text' },\n operation,\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n if (operation === 'create') {\n showPasswordFields =\n passwordPermissions === true ||\n ((typeof passwordPermissions === 'object' &&\n passwordPermissions.create) as SanitizedFieldPermissions)\n } else {\n showPasswordFields =\n passwordPermissions === true ||\n ((typeof passwordPermissions === 'object' &&\n passwordPermissions.update) as SanitizedFieldPermissions)\n }\n }\n\n if (hasLoginFieldOverride) {\n const hasEmailAndUsernameFields =\n loginWithUsername && (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin)\n\n const { operation: emailPermission } = getFieldPermissions({\n field: { name: 'email', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n const { operation: usernamePermission } = getFieldPermissions({\n field: { name: 'username', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n if (hasEmailAndUsernameFields) {\n showUnlock = usernamePermission || emailPermission\n } else if (loginWithUsername && !hasEmailAndUsernameFields) {\n showUnlock = usernamePermission\n } else {\n showUnlock = emailPermission\n }\n }\n\n const enableFields =\n (!disableLocalStrategy ||\n (typeof disableLocalStrategy === 'object' && disableLocalStrategy.enableFields === true)) &&\n (showUnlock || showPasswordFields)\n\n const disabled = readOnly || isInitializing || isTrashed\n\n const apiKeyPermissions =\n docPermissions?.fields === true ? true : docPermissions?.fields?.enableAPIKey\n\n const apiKeyReadOnly =\n readOnly ||\n apiKeyPermissions === true ||\n (apiKeyPermissions && typeof apiKeyPermissions === 'object' && !apiKeyPermissions?.update)\n\n const enableAPIKeyReadOnly =\n readOnly || (apiKeyPermissions !== true && !apiKeyPermissions?.update)\n\n const canReadApiKey = apiKeyPermissions === true || apiKeyPermissions?.read\n\n const hasPermissionToUnlock: boolean = useMemo(() => {\n const collection = permissions?.collections?.[collectionSlug]\n\n if (collection) {\n return Boolean('unlock' in collection ? collection.unlock : undefined)\n }\n\n return false\n }, [permissions, collectionSlug])\n\n const handleChangePassword = useCallback(\n (changingPassword: boolean) => {\n if (changingPassword) {\n setValidateBeforeSubmit(true)\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'password',\n valid: false,\n })\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'confirm-password',\n valid: false,\n })\n } else {\n setValidateBeforeSubmit(false)\n dispatchFields({ type: 'REMOVE', path: 'password' })\n dispatchFields({ type: 'REMOVE', path: 'confirm-password' })\n }\n\n setChangingPassword(changingPassword)\n },\n [dispatchFields, t, setValidateBeforeSubmit],\n )\n\n const unlock = useCallback(async () => {\n const url = `${serverURL}${api}/${collectionSlug}/unlock`\n const response = await fetch(url, {\n body:\n loginWithUsername && username ? JSON.stringify({ username }) : JSON.stringify({ email }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n if (response.status === 200) {\n toast.success(t('authentication:successfullyUnlocked'))\n } else {\n toast.error(t('authentication:failedToUnlock'))\n }\n }, [i18n, serverURL, api, collectionSlug, email, username, t, loginWithUsername])\n\n useEffect(() => {\n if (!modified) {\n setChangingPassword(false)\n }\n }, [modified])\n\n const showAuthBlock = enableFields\n const showAPIKeyBlock = useAPIKey && canReadApiKey\n const showVerifyBlock = verify && isEditing\n\n if (!(showAuthBlock || showAPIKeyBlock || showVerifyBlock)) {\n return null\n }\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n {enableFields && (\n <React.Fragment>\n <EmailAndUsernameFields\n loginWithUsername={loginWithUsername}\n operation={operation}\n permissions={docPermissions?.fields}\n readOnly={readOnly || isTrashed}\n t={t}\n />\n {(changingPassword || requirePassword) && (!disableLocalStrategy || !enableFields) && (\n <div className={`${baseClass}__changing-password`}>\n <PasswordField\n autoComplete=\"new-password\"\n field={{\n name: 'password',\n label: t('authentication:newPassword'),\n required: true,\n }}\n indexPath=\"\"\n parentPath=\"\"\n parentSchemaPath=\"\"\n path=\"password\"\n schemaPath=\"password\"\n />\n <ConfirmPasswordField disabled={readOnly || isTrashed} />\n </div>\n )}\n <div className={`${baseClass}__controls`}>\n {changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"cancel-change-password\"\n onClick={() => handleChangePassword(false)}\n size=\"medium\"\n >\n {t('general:cancel')}\n </Button>\n )}\n {!changingPassword &&\n !requirePassword &&\n !disableLocalStrategy &&\n showPasswordFields && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"change-password\"\n onClick={() => handleChangePassword(true)}\n size=\"medium\"\n >\n {t('authentication:changePassword')}\n </Button>\n )}\n {!changingPassword && operation === 'update' && hasPermissionToUnlock && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled || !showUnlock}\n id=\"force-unlock\"\n onClick={() => void unlock()}\n size=\"medium\"\n >\n {t('authentication:forceUnlock')}\n </Button>\n )}\n </div>\n </React.Fragment>\n )}\n {useAPIKey && (\n <div className={`${baseClass}__api-key`}>\n {canReadApiKey && (\n <Fragment>\n <CheckboxField\n field={{\n name: 'enableAPIKey',\n admin: { disabled, readOnly: enableAPIKeyReadOnly },\n label: t('authentication:enableAPIKey'),\n }}\n path=\"enableAPIKey\"\n schemaPath={`${collectionSlug}.enableAPIKey`}\n />\n <APIKey enabled={!!enableAPIKey?.value} readOnly={apiKeyReadOnly} />\n </Fragment>\n )}\n </div>\n )}\n {verify && isEditing && (\n <CheckboxField\n field={{\n name: '_verified',\n admin: { disabled, readOnly },\n label: t('authentication:verified'),\n }}\n path=\"_verified\"\n schemaPath={`${collectionSlug}._verified`}\n />\n )}\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,mBAAmB,QAAQ;AACpC,OAAOC,KAAA,IAASC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AAC3E,SAASC,KAAK,QAAQ;AAItB,SAASC,MAAM,QAAQ;AACvB,SAASC,sBAAsB,QAAQ;AACvC,SAASC,aAAa,QAAQ;AAC9B,SAASC,oBAAoB,QAAQ;AACrC,SAASC,aAAa,QAAQ;AAC9B,SAASC,aAAa,EAAEC,eAAe,QAAQ;AAC/C,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAC/B,OAAO;AACP,SAASC,MAAM,QAAQ;AAEvB,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,IAAA,GAAwBC,KAAA;EAAA,MAAAC,CAAA,GAAAxB,EAAA;EACnC;IAAAyB,SAAA;IAAAC,cAAA;IAAAC,oBAAA;IAAAC,KAAA;IAAAC,iBAAA;IAAAC,SAAA;IAAAC,QAAA;IAAAC,eAAA;IAAAC,uBAAA;IAAAC,SAAA;IAAAC,QAAA;IAAAC;EAAA,IAaIb,KAAA;EAEJ;IAAAc;EAAA,IAAwBrB,OAAA;EACxB,OAAAsB,gBAAA,EAAAC,mBAAA,IAAgDhC,QAAA,CAASyB,eAAA;EACzD,MAAAQ,YAAA,GAAqB1B,aAAA,CAAA2B,KAAgE;EACrF,MAAAC,cAAA,GAAuB5B,aAAA,CAAA6B,MAAqC;EAC5D,MAAAC,QAAA,GAAiB7B,eAAA;EACjB;IAAA8B,IAAA;IAAAC;EAAA,IAAoB3B,cAAA;EACpB;IAAA4B,cAAA;IAAAC,SAAA;IAAAC,cAAA;IAAAC;EAAA,IAAiEhC,eAAA;EAEjE;IAAAiC,MAAA,EAAAC;EAAA,IAKInC,SAAA;EAJM;IAAAoC,MAAA,EAAAC,EAAA;IAAAC;EAAA,IAAAH,EAGP;EAFS;IAAAI;EAAA,IAAAF,EAAO;EAKnB,IAAAG,kBAAA;EACA,IAAAC,UAAA;EACA,MAAAC,wBAAA,GACE,OAAOZ,cAAA,CAAAa,MAAA,KAA0B,YAAY,cAAcb,cAAA,CAAAa,MAAqB;EAClF,MAAAC,qBAAA,GACE,OAAOd,cAAA,CAAAa,MAAA,KAA0B,aAChC,cAAcb,cAAA,CAAAa,MAAqB,IAAI,WAAWb,cAAA,CAAAa,MAAqB,CAAD;EAAA,IAErED,wBAAA;IACF;MAAAtB,WAAA,EAAAyB;IAAA,IAA6C7D,mBAAA;MAAA8D,KAAA;QAAAC,IAAA,EAC5B;QAAAC,IAAA,EAAkB;MAAA;MAAAnC,SAAA;MAAAoC,UAAA,EAErB;MAAA7B,WAAA,EACCU,cAAA,EAAAa;IAAA,CACf;IAAA,IAEI9B,SAAA,KAAc;MAChB2B,kBAAA,CAAAA,CAAA,CACEK,mBAAA,SAAwB,IACtB,OAAOA,mBAAA,KAAwB,YAC/BA,mBAAA,CAAAK,MAA0B;IAH9B;MAKAV,kBAAA,CAAAA,CAAA,CACEK,mBAAA,SAAwB,IACtB,OAAOA,mBAAA,KAAwB,YAC/BA,mBAAA,CAAAM,MAA0B;IAH9B;EAAA;EAAA,IAOAP,qBAAA;IACF,MAAAQ,yBAAA,GACExC,iBAAA,KAAsBA,iBAAA,CAAAyC,YAAA,IAAkCzC,iBAAA,CAAA0C,eAAiC,CAAD;IAAA,IAAAC,EAAA;IAAA,IAAAhD,CAAA,QAAAuB,cAAA,CAAAa,MAAA;MAEnDY,EAAA,GAAAvE,mBAAA;QAAA8D,KAAA;UAAAC,IAAA,EACtB;UAAAC,IAAA,EAAe;QAAA;QAAAnC,SAAA,EACnB;QAAAoC,UAAA,EACC;QAAA7B,WAAA,EACCU,cAAA,EAAAa;MAAA,CACf;MAAApC,CAAA,MAAAuB,cAAA,CAAAa,MAAA;MAAApC,CAAA,MAAAgD,EAAA;IAAA;MAAAA,EAAA,GAAAhD,CAAA;IAAA;IALA;MAAAM,SAAA,EAAA2C;IAAA,IAAuCD,EAKvC;IAAA,IAAAE,EAAA;IAAA,IAAAlD,CAAA,QAAAuB,cAAA,CAAAa,MAAA;MAE0Cc,EAAA,GAAAzE,mBAAA;QAAA8D,KAAA;UAAAC,IAAA,EACzB;UAAAC,IAAA,EAAkB;QAAA;QAAAnC,SAAA,EACtB;QAAAoC,UAAA,EACC;QAAA7B,WAAA,EACCU,cAAA,EAAAa;MAAA,CACf;MAAApC,CAAA,MAAAuB,cAAA,CAAAa,MAAA;MAAApC,CAAA,MAAAkD,EAAA;IAAA;MAAAA,EAAA,GAAAlD,CAAA;IAAA;IALA;MAAAM,SAAA,EAAA6C;IAAA,IAA0CD,EAK1C;IAAA,IAEIL,yBAAA;MACFX,UAAA,CAAAA,CAAA,CAAaiB,kBAAA,IAAsBF,eAAA;IAAnC;MAAA,IACS5C,iBAAA,KAAsBwC,yBAAA;QAC/BX,UAAA,CAAAA,CAAA,CAAaiB,kBAAA;MAAb;QAEAjB,UAAA,CAAAA,CAAA,CAAae,eAAA;MAAb;IAAA;EAAA;EAIJ,MAAAG,YAAA,GACE,CAAC,CAACjD,oBAAA,IACC,OAAOA,oBAAA,KAAyB,YAAYA,oBAAA,CAAAiD,YAAA,SAA0C,MACxFlB,UAAA,IAAcD,kBAAiB;EAElC,MAAAoB,QAAA,GAAiB9C,QAAA,IAAYkB,cAAA,IAAkBC,SAAA;EAE/C,MAAA4B,iBAAA,GACE/B,cAAA,EAAAa,MAAA,SAA2B,UAAcb,cAAA,EAAAa,MAAA,EAAApB,YAAwB;EAEnE,MAAAuC,cAAA,GACEhD,QAAA,IACA+C,iBAAA,SAAsB,IACrBA,iBAAA,IAAqB,OAAOA,iBAAA,KAAsB,aAAaA,iBAAA,EAAAV,MAAmB;EAErF,MAAAY,oBAAA,GACEjD,QAAA,IAAa+C,iBAAA,SAAsB,KAASA,iBAAA,EAAAV,MAAmB;EAEjE,MAAAa,aAAA,GAAsBH,iBAAA,SAAsB,IAAQA,iBAAA,EAAAI,IAAmB;EAAA,IAAAV,EAAA;EAAAW,GAAA;IAGrE,MAAAC,UAAA,GAAmB/C,WAAA,EAAAgD,WAAA,GAA2B3D,cAAA;IAAe,IAEzD0D,UAAA;MACFZ,EAAA,GAAOc,OAAA,CAAQ,YAAYF,UAAA,GAAaA,UAAA,CAAAG,MAAA,GAAAC,SAAoB;MAAA,MAAAL,GAAA;IAAA;IAG9DX,EAAA;EAAO;EAPT,MAAAiB,qBAAA,GAAuCjB,EAQP;EAAA,IAAAE,EAAA;EAAA,IAAAlD,CAAA,QAAAkB,cAAA,IAAAlB,CAAA,QAAAS,uBAAA,IAAAT,CAAA,QAAAsB,CAAA;IAG9B4B,EAAA,GAAAgB,kBAAA;MAAA,IACMpD,kBAAA;QACFL,uBAAA,KAAwB;QAExBS,cAAA;UAAAuB,IAAA,EACQ;UAAA0B,YAAA,EACQ7C,CAAA,CAAE;UAAA8C,IAAA,EACV;UAAAC,KAAA;QAAA,CAER;QAEAnD,cAAA;UAAAuB,IAAA,EACQ;UAAA0B,YAAA,EACQ7C,CAAA,CAAE;UAAA8C,IAAA,EACV;UAAAC,KAAA;QAAA,CAER;MAAA;QAEA5D,uBAAA,MAAwB;QACxBS,cAAA;UAAAuB,IAAA,EAAuB;UAAA2B,IAAA,EAAgB;QAAA,CAAW;QAClDlD,cAAA;UAAAuB,IAAA,EAAuB;UAAA2B,IAAA,EAAgB;QAAA,CAAmB;MAAA;MAG5DrD,mBAAA,CAAoBD,kBAAA;IAAA;IACtBd,CAAA,MAAAkB,cAAA;IAAAlB,CAAA,MAAAS,uBAAA;IAAAT,CAAA,MAAAsB,CAAA;IAAAtB,CAAA,MAAAkD,EAAA;EAAA;IAAAA,EAAA,GAAAlD,CAAA;EAAA;EAzBF,MAAAsE,oBAAA,GAA6BpB,EA0BiB;EAAA,IAAAqB,EAAA;EAAA,IAAAvE,CAAA,QAAAgC,GAAA,IAAAhC,CAAA,QAAAE,cAAA,IAAAF,CAAA,SAAAI,KAAA,IAAAJ,CAAA,SAAAqB,IAAA,IAAArB,CAAA,SAAAK,iBAAA,IAAAL,CAAA,SAAA+B,SAAA,IAAA/B,CAAA,SAAAsB,CAAA,IAAAtB,CAAA,SAAAW,QAAA;IAGnB4D,EAAA,SAAAA,CAAA;MACzB,MAAAC,GAAA,GAAY,GAAGzC,SAAA,GAAYC,GAAA,IAAO9B,cAAA,SAAuB;MACzD,MAAAuE,QAAA,SAAuBC,KAAA,CAAMF,GAAA;QAAAG,IAAA,EAEzBtE,iBAAA,IAAqBM,QAAA,GAAWiE,IAAA,CAAAC,SAAA;UAAAlE;QAAA,CAA0B,IAAKiE,IAAA,CAAAC,SAAA;UAAAzE;QAAA,CAAuB;QAAA0E,WAAA,EAC3E;QAAAC,OAAA;UAAA,mBAEQ1D,IAAA,CAAA2D,QAAA;UAAA,gBACH;QAAA;QAAAC,MAAA,EAEV;MAAA,CACV;MAAA,IAEIR,QAAA,CAAAS,MAAA,QAAoB;QACtBlG,KAAA,CAAAmG,OAAA,CAAc7D,CAAA,CAAE;MAAA;QAEhBtC,KAAA,CAAAoG,KAAA,CAAY9D,CAAA,CAAE;MAAA;IAAA;IAElBtB,CAAA,MAAAgC,GAAA;IAAAhC,CAAA,MAAAE,cAAA;IAAAF,CAAA,OAAAI,KAAA;IAAAJ,CAAA,OAAAqB,IAAA;IAAArB,CAAA,OAAAK,iBAAA;IAAAL,CAAA,OAAA+B,SAAA;IAAA/B,CAAA,OAAAsB,CAAA;IAAAtB,CAAA,OAAAW,QAAA;IAAAX,CAAA,OAAAuE,EAAA;EAAA;IAAAA,EAAA,GAAAvE,CAAA;EAAA;EAlBA,MAAA+D,MAAA,GAAeQ,EAkBiE;EAAA,IAAAc,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAtF,CAAA,SAAAoB,QAAA;IAEtEiE,EAAA,GAAAA,CAAA;MAAA,KACHjE,QAAA;QACHL,mBAAA,MAAoB;MAAA;IAAA;IAErBuE,EAAA,IAAClE,QAAA;IAASpB,CAAA,OAAAoB,QAAA;IAAApB,CAAA,OAAAqF,EAAA;IAAArF,CAAA,OAAAsF,EAAA;EAAA;IAAAD,EAAA,GAAArF,CAAA;IAAAsF,EAAA,GAAAtF,CAAA;EAAA;EAJbnB,SAAA,CAAUwG,EAIV,EAAGC,EAAU;EAEb,MAAAC,aAAA,GAAsBnC,YAAA;EACtB,MAAAoC,eAAA,GAAwB9E,SAAA,IAAa+C,aAAA;EACrC,MAAAgC,eAAA,GAAwB7E,MAAA,IAAUY,SAAA;EAAA,MAE5B+D,aAAA,IAAiBC,eAAA,IAAmBC,eAAc;IAAA;EAAA;EAAA,IAAAC,EAAA;EAAA,IAAA1F,CAAA,SAAAC,SAAA;IAKtCyF,EAAA,IAAA7F,SAAA,EAAYI,SAAA,EAAA0F,MAAA,CAAA7B,OAAkB;IAAA9D,CAAA,OAAAC,SAAA;IAAAD,CAAA,OAAA0F,EAAA;EAAA;IAAAA,EAAA,GAAA1F,CAAA;EAAA;EAAA,OAA9C4F,KAAA,CAAC;IAAA3F,SAAA,EAAeyF,EAA8B,CAAAG,IAAA,CAAc;IAAAC,QAAA,GACzD1C,YAAA,IACCwC,KAAA,CAAAlH,KAAA,CAAAC,QAAA;MAAAmH,QAAA,GACEC,IAAA,CAAA7G,sBAAA;QAAAmB,iBAAA;QAAAC,SAAA;QAAAO,WAAA,EAGeU,cAAA,EAAAa,MAAA;QAAA7B,QAAA,EACHA,QAAA,IAAYmB,SAAA;QAAAJ;MAAA,C,GAGtB,CAAAR,gBAAA,IAAoBN,eAAc,MAAO,CAACL,oBAAA,KAAyBiD,YAAW,KAC9EwC,KAAA,CAAC;QAAA3F,SAAA,EAAe,GAAAJ,SAAA,qBAAiC;QAAAiG,QAAA,GAC/CC,IAAA,CAAA1G,aAAA;UAAA2G,YAAA,EACe;UAAAzD,KAAA;YAAAC,IAAA,EAEL;YAAAyD,KAAA,EACC3E,CAAA,CAAE;YAAA4E,QAAA;UAAA;UAAAC,SAAA,EAGD;UAAAC,UAAA,EACC;UAAAC,gBAAA,EACM;UAAAjC,IAAA,EACZ;UAAAkC,UAAA,EACM;QAAA,C,GAEbP,IAAA,CAAA3G,oBAAA;UAAAiE,QAAA,EAAgC9C,QAAA,IAAYmB;QAAA,C;UAGhDkE,KAAA,CAAC;QAAA3F,SAAA,EAAe,GAAAJ,SAAA,YAAwB;QAAAiG,QAAA,GACrChF,gBAAA,KAAqBN,eAAA,IACpBuF,IAAA,CAAA9G,MAAA;UAAAsH,WAAA,EACc;UAAAlD,QAAA;UAAAmD,EAAA,EAET;UAAAC,OAAA,EAAAA,CAAA,KACYnC,oBAAA,MAAqB;UAAAoC,IAAA,EAC/B;UAAAZ,QAAA,EAEJxE,CAAA,CAAE;QAAA,C,GAGN,CAACR,gBAAA,KACCN,eAAA,KACAL,oBAAA,IACD8B,kBAAA,IACE8D,IAAA,CAAA9G,MAAA;UAAAsH,WAAA,EACc;UAAAlD,QAAA;UAAAmD,EAAA,EAET;UAAAC,OAAA,EAAAA,CAAA,KACYnC,oBAAA,KAAqB;UAAAoC,IAAA,EAC/B;UAAAZ,QAAA,EAEJxE,CAAA,CAAE;QAAA,C,GAGR,CAACR,gBAAA,IAAoBR,SAAA,KAAc,YAAY2D,qBAAA,IAC9C8B,IAAA,CAAA9G,MAAA;UAAAsH,WAAA,EACc;UAAAlD,QAAA,EACFA,QAAA,KAAanB,UAAA;UAAAsE,EAAA,EACpB;UAAAC,OAAA,EAAAA,CAAA,UACiB1C,MAAA;UAAA2C,IAAA,EACf;UAAAZ,QAAA,EAEJxE,CAAA,CAAE;QAAA,C;;QAMZZ,SAAA,IACCqF,IAAA,CAAC;MAAA9F,SAAA,EAAe,GAAAJ,SAAA,WAAuB;MAAAiG,QAAA,EACpCrC,aAAA,IACCmC,KAAA,CAAAjH,QAAA;QAAAmH,QAAA,GACEC,IAAA,CAAA5G,aAAA;UAAAoD,KAAA;YAAAC,IAAA,EAEU;YAAAmE,KAAA;cAAAtD,QAAA;cAAA9C,QAAA,EACuBiD;YAAA;YAAAyC,KAAA,EACtB3E,CAAA,CAAE;UAAA;UAAA8C,IAAA,EAEN;UAAAkC,UAAA,EACO,GAAGpG,cAAA;QAA6B,C,GAE9C6F,IAAA,CAAAnG,MAAA;UAAAgH,OAAA,IAAmB5F,YAAA,EAAA6F,KAAA;UAAAtG,QAAA,EAA+BgD;QAAA,C;;QAKzD3C,MAAA,IAAUY,SAAA,IACTuE,IAAA,CAAA5G,aAAA;MAAAoD,KAAA;QAAAC,IAAA,EAEU;QAAAmE,KAAA;UAAAtD,QAAA;UAAA9C;QAAA;QAAA0F,KAAA,EAEC3E,CAAA,CAAE;MAAA;MAAA8C,IAAA,EAEN;MAAAkC,UAAA,EACO,GAAGpG,cAAA;IAA0B,C;;CAKnD;AAxRqC,SAAAe,MAAAW,EAAA;EAkBC,OAAAQ,MAAA,IAAAR,EAAQ;EAAA,OAAKQ,MAAC,IAAUA,MAAA,EAAApB,YAAQ,QAAiB;AAAA;AAlBlD,SAAAG,OAAA2F,OAAA;EAAA,OAmBeA,OAAO;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","getFieldPermissions","React","Fragment","useCallback","useEffect","useMemo","useState","toast","Button","EmailAndUsernameFields","CheckboxField","ConfirmPasswordField","PasswordField","useFormFields","useFormModified","useConfig","useDocumentInfo","useTranslation","APIKey","baseClass","Auth","props","$","className","collectionSlug","disableLocalStrategy","email","loginWithUsername","operation","readOnly","requirePassword","setValidateBeforeSubmit","useAPIKey","username","verify","changingPassword","setChangingPassword","enableAPIKey","_temp","dispatchFields","_temp2","modified","i18n","t","docPermissions","isEditing","isInitializing","isTrashed","config","t0","routes","t1","serverURL","api","showPasswordFields","showUnlock","hasPasswordFieldOverride","fields","hasLoginFieldOverride","permissions","passwordPermissions","field","name","type","parentName","create","update","hasEmailAndUsernameFields","requireEmail","allowEmailLogin","t2","emailPermission","t3","usernamePermission","enableFields","disabled","apiKeyPermissions","apiKeyReadOnly","enableAPIKeyReadOnly","canReadApiKey","read","bb0","Boolean","unlock","undefined","hasPermissionToUnlock","changingPassword_0","errorMessage","path","valid","handleChangePassword","t4","url","response","fetch","body","JSON","stringify","credentials","headers","language","method","status","success","error","t5","t6","showAuthBlock","showAPIKeyBlock","showVerifyBlock","t7","filter","_jsxs","join","children","_jsx","autoComplete","label","required","indexPath","parentPath","parentSchemaPath","schemaPath","buttonStyle","id","onClick","size","admin","enabled","value","reducer"],"sources":["../../../../src/views/Edit/Auth/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedFieldPermissions } from 'payload'\n\nimport { getFieldPermissions } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props } from './types.js'\n\nimport { Button } from '../../../elements/Button/index.js'\nimport { EmailAndUsernameFields } from '../../../elements/EmailAndUsername/index.js'\nimport { CheckboxField } from '../../../fields/Checkbox/index.js'\nimport { ConfirmPasswordField } from '../../../fields/ConfirmPassword/index.js'\nimport { PasswordField } from '../../../fields/Password/index.js'\nimport { useFormFields, useFormModified } from '../../../forms/Form/context.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport './index.scss'\nimport { APIKey } from './APIKey.js'\n\nconst baseClass = 'auth-fields'\n\nexport const Auth: React.FC<Props> = (props) => {\n const {\n className,\n collectionSlug,\n disableLocalStrategy,\n email,\n loginWithUsername,\n operation,\n readOnly,\n requirePassword,\n setValidateBeforeSubmit,\n useAPIKey,\n username,\n verify,\n } = props\n\n const [changingPassword, setChangingPassword] = useState(requirePassword)\n const enableAPIKey = useFormFields(([fields]) => (fields && fields?.enableAPIKey) || null)\n const dispatchFields = useFormFields((reducer) => reducer[1])\n const modified = useFormModified()\n const { i18n, t } = useTranslation()\n const { docPermissions, isEditing, isInitializing, isTrashed } = useDocumentInfo()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n let showPasswordFields: SanitizedFieldPermissions = true\n let showUnlock = true\n const hasPasswordFieldOverride =\n typeof docPermissions.fields === 'object' && 'password' in docPermissions.fields\n const hasLoginFieldOverride =\n typeof docPermissions.fields === 'object' &&\n ('username' in docPermissions.fields || 'email' in docPermissions.fields)\n\n if (hasPasswordFieldOverride) {\n const { permissions: passwordPermissions } = getFieldPermissions({\n field: { name: 'password', type: 'text' },\n operation,\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n if (operation === 'create') {\n showPasswordFields =\n passwordPermissions === true ||\n ((typeof passwordPermissions === 'object' &&\n passwordPermissions.create) as SanitizedFieldPermissions)\n } else {\n showPasswordFields =\n passwordPermissions === true ||\n ((typeof passwordPermissions === 'object' &&\n passwordPermissions.update) as SanitizedFieldPermissions)\n }\n }\n\n if (hasLoginFieldOverride) {\n const hasEmailAndUsernameFields =\n loginWithUsername && (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin)\n\n const { operation: emailPermission } = getFieldPermissions({\n field: { name: 'email', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n const { operation: usernamePermission } = getFieldPermissions({\n field: { name: 'username', type: 'text' },\n operation: 'read',\n parentName: '',\n permissions: docPermissions?.fields,\n })\n\n if (hasEmailAndUsernameFields) {\n showUnlock = usernamePermission || emailPermission\n } else if (loginWithUsername && !hasEmailAndUsernameFields) {\n showUnlock = usernamePermission\n } else {\n showUnlock = emailPermission\n }\n }\n\n const enableFields =\n (!disableLocalStrategy ||\n (typeof disableLocalStrategy === 'object' && disableLocalStrategy.enableFields === true)) &&\n (showUnlock || showPasswordFields)\n\n const disabled = readOnly || isInitializing || isTrashed\n\n const apiKeyPermissions =\n docPermissions?.fields === true ? true : docPermissions?.fields?.enableAPIKey\n\n const apiKeyReadOnly =\n readOnly ||\n apiKeyPermissions === true ||\n (apiKeyPermissions && typeof apiKeyPermissions === 'object' && !apiKeyPermissions?.update)\n\n const enableAPIKeyReadOnly =\n readOnly || (apiKeyPermissions !== true && !apiKeyPermissions?.update)\n\n const canReadApiKey = apiKeyPermissions === true || apiKeyPermissions?.read\n\n const hasPermissionToUnlock: boolean = useMemo(() => {\n if (docPermissions) {\n return Boolean('unlock' in docPermissions ? docPermissions.unlock : undefined)\n }\n\n return false\n }, [docPermissions])\n\n const handleChangePassword = useCallback(\n (changingPassword: boolean) => {\n if (changingPassword) {\n setValidateBeforeSubmit(true)\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'password',\n valid: false,\n })\n\n dispatchFields({\n type: 'UPDATE',\n errorMessage: t('validation:required'),\n path: 'confirm-password',\n valid: false,\n })\n } else {\n setValidateBeforeSubmit(false)\n dispatchFields({ type: 'REMOVE', path: 'password' })\n dispatchFields({ type: 'REMOVE', path: 'confirm-password' })\n }\n\n setChangingPassword(changingPassword)\n },\n [dispatchFields, t, setValidateBeforeSubmit],\n )\n\n const unlock = useCallback(async () => {\n const url = `${serverURL}${api}/${collectionSlug}/unlock`\n const response = await fetch(url, {\n body:\n loginWithUsername && username ? JSON.stringify({ username }) : JSON.stringify({ email }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n if (response.status === 200) {\n toast.success(t('authentication:successfullyUnlocked'))\n } else {\n toast.error(t('authentication:failedToUnlock'))\n }\n }, [i18n, serverURL, api, collectionSlug, email, username, t, loginWithUsername])\n\n useEffect(() => {\n if (!modified) {\n setChangingPassword(false)\n }\n }, [modified])\n\n const showAuthBlock = enableFields\n const showAPIKeyBlock = useAPIKey && canReadApiKey\n const showVerifyBlock = verify && isEditing\n\n if (!(showAuthBlock || showAPIKeyBlock || showVerifyBlock)) {\n return null\n }\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n {enableFields && (\n <React.Fragment>\n <EmailAndUsernameFields\n loginWithUsername={loginWithUsername}\n operation={operation}\n permissions={docPermissions?.fields}\n readOnly={readOnly || isTrashed}\n t={t}\n />\n {(changingPassword || requirePassword) && (!disableLocalStrategy || !enableFields) && (\n <div className={`${baseClass}__changing-password`}>\n <PasswordField\n autoComplete=\"new-password\"\n field={{\n name: 'password',\n label: t('authentication:newPassword'),\n required: true,\n }}\n indexPath=\"\"\n parentPath=\"\"\n parentSchemaPath=\"\"\n path=\"password\"\n schemaPath=\"password\"\n />\n <ConfirmPasswordField disabled={readOnly || isTrashed} />\n </div>\n )}\n <div className={`${baseClass}__controls`}>\n {changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"cancel-change-password\"\n onClick={() => handleChangePassword(false)}\n size=\"medium\"\n >\n {t('general:cancel')}\n </Button>\n )}\n {!changingPassword &&\n !requirePassword &&\n !disableLocalStrategy &&\n showPasswordFields && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"change-password\"\n onClick={() => handleChangePassword(true)}\n size=\"medium\"\n >\n {t('authentication:changePassword')}\n </Button>\n )}\n {!changingPassword && operation === 'update' && hasPermissionToUnlock && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled || !showUnlock}\n id=\"force-unlock\"\n onClick={() => void unlock()}\n size=\"medium\"\n >\n {t('authentication:forceUnlock')}\n </Button>\n )}\n </div>\n </React.Fragment>\n )}\n {useAPIKey && (\n <div className={`${baseClass}__api-key`}>\n {canReadApiKey && (\n <Fragment>\n <CheckboxField\n field={{\n name: 'enableAPIKey',\n admin: { disabled, readOnly: enableAPIKeyReadOnly },\n label: t('authentication:enableAPIKey'),\n }}\n path=\"enableAPIKey\"\n schemaPath={`${collectionSlug}.enableAPIKey`}\n />\n <APIKey enabled={!!enableAPIKey?.value} readOnly={apiKeyReadOnly} />\n </Fragment>\n )}\n </div>\n )}\n {verify && isEditing && (\n <CheckboxField\n field={{\n name: '_verified',\n admin: { disabled, readOnly },\n label: t('authentication:verified'),\n }}\n path=\"_verified\"\n schemaPath={`${collectionSlug}._verified`}\n />\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/ui",
|
|
3
|
-
"version": "3.64.0
|
|
3
|
+
"version": "3.64.0",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"ts-essentials": "10.0.3",
|
|
137
137
|
"use-context-selector": "2.0.0",
|
|
138
138
|
"uuid": "10.0.0",
|
|
139
|
-
"@payloadcms/translations": "3.64.0
|
|
139
|
+
"@payloadcms/translations": "3.64.0"
|
|
140
140
|
},
|
|
141
141
|
"devDependencies": {
|
|
142
142
|
"@babel/cli": "7.27.2",
|
|
@@ -152,13 +152,13 @@
|
|
|
152
152
|
"esbuild": "0.25.5",
|
|
153
153
|
"esbuild-sass-plugin": "3.3.1",
|
|
154
154
|
"@payloadcms/eslint-config": "3.28.0",
|
|
155
|
-
"payload": "3.64.0
|
|
155
|
+
"payload": "3.64.0"
|
|
156
156
|
},
|
|
157
157
|
"peerDependencies": {
|
|
158
158
|
"next": "^15.2.3",
|
|
159
159
|
"react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
160
160
|
"react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
161
|
-
"payload": "3.64.0
|
|
161
|
+
"payload": "3.64.0"
|
|
162
162
|
},
|
|
163
163
|
"engines": {
|
|
164
164
|
"node": "^18.20.2 || >=20.9.0"
|