@payloadcms/ui 3.2.2-canary.265aa9e → 3.2.2-canary.317488d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/elements/DocumentDrawer/Provider.d.ts +2 -2
  2. package/dist/elements/DocumentDrawer/Provider.d.ts.map +1 -1
  3. package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
  4. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  5. package/dist/elements/DocumentFields/index.js +53 -92
  6. package/dist/elements/DocumentFields/index.js.map +1 -1
  7. package/dist/exports/client/{CodeEditor-DRTCMRCY.js → CodeEditor-5MCGR4GL.js} +2 -2
  8. package/dist/exports/client/chunk-4SO5UCQD.js +14 -0
  9. package/dist/exports/client/chunk-4SO5UCQD.js.map +8 -0
  10. package/dist/exports/client/index.js +10 -10
  11. package/dist/exports/client/index.js.map +3 -3
  12. package/dist/forms/Form/index.d.ts.map +1 -1
  13. package/dist/forms/Form/index.js +11 -1
  14. package/dist/forms/Form/index.js.map +1 -1
  15. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  16. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  17. package/dist/forms/Form/types.d.ts +1 -1
  18. package/dist/forms/Form/types.d.ts.map +1 -1
  19. package/dist/forms/Form/types.js.map +1 -1
  20. package/dist/providers/Config/index.d.ts.map +1 -1
  21. package/dist/providers/Config/index.js +34 -19
  22. package/dist/providers/Config/index.js.map +1 -1
  23. package/dist/utilities/buildFormState.d.ts +6 -5
  24. package/dist/utilities/buildFormState.d.ts.map +1 -1
  25. package/dist/utilities/buildFormState.js.map +1 -1
  26. package/dist/views/Edit/Auth/types.d.ts +1 -1
  27. package/dist/views/Edit/Auth/types.d.ts.map +1 -1
  28. package/dist/views/Edit/Auth/types.js.map +1 -1
  29. package/dist/views/Edit/index.d.ts +1 -1
  30. package/dist/views/Edit/index.d.ts.map +1 -1
  31. package/dist/views/Edit/index.js +76 -51
  32. package/dist/views/Edit/index.js.map +1 -1
  33. package/package.json +5 -5
  34. package/dist/exports/client/chunk-PNHVQDTJ.js +0 -14
  35. package/dist/exports/client/chunk-PNHVQDTJ.js.map +0 -8
  36. /package/dist/exports/client/{CodeEditor-DRTCMRCY.js.map → CodeEditor-5MCGR4GL.js.map} +0 -0
