@payloadcms/ui 3.62.0 → 3.63.0-internal.dc01f92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/elements/ConfirmationModal/index.d.ts.map +1 -1
  2. package/dist/elements/ConfirmationModal/index.js +5 -1
  3. package/dist/elements/ConfirmationModal/index.js.map +1 -1
  4. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  5. package/dist/elements/DocumentControls/index.js +16 -7
  6. package/dist/elements/DocumentControls/index.js.map +1 -1
  7. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.d.ts +16 -0
  8. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.d.ts.map +1 -0
  9. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +103 -0
  10. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -0
  11. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.scss +24 -0
  12. package/dist/elements/DuplicateDocument/index.d.ts +2 -1
  13. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  14. package/dist/elements/DuplicateDocument/index.js +82 -38
  15. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  16. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  17. package/dist/elements/SortHeader/index.js +29 -64
  18. package/dist/elements/SortHeader/index.js.map +1 -1
  19. package/dist/elements/withMergedProps/index.d.ts +1 -1
  20. package/dist/elements/withMergedProps/index.js +1 -1
  21. package/dist/elements/withMergedProps/index.js.map +1 -1
  22. package/dist/exports/client/index.js +12 -12
  23. package/dist/exports/client/index.js.map +4 -4
  24. package/dist/exports/shared/index.js.map +1 -1
  25. package/dist/styles.css +1 -1
  26. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","formatAdminURL","React","useCallback","toast","useForm","useFormModified","useConfig","useLocale","useRouteTransition","useTranslation","requests","ConfirmationModal","PopupList","DuplicateDocument","id","slug","onDuplicate","redirectAfterDuplicate","singularLabel","router","modified","openModal","locale","setModified","startRouteTransition","config","routes","admin","adminRoute","api","apiRoute","serverURL","getEntityConfig","collectionConfig","collectionSlug","renderModal","setRenderModal","useState","i18n","t","modalSlug","duplicate","post","code","body","JSON","stringify","headers","language","credentials","then","res","doc","errors","message","json","status","success","label","push","path","error","onConfirm","_jsxs","Fragment","_jsx","Button","onClick","confirmLabel","heading"],"sources":["../../../src/elements/DuplicateDocument/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { PopupList } from '../Popup/index.js'\n\nexport type Props = {\n readonly id: string\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly redirectAfterDuplicate?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly slug: string\n}\n\nexport const DuplicateDocument: React.FC<Props> = ({\n id,\n slug,\n onDuplicate,\n redirectAfterDuplicate = true,\n singularLabel,\n}) => {\n const router = useRouter()\n const modified = useFormModified()\n const { openModal } = useModal()\n const locale = useLocale()\n const { setModified } = useForm()\n const { startRouteTransition } = useRouteTransition()\n\n const {\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const [renderModal, setRenderModal] = React.useState(false)\n const { i18n, t } = useTranslation()\n\n const modalSlug = `duplicate-${id}`\n\n const duplicate = useCallback(async () => {\n setRenderModal(true)\n\n await requests\n .post(\n `${serverURL}${apiRoute}/${slug}/${id}/duplicate${locale?.code ? `?locale=${locale.code}` : ''}`,\n {\n body: JSON.stringify({}),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n credentials: 'include',\n },\n },\n )\n .then(async (res) => {\n const { doc, errors, message } = await res.json()\n\n if (res.status < 400) {\n toast.success(\n message ||\n t('general:successfullyDuplicated', { label: getTranslation(singularLabel, i18n) }),\n )\n\n setModified(false)\n\n if (redirectAfterDuplicate) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${slug}/${doc.id}${locale?.code ? `?locale=${locale.code}` : ''}`,\n }),\n ),\n )\n }\n\n if (typeof onDuplicate === 'function') {\n void onDuplicate({ collectionConfig, doc })\n }\n } else {\n toast.error(\n errors?.[0].message ||\n message ||\n t('error:unspecific', { label: getTranslation(singularLabel, i18n) }),\n )\n }\n })\n }, [\n locale,\n serverURL,\n apiRoute,\n slug,\n id,\n i18n,\n t,\n singularLabel,\n onDuplicate,\n redirectAfterDuplicate,\n setModified,\n router,\n adminRoute,\n collectionConfig,\n startRouteTransition,\n ])\n\n const onConfirm = useCallback(async () => {\n setRenderModal(false)\n\n await duplicate()\n }, [duplicate])\n\n return (\n <React.Fragment>\n <PopupList.Button\n id=\"action-duplicate\"\n onClick={() => {\n if (modified) {\n setRenderModal(true)\n return openModal(modalSlug)\n }\n\n return duplicate()\n }}\n >\n {t('general:duplicate')}\n </PopupList.Button>\n {renderModal && (\n <ConfirmationModal\n body={t('general:unsavedChangesDuplicate')}\n confirmLabel={t('general:duplicateWithoutSaving')}\n heading={t('general:unsavedChanges')}\n modalSlug={modalSlug}\n onConfirm={onConfirm}\n />\n )}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","formatAdminURL","qs","React","useCallback","useMemo","toast","useForm","useFormModified","useConfig","useLocale","useRouteTransition","useTranslation","requests","traverseForLocalizedFields","ConfirmationModal","PopupList","SelectLocalesDrawer","DuplicateDocument","id","slug","onDuplicate","redirectAfterDuplicate","selectLocales","singularLabel","router","modified","openModal","code","localeCode","setModified","startRouteTransition","config","localization","routes","admin","adminRoute","api","apiRoute","serverURL","getEntityConfig","collectionConfig","collectionSlug","i18n","t","modalSlug","drawerSlug","isDuplicateByLocaleEnabled","fields","handleDuplicate","args","selectedLocales","hasSelectedLocales","length","queryParams","locale","headers","language","credentials","res","post","stringify","addQueryPrefix","body","JSON","doc","errors","message","json","status","success","label","push","path","error","_error","handleConfirmWithoutSaving","buttonLabel","_jsxs","Fragment","_jsx","Button","onClick","confirmLabel","heading","onConfirm"],"sources":["../../../src/elements/DuplicateDocument/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { SelectLocalesDrawer } from './SelectLocalesDrawer/index.js'\n\nexport type Props = {\n readonly id: number | string\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly redirectAfterDuplicate?: boolean\n readonly selectLocales?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly slug: string\n}\n\nexport const DuplicateDocument: React.FC<Props> = ({\n id,\n slug,\n onDuplicate,\n redirectAfterDuplicate = true,\n selectLocales,\n singularLabel,\n}) => {\n const router = useRouter()\n const modified = useFormModified()\n const { openModal } = useModal()\n const { code: localeCode } = useLocale()\n const { setModified } = useForm()\n const { startRouteTransition } = useRouteTransition()\n\n const {\n config: {\n localization,\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const { i18n, t } = useTranslation()\n\n const modalSlug = `duplicate-${id}`\n const drawerSlug = `duplicate-locales-${id}`\n\n const isDuplicateByLocaleEnabled = useMemo(() => {\n if (selectLocales && collectionConfig) {\n return traverseForLocalizedFields(collectionConfig.fields)\n }\n return false\n }, [collectionConfig, selectLocales])\n\n const handleDuplicate = useCallback(\n async (args?: { selectedLocales?: string[] }) => {\n const { selectedLocales } = args || {}\n const hasSelectedLocales = selectedLocales && selectedLocales.length > 0\n\n const queryParams: Record<string, string | string[]> = {}\n if (localeCode) {\n queryParams.locale = localeCode\n }\n if (hasSelectedLocales) {\n queryParams.selectedLocales = selectedLocales\n }\n\n const headers = {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n credentials: 'include',\n }\n\n try {\n const res = await requests.post(\n `${serverURL}${apiRoute}/${slug}/${id}/duplicate${qs.stringify(queryParams, {\n addQueryPrefix: true,\n })}`,\n {\n body: JSON.stringify({}),\n headers,\n },\n )\n\n const { doc, errors, message } = await res.json()\n\n if (res.status < 400) {\n toast.success(\n message ||\n t('general:successfullyDuplicated', { label: getTranslation(singularLabel, i18n) }),\n )\n\n setModified(false)\n\n if (redirectAfterDuplicate) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${slug}/${doc.id}${localeCode ? `?locale=${localeCode}` : ''}`,\n }),\n ),\n )\n }\n\n if (typeof onDuplicate === 'function') {\n void onDuplicate({ collectionConfig, doc })\n }\n } else {\n toast.error(\n errors?.[0].message ||\n message ||\n t('error:unspecific', { label: getTranslation(singularLabel, i18n) }),\n )\n }\n } catch (_error) {\n toast.error(t('error:unspecific', { label: getTranslation(singularLabel, i18n) }))\n }\n },\n [\n adminRoute,\n apiRoute,\n collectionConfig,\n i18n,\n id,\n localeCode,\n onDuplicate,\n redirectAfterDuplicate,\n router,\n serverURL,\n setModified,\n singularLabel,\n slug,\n startRouteTransition,\n t,\n ],\n )\n\n const handleConfirmWithoutSaving = useCallback(async () => {\n if (selectLocales) {\n openModal(drawerSlug)\n } else {\n await handleDuplicate()\n }\n }, [handleDuplicate, drawerSlug, selectLocales, openModal])\n\n const buttonLabel = selectLocales\n ? `${t('general:duplicate')} ${t('localization:selectedLocales')}`\n : t('general:duplicate')\n\n if (!selectLocales || isDuplicateByLocaleEnabled) {\n return (\n <React.Fragment>\n <PopupList.Button\n id={`action-duplicate${isDuplicateByLocaleEnabled ? `-locales` : ''}`}\n onClick={() => {\n if (modified) {\n openModal(modalSlug)\n } else if (selectLocales) {\n openModal(drawerSlug)\n } else {\n void handleDuplicate()\n }\n }}\n >\n {buttonLabel}\n </PopupList.Button>\n <ConfirmationModal\n body={t('general:unsavedChangesDuplicate')}\n confirmLabel={t('general:duplicateWithoutSaving')}\n heading={t('general:unsavedChanges')}\n modalSlug={modalSlug}\n onConfirm={handleConfirmWithoutSaving}\n />\n {selectLocales && localization && (\n <SelectLocalesDrawer\n localization={localization}\n onConfirm={handleDuplicate}\n slug={drawerSlug}\n />\n )}\n </React.Fragment>\n )\n }\n\n return null\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SortHeader/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAIhD,OAAO,cAAc,CAAA;AAGrB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAkCD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAwChD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SortHeader/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,cAAc,CAAA;AAGrB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAqBD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0BhD,CAAA"}
