@payloadcms/ui 3.59.0-internal.56a1b3b → 3.59.0-internal.5ab25cf
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/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/dist/elements/CodeEditor/CodeEditor.js +2 -2
- package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
- package/dist/elements/GroupByBuilder/index.js +1 -1
- package/dist/elements/GroupByBuilder/index.js.map +1 -1
- package/dist/elements/LivePreview/Toggler/index.d.ts.map +1 -1
- package/dist/elements/LivePreview/Toggler/index.js +5 -1
- package/dist/elements/LivePreview/Toggler/index.js.map +1 -1
- package/dist/elements/Nav/context.d.ts +6 -0
- package/dist/elements/Nav/context.d.ts.map +1 -1
- package/dist/elements/Nav/context.js +6 -0
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/exports/client/{CodeEditor-R4I2K7IG.js → CodeEditor-2AHTKKBE.js} +2 -2
- package/dist/exports/client/{chunk-F5UB7KI3.js → chunk-6UH4KUYK.js} +4 -4
- package/dist/exports/client/chunk-6UH4KUYK.js.map +7 -0
- package/dist/exports/client/index.d.ts +3 -1
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +3 -3
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js +5 -1
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Code/index.d.ts.map +1 -1
- package/dist/fields/Code/index.js +3 -1
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/providers/LivePreview/context.d.ts +2 -2
- package/dist/providers/LivePreview/context.d.ts.map +1 -1
- package/dist/providers/LivePreview/context.js.map +1 -1
- package/dist/providers/LivePreview/index.d.ts.map +1 -1
- package/dist/providers/LivePreview/index.js +7 -2
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/utilities/dateLocales.d.ts +1 -0
- package/dist/utilities/dateLocales.d.ts.map +1 -1
- package/dist/utilities/dateLocales.js +2 -0
- package/dist/utilities/dateLocales.js.map +1 -1
- package/dist/utilities/handleLivePreview.d.ts +3 -3
- package/dist/utilities/handleLivePreview.d.ts.map +1 -1
- package/dist/utilities/handleLivePreview.js.map +1 -1
- package/dist/views/Edit/index.d.ts +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +12 -8
- package/dist/views/Edit/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/exports/client/chunk-F5UB7KI3.js.map +0 -7
- /package/dist/exports/client/{CodeEditor-R4I2K7IG.js.map → CodeEditor-2AHTKKBE.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Array/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EAG1B,MAAM,SAAS,CAAA;AAGhB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Array/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EAG1B,MAAM,SAAS,CAAA;AAGhB,OAAO,KAAyC,MAAM,OAAO,CAAA;AAiC7D,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,mBAAmB,EAAE,yBAybjC,CAAA;AAED,eAAO,MAAM,UAAU;;;;+EAAqC,CAAA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { getTranslation } from '@payloadcms/translations';
|
|
5
|
-
import React, { Fragment, useCallback } from 'react';
|
|
5
|
+
import React, { Fragment, useCallback, useMemo } from 'react';
|
|
6
6
|
import { toast } from 'sonner';
|
|
7
7
|
import { Banner } from '../../elements/Banner/index.js';
|
|
8
8
|
import { Button } from '../../elements/Button/index.js';
|
|
@@ -26,12 +26,14 @@ import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
|
|
|
26
26
|
import { useLocale } from '../../providers/Locale/index.js';
|
|
27
27
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
28
28
|
import { scrollToID } from '../../utilities/scrollToID.js';
|
|
29
|
+
import { mergeFieldStyles } from '../mergeFieldStyles.js';
|
|
29
30
|
import { fieldBaseClass } from '../shared/index.js';
|
|
30
31
|
import { ArrayRow } from './ArrayRow.js';
|
|
31
32
|
import './index.scss';
|
|
32
33
|
const baseClass = 'array-field';
|
|
33
34
|
export const ArrayFieldComponent = props => {
|
|
34
35
|
const {
|
|
36
|
+
field,
|
|
35
37
|
field: {
|
|
36
38
|
name,
|
|
37
39
|
type,
|
|
@@ -283,9 +285,11 @@ export const ArrayFieldComponent = props => {
|
|
|
283
285
|
const fieldHasErrors = submitted && errorPaths.length > 0;
|
|
284
286
|
const showRequired = (readOnly || disabled) && rows.length === 0;
|
|
285
287
|
const showMinRows = rows.length && rows.length < minRows || required && rows.length === 0;
|
|
288
|
+
const styles = useMemo(() => mergeFieldStyles(field), [field]);
|
|
286
289
|
return /*#__PURE__*/_jsxs("div", {
|
|
287
290
|
className: [fieldBaseClass, baseClass, className, fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`].filter(Boolean).join(' '),
|
|
288
291
|
id: `field-${path.replace(/\./g, '__')}`,
|
|
292
|
+
style: styles,
|
|
289
293
|
children: [showError && /*#__PURE__*/_jsx(RenderCustomComponent, {
|
|
290
294
|
CustomComponent: Error,
|
|
291
295
|
Fallback: /*#__PURE__*/_jsx(FieldError, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["getTranslation","React","Fragment","useCallback","toast","Banner","Button","clipboardCopy","clipboardPaste","ClipboardAction","mergeFormStateFromClipboard","reduceFormStateByPath","DraggableSortableItem","DraggableSortable","ErrorPill","RenderCustomComponent","FieldDescription","FieldError","FieldLabel","useForm","useFormSubmitted","extractRowsAndCollapsedIDs","toggleAllRows","NullifyLocaleField","useField","withCondition","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","fieldBaseClass","ArrayRow","baseClass","ArrayFieldComponent","props","field","name","type","admin","className","description","isSortable","fields","label","localized","maxRows","minRows","minRowsProp","required","forceRender","path","pathFromProps","permissions","readOnly","schemaPath","schemaPathFromProps","validate","setDocFieldPreferences","addFieldRow","dispatchFields","getFields","moveFieldRow","removeFieldRow","replaceState","setModified","submitted","code","locale","i18n","t","config","localization","editingDefaultLocale","fallback","defaultLocale","getLabels","p","labels","plural","singular","undefined","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","errorPaths","rows","showError","valid","hasRows","potentiallyStalePath","addRow","rowIndex","setTimeout","duplicateRow","removeRow","moveRow","moveFromIndex","moveToIndex","toggleCollapseAll","collapsed","collapsedIDs","updatedRows","setCollapse","rowID","copyRow","formState","clipboardResult","getDataToCopy","error","success","pasteRow","pasteArgs","onPaste","dataFromClipboard","newState","schemaFields","pasteField","hasMaxRows","length","fieldErrorCount","fieldHasErrors","showRequired","showMinRows","_jsxs","filter","Boolean","join","id","replace","_jsx","CustomComponent","Fallback","as","count","withMessage","onClick","allowCopy","allowPaste","fieldValue","ids","map","row","onDragEnd","rowData","i","isLoading","rowPath","rowErrorCount","errorPath","startsWith","draggableSortableItemProps","CustomRowLabel","RowLabel","errorCount","parentPath","rowCount","buttonStyle","icon","iconPosition","iconStyle","ArrayField"],"sources":["../../../src/fields/Array/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ArrayFieldClientComponent,\n ArrayFieldClientProps,\n ArrayField as ArrayFieldType,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport type { ClipboardPasteData } from '../../elements/ClipboardAction/types.js'\n\nimport { Banner } from '../../elements/Banner/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { clipboardCopy, clipboardPaste } from '../../elements/ClipboardAction/clipboardUtilities.js'\nimport { ClipboardAction } from '../../elements/ClipboardAction/index.js'\nimport {\n mergeFormStateFromClipboard,\n reduceFormStateByPath,\n} from '../../elements/ClipboardAction/mergeFormStateFromClipboard.js'\nimport { DraggableSortableItem } from '../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport { DraggableSortable } from '../../elements/DraggableSortable/index.js'\nimport { ErrorPill } from '../../elements/ErrorPill/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useForm, useFormSubmitted } from '../../forms/Form/context.js'\nimport { extractRowsAndCollapsedIDs, toggleAllRows } from '../../forms/Form/rowHelpers.js'\nimport { NullifyLocaleField } from '../../forms/NullifyField/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { scrollToID } from '../../utilities/scrollToID.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { ArrayRow } from './ArrayRow.js'\nimport './index.scss'\n\nconst baseClass = 'array-field'\n\nexport const ArrayFieldComponent: ArrayFieldClientComponent = (props) => {\n const {\n field: {\n name,\n type,\n admin: { className, description, isSortable = true } = {},\n fields,\n label,\n localized,\n maxRows,\n minRows: minRowsProp,\n required,\n },\n forceRender = false,\n path: pathFromProps,\n permissions,\n readOnly,\n schemaPath: schemaPathFromProps,\n validate,\n } = props\n\n const schemaPath = schemaPathFromProps ?? name\n\n const minRows = (minRowsProp ?? required) ? 1 : 0\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const {\n addFieldRow,\n dispatchFields,\n getFields,\n moveFieldRow,\n removeFieldRow,\n replaceState,\n setModified,\n } = useForm()\n const submitted = useFormSubmitted()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const {\n config: { localization },\n } = useConfig()\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale\n return locale === defaultLocale\n }\n\n return true\n })()\n\n // Handle labeling for Arrays, Global Arrays, and Blocks\n const getLabels = (p: ArrayFieldClientProps): Partial<ArrayFieldType['labels']> => {\n if ('labels' in p && p?.labels) {\n return p.labels\n }\n\n if ('labels' in p.field && p.field.labels) {\n return { plural: p.field.labels?.plural, singular: p.field.labels?.singular }\n }\n\n if ('label' in p.field && p.field.label) {\n return { plural: undefined, singular: p.field.label }\n }\n\n return { plural: t('general:rows'), singular: t('general:row') }\n }\n\n const labels = getLabels(props)\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n errorPaths,\n path,\n rows = [],\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n (rowIndex: number) => {\n addFieldRow({\n path,\n rowIndex,\n schemaPath,\n })\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex}`)\n }, 0)\n },\n [addFieldRow, path, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n removeFieldRow({ path, rowIndex })\n },\n [removeFieldRow, path],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n moveFieldRow({\n moveFromIndex,\n moveToIndex,\n path,\n })\n },\n [path, moveFieldRow],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = toggleAllRows({\n collapsed,\n rows,\n })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', path, updatedRows })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = extractRowsAndCollapsedIDs({\n collapsed,\n rowID,\n rows,\n })\n\n dispatchFields({ type: 'SET_ROW_COLLAPSED', path, updatedRows })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const copyRow = useCallback(\n (rowIndex: number) => {\n const formState = { ...getFields() }\n const clipboardResult = clipboardCopy({\n type,\n fields,\n getDataToCopy: () =>\n reduceFormStateByPath({\n formState,\n path,\n rowIndex,\n }),\n path,\n rowIndex,\n t,\n })\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n } else {\n toast.success(t('general:copied'))\n }\n },\n [fields, getFields, path, t, type],\n )\n\n const pasteRow = useCallback(\n (rowIndex: number) => {\n const formState = { ...getFields() }\n const pasteArgs = {\n onPaste: (dataFromClipboard: ClipboardPasteData) => {\n const newState = mergeFormStateFromClipboard({\n dataFromClipboard,\n formState,\n path,\n rowIndex,\n })\n replaceState(newState)\n setModified(true)\n },\n path,\n schemaFields: fields,\n t,\n }\n\n const clipboardResult = clipboardPaste(pasteArgs)\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n }\n },\n [fields, getFields, path, replaceState, setModified, t],\n )\n\n const pasteField = useCallback(\n (dataFromClipboard: ClipboardPasteData) => {\n const formState = { ...getFields() }\n const newState = mergeFormStateFromClipboard({\n dataFromClipboard,\n formState,\n path,\n })\n replaceState(newState)\n setModified(true)\n },\n [getFields, path, replaceState, setModified],\n )\n\n const getDataToCopy = useCallback(\n () =>\n reduceFormStateByPath({\n formState: { ...getFields() },\n path,\n }),\n [getFields, path],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount = errorPaths.length\n const fieldHasErrors = submitted && errorPaths.length > 0\n\n const showRequired = (readOnly || disabled) && rows.length === 0\n const showMinRows = (rows.length && rows.length < minRows) || (required && rows.length === 0)\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n >\n {showError && (\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n )}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__header-content`}>\n <h3 className={`${baseClass}__title`}>\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel\n as=\"span\"\n label={label}\n localized={localized}\n path={path}\n required={required}\n />\n }\n />\n </h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n <ul className={`${baseClass}__header-actions`}>\n {rows?.length > 0 && (\n <Fragment>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </Fragment>\n )}\n <li>\n <ClipboardAction\n allowCopy={rows?.length > 0}\n allowPaste={!readOnly}\n className={`${baseClass}__header-action`}\n disabled={disabled}\n fields={fields}\n getDataToCopy={getDataToCopy}\n onPaste={pasteField}\n path={path}\n type={type}\n />\n </li>\n </ul>\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </header>\n <NullifyLocaleField\n fieldValue={value}\n localized={localized}\n path={path}\n readOnly={readOnly}\n />\n {BeforeInput}\n {(rows?.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__draggable-rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((rowData, i) => {\n const { id: rowID, isLoading } = rowData\n\n const rowPath = `${path}.${i}`\n\n const rowErrorCount = errorPaths?.filter((errorPath) =>\n errorPath.startsWith(rowPath + '.'),\n ).length\n\n return (\n <DraggableSortableItem\n disabled={readOnly || disabled || !isSortable}\n id={rowID}\n key={rowID}\n >\n {(draggableSortableItemProps) => (\n <ArrayRow\n {...draggableSortableItemProps}\n addRow={addRow}\n copyRow={copyRow}\n CustomRowLabel={rows?.[i]?.customComponents?.RowLabel}\n duplicateRow={duplicateRow}\n errorCount={rowErrorCount}\n fields={fields}\n forceRender={forceRender}\n hasMaxRows={hasMaxRows}\n isLoading={isLoading}\n isSortable={isSortable}\n labels={labels}\n moveRow={moveRow}\n parentPath={path}\n pasteRow={pasteRow}\n path={rowPath}\n permissions={permissions}\n readOnly={readOnly || disabled}\n removeRow={removeRow}\n row={rowData}\n rowCount={rows?.length}\n rowIndex={i}\n schemaPath={schemaPath}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n )\n })}\n {!valid && (\n <React.Fragment>\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label:\n getTranslation(minRows > 1 ? labels.plural : labels.singular, i18n) ||\n t(minRows > 1 ? 'general:rows' : 'general:row'),\n })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!hasMaxRows && !readOnly && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-row`}\n disabled={disabled}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n void addRow(value || 0)\n }}\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n )}\n {AfterInput}\n </div>\n )\n}\n\nexport const ArrayField = withCondition(ArrayFieldComponent)\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["getTranslation","React","Fragment","useCallback","useMemo","toast","Banner","Button","clipboardCopy","clipboardPaste","ClipboardAction","mergeFormStateFromClipboard","reduceFormStateByPath","DraggableSortableItem","DraggableSortable","ErrorPill","RenderCustomComponent","FieldDescription","FieldError","FieldLabel","useForm","useFormSubmitted","extractRowsAndCollapsedIDs","toggleAllRows","NullifyLocaleField","useField","withCondition","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","mergeFieldStyles","fieldBaseClass","ArrayRow","baseClass","ArrayFieldComponent","props","field","name","type","admin","className","description","isSortable","fields","label","localized","maxRows","minRows","minRowsProp","required","forceRender","path","pathFromProps","permissions","readOnly","schemaPath","schemaPathFromProps","validate","setDocFieldPreferences","addFieldRow","dispatchFields","getFields","moveFieldRow","removeFieldRow","replaceState","setModified","submitted","code","locale","i18n","t","config","localization","editingDefaultLocale","fallback","defaultLocale","getLabels","p","labels","plural","singular","undefined","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","errorPaths","rows","showError","valid","hasRows","potentiallyStalePath","addRow","rowIndex","setTimeout","duplicateRow","removeRow","moveRow","moveFromIndex","moveToIndex","toggleCollapseAll","collapsed","collapsedIDs","updatedRows","setCollapse","rowID","copyRow","formState","clipboardResult","getDataToCopy","error","success","pasteRow","pasteArgs","onPaste","dataFromClipboard","newState","schemaFields","pasteField","hasMaxRows","length","fieldErrorCount","fieldHasErrors","showRequired","showMinRows","styles","_jsxs","filter","Boolean","join","id","replace","style","_jsx","CustomComponent","Fallback","as","count","withMessage","onClick","allowCopy","allowPaste","fieldValue","ids","map","row","onDragEnd","rowData","i","isLoading","rowPath","rowErrorCount","errorPath","startsWith","draggableSortableItemProps","CustomRowLabel","RowLabel","errorCount","parentPath","rowCount","buttonStyle","icon","iconPosition","iconStyle","ArrayField"],"sources":["../../../src/fields/Array/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ArrayFieldClientComponent,\n ArrayFieldClientProps,\n ArrayField as ArrayFieldType,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport type { ClipboardPasteData } from '../../elements/ClipboardAction/types.js'\n\nimport { Banner } from '../../elements/Banner/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { clipboardCopy, clipboardPaste } from '../../elements/ClipboardAction/clipboardUtilities.js'\nimport { ClipboardAction } from '../../elements/ClipboardAction/index.js'\nimport {\n mergeFormStateFromClipboard,\n reduceFormStateByPath,\n} from '../../elements/ClipboardAction/mergeFormStateFromClipboard.js'\nimport { DraggableSortableItem } from '../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport { DraggableSortable } from '../../elements/DraggableSortable/index.js'\nimport { ErrorPill } from '../../elements/ErrorPill/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useForm, useFormSubmitted } from '../../forms/Form/context.js'\nimport { extractRowsAndCollapsedIDs, toggleAllRows } from '../../forms/Form/rowHelpers.js'\nimport { NullifyLocaleField } from '../../forms/NullifyField/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { scrollToID } from '../../utilities/scrollToID.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { ArrayRow } from './ArrayRow.js'\nimport './index.scss'\n\nconst baseClass = 'array-field'\n\nexport const ArrayFieldComponent: ArrayFieldClientComponent = (props) => {\n const {\n field,\n field: {\n name,\n type,\n admin: { className, description, isSortable = true } = {},\n fields,\n label,\n localized,\n maxRows,\n minRows: minRowsProp,\n required,\n },\n forceRender = false,\n path: pathFromProps,\n permissions,\n readOnly,\n schemaPath: schemaPathFromProps,\n validate,\n } = props\n\n const schemaPath = schemaPathFromProps ?? name\n\n const minRows = (minRowsProp ?? required) ? 1 : 0\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const {\n addFieldRow,\n dispatchFields,\n getFields,\n moveFieldRow,\n removeFieldRow,\n replaceState,\n setModified,\n } = useForm()\n const submitted = useFormSubmitted()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n const {\n config: { localization },\n } = useConfig()\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale\n return locale === defaultLocale\n }\n\n return true\n })()\n\n // Handle labeling for Arrays, Global Arrays, and Blocks\n const getLabels = (p: ArrayFieldClientProps): Partial<ArrayFieldType['labels']> => {\n if ('labels' in p && p?.labels) {\n return p.labels\n }\n\n if ('labels' in p.field && p.field.labels) {\n return { plural: p.field.labels?.plural, singular: p.field.labels?.singular }\n }\n\n if ('label' in p.field && p.field.label) {\n return { plural: undefined, singular: p.field.label }\n }\n\n return { plural: t('general:rows'), singular: t('general:row') }\n }\n\n const labels = getLabels(props)\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n errorPaths,\n path,\n rows = [],\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n (rowIndex: number) => {\n addFieldRow({\n path,\n rowIndex,\n schemaPath,\n })\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex}`)\n }, 0)\n },\n [addFieldRow, path, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n removeFieldRow({ path, rowIndex })\n },\n [removeFieldRow, path],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n moveFieldRow({\n moveFromIndex,\n moveToIndex,\n path,\n })\n },\n [path, moveFieldRow],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = toggleAllRows({\n collapsed,\n rows,\n })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', path, updatedRows })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = extractRowsAndCollapsedIDs({\n collapsed,\n rowID,\n rows,\n })\n\n dispatchFields({ type: 'SET_ROW_COLLAPSED', path, updatedRows })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const copyRow = useCallback(\n (rowIndex: number) => {\n const formState = { ...getFields() }\n const clipboardResult = clipboardCopy({\n type,\n fields,\n getDataToCopy: () =>\n reduceFormStateByPath({\n formState,\n path,\n rowIndex,\n }),\n path,\n rowIndex,\n t,\n })\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n } else {\n toast.success(t('general:copied'))\n }\n },\n [fields, getFields, path, t, type],\n )\n\n const pasteRow = useCallback(\n (rowIndex: number) => {\n const formState = { ...getFields() }\n const pasteArgs = {\n onPaste: (dataFromClipboard: ClipboardPasteData) => {\n const newState = mergeFormStateFromClipboard({\n dataFromClipboard,\n formState,\n path,\n rowIndex,\n })\n replaceState(newState)\n setModified(true)\n },\n path,\n schemaFields: fields,\n t,\n }\n\n const clipboardResult = clipboardPaste(pasteArgs)\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n }\n },\n [fields, getFields, path, replaceState, setModified, t],\n )\n\n const pasteField = useCallback(\n (dataFromClipboard: ClipboardPasteData) => {\n const formState = { ...getFields() }\n const newState = mergeFormStateFromClipboard({\n dataFromClipboard,\n formState,\n path,\n })\n replaceState(newState)\n setModified(true)\n },\n [getFields, path, replaceState, setModified],\n )\n\n const getDataToCopy = useCallback(\n () =>\n reduceFormStateByPath({\n formState: { ...getFields() },\n path,\n }),\n [getFields, path],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount = errorPaths.length\n const fieldHasErrors = submitted && errorPaths.length > 0\n\n const showRequired = (readOnly || disabled) && rows.length === 0\n const showMinRows = (rows.length && rows.length < minRows) || (required && rows.length === 0)\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={styles}\n >\n {showError && (\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n )}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__header-content`}>\n <h3 className={`${baseClass}__title`}>\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel\n as=\"span\"\n label={label}\n localized={localized}\n path={path}\n required={required}\n />\n }\n />\n </h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n <ul className={`${baseClass}__header-actions`}>\n {rows?.length > 0 && (\n <Fragment>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </Fragment>\n )}\n <li>\n <ClipboardAction\n allowCopy={rows?.length > 0}\n allowPaste={!readOnly}\n className={`${baseClass}__header-action`}\n disabled={disabled}\n fields={fields}\n getDataToCopy={getDataToCopy}\n onPaste={pasteField}\n path={path}\n type={type}\n />\n </li>\n </ul>\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </header>\n <NullifyLocaleField\n fieldValue={value}\n localized={localized}\n path={path}\n readOnly={readOnly}\n />\n {BeforeInput}\n {(rows?.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__draggable-rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((rowData, i) => {\n const { id: rowID, isLoading } = rowData\n\n const rowPath = `${path}.${i}`\n\n const rowErrorCount = errorPaths?.filter((errorPath) =>\n errorPath.startsWith(rowPath + '.'),\n ).length\n\n return (\n <DraggableSortableItem\n disabled={readOnly || disabled || !isSortable}\n id={rowID}\n key={rowID}\n >\n {(draggableSortableItemProps) => (\n <ArrayRow\n {...draggableSortableItemProps}\n addRow={addRow}\n copyRow={copyRow}\n CustomRowLabel={rows?.[i]?.customComponents?.RowLabel}\n duplicateRow={duplicateRow}\n errorCount={rowErrorCount}\n fields={fields}\n forceRender={forceRender}\n hasMaxRows={hasMaxRows}\n isLoading={isLoading}\n isSortable={isSortable}\n labels={labels}\n moveRow={moveRow}\n parentPath={path}\n pasteRow={pasteRow}\n path={rowPath}\n permissions={permissions}\n readOnly={readOnly || disabled}\n removeRow={removeRow}\n row={rowData}\n rowCount={rows?.length}\n rowIndex={i}\n schemaPath={schemaPath}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n )\n })}\n {!valid && (\n <React.Fragment>\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label:\n getTranslation(minRows > 1 ? labels.plural : labels.singular, i18n) ||\n t(minRows > 1 ? 'general:rows' : 'general:row'),\n })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!hasMaxRows && !readOnly && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-row`}\n disabled={disabled}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n void addRow(value || 0)\n }}\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n )}\n {AfterInput}\n </div>\n )\n}\n\nexport const ArrayField = withCondition(ArrayFieldComponent)\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Code/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAWxE,OAAO,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Code/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAWxE,OAAO,cAAc,CAAA;AAmIrB,eAAO,MAAM,SAAS;;;;;;;+EAAoC,CAAA"}
|
|
@@ -25,6 +25,7 @@ const CodeFieldComponent = props => {
|
|
|
25
25
|
className,
|
|
26
26
|
description,
|
|
27
27
|
editorOptions,
|
|
28
|
+
editorProps,
|
|
28
29
|
language = 'javascript'
|
|
29
30
|
} = {},
|
|
30
31
|
label,
|
|
@@ -115,7 +116,8 @@ const CodeFieldComponent = props => {
|
|
|
115
116
|
value: stringValueRef.current,
|
|
116
117
|
wrapperProps: {
|
|
117
118
|
id: `field-${path?.replace(/\./g, '__')}`
|
|
118
|
-
}
|
|
119
|
+
},
|
|
120
|
+
...(editorProps || {})
|
|
119
121
|
}), AfterInput]
|
|
120
122
|
}), /*#__PURE__*/_jsx(RenderCustomComponent, {
|
|
121
123
|
CustomComponent: Description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useCallback","useEffect","useMemo","useState","CodeEditor","RenderCustomComponent","FieldDescription","FieldError","FieldLabel","useField","withCondition","mergeFieldStyles","fieldBaseClass","prismToMonacoLanguageMap","js","ts","baseClass","CodeFieldComponent","props","field","admin","className","description","editorOptions","language","label","localized","required","onMount","path","pathFromProps","readOnly","validate","inputChangeFromRef","useRef","recalculatedHeightAt","setRecalculatedHeightAt","Date","now","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","initialValue","setValue","showError","potentiallyStalePath","stringValueRef","undefined","handleChange","val","current","e","styles","_jsxs","filter","Boolean","join","style","_jsx","CustomComponent","Fallback","defaultLanguage","onChange","wrapperProps","id","replace","CodeField"],"sources":["../../../src/fields/Code/index.tsx"],"sourcesContent":["'use client'\nimport type { CodeFieldClientComponent } from 'payload'\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { CodeEditor } from '../../elements/CodeEditor/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nconst prismToMonacoLanguageMap = {\n js: 'javascript',\n ts: 'typescript',\n}\n\nconst baseClass = 'code-field'\n\nconst CodeFieldComponent: CodeFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { className, description, editorOptions, language = 'javascript' } = {},\n label,\n localized,\n required,\n },\n onMount,\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const inputChangeFromRef = React.useRef<'formState' | 'internalEditor'>('formState')\n const [recalculatedHeightAt, setRecalculatedHeightAt] = useState<number | undefined>(Date.now())\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<string>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const stringValueRef = React.useRef<string>(\n (value || initialValue) !== undefined ? (value ?? initialValue) : undefined,\n )\n\n const handleChange = useCallback(\n (val: string) => {\n if (readOnly || disabled) {\n return\n }\n inputChangeFromRef.current = 'internalEditor'\n\n try {\n setValue(val ? val : null)\n stringValueRef.current = val\n } catch (e) {\n setValue(val ? val : null)\n stringValueRef.current = val\n }\n },\n [readOnly, disabled, setValue],\n )\n\n useEffect(() => {\n if (inputChangeFromRef.current === 'formState') {\n stringValueRef.current =\n (value || initialValue) !== undefined ? (value ?? initialValue) : undefined\n setRecalculatedHeightAt(Date.now())\n }\n\n inputChangeFromRef.current = 'formState'\n }, [initialValue, path, value])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n (readOnly || disabled) && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n <CodeEditor\n defaultLanguage={prismToMonacoLanguageMap[language] || language}\n onChange={handleChange}\n onMount={onMount}\n options={editorOptions}\n readOnly={readOnly || disabled}\n recalculatedHeightAt={recalculatedHeightAt}\n value={stringValueRef.current}\n wrapperProps={{\n id: `field-${path?.replace(/\\./g, '__')}`,\n }}\n />\n {AfterInput}\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n\nexport const CodeField = withCondition(CodeFieldComponent)\n"],"mappings":"AAAA;;;AAGA,OAAOA,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ;AAEjE,SAASC,UAAU,QAAQ;AAC3B,SAASC,qBAAqB,QAAQ;AACtC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,UAAU,QAAQ;AAC3B,SAASC,UAAU,QAAQ;AAC3B,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,OAAO;AAEP,MAAMC,wBAAA,GAA2B;EAC/BC,EAAA,EAAI;EACJC,EAAA,EAAI;AACN;AAEA,MAAMC,SAAA,GAAY;AAElB,MAAMC,kBAAA,GAAgDC,KAAA;EACpD,MAAM;IACJC,KAAK;IACLA,KAAA,EAAO;MACLC,KAAA,EAAO;QAAEC,SAAS;QAAEC,WAAW;QAAEC,aAAa;QAAEC,QAAA,GAAW;MAAY,CAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useCallback","useEffect","useMemo","useState","CodeEditor","RenderCustomComponent","FieldDescription","FieldError","FieldLabel","useField","withCondition","mergeFieldStyles","fieldBaseClass","prismToMonacoLanguageMap","js","ts","baseClass","CodeFieldComponent","props","field","admin","className","description","editorOptions","editorProps","language","label","localized","required","onMount","path","pathFromProps","readOnly","validate","inputChangeFromRef","useRef","recalculatedHeightAt","setRecalculatedHeightAt","Date","now","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","initialValue","setValue","showError","potentiallyStalePath","stringValueRef","undefined","handleChange","val","current","e","styles","_jsxs","filter","Boolean","join","style","_jsx","CustomComponent","Fallback","defaultLanguage","onChange","wrapperProps","id","replace","CodeField"],"sources":["../../../src/fields/Code/index.tsx"],"sourcesContent":["'use client'\nimport type { CodeFieldClientComponent } from 'payload'\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { CodeEditor } from '../../elements/CodeEditor/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { mergeFieldStyles } from '../mergeFieldStyles.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nconst prismToMonacoLanguageMap = {\n js: 'javascript',\n ts: 'typescript',\n}\n\nconst baseClass = 'code-field'\n\nconst CodeFieldComponent: CodeFieldClientComponent = (props) => {\n const {\n field,\n field: {\n admin: { className, description, editorOptions, editorProps, language = 'javascript' } = {},\n label,\n localized,\n required,\n },\n onMount,\n path: pathFromProps,\n readOnly,\n validate,\n } = props\n\n const inputChangeFromRef = React.useRef<'formState' | 'internalEditor'>('formState')\n const [recalculatedHeightAt, setRecalculatedHeightAt] = useState<number | undefined>(Date.now())\n\n const memoizedValidate = useCallback(\n (value, options) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n initialValue,\n path,\n setValue,\n showError,\n value,\n } = useField<string>({\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const stringValueRef = React.useRef<string>(\n (value || initialValue) !== undefined ? (value ?? initialValue) : undefined,\n )\n\n const handleChange = useCallback(\n (val: string) => {\n if (readOnly || disabled) {\n return\n }\n inputChangeFromRef.current = 'internalEditor'\n\n try {\n setValue(val ? val : null)\n stringValueRef.current = val\n } catch (e) {\n setValue(val ? val : null)\n stringValueRef.current = val\n }\n },\n [readOnly, disabled, setValue],\n )\n\n useEffect(() => {\n if (inputChangeFromRef.current === 'formState') {\n stringValueRef.current =\n (value || initialValue) !== undefined ? (value ?? initialValue) : undefined\n setRecalculatedHeightAt(Date.now())\n }\n\n inputChangeFromRef.current = 'formState'\n }, [initialValue, path, value])\n\n const styles = useMemo(() => mergeFieldStyles(field), [field])\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n (readOnly || disabled) && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n style={styles}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${fieldBaseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n {BeforeInput}\n <CodeEditor\n defaultLanguage={prismToMonacoLanguageMap[language] || language}\n onChange={handleChange}\n onMount={onMount}\n options={editorOptions}\n readOnly={readOnly || disabled}\n recalculatedHeightAt={recalculatedHeightAt}\n value={stringValueRef.current}\n wrapperProps={{\n id: `field-${path?.replace(/\\./g, '__')}`,\n }}\n {...(editorProps || {})}\n />\n {AfterInput}\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n\nexport const CodeField = withCondition(CodeFieldComponent)\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { LivePreviewConfig } from 'payload';
|
|
1
|
+
import type { LivePreviewConfig, LivePreviewURLType } from 'payload';
|
|
2
2
|
import type { Dispatch } from 'react';
|
|
3
3
|
import type React from 'react';
|
|
4
4
|
import type { usePopupWindow } from '../../hooks/usePopupWindow.js';
|
|
@@ -60,7 +60,7 @@ export interface LivePreviewContextType {
|
|
|
60
60
|
* It is important to know which one it is, so that we can opt in/out of certain behaviors, e.g. calling the server to get the URL.
|
|
61
61
|
*/
|
|
62
62
|
typeofLivePreviewURL?: 'function' | 'string';
|
|
63
|
-
url:
|
|
63
|
+
url: LivePreviewURLType;
|
|
64
64
|
zoom: number;
|
|
65
65
|
}
|
|
66
66
|
export declare const LivePreviewContext: React.Context<LivePreviewContextType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;IAC5D,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC7C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACpD,oBAAoB,EAAE,OAAO,CAAA;IAC7B,gBAAgB,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kBAAkB,EAAE;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,iBAAiB,CAAC,CAAA;IACrE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;IACzC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,CAAA;IACrC,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,aAAa,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACrF,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,mBAAmB,EAAE,CAAC,gBAAgB,EAAE,OAAO,KAAK,IAAI,CAAA;IACxD,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,oBAAoB,EAAE,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAA;IACrE,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACpC,kBAAkB,EAAE,CAAC,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAChE;;;OAGG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe,EAAE;QACf,CAAC,EAAE,MAAM,CAAA;QACT,CAAC,EAAE,MAAM,CAAA;KACV,CAAA;IACD;;;OAGG;IACH,oBAAoB,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5C,GAAG,EAAE,kBAAkB,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,kBAAkB,uCAsC7B,CAAA;AAEF,eAAO,MAAM,qBAAqB,8BAAgC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["createContext","use","LivePreviewContext","appIsReady","breakpoint","undefined","breakpoints","iframeRef","isLivePreviewEnabled","isLivePreviewing","isPopupOpen","measuredDeviceSize","height","width","openPopupWindow","popupRef","previewWindowType","setAppIsReady","setBreakpoint","setHeight","setIsLivePreviewing","setLoadedURL","setMeasuredDeviceSize","setPreviewWindowType","setSize","setToolbarPosition","setURL","setWidth","setZoom","size","toolbarPosition","x","y","typeofLivePreviewURL","url","zoom","useLivePreviewContext"],"sources":["../../../src/providers/LivePreview/context.ts"],"sourcesContent":["'use client'\nimport type { LivePreviewConfig } from 'payload'\nimport type { Dispatch } from 'react'\nimport type React from 'react'\n\nimport { createContext, use } from 'react'\n\nimport type { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport type { SizeReducerAction } from './sizeReducer.js'\n\nexport interface LivePreviewContextType {\n appIsReady: boolean\n breakpoint: LivePreviewConfig['breakpoints'][number]['name']\n breakpoints: LivePreviewConfig['breakpoints']\n iframeRef: React.RefObject<HTMLIFrameElement | null>\n isLivePreviewEnabled: boolean\n isLivePreviewing: boolean\n isPopupOpen: boolean\n listeningForMessages?: boolean\n /**\n * The URL that has finished loading in the iframe or popup.\n * For example, if you set the `url`, it will begin to load into the iframe,\n * but `loadedURL` will not be set until the iframe's `onLoad` event fires.\n */\n loadedURL?: string\n measuredDeviceSize: {\n height: number\n width: number\n }\n openPopupWindow: ReturnType<typeof usePopupWindow>['openPopupWindow']\n popupRef?: React.RefObject<null | Window>\n previewWindowType: 'iframe' | 'popup'\n setAppIsReady: (appIsReady: boolean) => void\n setBreakpoint: (breakpoint: LivePreviewConfig['breakpoints'][number]['name']) => void\n setHeight: (height: number) => void\n setIsLivePreviewing: (isLivePreviewing: boolean) => void\n setLoadedURL: (loadedURL: string) => void\n setMeasuredDeviceSize: (size: { height: number; width: number }) => void\n setPreviewWindowType: (previewWindowType: 'iframe' | 'popup') => void\n setSize: Dispatch<SizeReducerAction>\n setToolbarPosition: (position: { x: number; y: number }) => void\n /**\n * Sets the URL of the preview (either iframe or popup).\n * Will trigger a reload of the window.\n */\n setURL: (url: string) => void\n setWidth: (width: number) => void\n setZoom: (zoom: number) => void\n size: {\n height: number\n width: number\n }\n toolbarPosition: {\n x: number\n y: number\n }\n /**\n * The live preview url property can be either a string or a function that returns a string.\n * It is important to know which one it is, so that we can opt in/out of certain behaviors, e.g. calling the server to get the URL.\n */\n typeofLivePreviewURL?: 'function' | 'string'\n url:
|
|
1
|
+
{"version":3,"file":"context.js","names":["createContext","use","LivePreviewContext","appIsReady","breakpoint","undefined","breakpoints","iframeRef","isLivePreviewEnabled","isLivePreviewing","isPopupOpen","measuredDeviceSize","height","width","openPopupWindow","popupRef","previewWindowType","setAppIsReady","setBreakpoint","setHeight","setIsLivePreviewing","setLoadedURL","setMeasuredDeviceSize","setPreviewWindowType","setSize","setToolbarPosition","setURL","setWidth","setZoom","size","toolbarPosition","x","y","typeofLivePreviewURL","url","zoom","useLivePreviewContext"],"sources":["../../../src/providers/LivePreview/context.ts"],"sourcesContent":["'use client'\nimport type { LivePreviewConfig, LivePreviewURLType } from 'payload'\nimport type { Dispatch } from 'react'\nimport type React from 'react'\n\nimport { createContext, use } from 'react'\n\nimport type { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport type { SizeReducerAction } from './sizeReducer.js'\n\nexport interface LivePreviewContextType {\n appIsReady: boolean\n breakpoint: LivePreviewConfig['breakpoints'][number]['name']\n breakpoints: LivePreviewConfig['breakpoints']\n iframeRef: React.RefObject<HTMLIFrameElement | null>\n isLivePreviewEnabled: boolean\n isLivePreviewing: boolean\n isPopupOpen: boolean\n listeningForMessages?: boolean\n /**\n * The URL that has finished loading in the iframe or popup.\n * For example, if you set the `url`, it will begin to load into the iframe,\n * but `loadedURL` will not be set until the iframe's `onLoad` event fires.\n */\n loadedURL?: string\n measuredDeviceSize: {\n height: number\n width: number\n }\n openPopupWindow: ReturnType<typeof usePopupWindow>['openPopupWindow']\n popupRef?: React.RefObject<null | Window>\n previewWindowType: 'iframe' | 'popup'\n setAppIsReady: (appIsReady: boolean) => void\n setBreakpoint: (breakpoint: LivePreviewConfig['breakpoints'][number]['name']) => void\n setHeight: (height: number) => void\n setIsLivePreviewing: (isLivePreviewing: boolean) => void\n setLoadedURL: (loadedURL: string) => void\n setMeasuredDeviceSize: (size: { height: number; width: number }) => void\n setPreviewWindowType: (previewWindowType: 'iframe' | 'popup') => void\n setSize: Dispatch<SizeReducerAction>\n setToolbarPosition: (position: { x: number; y: number }) => void\n /**\n * Sets the URL of the preview (either iframe or popup).\n * Will trigger a reload of the window.\n */\n setURL: (url: string) => void\n setWidth: (width: number) => void\n setZoom: (zoom: number) => void\n size: {\n height: number\n width: number\n }\n toolbarPosition: {\n x: number\n y: number\n }\n /**\n * The live preview url property can be either a string or a function that returns a string.\n * It is important to know which one it is, so that we can opt in/out of certain behaviors, e.g. calling the server to get the URL.\n */\n typeofLivePreviewURL?: 'function' | 'string'\n url: LivePreviewURLType\n zoom: number\n}\n\nexport const LivePreviewContext = createContext<LivePreviewContextType>({\n appIsReady: false,\n breakpoint: undefined,\n breakpoints: undefined,\n iframeRef: undefined,\n isLivePreviewEnabled: undefined,\n isLivePreviewing: false,\n isPopupOpen: false,\n measuredDeviceSize: {\n height: 0,\n width: 0,\n },\n openPopupWindow: () => {},\n popupRef: undefined,\n previewWindowType: 'iframe',\n setAppIsReady: () => {},\n setBreakpoint: () => {},\n setHeight: () => {},\n setIsLivePreviewing: () => {},\n setLoadedURL: () => {},\n setMeasuredDeviceSize: () => {},\n setPreviewWindowType: () => {},\n setSize: () => {},\n setToolbarPosition: () => {},\n setURL: () => {},\n setWidth: () => {},\n setZoom: () => {},\n size: {\n height: 0,\n width: 0,\n },\n toolbarPosition: {\n x: 0,\n y: 0,\n },\n typeofLivePreviewURL: undefined,\n url: undefined,\n zoom: 1,\n})\n\nexport const useLivePreviewContext = () => use(LivePreviewContext)\n"],"mappings":"AAAA;;AAKA,SAASA,aAAa,EAAEC,GAAG,QAAQ;AA4DnC,OAAO,MAAMC,kBAAA,GAAqBF,aAAA,CAAsC;EACtEG,UAAA,EAAY;EACZC,UAAA,EAAYC,SAAA;EACZC,WAAA,EAAaD,SAAA;EACbE,SAAA,EAAWF,SAAA;EACXG,oBAAA,EAAsBH,SAAA;EACtBI,gBAAA,EAAkB;EAClBC,WAAA,EAAa;EACbC,kBAAA,EAAoB;IAClBC,MAAA,EAAQ;IACRC,KAAA,EAAO;EACT;EACAC,eAAA,EAAiBA,CAAA,MAAO;EACxBC,QAAA,EAAUV,SAAA;EACVW,iBAAA,EAAmB;EACnBC,aAAA,EAAeA,CAAA,MAAO;EACtBC,aAAA,EAAeA,CAAA,MAAO;EACtBC,SAAA,EAAWA,CAAA,MAAO;EAClBC,mBAAA,EAAqBA,CAAA,MAAO;EAC5BC,YAAA,EAAcA,CAAA,MAAO;EACrBC,qBAAA,EAAuBA,CAAA,MAAO;EAC9BC,oBAAA,EAAsBA,CAAA,MAAO;EAC7BC,OAAA,EAASA,CAAA,MAAO;EAChBC,kBAAA,EAAoBA,CAAA,MAAO;EAC3BC,MAAA,EAAQA,CAAA,MAAO;EACfC,QAAA,EAAUA,CAAA,MAAO;EACjBC,OAAA,EAASA,CAAA,MAAO;EAChBC,IAAA,EAAM;IACJjB,MAAA,EAAQ;IACRC,KAAA,EAAO;EACT;EACAiB,eAAA,EAAiB;IACfC,CAAA,EAAG;IACHC,CAAA,EAAG;EACL;EACAC,oBAAA,EAAsB5B,SAAA;EACtB6B,GAAA,EAAK7B,SAAA;EACL8B,IAAA,EAAM;AACR;AAEA,OAAO,MAAMC,qBAAA,GAAwBA,CAAA,KAAMnC,GAAA,CAAIC,kBAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,iBAAiB,EAAsB,MAAM,SAAS,CAAA;AAG3F,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAU1D,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC9C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gBAAgB,EAAE,OAAO,CAAA;CAC1B,GAAG,IAAI,CAAC,sBAAsB,EAAE,sBAAsB,GAAG,KAAK,CAAC,CAAA;AAEhE,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAuPlE,CAAA"}
|
|
@@ -68,7 +68,10 @@ export const LivePreviewProvider = ({
|
|
|
68
68
|
* - resets `appIsReady` to `false` while the new URL is loading
|
|
69
69
|
*/
|
|
70
70
|
const setLivePreviewURL = useCallback(_incomingURL => {
|
|
71
|
-
|
|
71
|
+
let incomingURL;
|
|
72
|
+
if (typeof _incomingURL === 'string') {
|
|
73
|
+
incomingURL = formatAbsoluteURL(_incomingURL);
|
|
74
|
+
}
|
|
72
75
|
if (incomingURL !== url) {
|
|
73
76
|
setAppIsReady(false);
|
|
74
77
|
setURL(incomingURL);
|
|
@@ -78,7 +81,9 @@ export const LivePreviewProvider = ({
|
|
|
78
81
|
* `url` needs to be relative to the window, which cannot be done on initial render.
|
|
79
82
|
*/
|
|
80
83
|
useEffect(() => {
|
|
81
|
-
|
|
84
|
+
if (typeof urlFromProps === 'string') {
|
|
85
|
+
setURL(formatAbsoluteURL(urlFromProps));
|
|
86
|
+
}
|
|
82
87
|
}, [urlFromProps]);
|
|
83
88
|
// The toolbar needs to freely drag and drop around the page
|
|
84
89
|
const handleDragEnd = ev => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["DndContext","React","useCallback","useEffect","useMemo","useRef","useState","usePopupWindow","useDocumentInfo","usePreferences","formatAbsoluteURL","customCollisionDetection","LivePreviewContext","sizeReducer","LivePreviewProvider","breakpoints","incomingBreakpoints","children","isLivePreviewEnabled","isLivePreviewing","incomingIsLivePreviewing","typeofLivePreviewURL","url","urlFromProps","previewWindowType","setPreviewWindowType","setIsLivePreviewing","name","height","label","width","setURL","isPopupOpen","openPopupWindow","popupRef","eventType","appIsReady","setAppIsReady","listeningForMessages","setListeningForMessages","collectionSlug","globalSlug","isFirstRender","setPreference","iframeRef","loadedURL","setLoadedURL","zoom","setZoom","position","setPosition","x","y","size","setSize","useReducer","measuredDeviceSize","setMeasuredDeviceSize","breakpoint","setBreakpoint","setLivePreviewURL","_incomingURL","incomingURL","handleDragEnd","ev","over","id","newPos","delta","setWidth","type","value","setHeight","foundBreakpoint","find","bp","handleMessage","event","startsWith","origin","data","ready","window","addEventListener","removeEventListener","handleWindowChange","newPreviewWindowType","current","editViewType","_jsx","setToolbarPosition","toolbarPosition","collisionDetection","onDragEnd"],"sources":["../../../src/providers/LivePreview/index.tsx"],"sourcesContent":["'use client'\nimport type { CollectionPreferences, LivePreviewConfig } from 'payload'\n\nimport { DndContext } from '@dnd-kit/core'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { LivePreviewContextType } from './context.js'\n\nimport { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { formatAbsoluteURL } from '../../utilities/formatAbsoluteURL.js'\nimport { customCollisionDetection } from './collisionDetection.js'\nimport { LivePreviewContext } from './context.js'\nimport { sizeReducer } from './sizeReducer.js'\n\nexport type LivePreviewProviderProps = {\n appIsReady?: boolean\n breakpoints?: LivePreviewConfig['breakpoints']\n children: React.ReactNode\n deviceSize?: {\n height: number\n width: number\n }\n isLivePreviewEnabled?: boolean\n isLivePreviewing: boolean\n} & Pick<LivePreviewContextType, 'typeofLivePreviewURL' | 'url'>\n\nexport const LivePreviewProvider: React.FC<LivePreviewProviderProps> = ({\n breakpoints: incomingBreakpoints,\n children,\n isLivePreviewEnabled,\n isLivePreviewing: incomingIsLivePreviewing,\n typeofLivePreviewURL,\n url: urlFromProps,\n}) => {\n const [previewWindowType, setPreviewWindowType] = useState<'iframe' | 'popup'>('iframe')\n const [isLivePreviewing, setIsLivePreviewing] = useState(incomingIsLivePreviewing)\n\n const breakpoints: LivePreviewConfig['breakpoints'] = useMemo(\n () => [\n ...(incomingBreakpoints || []),\n {\n name: 'responsive',\n height: '100%',\n label: 'Responsive',\n width: '100%',\n },\n ],\n [incomingBreakpoints],\n )\n\n const [url, setURL] = useState<string>('')\n\n const { isPopupOpen, openPopupWindow, popupRef } = usePopupWindow({\n eventType: 'payload-live-preview',\n url,\n })\n\n const [appIsReady, setAppIsReady] = useState(false)\n const [listeningForMessages, setListeningForMessages] = useState(false)\n\n const { collectionSlug, globalSlug } = useDocumentInfo()\n\n const isFirstRender = useRef(true)\n\n const { setPreference } = usePreferences()\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null)\n\n const [loadedURL, setLoadedURL] = useState<string>()\n\n const [zoom, setZoom] = useState(1)\n\n const [position, setPosition] = useState({ x: 0, y: 0 })\n\n const [size, setSize] = React.useReducer(sizeReducer, { height: 0, width: 0 })\n\n const [measuredDeviceSize, setMeasuredDeviceSize] = useState({\n height: 0,\n width: 0,\n })\n\n const [breakpoint, setBreakpoint] =\n React.useState<LivePreviewConfig['breakpoints'][0]['name']>('responsive')\n\n /**\n * A \"middleware\" callback fn that does some additional work before `setURL`.\n * This is what we provide through context, bc it:\n * - ensures the URL is absolute\n * - resets `appIsReady` to `false` while the new URL is loading\n */\n const setLivePreviewURL = useCallback<LivePreviewContextType['setURL']>(\n (_incomingURL) => {\n const incomingURL = formatAbsoluteURL(_incomingURL)\n\n if (incomingURL !== url) {\n setAppIsReady(false)\n setURL(incomingURL)\n }\n },\n [url],\n )\n\n /**\n * `url` needs to be relative to the window, which cannot be done on initial render.\n */\n useEffect(() => {\n setURL(formatAbsoluteURL(urlFromProps))\n }, [urlFromProps])\n\n // The toolbar needs to freely drag and drop around the page\n const handleDragEnd = (ev) => {\n // only update position if the toolbar is completely within the preview area\n // otherwise reset it back to the previous position\n // TODO: reset to the nearest edge of the preview area\n if (ev.over && ev.over.id === 'live-preview-area') {\n const newPos = {\n x: position.x + ev.delta.x,\n y: position.y + ev.delta.y,\n }\n\n setPosition(newPos)\n } else {\n // reset\n }\n }\n\n const setWidth = useCallback(\n (width) => {\n setSize({ type: 'width', value: width })\n },\n [setSize],\n )\n\n const setHeight = useCallback(\n (height) => {\n setSize({ type: 'height', value: height })\n },\n [setSize],\n )\n\n // explicitly set new width and height when as new breakpoints are selected\n // exclude `custom` breakpoint as it is handled by the `setWidth` and `setHeight` directly\n useEffect(() => {\n const foundBreakpoint = breakpoints?.find((bp) => bp.name === breakpoint)\n\n if (\n foundBreakpoint &&\n breakpoint !== 'responsive' &&\n breakpoint !== 'custom' &&\n typeof foundBreakpoint?.width === 'number' &&\n typeof foundBreakpoint?.height === 'number'\n ) {\n setSize({\n type: 'reset',\n value: {\n height: foundBreakpoint.height,\n width: foundBreakpoint.width,\n },\n })\n }\n }, [breakpoint, breakpoints])\n\n /**\n * Receive the `ready` message from the popup window\n * This indicates that the app is ready to receive `window.postMessage` events\n * This is also the only cross-origin way of detecting when a popup window has loaded\n * Unlike iframe elements which have an `onLoad` handler, there is no way to access `window.open` on popups\n */\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (\n url?.startsWith(event.origin) &&\n event.data &&\n typeof event.data === 'object' &&\n event.data.type === 'payload-live-preview'\n ) {\n if (event.data.ready) {\n setAppIsReady(true)\n }\n }\n }\n\n window.addEventListener('message', handleMessage)\n\n setListeningForMessages(true)\n\n return () => {\n window.removeEventListener('message', handleMessage)\n }\n }, [url, listeningForMessages])\n\n const handleWindowChange = useCallback(\n (type: 'iframe' | 'popup') => {\n setAppIsReady(false)\n setPreviewWindowType(type)\n if (type === 'popup') {\n openPopupWindow()\n }\n },\n [openPopupWindow],\n )\n\n // when the user closes the popup window, switch back to the iframe\n // the `usePopupWindow` reports the `isPopupOpen` state for us to use here\n useEffect(() => {\n const newPreviewWindowType = isPopupOpen ? 'popup' : 'iframe'\n\n if (newPreviewWindowType !== previewWindowType) {\n handleWindowChange('iframe')\n }\n }, [previewWindowType, isPopupOpen, handleWindowChange])\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false\n return\n }\n\n void setPreference<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n {\n editViewType: isLivePreviewing ? 'live-preview' : 'default',\n },\n true,\n )\n }, [isLivePreviewing, setPreference, collectionSlug, globalSlug])\n\n return (\n <LivePreviewContext\n value={{\n appIsReady,\n breakpoint,\n breakpoints,\n iframeRef,\n isLivePreviewEnabled,\n isLivePreviewing,\n isPopupOpen,\n listeningForMessages,\n loadedURL,\n measuredDeviceSize,\n openPopupWindow,\n popupRef,\n previewWindowType,\n setAppIsReady,\n setBreakpoint,\n setHeight,\n setIsLivePreviewing,\n setLoadedURL,\n setMeasuredDeviceSize,\n setPreviewWindowType: handleWindowChange,\n setSize,\n setToolbarPosition: setPosition,\n setURL: setLivePreviewURL,\n setWidth,\n setZoom,\n size,\n toolbarPosition: position,\n typeofLivePreviewURL,\n url,\n zoom,\n }}\n >\n <DndContext collisionDetection={customCollisionDetection} onDragEnd={handleDragEnd}>\n {children}\n </DndContext>\n </LivePreviewContext>\n )\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,UAAU,QAAQ;AAC3B,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIzE,SAASC,cAAc,QAAQ;AAC/B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,wBAAwB,QAAQ;AACzC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,WAAW,QAAQ;AAc5B,OAAO,MAAMC,mBAAA,GAA0DA,CAAC;EACtEC,WAAA,EAAaC,mBAAmB;EAChCC,QAAQ;EACRC,oBAAoB;EACpBC,gBAAA,EAAkBC,wBAAwB;EAC1CC,oBAAoB;EACpBC,GAAA,EAAKC;AAAY,CAClB;EACC,MAAM,CAACC,iBAAA,EAAmBC,oBAAA,CAAqB,GAAGnB,QAAA,CAA6B;EAC/E,MAAM,CAACa,gBAAA,EAAkBO,mBAAA,CAAoB,GAAGpB,QAAA,CAASc,wBAAA;EAEzD,MAAML,WAAA,GAAgDX,OAAA,CACpD,MAAM,C,IACAY,mBAAA,IAAuB,EAAE,GAC7B;IACEW,IAAA,EAAM;IACNC,MAAA,EAAQ;IACRC,KAAA,EAAO;IACPC,KAAA,EAAO;EACT,EACD,EACD,CAACd,mBAAA,CAAoB;EAGvB,MAAM,CAACM,GAAA,EAAKS,MAAA,CAAO,GAAGzB,QAAA,CAAiB;EAEvC,MAAM;IAAE0B,WAAW;IAAEC,eAAe;IAAEC;EAAQ,CAAE,GAAG3B,cAAA,CAAe;IAChE4B,SAAA,EAAW;IACXb;EACF;EAEA,MAAM,CAACc,UAAA,EAAYC,aAAA,CAAc,GAAG/B,QAAA,CAAS;EAC7C,MAAM,CAACgC,oBAAA,EAAsBC,uBAAA,CAAwB,GAAGjC,QAAA,CAAS;EAEjE,MAAM;IAAEkC,cAAc;IAAEC;EAAU,CAAE,GAAGjC,eAAA;EAEvC,MAAMkC,aAAA,GAAgBrC,MAAA,CAAO;EAE7B,MAAM;IAAEsC;EAAa,CAAE,GAAGlC,cAAA;EAE1B,MAAMmC,SAAA,GAAY3C,KAAA,CAAMI,MAAM,CAAoB;EAElD,MAAM,CAACwC,SAAA,EAAWC,YAAA,CAAa,GAAGxC,QAAA;EAElC,MAAM,CAACyC,IAAA,EAAMC,OAAA,CAAQ,GAAG1C,QAAA,CAAS;EAEjC,MAAM,CAAC2C,QAAA,EAAUC,WAAA,CAAY,GAAG5C,QAAA,CAAS;IAAE6C,CAAA,EAAG;IAAGC,CAAA,EAAG;EAAE;EAEtD,MAAM,CAACC,IAAA,EAAMC,OAAA,CAAQ,GAAGrD,KAAA,CAAMsD,UAAU,CAAC1C,WAAA,EAAa;IAAEe,MAAA,EAAQ;IAAGE,KAAA,EAAO;EAAE;EAE5E,MAAM,CAAC0B,kBAAA,EAAoBC,qBAAA,CAAsB,GAAGnD,QAAA,CAAS;IAC3DsB,MAAA,EAAQ;IACRE,KAAA,EAAO;EACT;EAEA,MAAM,CAAC4B,UAAA,EAAYC,aAAA,CAAc,GAC/B1D,KAAA,CAAMK,QAAQ,CAA8C;EAE9D;;;;;;EAMA,MAAMsD,iBAAA,GAAoB1D,WAAA,CACvB2D,YAAA;IACC,MAAMC,WAAA,GAAcpD,iBAAA,CAAkBmD,YAAA;IAEtC,IAAIC,WAAA,KAAgBxC,GAAA,EAAK;MACvBe,aAAA,CAAc;MACdN,MAAA,CAAO+B,WAAA;IACT;EACF,GACA,CAACxC,GAAA,CAAI;EAGP;;;EAGAnB,SAAA,CAAU;IACR4B,MAAA,CAAOrB,iBAAA,CAAkBa,YAAA;EAC3B,GAAG,CAACA,YAAA,CAAa;EAEjB;EACA,MAAMwC,aAAA,GAAiBC,EAAA;IACrB;IACA;IACA;IACA,IAAIA,EAAA,CAAGC,IAAI,IAAID,EAAA,CAAGC,IAAI,CAACC,EAAE,KAAK,qBAAqB;MACjD,MAAMC,MAAA,GAAS;QACbhB,CAAA,EAAGF,QAAA,CAASE,CAAC,GAAGa,EAAA,CAAGI,KAAK,CAACjB,CAAC;QAC1BC,CAAA,EAAGH,QAAA,CAASG,CAAC,GAAGY,EAAA,CAAGI,KAAK,CAAChB;MAC3B;MAEAF,WAAA,CAAYiB,MAAA;IACd,OAAO;MACL;IAAA;EAEJ;EAEA,MAAME,QAAA,GAAWnE,WAAA,CACd4B,KAAA;IACCwB,OAAA,CAAQ;MAAEgB,IAAA,EAAM;MAASC,KAAA,EAAOzC;IAAM;EACxC,GACA,CAACwB,OAAA,CAAQ;EAGX,MAAMkB,SAAA,GAAYtE,WAAA,CACf0B,MAAA;IACC0B,OAAA,CAAQ;MAAEgB,IAAA,EAAM;MAAUC,KAAA,EAAO3C;IAAO;EAC1C,GACA,CAAC0B,OAAA,CAAQ;EAGX;EACA;EACAnD,SAAA,CAAU;IACR,MAAMsE,eAAA,GAAkB1D,WAAA,EAAa2D,IAAA,CAAMC,EAAA,IAAOA,EAAA,CAAGhD,IAAI,KAAK+B,UAAA;IAE9D,IACEe,eAAA,IACAf,UAAA,KAAe,gBACfA,UAAA,KAAe,YACf,OAAOe,eAAA,EAAiB3C,KAAA,KAAU,YAClC,OAAO2C,eAAA,EAAiB7C,MAAA,KAAW,UACnC;MACA0B,OAAA,CAAQ;QACNgB,IAAA,EAAM;QACNC,KAAA,EAAO;UACL3C,MAAA,EAAQ6C,eAAA,CAAgB7C,MAAM;UAC9BE,KAAA,EAAO2C,eAAA,CAAgB3C;QACzB;MACF;IACF;EACF,GAAG,CAAC4B,UAAA,EAAY3C,WAAA,CAAY;EAE5B;;;;;;EAMAZ,SAAA,CAAU;IACR,MAAMyE,aAAA,GAAiBC,KAAA;MACrB,IACEvD,GAAA,EAAKwD,UAAA,CAAWD,KAAA,CAAME,MAAM,KAC5BF,KAAA,CAAMG,IAAI,IACV,OAAOH,KAAA,CAAMG,IAAI,KAAK,YACtBH,KAAA,CAAMG,IAAI,CAACV,IAAI,KAAK,wBACpB;QACA,IAAIO,KAAA,CAAMG,IAAI,CAACC,KAAK,EAAE;UACpB5C,aAAA,CAAc;QAChB;MACF;IACF;IAEA6C,MAAA,CAAOC,gBAAgB,CAAC,WAAWP,aAAA;IAEnCrC,uBAAA,CAAwB;IAExB,OAAO;MACL2C,MAAA,CAAOE,mBAAmB,CAAC,WAAWR,aAAA;IACxC;EACF,GAAG,CAACtD,GAAA,EAAKgB,oBAAA,CAAqB;EAE9B,MAAM+C,kBAAA,GAAqBnF,WAAA,CACxBoE,IAAA;IACCjC,aAAA,CAAc;IACdZ,oBAAA,CAAqB6C,IAAA;IACrB,IAAIA,IAAA,KAAS,SAAS;MACpBrC,eAAA;IACF;EACF,GACA,CAACA,eAAA,CAAgB;EAGnB;EACA;EACA9B,SAAA,CAAU;IACR,MAAMmF,oBAAA,GAAuBtD,WAAA,GAAc,UAAU;IAErD,IAAIsD,oBAAA,KAAyB9D,iBAAA,EAAmB;MAC9C6D,kBAAA,CAAmB;IACrB;EACF,GAAG,CAAC7D,iBAAA,EAAmBQ,WAAA,EAAaqD,kBAAA,CAAmB;EAEvDlF,SAAA,CAAU;IACR,IAAIuC,aAAA,CAAc6C,OAAO,EAAE;MACzB7C,aAAA,CAAc6C,OAAO,GAAG;MACxB;IACF;IAEA,KAAK5C,aAAA,CACHH,cAAA,GAAiB,cAAcA,cAAA,EAAgB,GAAG,UAAUC,UAAA,EAAY,EACxE;MACE+C,YAAA,EAAcrE,gBAAA,GAAmB,iBAAiB;IACpD,GACA;EAEJ,GAAG,CAACA,gBAAA,EAAkBwB,aAAA,EAAeH,cAAA,EAAgBC,UAAA,CAAW;EAEhE,oBACEgD,IAAA,CAAC7E,kBAAA;IACC2D,KAAA,EAAO;MACLnC,UAAA;MACAsB,UAAA;MACA3C,WAAA;MACA6B,SAAA;MACA1B,oBAAA;MACAC,gBAAA;MACAa,WAAA;MACAM,oBAAA;MACAO,SAAA;MACAW,kBAAA;MACAvB,eAAA;MACAC,QAAA;MACAV,iBAAA;MACAa,aAAA;MACAsB,aAAA;MACAa,SAAA;MACA9C,mBAAA;MACAoB,YAAA;MACAW,qBAAA;MACAhC,oBAAA,EAAsB4D,kBAAA;MACtB/B,OAAA;MACAoC,kBAAA,EAAoBxC,WAAA;MACpBnB,MAAA,EAAQ6B,iBAAA;MACRS,QAAA;MACArB,OAAA;MACAK,IAAA;MACAsC,eAAA,EAAiB1C,QAAA;MACjB5B,oBAAA;MACAC,GAAA;MACAyB;IACF;cAEA,aAAA0C,IAAA,CAACzF,UAAA;MAAW4F,kBAAA,EAAoBjF,wBAAA;MAA0BkF,SAAA,EAAW9B,aAAA;gBAClE9C;;;AAIT","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["DndContext","React","useCallback","useEffect","useMemo","useRef","useState","usePopupWindow","useDocumentInfo","usePreferences","formatAbsoluteURL","customCollisionDetection","LivePreviewContext","sizeReducer","LivePreviewProvider","breakpoints","incomingBreakpoints","children","isLivePreviewEnabled","isLivePreviewing","incomingIsLivePreviewing","typeofLivePreviewURL","url","urlFromProps","previewWindowType","setPreviewWindowType","setIsLivePreviewing","name","height","label","width","setURL","isPopupOpen","openPopupWindow","popupRef","eventType","appIsReady","setAppIsReady","listeningForMessages","setListeningForMessages","collectionSlug","globalSlug","isFirstRender","setPreference","iframeRef","loadedURL","setLoadedURL","zoom","setZoom","position","setPosition","x","y","size","setSize","useReducer","measuredDeviceSize","setMeasuredDeviceSize","breakpoint","setBreakpoint","setLivePreviewURL","_incomingURL","incomingURL","handleDragEnd","ev","over","id","newPos","delta","setWidth","type","value","setHeight","foundBreakpoint","find","bp","handleMessage","event","startsWith","origin","data","ready","window","addEventListener","removeEventListener","handleWindowChange","newPreviewWindowType","current","editViewType","_jsx","setToolbarPosition","toolbarPosition","collisionDetection","onDragEnd"],"sources":["../../../src/providers/LivePreview/index.tsx"],"sourcesContent":["'use client'\nimport type { CollectionPreferences, LivePreviewConfig, LivePreviewURLType } from 'payload'\n\nimport { DndContext } from '@dnd-kit/core'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { LivePreviewContextType } from './context.js'\n\nimport { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { formatAbsoluteURL } from '../../utilities/formatAbsoluteURL.js'\nimport { customCollisionDetection } from './collisionDetection.js'\nimport { LivePreviewContext } from './context.js'\nimport { sizeReducer } from './sizeReducer.js'\n\nexport type LivePreviewProviderProps = {\n appIsReady?: boolean\n breakpoints?: LivePreviewConfig['breakpoints']\n children: React.ReactNode\n deviceSize?: {\n height: number\n width: number\n }\n isLivePreviewEnabled?: boolean\n isLivePreviewing: boolean\n} & Pick<LivePreviewContextType, 'typeofLivePreviewURL' | 'url'>\n\nexport const LivePreviewProvider: React.FC<LivePreviewProviderProps> = ({\n breakpoints: incomingBreakpoints,\n children,\n isLivePreviewEnabled,\n isLivePreviewing: incomingIsLivePreviewing,\n typeofLivePreviewURL,\n url: urlFromProps,\n}) => {\n const [previewWindowType, setPreviewWindowType] = useState<'iframe' | 'popup'>('iframe')\n const [isLivePreviewing, setIsLivePreviewing] = useState(incomingIsLivePreviewing)\n\n const breakpoints: LivePreviewConfig['breakpoints'] = useMemo(\n () => [\n ...(incomingBreakpoints || []),\n {\n name: 'responsive',\n height: '100%',\n label: 'Responsive',\n width: '100%',\n },\n ],\n [incomingBreakpoints],\n )\n\n const [url, setURL] = useState<string>('')\n\n const { isPopupOpen, openPopupWindow, popupRef } = usePopupWindow({\n eventType: 'payload-live-preview',\n url,\n })\n\n const [appIsReady, setAppIsReady] = useState(false)\n const [listeningForMessages, setListeningForMessages] = useState(false)\n\n const { collectionSlug, globalSlug } = useDocumentInfo()\n\n const isFirstRender = useRef(true)\n\n const { setPreference } = usePreferences()\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null)\n\n const [loadedURL, setLoadedURL] = useState<string>()\n\n const [zoom, setZoom] = useState(1)\n\n const [position, setPosition] = useState({ x: 0, y: 0 })\n\n const [size, setSize] = React.useReducer(sizeReducer, { height: 0, width: 0 })\n\n const [measuredDeviceSize, setMeasuredDeviceSize] = useState({\n height: 0,\n width: 0,\n })\n\n const [breakpoint, setBreakpoint] =\n React.useState<LivePreviewConfig['breakpoints'][0]['name']>('responsive')\n\n /**\n * A \"middleware\" callback fn that does some additional work before `setURL`.\n * This is what we provide through context, bc it:\n * - ensures the URL is absolute\n * - resets `appIsReady` to `false` while the new URL is loading\n */\n const setLivePreviewURL = useCallback<LivePreviewContextType['setURL']>(\n (_incomingURL) => {\n let incomingURL: LivePreviewURLType\n\n if (typeof _incomingURL === 'string') {\n incomingURL = formatAbsoluteURL(_incomingURL)\n }\n\n if (incomingURL !== url) {\n setAppIsReady(false)\n setURL(incomingURL)\n }\n },\n [url],\n )\n\n /**\n * `url` needs to be relative to the window, which cannot be done on initial render.\n */\n useEffect(() => {\n if (typeof urlFromProps === 'string') {\n setURL(formatAbsoluteURL(urlFromProps))\n }\n }, [urlFromProps])\n\n // The toolbar needs to freely drag and drop around the page\n const handleDragEnd = (ev) => {\n // only update position if the toolbar is completely within the preview area\n // otherwise reset it back to the previous position\n // TODO: reset to the nearest edge of the preview area\n if (ev.over && ev.over.id === 'live-preview-area') {\n const newPos = {\n x: position.x + ev.delta.x,\n y: position.y + ev.delta.y,\n }\n\n setPosition(newPos)\n } else {\n // reset\n }\n }\n\n const setWidth = useCallback(\n (width) => {\n setSize({ type: 'width', value: width })\n },\n [setSize],\n )\n\n const setHeight = useCallback(\n (height) => {\n setSize({ type: 'height', value: height })\n },\n [setSize],\n )\n\n // explicitly set new width and height when as new breakpoints are selected\n // exclude `custom` breakpoint as it is handled by the `setWidth` and `setHeight` directly\n useEffect(() => {\n const foundBreakpoint = breakpoints?.find((bp) => bp.name === breakpoint)\n\n if (\n foundBreakpoint &&\n breakpoint !== 'responsive' &&\n breakpoint !== 'custom' &&\n typeof foundBreakpoint?.width === 'number' &&\n typeof foundBreakpoint?.height === 'number'\n ) {\n setSize({\n type: 'reset',\n value: {\n height: foundBreakpoint.height,\n width: foundBreakpoint.width,\n },\n })\n }\n }, [breakpoint, breakpoints])\n\n /**\n * Receive the `ready` message from the popup window\n * This indicates that the app is ready to receive `window.postMessage` events\n * This is also the only cross-origin way of detecting when a popup window has loaded\n * Unlike iframe elements which have an `onLoad` handler, there is no way to access `window.open` on popups\n */\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (\n url?.startsWith(event.origin) &&\n event.data &&\n typeof event.data === 'object' &&\n event.data.type === 'payload-live-preview'\n ) {\n if (event.data.ready) {\n setAppIsReady(true)\n }\n }\n }\n\n window.addEventListener('message', handleMessage)\n\n setListeningForMessages(true)\n\n return () => {\n window.removeEventListener('message', handleMessage)\n }\n }, [url, listeningForMessages])\n\n const handleWindowChange = useCallback(\n (type: 'iframe' | 'popup') => {\n setAppIsReady(false)\n setPreviewWindowType(type)\n if (type === 'popup') {\n openPopupWindow()\n }\n },\n [openPopupWindow],\n )\n\n // when the user closes the popup window, switch back to the iframe\n // the `usePopupWindow` reports the `isPopupOpen` state for us to use here\n useEffect(() => {\n const newPreviewWindowType = isPopupOpen ? 'popup' : 'iframe'\n\n if (newPreviewWindowType !== previewWindowType) {\n handleWindowChange('iframe')\n }\n }, [previewWindowType, isPopupOpen, handleWindowChange])\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false\n return\n }\n\n void setPreference<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n {\n editViewType: isLivePreviewing ? 'live-preview' : 'default',\n },\n true,\n )\n }, [isLivePreviewing, setPreference, collectionSlug, globalSlug])\n\n return (\n <LivePreviewContext\n value={{\n appIsReady,\n breakpoint,\n breakpoints,\n iframeRef,\n isLivePreviewEnabled,\n isLivePreviewing,\n isPopupOpen,\n listeningForMessages,\n loadedURL,\n measuredDeviceSize,\n openPopupWindow,\n popupRef,\n previewWindowType,\n setAppIsReady,\n setBreakpoint,\n setHeight,\n setIsLivePreviewing,\n setLoadedURL,\n setMeasuredDeviceSize,\n setPreviewWindowType: handleWindowChange,\n setSize,\n setToolbarPosition: setPosition,\n setURL: setLivePreviewURL,\n setWidth,\n setZoom,\n size,\n toolbarPosition: position,\n typeofLivePreviewURL,\n url,\n zoom,\n }}\n >\n <DndContext collisionDetection={customCollisionDetection} onDragEnd={handleDragEnd}>\n {children}\n </DndContext>\n </LivePreviewContext>\n )\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,UAAU,QAAQ;AAC3B,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIzE,SAASC,cAAc,QAAQ;AAC/B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,wBAAwB,QAAQ;AACzC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,WAAW,QAAQ;AAc5B,OAAO,MAAMC,mBAAA,GAA0DA,CAAC;EACtEC,WAAA,EAAaC,mBAAmB;EAChCC,QAAQ;EACRC,oBAAoB;EACpBC,gBAAA,EAAkBC,wBAAwB;EAC1CC,oBAAoB;EACpBC,GAAA,EAAKC;AAAY,CAClB;EACC,MAAM,CAACC,iBAAA,EAAmBC,oBAAA,CAAqB,GAAGnB,QAAA,CAA6B;EAC/E,MAAM,CAACa,gBAAA,EAAkBO,mBAAA,CAAoB,GAAGpB,QAAA,CAASc,wBAAA;EAEzD,MAAML,WAAA,GAAgDX,OAAA,CACpD,MAAM,C,IACAY,mBAAA,IAAuB,EAAE,GAC7B;IACEW,IAAA,EAAM;IACNC,MAAA,EAAQ;IACRC,KAAA,EAAO;IACPC,KAAA,EAAO;EACT,EACD,EACD,CAACd,mBAAA,CAAoB;EAGvB,MAAM,CAACM,GAAA,EAAKS,MAAA,CAAO,GAAGzB,QAAA,CAAiB;EAEvC,MAAM;IAAE0B,WAAW;IAAEC,eAAe;IAAEC;EAAQ,CAAE,GAAG3B,cAAA,CAAe;IAChE4B,SAAA,EAAW;IACXb;EACF;EAEA,MAAM,CAACc,UAAA,EAAYC,aAAA,CAAc,GAAG/B,QAAA,CAAS;EAC7C,MAAM,CAACgC,oBAAA,EAAsBC,uBAAA,CAAwB,GAAGjC,QAAA,CAAS;EAEjE,MAAM;IAAEkC,cAAc;IAAEC;EAAU,CAAE,GAAGjC,eAAA;EAEvC,MAAMkC,aAAA,GAAgBrC,MAAA,CAAO;EAE7B,MAAM;IAAEsC;EAAa,CAAE,GAAGlC,cAAA;EAE1B,MAAMmC,SAAA,GAAY3C,KAAA,CAAMI,MAAM,CAAoB;EAElD,MAAM,CAACwC,SAAA,EAAWC,YAAA,CAAa,GAAGxC,QAAA;EAElC,MAAM,CAACyC,IAAA,EAAMC,OAAA,CAAQ,GAAG1C,QAAA,CAAS;EAEjC,MAAM,CAAC2C,QAAA,EAAUC,WAAA,CAAY,GAAG5C,QAAA,CAAS;IAAE6C,CAAA,EAAG;IAAGC,CAAA,EAAG;EAAE;EAEtD,MAAM,CAACC,IAAA,EAAMC,OAAA,CAAQ,GAAGrD,KAAA,CAAMsD,UAAU,CAAC1C,WAAA,EAAa;IAAEe,MAAA,EAAQ;IAAGE,KAAA,EAAO;EAAE;EAE5E,MAAM,CAAC0B,kBAAA,EAAoBC,qBAAA,CAAsB,GAAGnD,QAAA,CAAS;IAC3DsB,MAAA,EAAQ;IACRE,KAAA,EAAO;EACT;EAEA,MAAM,CAAC4B,UAAA,EAAYC,aAAA,CAAc,GAC/B1D,KAAA,CAAMK,QAAQ,CAA8C;EAE9D;;;;;;EAMA,MAAMsD,iBAAA,GAAoB1D,WAAA,CACvB2D,YAAA;IACC,IAAIC,WAAA;IAEJ,IAAI,OAAOD,YAAA,KAAiB,UAAU;MACpCC,WAAA,GAAcpD,iBAAA,CAAkBmD,YAAA;IAClC;IAEA,IAAIC,WAAA,KAAgBxC,GAAA,EAAK;MACvBe,aAAA,CAAc;MACdN,MAAA,CAAO+B,WAAA;IACT;EACF,GACA,CAACxC,GAAA,CAAI;EAGP;;;EAGAnB,SAAA,CAAU;IACR,IAAI,OAAOoB,YAAA,KAAiB,UAAU;MACpCQ,MAAA,CAAOrB,iBAAA,CAAkBa,YAAA;IAC3B;EACF,GAAG,CAACA,YAAA,CAAa;EAEjB;EACA,MAAMwC,aAAA,GAAiBC,EAAA;IACrB;IACA;IACA;IACA,IAAIA,EAAA,CAAGC,IAAI,IAAID,EAAA,CAAGC,IAAI,CAACC,EAAE,KAAK,qBAAqB;MACjD,MAAMC,MAAA,GAAS;QACbhB,CAAA,EAAGF,QAAA,CAASE,CAAC,GAAGa,EAAA,CAAGI,KAAK,CAACjB,CAAC;QAC1BC,CAAA,EAAGH,QAAA,CAASG,CAAC,GAAGY,EAAA,CAAGI,KAAK,CAAChB;MAC3B;MAEAF,WAAA,CAAYiB,MAAA;IACd,OAAO;MACL;IAAA;EAEJ;EAEA,MAAME,QAAA,GAAWnE,WAAA,CACd4B,KAAA;IACCwB,OAAA,CAAQ;MAAEgB,IAAA,EAAM;MAASC,KAAA,EAAOzC;IAAM;EACxC,GACA,CAACwB,OAAA,CAAQ;EAGX,MAAMkB,SAAA,GAAYtE,WAAA,CACf0B,MAAA;IACC0B,OAAA,CAAQ;MAAEgB,IAAA,EAAM;MAAUC,KAAA,EAAO3C;IAAO;EAC1C,GACA,CAAC0B,OAAA,CAAQ;EAGX;EACA;EACAnD,SAAA,CAAU;IACR,MAAMsE,eAAA,GAAkB1D,WAAA,EAAa2D,IAAA,CAAMC,EAAA,IAAOA,EAAA,CAAGhD,IAAI,KAAK+B,UAAA;IAE9D,IACEe,eAAA,IACAf,UAAA,KAAe,gBACfA,UAAA,KAAe,YACf,OAAOe,eAAA,EAAiB3C,KAAA,KAAU,YAClC,OAAO2C,eAAA,EAAiB7C,MAAA,KAAW,UACnC;MACA0B,OAAA,CAAQ;QACNgB,IAAA,EAAM;QACNC,KAAA,EAAO;UACL3C,MAAA,EAAQ6C,eAAA,CAAgB7C,MAAM;UAC9BE,KAAA,EAAO2C,eAAA,CAAgB3C;QACzB;MACF;IACF;EACF,GAAG,CAAC4B,UAAA,EAAY3C,WAAA,CAAY;EAE5B;;;;;;EAMAZ,SAAA,CAAU;IACR,MAAMyE,aAAA,GAAiBC,KAAA;MACrB,IACEvD,GAAA,EAAKwD,UAAA,CAAWD,KAAA,CAAME,MAAM,KAC5BF,KAAA,CAAMG,IAAI,IACV,OAAOH,KAAA,CAAMG,IAAI,KAAK,YACtBH,KAAA,CAAMG,IAAI,CAACV,IAAI,KAAK,wBACpB;QACA,IAAIO,KAAA,CAAMG,IAAI,CAACC,KAAK,EAAE;UACpB5C,aAAA,CAAc;QAChB;MACF;IACF;IAEA6C,MAAA,CAAOC,gBAAgB,CAAC,WAAWP,aAAA;IAEnCrC,uBAAA,CAAwB;IAExB,OAAO;MACL2C,MAAA,CAAOE,mBAAmB,CAAC,WAAWR,aAAA;IACxC;EACF,GAAG,CAACtD,GAAA,EAAKgB,oBAAA,CAAqB;EAE9B,MAAM+C,kBAAA,GAAqBnF,WAAA,CACxBoE,IAAA;IACCjC,aAAA,CAAc;IACdZ,oBAAA,CAAqB6C,IAAA;IACrB,IAAIA,IAAA,KAAS,SAAS;MACpBrC,eAAA;IACF;EACF,GACA,CAACA,eAAA,CAAgB;EAGnB;EACA;EACA9B,SAAA,CAAU;IACR,MAAMmF,oBAAA,GAAuBtD,WAAA,GAAc,UAAU;IAErD,IAAIsD,oBAAA,KAAyB9D,iBAAA,EAAmB;MAC9C6D,kBAAA,CAAmB;IACrB;EACF,GAAG,CAAC7D,iBAAA,EAAmBQ,WAAA,EAAaqD,kBAAA,CAAmB;EAEvDlF,SAAA,CAAU;IACR,IAAIuC,aAAA,CAAc6C,OAAO,EAAE;MACzB7C,aAAA,CAAc6C,OAAO,GAAG;MACxB;IACF;IAEA,KAAK5C,aAAA,CACHH,cAAA,GAAiB,cAAcA,cAAA,EAAgB,GAAG,UAAUC,UAAA,EAAY,EACxE;MACE+C,YAAA,EAAcrE,gBAAA,GAAmB,iBAAiB;IACpD,GACA;EAEJ,GAAG,CAACA,gBAAA,EAAkBwB,aAAA,EAAeH,cAAA,EAAgBC,UAAA,CAAW;EAEhE,oBACEgD,IAAA,CAAC7E,kBAAA;IACC2D,KAAA,EAAO;MACLnC,UAAA;MACAsB,UAAA;MACA3C,WAAA;MACA6B,SAAA;MACA1B,oBAAA;MACAC,gBAAA;MACAa,WAAA;MACAM,oBAAA;MACAO,SAAA;MACAW,kBAAA;MACAvB,eAAA;MACAC,QAAA;MACAV,iBAAA;MACAa,aAAA;MACAsB,aAAA;MACAa,SAAA;MACA9C,mBAAA;MACAoB,YAAA;MACAW,qBAAA;MACAhC,oBAAA,EAAsB4D,kBAAA;MACtB/B,OAAA;MACAoC,kBAAA,EAAoBxC,WAAA;MACpBnB,MAAA,EAAQ6B,iBAAA;MACRS,QAAA;MACArB,OAAA;MACAK,IAAA;MACAsC,eAAA,EAAiB1C,QAAA;MACjB5B,oBAAA;MACAC,GAAA;MACAyB;IACF;cAEA,aAAA0C,IAAA,CAACzF,UAAA;MAAW4F,kBAAA,EAAoBjF,wBAAA;MAA0BkF,SAAA,EAAW9B,aAAA;gBAClE9C;;;AAIT","ignoreList":[]}
|
|
@@ -10,6 +10,7 @@ export declare const dateLocales: {
|
|
|
10
10
|
fr: import("date-fns").Locale;
|
|
11
11
|
hr: import("date-fns").Locale;
|
|
12
12
|
hu: import("date-fns").Locale;
|
|
13
|
+
is: import("date-fns").Locale;
|
|
13
14
|
it: import("date-fns").Locale;
|
|
14
15
|
ja: import("date-fns").Locale;
|
|
15
16
|
ko: import("date-fns").Locale;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateLocales.d.ts","sourceRoot":"","sources":["../../src/utilities/dateLocales.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dateLocales.d.ts","sourceRoot":"","sources":["../../src/utilities/dateLocales.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BvB,CAAA"}
|
|
@@ -9,6 +9,7 @@ import { faIR } from 'date-fns/locale/fa-IR';
|
|
|
9
9
|
import { fr } from 'date-fns/locale/fr';
|
|
10
10
|
import { hr } from 'date-fns/locale/hr';
|
|
11
11
|
import { hu } from 'date-fns/locale/hu';
|
|
12
|
+
import { is } from 'date-fns/locale/is';
|
|
12
13
|
import { it } from 'date-fns/locale/it';
|
|
13
14
|
import { ja } from 'date-fns/locale/ja';
|
|
14
15
|
import { ko } from 'date-fns/locale/ko';
|
|
@@ -36,6 +37,7 @@ export const dateLocales = {
|
|
|
36
37
|
fr,
|
|
37
38
|
hr,
|
|
38
39
|
hu,
|
|
40
|
+
is,
|
|
39
41
|
it,
|
|
40
42
|
ja,
|
|
41
43
|
ko,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateLocales.js","names":["ar","az","bg","cs","de","enUS","es","faIR","fr","hr","hu","it","ja","ko","nb","nl","pl","pt","ro","ru","sv","th","tr","vi","zhCN","zhTW","dateLocales","fa","zh"],"sources":["../../src/utilities/dateLocales.ts"],"sourcesContent":["import { ar } from 'date-fns/locale/ar'\nimport { az } from 'date-fns/locale/az'\nimport { bg } from 'date-fns/locale/bg'\nimport { cs } from 'date-fns/locale/cs'\nimport { de } from 'date-fns/locale/de'\nimport { enUS } from 'date-fns/locale/en-US'\nimport { es } from 'date-fns/locale/es'\nimport { faIR } from 'date-fns/locale/fa-IR'\nimport { fr } from 'date-fns/locale/fr'\nimport { hr } from 'date-fns/locale/hr'\nimport { hu } from 'date-fns/locale/hu'\nimport { it } from 'date-fns/locale/it'\nimport { ja } from 'date-fns/locale/ja'\nimport { ko } from 'date-fns/locale/ko'\nimport { nb } from 'date-fns/locale/nb'\nimport { nl } from 'date-fns/locale/nl'\nimport { pl } from 'date-fns/locale/pl'\nimport { pt } from 'date-fns/locale/pt'\nimport { ro } from 'date-fns/locale/ro'\nimport { ru } from 'date-fns/locale/ru'\nimport { sv } from 'date-fns/locale/sv'\nimport { th } from 'date-fns/locale/th'\nimport { tr } from 'date-fns/locale/tr'\nimport { vi } from 'date-fns/locale/vi'\nimport { zhCN } from 'date-fns/locale/zh-CN'\nimport { zhTW } from 'date-fns/locale/zh-TW'\n\nexport const dateLocales = {\n ar,\n az,\n bg,\n cs,\n de,\n enUS,\n es,\n fa: faIR,\n fr,\n hr,\n hu,\n it,\n ja,\n ko,\n nb,\n nl,\n pl,\n pt,\n ro,\n ru,\n sv,\n th,\n tr,\n vi,\n zh: zhCN,\n 'zh-tw': zhTW,\n}\n"],"mappings":"AAAA,SAASA,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,IAAI,QAAQ;AACrB,SAASC,EAAE,QAAQ;AACnB,SAASC,IAAI,QAAQ;AACrB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,IAAI,QAAQ;AACrB,SAASC,IAAI,QAAQ;AAErB,OAAO,MAAMC,WAAA,GAAc;
|
|
1
|
+
{"version":3,"file":"dateLocales.js","names":["ar","az","bg","cs","de","enUS","es","faIR","fr","hr","hu","is","it","ja","ko","nb","nl","pl","pt","ro","ru","sv","th","tr","vi","zhCN","zhTW","dateLocales","fa","zh"],"sources":["../../src/utilities/dateLocales.ts"],"sourcesContent":["import { ar } from 'date-fns/locale/ar'\nimport { az } from 'date-fns/locale/az'\nimport { bg } from 'date-fns/locale/bg'\nimport { cs } from 'date-fns/locale/cs'\nimport { de } from 'date-fns/locale/de'\nimport { enUS } from 'date-fns/locale/en-US'\nimport { es } from 'date-fns/locale/es'\nimport { faIR } from 'date-fns/locale/fa-IR'\nimport { fr } from 'date-fns/locale/fr'\nimport { hr } from 'date-fns/locale/hr'\nimport { hu } from 'date-fns/locale/hu'\nimport { is } from 'date-fns/locale/is'\nimport { it } from 'date-fns/locale/it'\nimport { ja } from 'date-fns/locale/ja'\nimport { ko } from 'date-fns/locale/ko'\nimport { nb } from 'date-fns/locale/nb'\nimport { nl } from 'date-fns/locale/nl'\nimport { pl } from 'date-fns/locale/pl'\nimport { pt } from 'date-fns/locale/pt'\nimport { ro } from 'date-fns/locale/ro'\nimport { ru } from 'date-fns/locale/ru'\nimport { sv } from 'date-fns/locale/sv'\nimport { th } from 'date-fns/locale/th'\nimport { tr } from 'date-fns/locale/tr'\nimport { vi } from 'date-fns/locale/vi'\nimport { zhCN } from 'date-fns/locale/zh-CN'\nimport { zhTW } from 'date-fns/locale/zh-TW'\n\nexport const dateLocales = {\n ar,\n az,\n bg,\n cs,\n de,\n enUS,\n es,\n fa: faIR,\n fr,\n hr,\n hu,\n is,\n it,\n ja,\n ko,\n nb,\n nl,\n pl,\n pt,\n ro,\n ru,\n sv,\n th,\n tr,\n vi,\n zh: zhCN,\n 'zh-tw': zhTW,\n}\n"],"mappings":"AAAA,SAASA,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,IAAI,QAAQ;AACrB,SAASC,EAAE,QAAQ;AACnB,SAASC,IAAI,QAAQ;AACrB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,EAAE,QAAQ;AACnB,SAASC,IAAI,QAAQ;AACrB,SAASC,IAAI,QAAQ;AAErB,OAAO,MAAMC,WAAA,GAAc;EACzB3B,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,IAAA;EACAC,EAAA;EACAsB,EAAA,EAAIrB,IAAA;EACJC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAC,EAAA;EACAK,EAAA,EAAIJ,IAAA;EACJ,SAASC;AACX","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CollectionConfig, GlobalConfig, LivePreviewConfig, Operation, PayloadRequest, SanitizedConfig } from 'payload';
|
|
1
|
+
import type { CollectionConfig, GlobalConfig, LivePreviewConfig, LivePreviewURLType, Operation, PayloadRequest, SanitizedConfig } from 'payload';
|
|
2
2
|
export declare const getLivePreviewConfig: ({ collectionConfig, config, globalConfig, isLivePreviewEnabled, }: {
|
|
3
3
|
collectionConfig?: CollectionConfig;
|
|
4
4
|
config: SanitizedConfig;
|
|
@@ -18,7 +18,7 @@ export declare const getLivePreviewConfig: ({ collectionConfig, config, globalCo
|
|
|
18
18
|
locale: import("payload").Locale;
|
|
19
19
|
payload: import("payload").Payload;
|
|
20
20
|
req: PayloadRequest;
|
|
21
|
-
}) => Promise<
|
|
21
|
+
}) => LivePreviewURLType | Promise<LivePreviewURLType>) | LivePreviewURLType;
|
|
22
22
|
collections?: string[];
|
|
23
23
|
globals?: string[];
|
|
24
24
|
};
|
|
@@ -53,6 +53,6 @@ export declare const handleLivePreview: ({ collectionSlug, config, data, globalS
|
|
|
53
53
|
}) => Promise<{
|
|
54
54
|
isLivePreviewEnabled?: boolean;
|
|
55
55
|
livePreviewConfig?: LivePreviewConfig;
|
|
56
|
-
livePreviewURL?:
|
|
56
|
+
livePreviewURL?: LivePreviewURLType;
|
|
57
57
|
}>;
|
|
58
58
|
//# sourceMappingURL=handleLivePreview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleLivePreview.d.ts","sourceRoot":"","sources":["../../src/utilities/handleLivePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,eAAe,EAChB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,oBAAoB,sEAK9B;IACD,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,oBAAoB,EAAE,OAAO,CAAA;CAC9B;;;;;;;;
|
|
1
|
+
{"version":3,"file":"handleLivePreview.d.ts","sourceRoot":"","sources":["../../src/utilities/handleLivePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,eAAe,EAChB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,oBAAoB,sEAK9B;IACD,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,oBAAoB,EAAE,OAAO,CAAA;CAC9B;;;;;;;;wBAsHs7D,CAAC;;oBAAoF,CAAC;;;;;;;CAlH3gE,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,gDAI9B;IACD,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,KAAG,OAcH,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,kEAO3B;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC;IACV,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,cAAc,CAAC,EAAE,kBAAkB,CAAA;CACpC,CAqDA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleLivePreview.js","names":["getLivePreviewConfig","collectionConfig","config","globalConfig","isLivePreviewEnabled","admin","livePreview","Boolean","globals","includes","slug","collections","handleLivePreview","collectionSlug","data","globalSlug","operation","req","payload","undefined","find","g","enabled","livePreviewConfig","livePreviewURL","url","result","locale","code","label","err","logger","error","msg"],"sources":["../../src/utilities/handleLivePreview.ts"],"sourcesContent":["import type {\n CollectionConfig,\n GlobalConfig,\n LivePreviewConfig,\n Operation,\n PayloadRequest,\n SanitizedConfig,\n} from 'payload'\n\nexport const getLivePreviewConfig = ({\n collectionConfig,\n config,\n globalConfig,\n isLivePreviewEnabled,\n}: {\n collectionConfig?: CollectionConfig\n config: SanitizedConfig\n globalConfig?: GlobalConfig\n isLivePreviewEnabled: boolean\n}) => ({\n ...(isLivePreviewEnabled ? config.admin.livePreview : {}),\n ...(collectionConfig?.admin?.livePreview || {}),\n ...(globalConfig?.admin?.livePreview || {}),\n})\n\n/**\n * Multi-level check to determine whether live preview is enabled on a collection or global.\n * For example, live preview can be enabled at both the root config level, or on the entity's config.\n * If a collectionConfig/globalConfig is provided, checks if it is enabled at the root level,\n * or on the entity's own config.\n */\nexport const isLivePreviewEnabled = ({\n collectionConfig,\n config,\n globalConfig,\n}: {\n collectionConfig?: CollectionConfig\n config: SanitizedConfig\n globalConfig?: GlobalConfig\n}): boolean => {\n if (globalConfig) {\n return Boolean(\n config.admin?.livePreview?.globals?.includes(globalConfig.slug) ||\n globalConfig.admin?.livePreview,\n )\n }\n\n if (collectionConfig) {\n return Boolean(\n config.admin?.livePreview?.collections?.includes(collectionConfig.slug) ||\n collectionConfig.admin?.livePreview,\n )\n }\n}\n\n/**\n * 1. Looks up the relevant live preview config, which could have been enabled:\n * a. At the root level, e.g. `collections: ['posts']`\n * b. On the collection or global config, e.g. `admin: { livePreview: { ... } }`\n * 2. Determines if live preview is enabled, and if not, early returns.\n * 3. Merges the config with the root config, if necessary.\n * 4. Executes the `url` function, if necessary.\n *\n * Notice: internal function only. Subject to change at any time. Use at your own discretion.\n */\nexport const handleLivePreview = async ({\n collectionSlug,\n config,\n data,\n globalSlug,\n operation,\n req,\n}: {\n collectionSlug?: string\n config: SanitizedConfig\n data: Record<string, unknown>\n globalSlug?: string\n operation?: Operation\n req: PayloadRequest\n}): Promise<{\n isLivePreviewEnabled?: boolean\n livePreviewConfig?: LivePreviewConfig\n livePreviewURL?:
|
|
1
|
+
{"version":3,"file":"handleLivePreview.js","names":["getLivePreviewConfig","collectionConfig","config","globalConfig","isLivePreviewEnabled","admin","livePreview","Boolean","globals","includes","slug","collections","handleLivePreview","collectionSlug","data","globalSlug","operation","req","payload","undefined","find","g","enabled","livePreviewConfig","livePreviewURL","url","result","locale","code","label","err","logger","error","msg"],"sources":["../../src/utilities/handleLivePreview.ts"],"sourcesContent":["import type {\n CollectionConfig,\n GlobalConfig,\n LivePreviewConfig,\n LivePreviewURLType,\n Operation,\n PayloadRequest,\n SanitizedConfig,\n} from 'payload'\n\nexport const getLivePreviewConfig = ({\n collectionConfig,\n config,\n globalConfig,\n isLivePreviewEnabled,\n}: {\n collectionConfig?: CollectionConfig\n config: SanitizedConfig\n globalConfig?: GlobalConfig\n isLivePreviewEnabled: boolean\n}) => ({\n ...(isLivePreviewEnabled ? config.admin.livePreview : {}),\n ...(collectionConfig?.admin?.livePreview || {}),\n ...(globalConfig?.admin?.livePreview || {}),\n})\n\n/**\n * Multi-level check to determine whether live preview is enabled on a collection or global.\n * For example, live preview can be enabled at both the root config level, or on the entity's config.\n * If a collectionConfig/globalConfig is provided, checks if it is enabled at the root level,\n * or on the entity's own config.\n */\nexport const isLivePreviewEnabled = ({\n collectionConfig,\n config,\n globalConfig,\n}: {\n collectionConfig?: CollectionConfig\n config: SanitizedConfig\n globalConfig?: GlobalConfig\n}): boolean => {\n if (globalConfig) {\n return Boolean(\n config.admin?.livePreview?.globals?.includes(globalConfig.slug) ||\n globalConfig.admin?.livePreview,\n )\n }\n\n if (collectionConfig) {\n return Boolean(\n config.admin?.livePreview?.collections?.includes(collectionConfig.slug) ||\n collectionConfig.admin?.livePreview,\n )\n }\n}\n\n/**\n * 1. Looks up the relevant live preview config, which could have been enabled:\n * a. At the root level, e.g. `collections: ['posts']`\n * b. On the collection or global config, e.g. `admin: { livePreview: { ... } }`\n * 2. Determines if live preview is enabled, and if not, early returns.\n * 3. Merges the config with the root config, if necessary.\n * 4. Executes the `url` function, if necessary.\n *\n * Notice: internal function only. Subject to change at any time. Use at your own discretion.\n */\nexport const handleLivePreview = async ({\n collectionSlug,\n config,\n data,\n globalSlug,\n operation,\n req,\n}: {\n collectionSlug?: string\n config: SanitizedConfig\n data: Record<string, unknown>\n globalSlug?: string\n operation?: Operation\n req: PayloadRequest\n}): Promise<{\n isLivePreviewEnabled?: boolean\n livePreviewConfig?: LivePreviewConfig\n livePreviewURL?: LivePreviewURLType\n}> => {\n const collectionConfig = collectionSlug\n ? req.payload.collections[collectionSlug]?.config\n : undefined\n\n const globalConfig = globalSlug ? config.globals.find((g) => g.slug === globalSlug) : undefined\n\n const enabled = isLivePreviewEnabled({\n collectionConfig,\n config,\n globalConfig,\n })\n\n if (!enabled) {\n return {}\n }\n\n const livePreviewConfig = getLivePreviewConfig({\n collectionConfig,\n config,\n globalConfig,\n isLivePreviewEnabled: enabled,\n })\n\n let livePreviewURL: string | undefined\n\n if (typeof livePreviewConfig?.url === 'string') {\n livePreviewURL = livePreviewConfig.url\n }\n\n if (typeof livePreviewConfig?.url === 'function' && operation !== 'create') {\n try {\n const result = await livePreviewConfig.url({\n collectionConfig,\n data,\n globalConfig,\n locale: { code: req.locale, label: '' },\n payload: req.payload,\n req,\n })\n\n if (typeof result === 'string') {\n livePreviewURL = result\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `There was an error executing the live preview URL function for ${collectionSlug || globalSlug}`,\n })\n }\n }\n\n return { isLivePreviewEnabled: enabled, livePreviewConfig, livePreviewURL }\n}\n"],"mappings":"AAUA,OAAO,MAAMA,oBAAA,GAAuBA,CAAC;EACnCC,gBAAgB;EAChBC,MAAM;EACNC,YAAY;EACZC;AAAoB,CAMrB,MAAM;EACL,IAAIA,oBAAA,GAAuBF,MAAA,CAAOG,KAAK,CAACC,WAAW,GAAG,CAAC,CAAC;EACxD,IAAIL,gBAAA,EAAkBI,KAAA,EAAOC,WAAA,IAAe,CAAC,CAAC;EAC9C,IAAIH,YAAA,EAAcE,KAAA,EAAOC,WAAA,IAAe,CAAC,CAAC;AAC5C;AAEA;;;;;;AAMA,OAAO,MAAMF,oBAAA,GAAuBA,CAAC;EACnCH,gBAAgB;EAChBC,MAAM;EACNC;AAAY,CAKb;EACC,IAAIA,YAAA,EAAc;IAChB,OAAOI,OAAA,CACLL,MAAA,CAAOG,KAAK,EAAEC,WAAA,EAAaE,OAAA,EAASC,QAAA,CAASN,YAAA,CAAaO,IAAI,KAC5DP,YAAA,CAAaE,KAAK,EAAEC,WAAA;EAE1B;EAEA,IAAIL,gBAAA,EAAkB;IACpB,OAAOM,OAAA,CACLL,MAAA,CAAOG,KAAK,EAAEC,WAAA,EAAaK,WAAA,EAAaF,QAAA,CAASR,gBAAA,CAAiBS,IAAI,KACpET,gBAAA,CAAiBI,KAAK,EAAEC,WAAA;EAE9B;AACF;AAEA;;;;;;;;;;AAUA,OAAO,MAAMM,iBAAA,GAAoB,MAAAA,CAAO;EACtCC,cAAc;EACdX,MAAM;EACNY,IAAI;EACJC,UAAU;EACVC,SAAS;EACTC;AAAG,CAQJ;EAKC,MAAMhB,gBAAA,GAAmBY,cAAA,GACrBI,GAAA,CAAIC,OAAO,CAACP,WAAW,CAACE,cAAA,CAAe,EAAEX,MAAA,GACzCiB,SAAA;EAEJ,MAAMhB,YAAA,GAAeY,UAAA,GAAab,MAAA,CAAOM,OAAO,CAACY,IAAI,CAAEC,CAAA,IAAMA,CAAA,CAAEX,IAAI,KAAKK,UAAA,IAAcI,SAAA;EAEtF,MAAMG,OAAA,GAAUlB,oBAAA,CAAqB;IACnCH,gBAAA;IACAC,MAAA;IACAC;EACF;EAEA,IAAI,CAACmB,OAAA,EAAS;IACZ,OAAO,CAAC;EACV;EAEA,MAAMC,iBAAA,GAAoBvB,oBAAA,CAAqB;IAC7CC,gBAAA;IACAC,MAAA;IACAC,YAAA;IACAC,oBAAA,EAAsBkB;EACxB;EAEA,IAAIE,cAAA;EAEJ,IAAI,OAAOD,iBAAA,EAAmBE,GAAA,KAAQ,UAAU;IAC9CD,cAAA,GAAiBD,iBAAA,CAAkBE,GAAG;EACxC;EAEA,IAAI,OAAOF,iBAAA,EAAmBE,GAAA,KAAQ,cAAcT,SAAA,KAAc,UAAU;IAC1E,IAAI;MACF,MAAMU,MAAA,GAAS,MAAMH,iBAAA,CAAkBE,GAAG,CAAC;QACzCxB,gBAAA;QACAa,IAAA;QACAX,YAAA;QACAwB,MAAA,EAAQ;UAAEC,IAAA,EAAMX,GAAA,CAAIU,MAAM;UAAEE,KAAA,EAAO;QAAG;QACtCX,OAAA,EAASD,GAAA,CAAIC,OAAO;QACpBD;MACF;MAEA,IAAI,OAAOS,MAAA,KAAW,UAAU;QAC9BF,cAAA,GAAiBE,MAAA;MACnB;IACF,EAAE,OAAOI,GAAA,EAAK;MACZb,GAAA,CAAIC,OAAO,CAACa,MAAM,CAACC,KAAK,CAAC;QACvBF,GAAA;QACAG,GAAA,EAAK,kEAAkEpB,cAAA,IAAkBE,UAAA;MAC3F;IACF;EACF;EAEA,OAAO;IAAEX,oBAAA,EAAsBkB,OAAA;IAASC,iBAAA;IAAmBC;EAAe;AAC5E","ignoreList":[]}
|
|
@@ -5,5 +5,5 @@ export type OnSaveContext = {
|
|
|
5
5
|
getDocPermissions?: boolean;
|
|
6
6
|
incrementVersionCount?: boolean;
|
|
7
7
|
};
|
|
8
|
-
export declare function DefaultEditView({ BeforeDocumentControls, Description, EditMenuItems, PreviewButton, PublishButton, SaveButton, SaveDraftButton, Upload: CustomUpload, UploadControls, }: DocumentViewClientProps): React.JSX.Element;
|
|
8
|
+
export declare function DefaultEditView({ BeforeDocumentControls, Description, EditMenuItems, LivePreview: CustomLivePreview, PreviewButton, PublishButton, SaveButton, SaveDraftButton, Upload: CustomUpload, UploadControls, }: DocumentViewClientProps): React.JSX.Element;
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAIlE,OAAO,KAAsE,MAAM,OAAO,CAAA;AAmC1F,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAKD,wBAAgB,eAAe,CAAC,EAC9B,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,MAAM,EAAE,YAAY,EACpB,cAAc,GACf,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAIlE,OAAO,KAAsE,MAAM,OAAO,CAAA;AAmC1F,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAKD,wBAAgB,eAAe,CAAC,EAC9B,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,MAAM,EAAE,YAAY,EACpB,cAAc,GACf,EAAE,uBAAuB,qBAmoBzB"}
|