@@ -26,9 +26,9 @@ import { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'
26
26
  import { handleGoBack } from '../../utilities/handleGoBack.js';
27
27
  import { handleTakeOver } from '../../utilities/handleTakeOver.js';
28
28
  import { Auth } from './Auth/index.js';
29
- import './index.scss';
30
29
  import { SetDocumentStepNav } from './SetDocumentStepNav/index.js';
31
30
  import { SetDocumentTitle } from './SetDocumentTitle/index.js';
31
+ import './index.scss';
32
32
  const baseClass = 'collection-edit';
33
33
  // This component receives props only on _pages_
34
34
  // When rendered within a drawer, props are empty
@@ -117,6 +117,7 @@ export const DefaultEditView = ({
117
117
  getFormState
118
118
  } = useServerFunctions();
119
119
  const onChangeAbortControllerRef = useRef(null);
120
+ const onSaveAbortControllerRef = useRef(null);
120
121
  const locale = params.get('locale');
121
122
  const entitySlug = collectionConfig?.slug || globalConfig?.slug;
122
123
  const operation = collectionSlug && !id ? 'create' : 'update';
@@ -130,10 +131,13 @@ export const DefaultEditView = ({
130
131
  const lockDuration = typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault;
131
132
  const lockDurationInMilliseconds = lockDuration * 1000;
132
133
  let preventLeaveWithoutSaving = true;
134
+ let autosaveEnabled = false;
133
135
  if (collectionConfig) {
134
- preventLeaveWithoutSaving = !(collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave);
136
+ autosaveEnabled = Boolean(collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave);
137
+ preventLeaveWithoutSaving = !autosaveEnabled;
135
138
  } else if (globalConfig) {
136
- preventLeaveWithoutSaving = !(globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave);
139
+ autosaveEnabled = Boolean(globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave);
140
+ preventLeaveWithoutSaving = !autosaveEnabled;
137
141
  } else if (typeof disableLeaveWithoutSaving !== 'undefined') {
138
142
  preventLeaveWithoutSaving = !disableLeaveWithoutSaving;
139
143
  }
@@ -166,6 +170,25 @@ export const DefaultEditView = ({
166
170
  }
167
171
  return false;
168
172
  });
173
+ const handleDocumentLocking = useCallback(lockedState => {
174
+ setDocumentIsLocked(true);
175
+ const previousOwnerId = typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id : documentLockStateRef.current?.user;
176
+ if (lockedState) {
177
+ const lockedUserID = typeof lockedState.user === 'string' || typeof lockedState.user === 'number' ? lockedState.user : lockedState.user.id;
178
+ if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {
179
+ if (previousOwnerId === user.id && lockedUserID !== user.id) {
180
+ setShowTakeOverModal(true);
181
+ documentLockStateRef.current.hasShownLockedModal = true;
182
+ }
183
+ documentLockStateRef.current = {
184
+ hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,
185
+ isLocked: true,
186
+ user: lockedState.user
187
+ };
188
+ setCurrentEditor(lockedState.user);
189
+ }
190
+ }
191
+ }, [setCurrentEditor, setDocumentIsLocked, user.id]);
169
192
  const onSave = useCallback(async json => {
170
193
  reportUpdate({
171
194
  id,
@@ -187,10 +210,6 @@ export const DefaultEditView = ({
187
210
  operation: id ? 'update' : 'create'
188
211
  });
189
212
  }
190
- // Unlock the document after save
191
- if ((id || globalSlug) && isLockingEnabled) {
192
- setDocumentIsLocked(false);
193
- }
194
213
  if (!isEditing && depth < 2) {
195
214
  // Redirect to the same locale if it's been set
196
215
  const redirectRoute = formatAdminURL({
@@ -202,13 +221,39 @@ export const DefaultEditView = ({
202
221
  resetUploadEdits();
203
222
  }
204
223
  await getDocPermissions(json);
205
- }, [updateSavedDocumentData, reportUpdate, id, entitySlug, user, collectionSlug, userSlug, incrementVersionCount, onSaveFromContext, globalSlug, isLockingEnabled, isEditing, depth, getDocPermissions, refreshCookieAsync, setDocumentIsLocked, adminRoute, locale, router, resetUploadEdits]);
224
+ if ((id || globalSlug) && !autosaveEnabled) {
225
+ abortAndIgnore(onSaveAbortControllerRef.current);
226
+ const controller = new AbortController();
227
+ onSaveAbortControllerRef.current = controller;
228
+ const docPreferences = await getDocPreferences();
229
+ const {
230
+ state
231
+ } = await getFormState({
232
+ id,
233
+ collectionSlug,
234
+ data: json?.doc,
235
+ docPermissions,
236
+ docPreferences,
237
+ globalSlug,
238
+ operation,
239
+ renderAllFields: true,
240
+ returnLockStatus: false,
241
+ schemaPath: schemaPathSegments.join('.'),
242
+ signal: controller.signal
243
+ });
244
+ // Unlock the document after save
245
+ if (isLockingEnabled) {
246
+ setDocumentIsLocked(false);
247
+ }
248
+ return state;
249
+ }
250
+ }, [adminRoute, collectionSlug, depth, docPermissions, entitySlug, getDocPermissions, getDocPreferences, getFormState, globalSlug, id, incrementVersionCount, isEditing, isLockingEnabled, locale, onSaveFromContext, operation, refreshCookieAsync, reportUpdate, resetUploadEdits, router, schemaPathSegments, setDocumentIsLocked, updateSavedDocumentData, user, userSlug, autosaveEnabled]);
206
251
  const onChange = useCallback(async ({
207
252
  formState: prevFormState
208
253
  }) => {
209
254
  abortAndIgnore(onChangeAbortControllerRef.current);
210
- const controller = new AbortController();
211
- onChangeAbortControllerRef.current = controller;
255
+ const controller_0 = new AbortController();
256
+ onChangeAbortControllerRef.current = controller_0;
212
257
  const currentTime = Date.now();
213
258
  const timeSinceLastUpdate = currentTime - editSessionStartTime;
214
259
  const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds
@@ -216,65 +261,44 @@ export const DefaultEditView = ({
216
261
  if (updateLastEdited) {
217
262
  setEditSessionStartTime(currentTime);
218
263
  }
219
- const docPreferences = await getDocPreferences();
264
+ const docPreferences_0 = await getDocPreferences();
220
265
  const {
221
- lockedState,
222
- state
266
+ lockedState: lockedState_0,
267
+ state: state_0
223
268
  } = await getFormState({
224
269
  id,
225
270
  collectionSlug,
226
271
  docPermissions,
227
- docPreferences,
272
+ docPreferences: docPreferences_0,
228
273
  formState: prevFormState,
229
274
  globalSlug,
230
275
  operation,
231
276
  // Performance optimization: Setting it to false ensure that only fields that have explicit requireRender set in the form state will be rendered (e.g. new array rows).
232
- // We only wanna render ALL fields on initial render, not in onChange.
277
+ // We only want to render ALL fields on initial render, not in onChange.
233
278
  renderAllFields: false,
234
- returnLockStatus: isLockingEnabled ? true : false,
279
+ returnLockStatus: isLockingEnabled,
235
280
  schemaPath: schemaPathSegments.join('.'),
236
- signal: controller.signal,
281
+ signal: controller_0.signal,
237
282
  updateLastEdited
238
283
  });
239
- setDocumentIsLocked(true);
240
284
  if (isLockingEnabled) {
241
- const previousOwnerId = typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id : documentLockStateRef.current?.user;
242
- if (lockedState) {
243
- const lockedUserID = typeof lockedState.user === 'string' || typeof lockedState.user === 'number' ? lockedState.user : lockedState.user.id;
244
- if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {
245
- if (previousOwnerId === user.id && lockedUserID !== user.id) {
246
- setShowTakeOverModal(true);
247
- documentLockStateRef.current.hasShownLockedModal = true;
248
- }
249
- documentLockStateRef.current = documentLockStateRef.current = {
250
- hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,
251
- isLocked: true,
252
- user: lockedState.user
253
- };
254
- setCurrentEditor(lockedState.user);
255
- }
256
- }
285
+ handleDocumentLocking(lockedState_0);
257
286
  }
258
- return state;
259
- }, [editSessionStartTime, isLockingEnabled, getDocPreferences, getFormState, id, collectionSlug, docPermissions, globalSlug, operation, schemaPathSegments, setDocumentIsLocked, user.id, setCurrentEditor]);
287
+ return state_0;
288
+ }, [id, collectionSlug, getDocPreferences, getFormState, globalSlug, handleDocumentLocking, isLockingEnabled, operation, schemaPathSegments, docPermissions, editSessionStartTime]);
260
289
  // Clean up when the component unmounts or when the document is unlocked
261
290
  useEffect(() => {
262
291
  return () => {
263
- if (!isLockingEnabled) {
264
- return;
265
- }
266
- const currentPath = window.location.pathname;
267
- const documentId = id || globalSlug;
268
- // Routes where we do NOT want to unlock the document
269
- const stayWithinDocumentPaths = ['preview', 'api', 'versions'];
270
- const isStayingWithinDocument = stayWithinDocumentPaths.some(path => currentPath.includes(path));
271
- // Unlock the document only if we're actually navigating away from the document
272
- if (documentId && documentIsLocked && !isStayingWithinDocument) {
273
- // Check if this user is still the current editor
274
- if (typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id === user?.id : documentLockStateRef.current?.user === user?.id) {
275
- void unlockDocument(id, collectionSlug ?? globalSlug);
276
- setDocumentIsLocked(false);
277
- setCurrentEditor(null);
292
+ if (isLockingEnabled && documentIsLocked && (id || globalSlug)) {
293
+ // Only retain the lock if the user is still viewing the document
294
+ const shouldUnlockDocument = !['preview', 'api', 'versions'].some(path => window.location.pathname.includes(path));
295
+ if (shouldUnlockDocument) {
296
+ // Check if this user is still the current editor
297
+ if (typeof documentLockStateRef.current?.user === 'object' ? documentLockStateRef.current?.user?.id === user?.id : documentLockStateRef.current?.user === user?.id) {
298
+ void unlockDocument(id, collectionSlug ?? globalSlug);
299
+ setDocumentIsLocked(false);
300
+ setCurrentEditor(null);
301
+ }
278
302
  }
279
303
  }
280
304
  setShowTakeOverModal(false);
@@ -283,6 +307,7 @@ export const DefaultEditView = ({
283
307
  useEffect(() => {
284
308
  return () => {
285
309
  abortAndIgnore(onChangeAbortControllerRef.current);
310
+ abortAndIgnore(onSaveAbortControllerRef.current);
286
311
  };
287
312
  }, []);
288
313
  const shouldShowDocumentLockedModal = documentIsLocked && currentEditor && (typeof currentEditor === 'object' ? currentEditor.id !== user?.id : currentEditor !== user?.id) && !isReadOnlyForIncomingUser && !showTakeOverModal && !documentLockStateRef.current?.hasShownLockedModal && !isLockExpired;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useRouter","useSearchParams","React","Fragment","useCallback","useEffect","useRef","useState","DocumentControls","DocumentDrawerHeader","useDocumentDrawerContext","DocumentFields","DocumentLocked","DocumentTakeOver","LeaveWithoutSaving","Upload","Form","useAuth","useConfig","useDocumentEvents","useDocumentInfo","useEditDepth","OperationProvider","useServerFunctions","useUploadEdits","abortAndIgnore","formatAdminURL","handleBackToDashboard","handleGoBack","handleTakeOver","Auth","SetDocumentStepNav","SetDocumentTitle","baseClass","DefaultEditView","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","CustomUpload","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","disableActions","disableCreate","disableLeaveWithoutSaving","docPermissions","documentIsLocked","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialState","isEditing","isInitializing","lastUpdateTime","redirectAfterDelete","redirectAfterDuplicate","savedDocumentData","setCurrentEditor","setDocumentIsLocked","unlockDocument","updateDocumentEditor","updateSavedDocumentData","clearDoc","drawerSlug","onDelete","onDuplicate","onSave","onSaveFromContext","isInDrawer","Boolean","refreshCookieAsync","user","config","admin","userSlug","routes","adminRoute","getEntityConfig","collectionConfig","globalConfig","depth","router","params","reportUpdate","resetUploadEdits","getFormState","onChangeAbortControllerRef","locale","get","entitySlug","slug","operation","auth","undefined","upload","docConfig","lockDocumentsProp","lockDocuments","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","preventLeaveWithoutSaving","versions","drafts","autosave","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","documentLockStateRef","hasShownLockedModal","isLocked","classes","push","schemaPathSegments","setSchemaPathSegments","disableLocalStrategy","validateBeforeSubmit","setValidateBeforeSubmit","json","updatedAt","result","toISOString","doc","redirectRoute","path","onChange","formState","prevFormState","current","controller","AbortController","currentTime","timeSinceLastUpdate","updateLastEdited","docPreferences","lockedState","state","renderAllFields","returnLockStatus","schemaPath","join","signal","previousOwnerId","lockedUserID","currentPath","window","location","pathname","documentId","stayWithinDocumentPaths","isStayingWithinDocument","some","includes","shouldShowDocumentLockedModal","_jsx","className","filter","_jsxs","disabled","disableValidationOnSubmit","method","onSuccess","isActive","onReadOnly","onTakeOver","pluralLabel","labels","plural","useAsTitle","fallback","toString","customComponents","data","onDrawerCreateNew","permissions","readOnlyForIncomingUser","email","loginWithUsername","readOnly","requirePassword","useAPIKey","username","verify","uploadConfig","fields"],"sources":["../../../src/views/Edit/index.tsx"],"sourcesContent":["'use client'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport {\n type ClientCollectionConfig,\n type ClientGlobalConfig,\n type ClientSideEditViewProps,\n type ClientUser,\n} from 'payload'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\n\nimport { DocumentControls } from '../../elements/DocumentControls/index.js'\nimport { DocumentDrawerHeader } from '../../elements/DocumentDrawer/DrawerHeader/index.js'\nimport { useDocumentDrawerContext } from '../../elements/DocumentDrawer/Provider.js'\nimport { DocumentFields } from '../../elements/DocumentFields/index.js'\nimport { DocumentLocked } from '../../elements/DocumentLocked/index.js'\nimport { DocumentTakeOver } from '../../elements/DocumentTakeOver/index.js'\nimport { LeaveWithoutSaving } from '../../elements/LeaveWithoutSaving/index.js'\nimport { Upload } from '../../elements/Upload/index.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { OperationProvider } from '../../providers/Operation/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { abortAndIgnore } from '../../utilities/abortAndIgnore.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'\nimport { handleGoBack } from '../../utilities/handleGoBack.js'\nimport { handleTakeOver } from '../../utilities/handleTakeOver.js'\nimport { Auth } from './Auth/index.js'\nimport './index.scss'\nimport { SetDocumentStepNav } from './SetDocumentStepNav/index.js'\nimport { SetDocumentTitle } from './SetDocumentTitle/index.js'\n\nconst baseClass = 'collection-edit'\n\n// This component receives props only on _pages_\n// When rendered within a drawer, props are empty\n// This is solely to support custom edit views which get server-rendered\nexport const DefaultEditView: React.FC<ClientSideEditViewProps> = ({\n Description,\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Upload: CustomUpload,\n}) => {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n disableActions,\n disableCreate,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialState,\n isEditing,\n isInitializing,\n lastUpdateTime,\n redirectAfterDelete,\n redirectAfterDuplicate,\n savedDocumentData,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n updateDocumentEditor,\n updateSavedDocumentData,\n } = useDocumentInfo()\n\n const {\n clearDoc,\n drawerSlug,\n onDelete,\n onDuplicate,\n onSave: onSaveFromContext,\n } = useDocumentDrawerContext()\n\n const isInDrawer = Boolean(drawerSlug)\n\n const { refreshCookieAsync, user } = useAuth()\n\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig\n const globalConfig = getEntityConfig({ globalSlug }) as ClientGlobalConfig\n\n const depth = useEditDepth()\n\n const router = useRouter()\n const params = useSearchParams()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n\n const onChangeAbortControllerRef = useRef<AbortController>(null)\n\n const locale = params.get('locale')\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const operation = collectionSlug && !id ? 'create' : 'update'\n\n const auth = collectionConfig ? collectionConfig.auth : undefined\n const upload = collectionConfig ? collectionConfig.upload : undefined\n\n const docConfig = collectionConfig || globalConfig\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n let preventLeaveWithoutSaving = true\n\n if (collectionConfig) {\n preventLeaveWithoutSaving = !(\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave\n )\n } else if (globalConfig) {\n preventLeaveWithoutSaving = !(\n globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave\n )\n } else if (typeof disableLeaveWithoutSaving !== 'undefined') {\n preventLeaveWithoutSaving = !disableLeaveWithoutSaving\n }\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n\n const isLockExpired = Date.now() > lockExpiryTime\n\n const documentLockStateRef = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: ClientUser | number | string\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const classes = [baseClass, (id || globalSlug) && `${baseClass}--is-editing`]\n\n if (globalSlug) {\n classes.push(`global-edit--${globalSlug}`)\n }\n\n if (collectionSlug) {\n classes.push(`collection-edit--${collectionSlug}`)\n }\n\n const [schemaPathSegments, setSchemaPathSegments] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return [`_${entitySlug}`, 'auth']\n }\n\n return [entitySlug]\n })\n\n const [validateBeforeSubmit, setValidateBeforeSubmit] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return true\n }\n\n return false\n })\n\n const onSave = useCallback(\n async (json) => {\n reportUpdate({\n id,\n entitySlug,\n updatedAt: json?.result?.updatedAt || new Date().toISOString(),\n })\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n incrementVersionCount()\n\n if (typeof updateSavedDocumentData === 'function') {\n void updateSavedDocumentData(json?.doc || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n void onSaveFromContext({\n ...json,\n operation: id ? 'update' : 'create',\n })\n }\n\n // Unlock the document after save\n if ((id || globalSlug) && isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n if (!isEditing && depth < 2) {\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${json?.doc?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n router.push(redirectRoute)\n } else {\n resetUploadEdits()\n }\n\n await getDocPermissions(json)\n },\n [\n updateSavedDocumentData,\n reportUpdate,\n id,\n entitySlug,\n user,\n collectionSlug,\n userSlug,\n incrementVersionCount,\n onSaveFromContext,\n globalSlug,\n isLockingEnabled,\n isEditing,\n depth,\n getDocPermissions,\n refreshCookieAsync,\n setDocumentIsLocked,\n adminRoute,\n locale,\n router,\n resetUploadEdits,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const { lockedState, state } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n // Performance optimization: Setting it to false ensure that only fields that have explicit requireRender set in the form state will be rendered (e.g. new array rows).\n // We only wanna render ALL fields on initial render, not in onChange.\n renderAllFields: false,\n returnLockStatus: isLockingEnabled ? true : false,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n updateLastEdited,\n })\n\n setDocumentIsLocked(true)\n\n if (isLockingEnabled) {\n const previousOwnerId =\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id\n : documentLockStateRef.current?.user\n\n if (lockedState) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {\n if (previousOwnerId === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockStateRef.current.hasShownLockedModal = true\n }\n\n documentLockStateRef.current = documentLockStateRef.current = {\n hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n setCurrentEditor(lockedState.user as ClientUser)\n }\n }\n }\n\n return state\n },\n [\n editSessionStartTime,\n isLockingEnabled,\n getDocPreferences,\n getFormState,\n id,\n collectionSlug,\n docPermissions,\n globalSlug,\n operation,\n schemaPathSegments,\n setDocumentIsLocked,\n user.id,\n setCurrentEditor,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n if (!isLockingEnabled) {\n return\n }\n\n const currentPath = window.location.pathname\n\n const documentId = id || globalSlug\n\n // Routes where we do NOT want to unlock the document\n const stayWithinDocumentPaths = ['preview', 'api', 'versions']\n\n const isStayingWithinDocument = stayWithinDocumentPaths.some((path) =>\n currentPath.includes(path),\n )\n\n // Unlock the document only if we're actually navigating away from the document\n if (documentId && documentIsLocked && !isStayingWithinDocument) {\n // Check if this user is still the current editor\n if (\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id === user?.id\n : documentLockStateRef.current?.user === user?.id\n ) {\n void unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n }\n }\n\n setShowTakeOverModal(false)\n }\n }, [\n collectionSlug,\n globalSlug,\n id,\n unlockDocument,\n user,\n setCurrentEditor,\n isLockingEnabled,\n documentIsLocked,\n setDocumentIsLocked,\n ])\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n !documentLockStateRef.current?.hasShownLockedModal &&\n !isLockExpired\n\n return (\n <main className={classes.filter(Boolean).join(' ')}>\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || isInitializing || !hasSavePermission}\n disableValidationOnSubmit={!validateBeforeSubmit}\n initialState={!isInitializing && initialState}\n isInitializing={isInitializing}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isInDrawer && <DocumentDrawerHeader drawerSlug={drawerSlug} />}\n {isLockingEnabled && shouldShowDocumentLockedModal && !isReadOnlyForIncomingUser && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n false,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n )\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {!isReadOnlyForIncomingUser && preventLeaveWithoutSaving && <LeaveWithoutSaving />}\n <SetDocumentStepNav\n collectionSlug={collectionConfig?.slug}\n globalSlug={globalConfig?.slug}\n id={id}\n pluralLabel={collectionConfig?.labels?.plural}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={depth <= 1 ? id?.toString() : undefined}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n customComponents={{\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n }}\n data={savedDocumentData}\n disableActions={disableActions}\n disableCreate={disableCreate}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n onDelete={onDelete}\n onDrawerCreateNew={clearDoc}\n onDuplicate={onDuplicate}\n onSave={onSave}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n true,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n setIsReadOnlyForIncomingUser,\n )\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={\n BeforeFields || (\n <Fragment>\n {auth && (\n <Auth\n className={`${baseClass}__auth`}\n collectionSlug={collectionConfig.slug}\n disableLocalStrategy={collectionConfig.auth?.disableLocalStrategy}\n email={savedDocumentData?.email}\n loginWithUsername={auth?.loginWithUsername}\n operation={operation}\n readOnly={!hasSavePermission}\n requirePassword={!id}\n setSchemaPathSegments={setSchemaPathSegments}\n setValidateBeforeSubmit={setValidateBeforeSubmit}\n useAPIKey={auth.useAPIKey}\n username={savedDocumentData?.username}\n verify={auth.verify}\n />\n )}\n {upload && (\n <React.Fragment>\n {CustomUpload || (\n <Upload\n collectionSlug={collectionConfig.slug}\n initialState={initialState}\n uploadConfig={upload}\n />\n )}\n </React.Fragment>\n )}\n </Fragment>\n )\n }\n Description={Description}\n docPermissions={docPermissions}\n fields={docConfig.fields}\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission}\n schemaPathSegments={schemaPathSegments}\n />\n {AfterDocument}\n </Form>\n </OperationProvider>\n </main>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useRouter","useSearchParams","React","Fragment","useCallback","useEffect","useRef","useState","DocumentControls","DocumentDrawerHeader","useDocumentDrawerContext","DocumentFields","DocumentLocked","DocumentTakeOver","LeaveWithoutSaving","Upload","Form","useAuth","useConfig","useDocumentEvents","useDocumentInfo","useEditDepth","OperationProvider","useServerFunctions","useUploadEdits","abortAndIgnore","formatAdminURL","handleBackToDashboard","handleGoBack","handleTakeOver","Auth","SetDocumentStepNav","SetDocumentTitle","baseClass","DefaultEditView","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","CustomUpload","id","action","AfterDocument","AfterFields","apiURL","BeforeFields","collectionSlug","currentEditor","disableActions","disableCreate","disableLeaveWithoutSaving","docPermissions","documentIsLocked","getDocPermissions","getDocPreferences","globalSlug","hasPublishPermission","hasSavePermission","incrementVersionCount","initialState","isEditing","isInitializing","lastUpdateTime","redirectAfterDelete","redirectAfterDuplicate","savedDocumentData","setCurrentEditor","setDocumentIsLocked","unlockDocument","updateDocumentEditor","updateSavedDocumentData","clearDoc","drawerSlug","onDelete","onDuplicate","onSave","onSaveFromContext","isInDrawer","Boolean","refreshCookieAsync","user","config","admin","userSlug","routes","adminRoute","getEntityConfig","collectionConfig","globalConfig","depth","router","params","reportUpdate","resetUploadEdits","getFormState","onChangeAbortControllerRef","onSaveAbortControllerRef","locale","get","entitySlug","slug","operation","auth","undefined","upload","docConfig","lockDocumentsProp","lockDocuments","isLockingEnabled","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","preventLeaveWithoutSaving","autosaveEnabled","versions","drafts","autosave","isReadOnlyForIncomingUser","setIsReadOnlyForIncomingUser","showTakeOverModal","setShowTakeOverModal","editSessionStartTime","setEditSessionStartTime","Date","now","lockExpiryTime","isLockExpired","documentLockStateRef","hasShownLockedModal","isLocked","classes","push","schemaPathSegments","setSchemaPathSegments","disableLocalStrategy","validateBeforeSubmit","setValidateBeforeSubmit","handleDocumentLocking","lockedState","previousOwnerId","current","lockedUserID","json","updatedAt","result","toISOString","doc","redirectRoute","path","controller","AbortController","docPreferences","state","data","renderAllFields","returnLockStatus","schemaPath","join","signal","onChange","formState","prevFormState","currentTime","timeSinceLastUpdate","updateLastEdited","shouldUnlockDocument","some","window","location","pathname","includes","shouldShowDocumentLockedModal","_jsx","className","filter","_jsxs","disabled","disableValidationOnSubmit","method","onSuccess","isActive","onReadOnly","onTakeOver","pluralLabel","labels","plural","useAsTitle","fallback","toString","customComponents","onDrawerCreateNew","permissions","readOnlyForIncomingUser","email","loginWithUsername","readOnly","requirePassword","useAPIKey","username","verify","uploadConfig","fields"],"sources":["../../../src/views/Edit/index.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientCollectionConfig,\n ClientGlobalConfig,\n ClientSideEditViewProps,\n ClientUser,\n FormState,\n} from 'payload'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { LockedState } from '../../utilities/buildFormState.js'\n\nimport { DocumentControls } from '../../elements/DocumentControls/index.js'\nimport { DocumentDrawerHeader } from '../../elements/DocumentDrawer/DrawerHeader/index.js'\nimport { useDocumentDrawerContext } from '../../elements/DocumentDrawer/Provider.js'\nimport { DocumentFields } from '../../elements/DocumentFields/index.js'\nimport { DocumentLocked } from '../../elements/DocumentLocked/index.js'\nimport { DocumentTakeOver } from '../../elements/DocumentTakeOver/index.js'\nimport { LeaveWithoutSaving } from '../../elements/LeaveWithoutSaving/index.js'\nimport { Upload } from '../../elements/Upload/index.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentEvents } from '../../providers/DocumentEvents/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { OperationProvider } from '../../providers/Operation/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { abortAndIgnore } from '../../utilities/abortAndIgnore.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { handleBackToDashboard } from '../../utilities/handleBackToDashboard.js'\nimport { handleGoBack } from '../../utilities/handleGoBack.js'\nimport { handleTakeOver } from '../../utilities/handleTakeOver.js'\nimport { Auth } from './Auth/index.js'\nimport { SetDocumentStepNav } from './SetDocumentStepNav/index.js'\nimport { SetDocumentTitle } from './SetDocumentTitle/index.js'\nimport './index.scss'\n\nconst baseClass = 'collection-edit'\n\n// This component receives props only on _pages_\n// When rendered within a drawer, props are empty\n// This is solely to support custom edit views which get server-rendered\nexport const DefaultEditView: React.FC<ClientSideEditViewProps> = ({\n Description,\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n Upload: CustomUpload,\n}) => {\n const {\n id,\n action,\n AfterDocument,\n AfterFields,\n apiURL,\n BeforeFields,\n collectionSlug,\n currentEditor,\n disableActions,\n disableCreate,\n disableLeaveWithoutSaving,\n docPermissions,\n documentIsLocked,\n getDocPermissions,\n getDocPreferences,\n globalSlug,\n hasPublishPermission,\n hasSavePermission,\n incrementVersionCount,\n initialState,\n isEditing,\n isInitializing,\n lastUpdateTime,\n redirectAfterDelete,\n redirectAfterDuplicate,\n savedDocumentData,\n setCurrentEditor,\n setDocumentIsLocked,\n unlockDocument,\n updateDocumentEditor,\n updateSavedDocumentData,\n } = useDocumentInfo()\n\n const {\n clearDoc,\n drawerSlug,\n onDelete,\n onDuplicate,\n onSave: onSaveFromContext,\n } = useDocumentDrawerContext()\n\n const isInDrawer = Boolean(drawerSlug)\n\n const { refreshCookieAsync, user } = useAuth()\n\n const {\n config,\n config: {\n admin: { user: userSlug },\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug }) as ClientCollectionConfig\n const globalConfig = getEntityConfig({ globalSlug }) as ClientGlobalConfig\n\n const depth = useEditDepth()\n\n const router = useRouter()\n const params = useSearchParams()\n const { reportUpdate } = useDocumentEvents()\n const { resetUploadEdits } = useUploadEdits()\n const { getFormState } = useServerFunctions()\n\n const onChangeAbortControllerRef = useRef<AbortController>(null)\n const onSaveAbortControllerRef = useRef<AbortController>(null)\n\n const locale = params.get('locale')\n\n const entitySlug = collectionConfig?.slug || globalConfig?.slug\n\n const operation = collectionSlug && !id ? 'create' : 'update'\n\n const auth = collectionConfig ? collectionConfig.auth : undefined\n const upload = collectionConfig ? collectionConfig.upload : undefined\n\n const docConfig = collectionConfig || globalConfig\n\n const lockDocumentsProp = docConfig?.lockDocuments !== undefined ? docConfig?.lockDocuments : true\n const isLockingEnabled = lockDocumentsProp !== false\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n let preventLeaveWithoutSaving = true\n let autosaveEnabled = false\n\n if (collectionConfig) {\n autosaveEnabled = Boolean(\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.autosave,\n )\n preventLeaveWithoutSaving = !autosaveEnabled\n } else if (globalConfig) {\n autosaveEnabled = Boolean(\n globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave,\n )\n preventLeaveWithoutSaving = !autosaveEnabled\n } else if (typeof disableLeaveWithoutSaving !== 'undefined') {\n preventLeaveWithoutSaving = !disableLeaveWithoutSaving\n }\n\n const [isReadOnlyForIncomingUser, setIsReadOnlyForIncomingUser] = useState(false)\n const [showTakeOverModal, setShowTakeOverModal] = useState(false)\n\n const [editSessionStartTime, setEditSessionStartTime] = useState(Date.now())\n\n const lockExpiryTime = lastUpdateTime + lockDurationInMilliseconds\n\n const isLockExpired = Date.now() > lockExpiryTime\n\n const documentLockStateRef = useRef<{\n hasShownLockedModal: boolean\n isLocked: boolean\n user: ClientUser | number | string\n } | null>({\n hasShownLockedModal: false,\n isLocked: false,\n user: null,\n })\n\n const classes = [baseClass, (id || globalSlug) && `${baseClass}--is-editing`]\n\n if (globalSlug) {\n classes.push(`global-edit--${globalSlug}`)\n }\n\n if (collectionSlug) {\n classes.push(`collection-edit--${collectionSlug}`)\n }\n\n const [schemaPathSegments, setSchemaPathSegments] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return [`_${entitySlug}`, 'auth']\n }\n\n return [entitySlug]\n })\n\n const [validateBeforeSubmit, setValidateBeforeSubmit] = useState(() => {\n if (operation === 'create' && auth && !auth.disableLocalStrategy) {\n return true\n }\n\n return false\n })\n\n const handleDocumentLocking = useCallback(\n (lockedState: LockedState) => {\n setDocumentIsLocked(true)\n const previousOwnerId =\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id\n : documentLockStateRef.current?.user\n\n if (lockedState) {\n const lockedUserID =\n typeof lockedState.user === 'string' || typeof lockedState.user === 'number'\n ? lockedState.user\n : lockedState.user.id\n\n if (!documentLockStateRef.current || lockedUserID !== previousOwnerId) {\n if (previousOwnerId === user.id && lockedUserID !== user.id) {\n setShowTakeOverModal(true)\n documentLockStateRef.current.hasShownLockedModal = true\n }\n\n documentLockStateRef.current = {\n hasShownLockedModal: documentLockStateRef.current?.hasShownLockedModal || false,\n isLocked: true,\n user: lockedState.user as ClientUser,\n }\n setCurrentEditor(lockedState.user as ClientUser)\n }\n }\n },\n [setCurrentEditor, setDocumentIsLocked, user.id],\n )\n\n const onSave = useCallback(\n async (json): Promise<FormState> => {\n reportUpdate({\n id,\n entitySlug,\n updatedAt: json?.result?.updatedAt || new Date().toISOString(),\n })\n\n // If we're editing the doc of the logged-in user,\n // Refresh the cookie to get new permissions\n if (user && collectionSlug === userSlug && id === user.id) {\n void refreshCookieAsync()\n }\n\n incrementVersionCount()\n\n if (typeof updateSavedDocumentData === 'function') {\n void updateSavedDocumentData(json?.doc || {})\n }\n\n if (typeof onSaveFromContext === 'function') {\n void onSaveFromContext({\n ...json,\n operation: id ? 'update' : 'create',\n })\n }\n\n if (!isEditing && depth < 2) {\n // Redirect to the same locale if it's been set\n const redirectRoute = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${json?.doc?.id}${locale ? `?locale=${locale}` : ''}`,\n })\n router.push(redirectRoute)\n } else {\n resetUploadEdits()\n }\n\n await getDocPermissions(json)\n\n if ((id || globalSlug) && !autosaveEnabled) {\n abortAndIgnore(onSaveAbortControllerRef.current)\n const controller = new AbortController()\n onSaveAbortControllerRef.current = controller\n\n const docPreferences = await getDocPreferences()\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: json?.doc,\n docPermissions,\n docPreferences,\n globalSlug,\n operation,\n renderAllFields: true,\n returnLockStatus: false,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n })\n\n // Unlock the document after save\n if (isLockingEnabled) {\n setDocumentIsLocked(false)\n }\n\n return state\n }\n },\n [\n adminRoute,\n collectionSlug,\n depth,\n docPermissions,\n entitySlug,\n getDocPermissions,\n getDocPreferences,\n getFormState,\n globalSlug,\n id,\n incrementVersionCount,\n isEditing,\n isLockingEnabled,\n locale,\n onSaveFromContext,\n operation,\n refreshCookieAsync,\n reportUpdate,\n resetUploadEdits,\n router,\n schemaPathSegments,\n setDocumentIsLocked,\n updateSavedDocumentData,\n user,\n userSlug,\n autosaveEnabled,\n ],\n )\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const currentTime = Date.now()\n const timeSinceLastUpdate = currentTime - editSessionStartTime\n\n const updateLastEdited = isLockingEnabled && timeSinceLastUpdate >= 10000 // 10 seconds\n\n if (updateLastEdited) {\n setEditSessionStartTime(currentTime)\n }\n\n const docPreferences = await getDocPreferences()\n\n const { lockedState, state } = await getFormState({\n id,\n collectionSlug,\n docPermissions,\n docPreferences,\n formState: prevFormState,\n globalSlug,\n operation,\n // Performance optimization: Setting it to false ensure that only fields that have explicit requireRender set in the form state will be rendered (e.g. new array rows).\n // We only want to render ALL fields on initial render, not in onChange.\n renderAllFields: false,\n returnLockStatus: isLockingEnabled,\n schemaPath: schemaPathSegments.join('.'),\n signal: controller.signal,\n updateLastEdited,\n })\n\n if (isLockingEnabled) {\n handleDocumentLocking(lockedState)\n }\n\n return state\n },\n [\n id,\n collectionSlug,\n getDocPreferences,\n getFormState,\n globalSlug,\n handleDocumentLocking,\n isLockingEnabled,\n operation,\n schemaPathSegments,\n docPermissions,\n editSessionStartTime,\n ],\n )\n\n // Clean up when the component unmounts or when the document is unlocked\n useEffect(() => {\n return () => {\n if (isLockingEnabled && documentIsLocked && (id || globalSlug)) {\n // Only retain the lock if the user is still viewing the document\n const shouldUnlockDocument = !['preview', 'api', 'versions'].some((path) =>\n window.location.pathname.includes(path),\n )\n if (shouldUnlockDocument) {\n // Check if this user is still the current editor\n if (\n typeof documentLockStateRef.current?.user === 'object'\n ? documentLockStateRef.current?.user?.id === user?.id\n : documentLockStateRef.current?.user === user?.id\n ) {\n void unlockDocument(id, collectionSlug ?? globalSlug)\n setDocumentIsLocked(false)\n setCurrentEditor(null)\n }\n }\n }\n\n setShowTakeOverModal(false)\n }\n }, [\n collectionSlug,\n globalSlug,\n id,\n unlockDocument,\n user,\n setCurrentEditor,\n isLockingEnabled,\n documentIsLocked,\n setDocumentIsLocked,\n ])\n\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n abortAndIgnore(onSaveAbortControllerRef.current)\n }\n }, [])\n\n const shouldShowDocumentLockedModal =\n documentIsLocked &&\n currentEditor &&\n (typeof currentEditor === 'object'\n ? currentEditor.id !== user?.id\n : currentEditor !== user?.id) &&\n !isReadOnlyForIncomingUser &&\n !showTakeOverModal &&\n !documentLockStateRef.current?.hasShownLockedModal &&\n !isLockExpired\n\n return (\n <main className={classes.filter(Boolean).join(' ')}>\n <OperationProvider operation={operation}>\n <Form\n action={action}\n className={`${baseClass}__form`}\n disabled={isReadOnlyForIncomingUser || isInitializing || !hasSavePermission}\n disableValidationOnSubmit={!validateBeforeSubmit}\n initialState={!isInitializing && initialState}\n isInitializing={isInitializing}\n method={id ? 'PATCH' : 'POST'}\n onChange={[onChange]}\n onSuccess={onSave}\n >\n {isInDrawer && <DocumentDrawerHeader drawerSlug={drawerSlug} />}\n {isLockingEnabled && shouldShowDocumentLockedModal && !isReadOnlyForIncomingUser && (\n <DocumentLocked\n handleGoBack={() => handleGoBack({ adminRoute, collectionSlug, router })}\n isActive={shouldShowDocumentLockedModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n false,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n )\n }\n updatedAt={lastUpdateTime}\n user={currentEditor}\n />\n )}\n {isLockingEnabled && showTakeOverModal && (\n <DocumentTakeOver\n handleBackToDashboard={() => handleBackToDashboard({ adminRoute, router })}\n isActive={showTakeOverModal}\n onReadOnly={() => {\n setIsReadOnlyForIncomingUser(true)\n setShowTakeOverModal(false)\n }}\n />\n )}\n {!isReadOnlyForIncomingUser && preventLeaveWithoutSaving && <LeaveWithoutSaving />}\n <SetDocumentStepNav\n collectionSlug={collectionConfig?.slug}\n globalSlug={globalConfig?.slug}\n id={id}\n pluralLabel={collectionConfig?.labels?.plural}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n <SetDocumentTitle\n collectionConfig={collectionConfig}\n config={config}\n fallback={depth <= 1 ? id?.toString() : undefined}\n globalConfig={globalConfig}\n />\n <DocumentControls\n apiURL={apiURL}\n customComponents={{\n PreviewButton,\n PublishButton,\n SaveButton,\n SaveDraftButton,\n }}\n data={savedDocumentData}\n disableActions={disableActions}\n disableCreate={disableCreate}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n id={id}\n isEditing={isEditing}\n onDelete={onDelete}\n onDrawerCreateNew={clearDoc}\n onDuplicate={onDuplicate}\n onSave={onSave}\n onTakeOver={() =>\n handleTakeOver(\n id,\n collectionSlug,\n globalSlug,\n user,\n true,\n updateDocumentEditor,\n setCurrentEditor,\n documentLockStateRef,\n isLockingEnabled,\n setIsReadOnlyForIncomingUser,\n )\n }\n permissions={docPermissions}\n readOnlyForIncomingUser={isReadOnlyForIncomingUser}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n slug={collectionConfig?.slug || globalConfig?.slug}\n user={currentEditor}\n />\n <DocumentFields\n AfterFields={AfterFields}\n BeforeFields={\n BeforeFields || (\n <Fragment>\n {auth && (\n <Auth\n className={`${baseClass}__auth`}\n collectionSlug={collectionConfig.slug}\n disableLocalStrategy={collectionConfig.auth?.disableLocalStrategy}\n email={savedDocumentData?.email}\n loginWithUsername={auth?.loginWithUsername}\n operation={operation}\n readOnly={!hasSavePermission}\n requirePassword={!id}\n setSchemaPathSegments={setSchemaPathSegments}\n setValidateBeforeSubmit={setValidateBeforeSubmit}\n useAPIKey={auth.useAPIKey}\n username={savedDocumentData?.username}\n verify={auth.verify}\n />\n )}\n {upload && (\n <React.Fragment>\n {CustomUpload || (\n <Upload\n collectionSlug={collectionConfig.slug}\n initialState={initialState}\n uploadConfig={upload}\n />\n )}\n </React.Fragment>\n )}\n </Fragment>\n )\n }\n Description={Description}\n docPermissions={docPermissions}\n fields={docConfig.fields}\n readOnly={isReadOnlyForIncomingUser || !hasSavePermission}\n schemaPathSegments={schemaPathSegments}\n />\n {AfterDocument}\n </Form>\n </OperationProvider>\n </main>\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.2.2-canary.265aa9e",
3
+ "version": "3.2.2-canary.317488d",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -132,7 +132,7 @@
132
132
  "ts-essentials": "10.0.3",
133
133
  "use-context-selector": "2.0.0",
134
134
  "uuid": "10.0.0",
135
- "@payloadcms/translations": "3.2.2-canary.265aa9e"
135
+ "@payloadcms/translations": "3.2.2-canary.317488d"
136
136
  },
137
137
  "devDependencies": {
138
138
  "@babel/cli": "^7.24.5",
@@ -150,14 +150,14 @@
150
150
  "esbuild": "0.23.1",
151
151
  "esbuild-sass-plugin": "3.3.1",
152
152
  "eslint-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110",
153
- "payload": "3.2.2-canary.265aa9e",
154
- "@payloadcms/eslint-config": "3.0.0"
153
+ "@payloadcms/eslint-config": "3.0.0",
154
+ "payload": "3.2.2-canary.317488d"
155
155
  },
156
156
  "peerDependencies": {
157
157
  "next": "^15.0.0",
158
158
  "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
159
159
  "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
160
- "payload": "3.2.2-canary.265aa9e"
160
+ "payload": "3.2.2-canary.317488d"
161
161
  },
162
162
  "engines": {
163
163
  "node": "^18.20.2 || >=20.9.0"
@@ -1,14 +0,0 @@
1
- "use client";
2
- // Workaround for react-datepicker and other cjs dependencies potentially inserting require("react") statements
3
- import * as requireReact from 'react';
4
- import * as requireReactDom from 'react-dom';
5
-
6
- function require(m) {
7
- if (m === 'react') return requireReact;
8
- if (m === 'react-dom') return requireReactDom;
9
- throw new Error(`Unknown module ${m}`);
10
- }
11
- // Workaround end
12
-
13
- import{c as $}from"react/compiler-runtime";import{jsx as v}from"react/jsx-runtime";import{createContext as R,useContext as M,useState as E}from"react";var k=R(void 0),J=l=>{let e=$(7),{children:t,config:r}=l,[o,m]=E(r),s;e[0]!==o.collections||e[1]!==o.globals?(s=u=>{let{collectionSlug:a,globalSlug:c}=u;return a?o.collections.find(f=>f.slug===a):c?o.globals.find(f=>f.slug===c):null},e[0]=o.collections,e[1]=o.globals,e[2]=s):s=e[2];let i=s,n;return e[3]!==o||e[4]!==i||e[5]!==t?(n=v(k.Provider,{value:{config:o,getEntityConfig:i,setConfig:m},children:t}),e[3]=o,e[4]=i,e[5]=t,e[6]=n):n=e[6],n},D=()=>M(k);import{c as P}from"react/compiler-runtime";import*as g from"react";var b=(l,e)=>{let t=P(9),r=e===void 0?!1:e,[o,m]=g.useState(!1),s=g.useRef(void 0),i;t[0]!==l?(i=()=>(m(!1),clearTimeout(s.current),s.current=setTimeout(()=>{m(!0)},l),()=>{clearTimeout(s.current)}),t[0]=l,t[1]=i):i=t[1];let n=i,u,a;t[2]!==r||t[3]!==n?(u=()=>{r&&n()},a=[n,r],t[2]=r,t[3]=n,t[4]=u,t[5]=a):(u=t[4],a=t[5]),g.useEffect(u,a);let c;return t[6]!==o||t[7]!==n?(c=[o,n],t[6]=o,t[7]=n,t[8]=c):c=t[8],c};import{c as j}from"react/compiler-runtime";import{jsx as x}from"react/jsx-runtime";import"react";var A=({animationDelay:l="0ms",height:e="60px",width:t="100%"})=>x("div",{className:"shimmer-effect",style:{height:typeof e=="number"?`${e}px`:e,width:typeof t=="number"?`${t}px`:t},children:x("div",{className:"shimmer-effect__shine",style:{animationDelay:l}})}),te=l=>{let e=j(7),{className:t,count:r,height:o,renderDelay:m,shimmerDelay:s,shimmerItemClassName:i,width:n}=l,u=m===void 0?500:m,a=s===void 0?25:s,c=typeof a=="number"?`${a}ms`:a,[f]=b(u,!0);if(!f)return null;let d;return e[0]!==r||e[1]!==i||e[2]!==c||e[3]!==o||e[4]!==n||e[5]!==t?(d=x("div",{className:t,children:[...Array(r)].map((C,p)=>x("div",{className:i,children:x(A,{animationDelay:`calc(${p} * ${c})`,height:o,width:n})},p))}),e[0]=r,e[1]=i,e[2]=c,e[3]=o,e[4]=n,e[5]=t,e[6]=d):d=e[6],d};import{c as N}from"react/compiler-runtime";import{jsx as S}from"react/jsx-runtime";import{createContext as F,useContext as O,useEffect as H,useState as w}from"react";var I={autoMode:!0,setTheme:()=>null,theme:"light"},_=F(I);function T(l,e,t){let r=new Date;r.setTime(r.getTime()+t*24*60*60*1e3);let o="expires="+r.toUTCString();document.cookie=l+"="+e+";"+o+";path=/"}var K=l=>{let e,t=window.document.cookie.split("; ").find(r=>r.startsWith(`${l}=`))?.split("=")[1];return t==="light"||t==="dark"?e=t:e=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",document.documentElement.setAttribute("data-theme",e),{theme:e,themeFromCookies:t}},U="light",ae=l=>{let e=N(11),{children:t,theme:r}=l,{config:o}=D(),m=o.admin.theme,s=`${o.cookiePrefix||"payload"}-theme`,[i,n]=w(r||U),[u,a]=w(),c,f;e[0]!==m||e[1]!==s?(c=()=>{if(m!=="all")return;let{theme:h,themeFromCookies:y}=K(s);n(h),a(!y)},f=[m,s],e[0]=m,e[1]=s,e[2]=c,e[3]=f):(c=e[2],f=e[3]),H(c,f);let d;e[4]!==s?(d=h=>{if(h==="light"||h==="dark")n(h),a(!1),T(s,h,365),document.documentElement.setAttribute("data-theme",h);else if(h==="auto"){T(s,h,-1);let y=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";document.documentElement.setAttribute("data-theme",y),a(!0),n(y)}},e[4]=s,e[5]=d):d=e[5];let C=d,p;return e[6]!==u||e[7]!==C||e[8]!==i||e[9]!==t?(p=S(_.Provider,{value:{autoMode:u,setTheme:C,theme:i},children:t}),e[6]=u,e[7]=C,e[8]=i,e[9]=t,e[10]=p):p=e[10],p},me=()=>O(_);export{J as a,D as b,b as c,A as d,te as e,U as f,ae as g,me as h};
14
- //# sourceMappingURL=chunk-PNHVQDTJ.js.map
@@ -1,8 +0,0 @@
1
- "use client";
2
- {
3
- "version": 3,
4
- "sources": ["../../../src/providers/Config/index.tsx", "../../../src/hooks/useDelay.ts", "../../../src/elements/ShimmerEffect/index.tsx", "../../../src/providers/Theme/index.tsx"],
5
- "sourcesContent": ["'use client'\nimport type { ClientCollectionConfig, ClientConfig, ClientGlobalConfig } from 'payload'\n\nimport React, { createContext, useCallback, useContext, useState } from 'react'\n\nexport type ClientConfigContext = {\n config: ClientConfig\n getEntityConfig: (args: {\n collectionSlug?: string\n globalSlug?: string\n }) => ClientCollectionConfig | ClientGlobalConfig | null\n setConfig: (config: ClientConfig) => void\n}\n\nexport type EntityConfigContext = {\n collectionConfig?: ClientCollectionConfig\n globalConfig?: ClientGlobalConfig\n setEntityConfig: (args: {\n collectionConfig?: ClientCollectionConfig | null\n globalConfig?: ClientGlobalConfig | null\n }) => void\n}\n\nconst RootConfigContext = createContext<ClientConfigContext | undefined>(undefined)\n\nexport const ConfigProvider: React.FC<{\n readonly children: React.ReactNode\n readonly config: ClientConfig\n}> = ({ children, config: configFromProps }) => {\n const [config, setConfig] = useState<ClientConfig>(configFromProps)\n\n const getEntityConfig = useCallback(\n ({ collectionSlug, globalSlug }: { collectionSlug?: string; globalSlug?: string }) => {\n if (collectionSlug) {\n return config.collections.find((collection) => collection.slug === collectionSlug)\n }\n\n if (globalSlug) {\n return config.globals.find((global) => global.slug === globalSlug)\n }\n\n return null\n },\n [config],\n )\n\n return (\n <RootConfigContext.Provider value={{ config, getEntityConfig, setConfig }}>\n {children}\n </RootConfigContext.Provider>\n )\n}\n\nexport const useConfig = (): ClientConfigContext => useContext(RootConfigContext)\n", "'use client'\nimport * as React from 'react'\n\ntype Result = [boolean, () => void]\nexport const useDelay = (delay: number, triggerOnMount = false): Result => {\n const [hasDelayed, setHasDelayed] = React.useState(false)\n const triggerTimeoutRef = React.useRef<NodeJS.Timeout>(undefined)\n\n const triggerDelay = React.useCallback(() => {\n setHasDelayed(false)\n clearTimeout(triggerTimeoutRef.current)\n triggerTimeoutRef.current = setTimeout(() => {\n setHasDelayed(true)\n }, delay)\n\n return () => {\n clearTimeout(triggerTimeoutRef.current)\n }\n }, [delay])\n\n React.useEffect(() => {\n if (triggerOnMount) {\n triggerDelay()\n }\n }, [triggerDelay, triggerOnMount])\n\n return [hasDelayed, triggerDelay]\n}\n", "'use client'\nimport * as React from 'react'\n\nimport { useDelay } from '../../hooks/useDelay.js'\nimport './index.scss'\n\nexport type ShimmerEffectProps = {\n readonly animationDelay?: string\n readonly height?: number | string\n readonly width?: number | string\n}\n\nexport const ShimmerEffect: React.FC<ShimmerEffectProps> = ({\n animationDelay = '0ms',\n height = '60px',\n width = '100%',\n}) => {\n return (\n <div\n className=\"shimmer-effect\"\n style={{\n height: typeof height === 'number' ? `${height}px` : height,\n width: typeof width === 'number' ? `${width}px` : width,\n }}\n >\n <div\n className=\"shimmer-effect__shine\"\n style={{\n animationDelay,\n }}\n />\n </div>\n )\n}\n\nexport type StaggeredShimmersProps = {\n className?: string\n count: number\n height?: number | string\n renderDelay?: number\n shimmerDelay?: number | string\n shimmerItemClassName?: string\n width?: number | string\n}\n\nexport const StaggeredShimmers: React.FC<StaggeredShimmersProps> = ({\n className,\n count,\n height,\n renderDelay = 500,\n shimmerDelay = 25,\n shimmerItemClassName,\n width,\n}) => {\n const shimmerDelayToPass = typeof shimmerDelay === 'number' ? `${shimmerDelay}ms` : shimmerDelay\n const [hasDelayed] = useDelay(renderDelay, true)\n\n if (!hasDelayed) {\n return null\n }\n\n return (\n <div className={className}>\n {[...Array(count)].map((_, i) => (\n <div className={shimmerItemClassName} key={i}>\n <ShimmerEffect\n animationDelay={`calc(${i} * ${shimmerDelayToPass})`}\n height={height}\n width={width}\n />\n </div>\n ))}\n </div>\n )\n}\n", "'use client'\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react'\n\nimport { useConfig } from '../Config/index.js'\n\nexport type Theme = 'dark' | 'light'\n\nexport type ThemeContext = {\n autoMode: boolean\n setTheme: (theme: Theme) => void\n theme: Theme\n}\n\nconst initialContext: ThemeContext = {\n autoMode: true,\n setTheme: () => null,\n theme: 'light',\n}\n\nconst Context = createContext(initialContext)\n\nfunction setCookie(cname, cvalue, exdays) {\n const d = new Date()\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000)\n const expires = 'expires=' + d.toUTCString()\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/'\n}\n\nconst getTheme = (\n cookieKey,\n): {\n theme: Theme\n themeFromCookies: null | string\n} => {\n let theme: Theme\n\n const themeFromCookies = window.document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${cookieKey}=`))\n ?.split('=')[1]\n\n if (themeFromCookies === 'light' || themeFromCookies === 'dark') {\n theme = themeFromCookies\n } else {\n theme =\n window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n }\n\n document.documentElement.setAttribute('data-theme', theme)\n\n return { theme, themeFromCookies }\n}\n\nexport const defaultTheme = 'light'\n\nexport const ThemeProvider: React.FC<{\n children?: React.ReactNode\n theme?: Theme\n}> = ({ children, theme: initialTheme }) => {\n const { config } = useConfig()\n\n const preselectedTheme = config.admin.theme\n const cookieKey = `${config.cookiePrefix || 'payload'}-theme`\n\n const [theme, setThemeState] = useState<Theme>(initialTheme || defaultTheme)\n\n const [autoMode, setAutoMode] = useState<boolean>()\n\n useEffect(() => {\n if (preselectedTheme !== 'all') {\n return\n }\n\n const { theme, themeFromCookies } = getTheme(cookieKey)\n setThemeState(theme)\n setAutoMode(!themeFromCookies)\n }, [preselectedTheme, cookieKey])\n\n const setTheme = useCallback(\n (themeToSet: 'auto' | Theme) => {\n if (themeToSet === 'light' || themeToSet === 'dark') {\n setThemeState(themeToSet)\n setAutoMode(false)\n setCookie(cookieKey, themeToSet, 365)\n document.documentElement.setAttribute('data-theme', themeToSet)\n } else if (themeToSet === 'auto') {\n // to delete the cookie, we set an expired date\n setCookie(cookieKey, themeToSet, -1)\n const themeFromOS =\n window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n document.documentElement.setAttribute('data-theme', themeFromOS)\n setAutoMode(true)\n setThemeState(themeFromOS)\n }\n },\n [cookieKey],\n )\n\n return <Context.Provider value={{ autoMode, setTheme, theme }}>{children}</Context.Provider>\n}\n\nexport const useTheme = (): ThemeContext => useContext(Context)\n"],
6
- "mappings": "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",
7
- "names": ["c", "_c", "createContext", "useContext", "useState", "RootConfigContext", "undefined", "ConfigProvider", "t0", "$", "children", "config", "configFromProps", "setConfig", "t1", "collections", "globals", "t2", "collectionSlug", "globalSlug", "find", "collection", "slug", "global", "getEntityConfig", "_jsx", "Provider", "value", "useConfig", "c", "_c", "React", "useDelay", "delay", "t0", "$", "triggerOnMount", "undefined", "hasDelayed", "setHasDelayed", "useState", "triggerTimeoutRef", "useRef", "t1", "clearTimeout", "current", "setTimeout", "triggerDelay", "t2", "t3", "useEffect", "t4", "c", "_c", "ShimmerEffect", "animationDelay", "height", "_jsx", "className", "style", "width", "StaggeredShimmers", "t0", "$", "_c", "count", "t1", "renderDelay", "shimmerDelay", "shimmerItemClassName", "undefined", "shimmerDelayToPass", "hasDelayed", "t3", "_", "i", "children", "c", "_c", "createContext", "useContext", "useEffect", "useState", "initialContext", "autoMode", "setTheme", "theme", "Context", "createContext", "setCookie", "cname", "cvalue", "exdays", "d", "Date", "setTime", "getTime", "expires", "toUTCString", "document", "cookie", "getTheme", "cookieKey", "themeFromCookies", "window", "split", "find", "row", "startsWith", "matchMedia", "matches", "documentElement", "setAttribute", "defaultTheme", "ThemeProvider", "t0", "$", "_c", "children", "initialTheme", "config", "useConfig", "preselectedTheme", "admin", "cookiePrefix", "setThemeState", "useState", "setAutoMode", "t1", "t2", "theme_0", "useEffect", "t3", "themeToSet", "themeFromOS", "t4", "_jsx", "Provider", "value", "useTheme", "useContext"]
8
- }