@@ -2,84 +2,59 @@
2
2
 
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
- import React, { useEffect, useRef } from 'react';
6
- import { SortDownIcon, SortUpIcon } from '../../icons/Sort/index.js';
5
+ import React from 'react';
6
+ import { SortDownIcon } from '../../icons/Sort/index.js';
7
7
  import { useListQuery } from '../../providers/ListQuery/index.js';
8
8
  import './index.scss';
9
9
  import { useTranslation } from '../../providers/Translation/index.js';
10
10
  const baseClass = 'sort-header';
11
11
  function useSort() {
12
- const $ = _c(12);
12
+ const $ = _c(7);
13
13
  const {
14
14
  handleSortChange,
15
15
  orderableFieldName,
16
16
  query
17
17
  } = useListQuery();
18
18
  const querySort = Array.isArray(query.sort) ? query.sort[0] : query.sort;
19
- const sort = useRef(querySort === `-${orderableFieldName}` ? "desc" : "asc");
20
- const isActive = querySort === `-${orderableFieldName}` || querySort === orderableFieldName;
19
+ const isActive = querySort === orderableFieldName;
21
20
  let t0;
22
- let t1;
23
- if ($[0] !== isActive || $[1] !== orderableFieldName || $[2] !== querySort) {
21
+ if ($[0] !== handleSortChange || $[1] !== isActive || $[2] !== orderableFieldName) {
24
22
  t0 = () => {
25
- if (!isActive) {
23
+ if (isActive) {
26
24
  return;
27
25
  }
28
- sort.current = querySort === `-${orderableFieldName}` ? "desc" : "asc";
26
+ handleSortChange(orderableFieldName);
29
27
  };
30
- t1 = [orderableFieldName, querySort, isActive];
31
- $[0] = isActive;
32
- $[1] = orderableFieldName;
33
- $[2] = querySort;
28
+ $[0] = handleSortChange;
29
+ $[1] = isActive;
30
+ $[2] = orderableFieldName;
34
31
  $[3] = t0;
35
- $[4] = t1;
36
32
  } else {
37
33
  t0 = $[3];
38
- t1 = $[4];
39
- }
40
- useEffect(t0, t1);
41
- let t2;
42
- if ($[5] !== handleSortChange || $[6] !== isActive || $[7] !== orderableFieldName) {
43
- t2 = () => {
44
- if (isActive) {
45
- handleSortChange(sort.current === "asc" ? `-${orderableFieldName}` : orderableFieldName);
46
- sort.current = sort.current === "asc" ? "desc" : "asc";
47
- return;
48
- }
49
- handleSortChange(sort.current === "asc" ? orderableFieldName : `-${orderableFieldName}`);
50
- };
51
- $[5] = handleSortChange;
52
- $[6] = isActive;
53
- $[7] = orderableFieldName;
54
- $[8] = t2;
55
- } else {
56
- t2 = $[8];
57
34
  }
58
- const handleSortPress = t2;
59
- let t3;
60
- if ($[9] !== handleSortPress || $[10] !== isActive) {
61
- t3 = {
35
+ const handleSortPress = t0;
36
+ let t1;
37
+ if ($[4] !== handleSortPress || $[5] !== isActive) {
38
+ t1 = {
62
39
  handleSortPress,
63
- isActive,
64
- sort
40
+ isActive
65
41
  };
66
- $[9] = handleSortPress;
67
- $[10] = isActive;
68
- $[11] = t3;
42
+ $[4] = handleSortPress;
43
+ $[5] = isActive;
44
+ $[6] = t1;
69
45
  } else {
70
- t3 = $[11];
46
+ t1 = $[6];
71
47
  }
72
- return t3;
48
+ return t1;
73
49
  }
74
50
  export const SortHeader = props => {
75
- const $ = _c(8);
51
+ const $ = _c(7);
76
52
  const {
77
53
  appearance
78
54
  } = props;
79
55
  const {
80
56
  handleSortPress,
81
- isActive,
82
- sort
57
+ isActive
83
58
  } = useSort();
84
59
  const {
85
60
  t
@@ -95,40 +70,30 @@ export const SortHeader = props => {
95
70
  }
96
71
  const t2 = t1.join(" ");
97
72
  let t3;
98
- if ($[2] !== handleSortPress || $[3] !== isActive || $[4] !== sort.current || $[5] !== t || $[6] !== t2) {
73
+ if ($[2] !== handleSortPress || $[3] !== isActive || $[4] !== t || $[5] !== t2) {
99
74
  t3 = _jsx("div", {
100
75
  className: t2,
101
76
  children: _jsx("div", {
102
77
  className: `${baseClass}__buttons`,
103
- children: sort.current === "desc" ? _jsx("button", {
78
+ children: _jsx("button", {
104
79
  "aria-label": t("general:sortByLabelDirection", {
105
80
  direction: t("general:ascending"),
106
81
  label: "Order"
107
82
  }),
108
- className: `${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ""}`,
83
+ className: `${baseClass}__button ${isActive ? `${baseClass}--active` : ""}`,
109
84
  onClick: handleSortPress,
110
85
  type: "button",
111
86
  children: _jsx(SortDownIcon, {})
112
- }) : _jsx("button", {
113
- "aria-label": t("general:sortByLabelDirection", {
114
- direction: t("general:descending"),
115
- label: "Order"
116
- }),
117
- className: `${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ""}`,
118
- onClick: handleSortPress,
119
- type: "button",
120
- children: _jsx(SortUpIcon, {})
121
87
  })
122
88
  })
123
89
  });
124
90
  $[2] = handleSortPress;
125
91
  $[3] = isActive;
126
- $[4] = sort.current;
127
- $[5] = t;
128
- $[6] = t2;
129
- $[7] = t3;
92
+ $[4] = t;
93
+ $[5] = t2;
94
+ $[6] = t3;
130
95
  } else {
131
- t3 = $[7];
96
+ t3 = $[6];
132
97
  }
133
98
  return t3;
134
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useEffect","useRef","SortDownIcon","SortUpIcon","useListQuery","useTranslation","baseClass","useSort","$","handleSortChange","orderableFieldName","query","querySort","Array","isArray","sort","isActive","t0","t1","current","t2","handleSortPress","t3","SortHeader","props","appearance","t","filter","Boolean","join","_jsx","className","children","direction","label","onClick","type"],"sources":["../../../src/elements/SortHeader/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useEffect, useRef } from 'react'\n\nimport { SortDownIcon, SortUpIcon } from '../../icons/Sort/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport './index.scss'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nexport type SortHeaderProps = {\n readonly appearance?: 'condensed' | 'default'\n readonly disable?: boolean\n}\n\nconst baseClass = 'sort-header'\n\nfunction useSort() {\n const { handleSortChange, orderableFieldName, query } = useListQuery()\n const querySort = Array.isArray(query.sort) ? query.sort[0] : query.sort\n const sort = useRef<'asc' | 'desc'>(querySort === `-${orderableFieldName}` ? 'desc' : 'asc')\n const isActive = querySort === `-${orderableFieldName}` || querySort === orderableFieldName\n\n // This is necessary if you initialize the page without sort url param\n // but your preferences are to sort by -_order.\n // Since sort isn't updated, the arrow would incorrectly point upward.\n useEffect(() => {\n if (!isActive) {\n return\n }\n sort.current = querySort === `-${orderableFieldName}` ? 'desc' : 'asc'\n }, [orderableFieldName, querySort, isActive])\n\n const handleSortPress = () => {\n // If it's already sorted by the \"_order\" field, toggle between \"asc\" and \"desc\"\n if (isActive) {\n void handleSortChange(sort.current === 'asc' ? `-${orderableFieldName}` : orderableFieldName)\n sort.current = sort.current === 'asc' ? 'desc' : 'asc'\n return\n }\n // If NOT sorted by the \"_order\" field, sort by that field but do not toggle the current value of \"asc\" or \"desc\".\n void handleSortChange(sort.current === 'asc' ? orderableFieldName : `-${orderableFieldName}`)\n }\n\n return { handleSortPress, isActive, sort }\n}\n\nexport const SortHeader: React.FC<SortHeaderProps> = (props) => {\n const { appearance } = props\n const { handleSortPress, isActive, sort } = useSort()\n const { t } = useTranslation()\n\n return (\n <div\n className={[baseClass, appearance && `${baseClass}--appearance-${appearance}`]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${baseClass}__buttons`}>\n {sort.current === 'desc' ? (\n <button\n aria-label={t('general:sortByLabelDirection', {\n direction: t('general:ascending'),\n label: 'Order',\n })}\n className={`${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ''}`}\n onClick={handleSortPress}\n type=\"button\"\n >\n <SortDownIcon />\n </button>\n ) : (\n <button\n aria-label={t('general:sortByLabelDirection', {\n direction: t('general:descending'),\n label: 'Order',\n })}\n className={`${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ''}`}\n onClick={handleSortPress}\n type=\"button\"\n >\n <SortUpIcon />\n </button>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","SortDownIcon","useListQuery","useTranslation","baseClass","useSort","$","handleSortChange","orderableFieldName","query","querySort","Array","isArray","sort","isActive","t0","handleSortPress","t1","SortHeader","props","appearance","t","filter","Boolean","t2","join","t3","_jsx","className","children","direction","label","onClick","type"],"sources":["../../../src/elements/SortHeader/index.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { SortDownIcon } from '../../icons/Sort/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport './index.scss'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nexport type SortHeaderProps = {\n readonly appearance?: 'condensed' | 'default'\n readonly disable?: boolean\n}\n\nconst baseClass = 'sort-header'\n\nfunction useSort() {\n const { handleSortChange, orderableFieldName, query } = useListQuery()\n const querySort = Array.isArray(query.sort) ? query.sort[0] : query.sort\n const isActive = querySort === orderableFieldName\n\n const handleSortPress = () => {\n // If it's already sorted by the \"_order\" field, do nothing\n if (isActive) {\n return\n }\n // If NOT sorted by the \"_order\" field, sort by that field.\n void handleSortChange(orderableFieldName)\n }\n\n return { handleSortPress, isActive }\n}\n\nexport const SortHeader: React.FC<SortHeaderProps> = (props) => {\n const { appearance } = props\n const { handleSortPress, isActive } = useSort()\n const { t } = useTranslation()\n\n return (\n <div\n className={[baseClass, appearance && `${baseClass}--appearance-${appearance}`]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${baseClass}__buttons`}>\n <button\n aria-label={t('general:sortByLabelDirection', {\n direction: t('general:ascending'),\n label: 'Order',\n })}\n className={`${baseClass}__button ${isActive ? `${baseClass}--active` : ''}`}\n onClick={handleSortPress}\n type=\"button\"\n >\n <SortDownIcon />\n </button>\n </div>\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,MAAW;AAElB,SAASC,YAAY,QAAQ;AAC7B,SAASC,YAAY,QAAQ;AAC7B,OAAO;AACP,SAASC,cAAc,QAAQ;AAO/B,MAAMC,SAAA,GAAY;AAElB,SAAAC,QAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EACE;IAAAQ,gBAAA;IAAAC,kBAAA;IAAAC;EAAA,IAAwDP,YAAA;EACxD,MAAAQ,SAAA,GAAkBC,KAAA,CAAAC,OAAA,CAAcH,KAAA,CAAAI,IAAU,IAAIJ,KAAA,CAAAI,IAAA,MAAgBJ,KAAA,CAAAI,IAAU;EACxE,MAAAC,QAAA,GAAiBJ,SAAA,KAAcF,kBAAA;EAAA,IAAAO,EAAA;EAAA,IAAAT,CAAA,QAAAC,gBAAA,IAAAD,CAAA,QAAAQ,QAAA,IAAAR,CAAA,QAAAE,kBAAA;IAEPO,EAAA,GAAAA,CAAA;MAAA,IAElBD,QAAA;QAAA;MAAA;MAICP,gBAAA,CAAiBC,kBAAA;IAAA;IACxBF,CAAA,MAAAC,gBAAA;IAAAD,CAAA,MAAAQ,QAAA;IAAAR,CAAA,MAAAE,kBAAA;IAAAF,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAPA,MAAAU,eAAA,GAAwBD,EAOxB;EAAA,IAAAE,EAAA;EAAA,IAAAX,CAAA,QAAAU,eAAA,IAAAV,CAAA,QAAAQ,QAAA;IAEOG,EAAA;MAAAD,eAAA;MAAAF;IAAA;IAA4BR,CAAA,MAAAU,eAAA;IAAAV,CAAA,MAAAQ,QAAA;IAAAR,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EAAA,OAA5BW,EAA4B;AAAA;AAGrC,OAAO,MAAMC,UAAA,GAAwCC,KAAA;EAAA,MAAAb,CAAA,GAAAP,EAAA;EACnD;IAAAqB;EAAA,IAAuBD,KAAA;EACvB;IAAAH,eAAA;IAAAF;EAAA,IAAsCT,OAAA;EACtC;IAAAgB;EAAA,IAAclB,cAAA;EAIa,MAAAY,EAAA,GAAAK,UAAA,IAAc,GAAAhB,SAAA,gBAA4BgB,UAAA,EAAY;EAAA,IAAAH,EAAA;EAAA,IAAAX,CAAA,QAAAS,EAAA;IAAlEE,EAAA,IAAAb,SAAA,EAAYW,EAAsD,EAAAO,MAAA,CAAAC,OACnE;IAAAjB,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EADC,MAAAkB,EAAA,GAAAP,EACD,CAAAQ,IAAA,CACF;EAAA,IAAAC,EAAA;EAAA,IAAApB,CAAA,QAAAU,eAAA,IAAAV,CAAA,QAAAQ,QAAA,IAAAR,CAAA,QAAAe,CAAA,IAAAf,CAAA,QAAAkB,EAAA;IAHVE,EAAA,GAAAC,IAAA,CAAC;MAAAC,SAAA,EACYJ,EAEH;MAAAK,QAAA,EAERF,IAAA,CAAC;QAAAC,SAAA,EAAe,GAAAxB,SAAA,WAAuB;QAAAyB,QAAA,EACrCF,IAAA,CAAC;UAAA,cACaN,CAAA,CAAE;YAAAS,SAAA,EACDT,CAAA,CAAE;YAAAU,KAAA,EACN;UAAA,CACT;UAAAH,SAAA,EACW,GAAAxB,SAAA,YAAwBU,QAAA,GAAW,GAAAV,SAAA,UAAsB,GAAG,IAAI;UAAA4B,OAAA,EAClEhB,eAAA;UAAAiB,IAAA,EACJ;UAAAJ,QAAA,EAELF,IAAA,CAAA1B,YAAA,IAAC;QAAA,C;;;;;;;;;;;SAfPyB,E;CAoBJ","ignoreList":[]}
@@ -8,7 +8,7 @@ import React from 'react';
8
8
  * rendering the original component.
9
9
  *
10
10
  * @example
11
- * const PredefinedComponent = getMergedPropsComponent({
11
+ * const PredefinedComponent = withMergedProps({
12
12
  * Component: OriginalComponent,
13
13
  * toMergeIntoProps: { someExtraValue: 5 }
14
14
  * });
@@ -10,7 +10,7 @@ import React from 'react';
10
10
  * rendering the original component.
11
11
  *
12
12
  * @example
13
- * const PredefinedComponent = getMergedPropsComponent({
13
+ * const PredefinedComponent = withMergedProps({
14
14
  * Component: OriginalComponent,
15
15
  * toMergeIntoProps: { someExtraValue: 5 }
16
16
  * });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isReactServerComponentOrFunction","serverProps","React","withMergedProps","Component","sanitizeServerOnlyProps","toMergeIntoProps","undefined","MergedPropsComponent","passedProps","mergedProps","simpleMergeProps","forEach","prop","_jsx","props","toMerge"],"sources":["../../../src/elements/withMergedProps/index.tsx"],"sourcesContent":["import { isReactServerComponentOrFunction, serverProps } from 'payload/shared'\nimport React from 'react'\n\n/**\n * Creates a higher-order component (HOC) that merges predefined properties (`toMergeIntoProps`)\n * with any properties passed to the resulting component.\n *\n * Use this when you want to pre-specify some props for a component, while also allowing users to\n * pass in their own props. The HOC ensures the passed props and predefined props are combined before\n * rendering the original component.\n *\n * @example\n * const PredefinedComponent = getMergedPropsComponent({\n * Component: OriginalComponent,\n * toMergeIntoProps: { someExtraValue: 5 }\n * });\n * // Using <PredefinedComponent customProp=\"value\" /> will result in\n * // <OriginalComponent customProp=\"value\" someExtraValue={5} />\n *\n * @returns A higher-order component with combined properties.\n *\n * @param Component - The original component to wrap.\n * @param sanitizeServerOnlyProps - If true, server-only props will be removed from the merged props. @default true if the component is not a server component, false otherwise.\n * @param toMergeIntoProps - The properties to merge into the passed props.\n */\nexport function withMergedProps<ToMergeIntoProps, CompleteReturnProps>({\n Component,\n sanitizeServerOnlyProps,\n toMergeIntoProps,\n}: {\n Component: React.FC<CompleteReturnProps>\n sanitizeServerOnlyProps?: boolean\n toMergeIntoProps: ToMergeIntoProps\n}): React.FC<CompleteReturnProps> {\n if (sanitizeServerOnlyProps === undefined) {\n sanitizeServerOnlyProps = !isReactServerComponentOrFunction(Component)\n }\n // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props\n const MergedPropsComponent: React.FC<CompleteReturnProps> = (passedProps) => {\n const mergedProps = simpleMergeProps(passedProps, toMergeIntoProps) as CompleteReturnProps\n\n if (sanitizeServerOnlyProps) {\n serverProps.forEach((prop) => {\n delete mergedProps[prop]\n })\n }\n\n return <Component {...mergedProps} />\n }\n\n return MergedPropsComponent\n}\n\nfunction simpleMergeProps(props, toMerge) {\n return { ...props, ...toMerge }\n}\n"],"mappings":";AAAA,SAASA,gCAAgC,EAAEC,WAAW,QAAQ;AAC9D,OAAOC,KAAA,MAAW;AAElB;;;;;;;;;;;;;;;;;;;;;;AAsBA,OAAO,SAASC,gBAAuD;EACrEC,SAAS;EACTC,uBAAuB;EACvBC;AAAgB,CAKjB;EACC,IAAID,uBAAA,KAA4BE,SAAA,EAAW;IACzCF,uBAAA,GAA0B,CAACL,gCAAA,CAAiCI,SAAA;EAC9D;EACA;EACA,MAAMI,oBAAA,GAAuDC,WAAA;IAC3D,MAAMC,WAAA,GAAcC,gBAAA,CAAiBF,WAAA,EAAaH,gBAAA;IAElD,IAAID,uBAAA,EAAyB;MAC3BJ,WAAA,CAAYW,OAAO,CAAEC,IAAA;QACnB,OAAOH,WAAW,CAACG,IAAA,CAAK;MAC1B;IACF;IAEA,oBAAOC,IAAA,CAACV,SAAA;MAAW,GAAGM;;EACxB;EAEA,OAAOF,oBAAA;AACT;AAEA,SAASG,iBAAiBI,KAAK,EAAEC,OAAO;EACtC,OAAO;IAAE,GAAGD,KAAK;IAAE,GAAGC;EAAQ;AAChC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["isReactServerComponentOrFunction","serverProps","React","withMergedProps","Component","sanitizeServerOnlyProps","toMergeIntoProps","undefined","MergedPropsComponent","passedProps","mergedProps","simpleMergeProps","forEach","prop","_jsx","props","toMerge"],"sources":["../../../src/elements/withMergedProps/index.tsx"],"sourcesContent":["import { isReactServerComponentOrFunction, serverProps } from 'payload/shared'\nimport React from 'react'\n\n/**\n * Creates a higher-order component (HOC) that merges predefined properties (`toMergeIntoProps`)\n * with any properties passed to the resulting component.\n *\n * Use this when you want to pre-specify some props for a component, while also allowing users to\n * pass in their own props. The HOC ensures the passed props and predefined props are combined before\n * rendering the original component.\n *\n * @example\n * const PredefinedComponent = withMergedProps({\n * Component: OriginalComponent,\n * toMergeIntoProps: { someExtraValue: 5 }\n * });\n * // Using <PredefinedComponent customProp=\"value\" /> will result in\n * // <OriginalComponent customProp=\"value\" someExtraValue={5} />\n *\n * @returns A higher-order component with combined properties.\n *\n * @param Component - The original component to wrap.\n * @param sanitizeServerOnlyProps - If true, server-only props will be removed from the merged props. @default true if the component is not a server component, false otherwise.\n * @param toMergeIntoProps - The properties to merge into the passed props.\n */\nexport function withMergedProps<ToMergeIntoProps, CompleteReturnProps>({\n Component,\n sanitizeServerOnlyProps,\n toMergeIntoProps,\n}: {\n Component: React.FC<CompleteReturnProps>\n sanitizeServerOnlyProps?: boolean\n toMergeIntoProps: ToMergeIntoProps\n}): React.FC<CompleteReturnProps> {\n if (sanitizeServerOnlyProps === undefined) {\n sanitizeServerOnlyProps = !isReactServerComponentOrFunction(Component)\n }\n // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props\n const MergedPropsComponent: React.FC<CompleteReturnProps> = (passedProps) => {\n const mergedProps = simpleMergeProps(passedProps, toMergeIntoProps) as CompleteReturnProps\n\n if (sanitizeServerOnlyProps) {\n serverProps.forEach((prop) => {\n delete mergedProps[prop]\n })\n }\n\n return <Component {...mergedProps} />\n }\n\n return MergedPropsComponent\n}\n\nfunction simpleMergeProps(props, toMerge) {\n return { ...props, ...toMerge }\n}\n"],"mappings":";AAAA,SAASA,gCAAgC,EAAEC,WAAW,QAAQ;AAC9D,OAAOC,KAAA,MAAW;AAElB;;;;;;;;;;;;;;;;;;;;;;AAsBA,OAAO,SAASC,gBAAuD;EACrEC,SAAS;EACTC,uBAAuB;EACvBC;AAAgB,CAKjB;EACC,IAAID,uBAAA,KAA4BE,SAAA,EAAW;IACzCF,uBAAA,GAA0B,CAACL,gCAAA,CAAiCI,SAAA;EAC9D;EACA;EACA,MAAMI,oBAAA,GAAuDC,WAAA;IAC3D,MAAMC,WAAA,GAAcC,gBAAA,CAAiBF,WAAA,EAAaH,gBAAA;IAElD,IAAID,uBAAA,EAAyB;MAC3BJ,WAAA,CAAYW,OAAO,CAAEC,IAAA;QACnB,OAAOH,WAAW,CAACG,IAAA,CAAK;MAC1B;IACF;IAEA,oBAAOC,IAAA,CAACV,SAAA;MAAW,GAAGM;;EACxB;EAEA,OAAOF,oBAAA;AACT;AAEA,SAASG,iBAAiBI,KAAK,EAAEC,OAAO;EACtC,OAAO;IAAE,GAAGD,KAAK;IAAE,GAAGC;EAAQ;AAChC","ignoreList":[]}