@payloadcms/plugin-search 4.0.0-internal.435b2d6 → 4.0.0-internal.44ac9c8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"deleteFromSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,EAAE,gBAyB5B,CAAA"}
1
+ {"version":3,"file":"deleteFromSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,EAAE,gBA0B5B,CAAA"}
@@ -4,6 +4,7 @@ export const deleteFromSearch = (pluginConfig)=>async ({ id, collection, req: {
4
4
  await payload.delete({
5
5
  collection: searchSlug,
6
6
  depth: 0,
7
+ overrideAccess: true,
7
8
  req,
8
9
  where: {
9
10
  'doc.relationTo': {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"sourcesContent":["import type { DeleteFromSearch } from '../../types.js'\n\nexport const deleteFromSearch: DeleteFromSearch =\n (pluginConfig) =>\n async ({ id, collection, req: { payload }, req }) => {\n const searchSlug = pluginConfig?.searchOverrides?.slug || 'search'\n\n try {\n await payload.delete({\n collection: searchSlug,\n depth: 0,\n req,\n where: {\n 'doc.relationTo': {\n equals: collection.slug,\n },\n 'doc.value': {\n equals: id,\n },\n },\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting ${searchSlug} doc.`,\n })\n }\n }\n"],"names":["deleteFromSearch","pluginConfig","id","collection","req","payload","searchSlug","searchOverrides","slug","delete","depth","where","equals","err","logger","error","msg"],"mappings":"AAEA,OAAO,MAAMA,mBACX,CAACC,eACD,OAAO,EAAEC,EAAE,EAAEC,UAAU,EAAEC,KAAK,EAAEC,OAAO,EAAE,EAAED,GAAG,EAAE;QAC9C,MAAME,aAAaL,cAAcM,iBAAiBC,QAAQ;QAE1D,IAAI;YACF,MAAMH,QAAQI,MAAM,CAAC;gBACnBN,YAAYG;gBACZI,OAAO;gBACPN;gBACAO,OAAO;oBACL,kBAAkB;wBAChBC,QAAQT,WAAWK,IAAI;oBACzB;oBACA,aAAa;wBACXI,QAAQV;oBACV;gBACF;YACF;QACF,EAAE,OAAOW,KAAc;YACrBR,QAAQS,MAAM,CAACC,KAAK,CAAC;gBACnBF;gBACAG,KAAK,CAAC,eAAe,EAAEV,WAAW,KAAK,CAAC;YAC1C;QACF;IACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"sourcesContent":["import type { DeleteFromSearch } from '../../types.js'\n\nexport const deleteFromSearch: DeleteFromSearch =\n (pluginConfig) =>\n async ({ id, collection, req: { payload }, req }) => {\n const searchSlug = pluginConfig?.searchOverrides?.slug || 'search'\n\n try {\n await payload.delete({\n collection: searchSlug,\n depth: 0,\n overrideAccess: true,\n req,\n where: {\n 'doc.relationTo': {\n equals: collection.slug,\n },\n 'doc.value': {\n equals: id,\n },\n },\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting ${searchSlug} doc.`,\n })\n }\n }\n"],"names":["deleteFromSearch","pluginConfig","id","collection","req","payload","searchSlug","searchOverrides","slug","delete","depth","overrideAccess","where","equals","err","logger","error","msg"],"mappings":"AAEA,OAAO,MAAMA,mBACX,CAACC,eACD,OAAO,EAAEC,EAAE,EAAEC,UAAU,EAAEC,KAAK,EAAEC,OAAO,EAAE,EAAED,GAAG,EAAE;QAC9C,MAAME,aAAaL,cAAcM,iBAAiBC,QAAQ;QAE1D,IAAI;YACF,MAAMH,QAAQI,MAAM,CAAC;gBACnBN,YAAYG;gBACZI,OAAO;gBACPC,gBAAgB;gBAChBP;gBACAQ,OAAO;oBACL,kBAAkB;wBAChBC,QAAQV,WAAWK,IAAI;oBACzB;oBACA,aAAa;wBACXK,QAAQX;oBACV;gBACF;YACF;QACF,EAAE,OAAOY,KAAc;YACrBT,QAAQU,MAAM,CAACC,KAAK,CAAC;gBACnBF;gBACAG,KAAK,CAAC,eAAe,EAAEX,WAAW,KAAK,CAAC;YAC1C;QACF;IACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Search/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAM9D,eAAO,MAAM,wBAAwB,iBACrB,2BAA2B,KACxC,gBA0GF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Search/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAM9D,eAAO,MAAM,wBAAwB,iBACrB,2BAA2B,KACxC,gBA4GF,CAAA"}
@@ -98,6 +98,8 @@ export const generateSearchCollection = (pluginConfig)=>{
98
98
  singular: 'Search Result'
99
99
  }
100
100
  },
101
+ // Internal search index; opt out of authorship (a searchOverride can re-enable it).
102
+ authorship: pluginConfig?.searchOverrides?.authorship ?? false,
101
103
  versions: pluginConfig?.searchOverrides?.versions ?? false
102
104
  };
103
105
  return newConfig;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Search/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { SanitizedSearchPluginConfig } from '../types.js'\nimport type { ReindexButtonServerProps } from './ui/ReindexButton/types.js'\n\nimport { generateReindexHandler } from '../utilities/generateReindexHandler.js'\n\n// all settings can be overridden by the config\nexport const generateSearchCollection = (\n pluginConfig: SanitizedSearchPluginConfig,\n): CollectionConfig => {\n const searchSlug = pluginConfig?.searchOverrides?.slug || 'search'\n const searchCollections = pluginConfig?.collections || []\n const collectionLabels = pluginConfig?.labels\n\n const defaultFields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n readOnly: true,\n },\n localized: pluginConfig.localize,\n },\n {\n name: 'priority',\n type: 'number',\n admin: {\n position: 'sidebar',\n },\n },\n {\n name: 'doc',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n index: true,\n maxDepth: 0,\n relationTo: searchCollections,\n required: true,\n },\n {\n name: 'docUrl',\n type: 'ui',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-search/client#LinkToDoc',\n },\n },\n position: 'sidebar',\n },\n },\n ]\n\n if (!collectionLabels) {\n throw new Error('collectionLabels is required')\n }\n\n const newConfig: CollectionConfig = {\n ...(pluginConfig?.searchOverrides || {}),\n slug: searchSlug,\n access: {\n create: (): boolean => false,\n read: (): boolean => true,\n ...(pluginConfig?.searchOverrides?.access || {}),\n },\n admin: {\n components: {\n views: {\n list: {\n actions: [\n {\n path: '@payloadcms/plugin-search/client#ReindexButton',\n serverProps: {\n collectionLabels,\n searchCollections,\n searchSlug,\n } satisfies ReindexButtonServerProps,\n },\n ],\n },\n },\n },\n defaultColumns: ['title'],\n description:\n 'This is a collection of automatically created search results. These results are used by the global site search and will be updated automatically as documents in the CMS are created or updated.',\n enableRichTextRelationship: false,\n useAsTitle: 'title',\n ...(pluginConfig?.searchOverrides?.admin || {}),\n },\n endpoints: [\n ...(pluginConfig?.searchOverrides?.endpoints || []),\n {\n handler: generateReindexHandler(pluginConfig),\n method: 'post',\n path: '/reindex',\n },\n ],\n fields:\n pluginConfig?.searchOverrides?.fields &&\n typeof pluginConfig?.searchOverrides?.fields === 'function'\n ? pluginConfig?.searchOverrides.fields({ defaultFields })\n : defaultFields,\n labels: {\n ...(pluginConfig?.searchOverrides?.labels || {\n plural: 'Search Results',\n singular: 'Search Result',\n }),\n },\n versions: pluginConfig?.searchOverrides?.versions ?? false,\n }\n\n return newConfig\n}\n"],"names":["generateReindexHandler","generateSearchCollection","pluginConfig","searchSlug","searchOverrides","slug","searchCollections","collections","collectionLabels","labels","defaultFields","name","type","admin","readOnly","localized","localize","position","index","maxDepth","relationTo","required","components","Field","path","Error","newConfig","access","create","read","views","list","actions","serverProps","defaultColumns","description","enableRichTextRelationship","useAsTitle","endpoints","handler","method","fields","plural","singular","versions"],"mappings":"AAKA,SAASA,sBAAsB,QAAQ,yCAAwC;AAE/E,+CAA+C;AAC/C,OAAO,MAAMC,2BAA2B,CACtCC;IAEA,MAAMC,aAAaD,cAAcE,iBAAiBC,QAAQ;IAC1D,MAAMC,oBAAoBJ,cAAcK,eAAe,EAAE;IACzD,MAAMC,mBAAmBN,cAAcO;IAEvC,MAAMC,gBAAyB;QAC7B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,UAAU;YACZ;YACAC,WAAWb,aAAac,QAAQ;QAClC;QACA;YACEL,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLI,UAAU;YACZ;QACF;QACA;YACEN,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLI,UAAU;gBACVH,UAAU;YACZ;YACAI,OAAO;YACPC,UAAU;YACVC,YAAYd;YACZe,UAAU;QACZ;QACA;YACEV,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLS,YAAY;oBACVC,OAAO;wBACLC,MAAM;oBACR;gBACF;gBACAP,UAAU;YACZ;QACF;KACD;IAED,IAAI,CAACT,kBAAkB;QACrB,MAAM,IAAIiB,MAAM;IAClB;IAEA,MAAMC,YAA8B;QAClC,GAAIxB,cAAcE,mBAAmB,CAAC,CAAC;QACvCC,MAAMF;QACNwB,QAAQ;YACNC,QAAQ,IAAe;YACvBC,MAAM,IAAe;YACrB,GAAI3B,cAAcE,iBAAiBuB,UAAU,CAAC,CAAC;QACjD;QACAd,OAAO;YACLS,YAAY;gBACVQ,OAAO;oBACLC,MAAM;wBACJC,SAAS;4BACP;gCACER,MAAM;gCACNS,aAAa;oCACXzB;oCACAF;oCACAH;gCACF;4BACF;yBACD;oBACH;gBACF;YACF;YACA+B,gBAAgB;gBAAC;aAAQ;YACzBC,aACE;YACFC,4BAA4B;YAC5BC,YAAY;YACZ,GAAInC,cAAcE,iBAAiBS,SAAS,CAAC,CAAC;QAChD;QACAyB,WAAW;eACLpC,cAAcE,iBAAiBkC,aAAa,EAAE;YAClD;gBACEC,SAASvC,uBAAuBE;gBAChCsC,QAAQ;gBACRhB,MAAM;YACR;SACD;QACDiB,QACEvC,cAAcE,iBAAiBqC,UAC/B,OAAOvC,cAAcE,iBAAiBqC,WAAW,aAC7CvC,cAAcE,gBAAgBqC,OAAO;YAAE/B;QAAc,KACrDA;QACND,QAAQ;YACN,GAAIP,cAAcE,iBAAiBK,UAAU;gBAC3CiC,QAAQ;gBACRC,UAAU;YACZ,CAAC;QACH;QACAC,UAAU1C,cAAcE,iBAAiBwC,YAAY;IACvD;IAEA,OAAOlB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/Search/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { SanitizedSearchPluginConfig } from '../types.js'\nimport type { ReindexButtonServerProps } from './ui/ReindexButton/types.js'\n\nimport { generateReindexHandler } from '../utilities/generateReindexHandler.js'\n\n// all settings can be overridden by the config\nexport const generateSearchCollection = (\n pluginConfig: SanitizedSearchPluginConfig,\n): CollectionConfig => {\n const searchSlug = pluginConfig?.searchOverrides?.slug || 'search'\n const searchCollections = pluginConfig?.collections || []\n const collectionLabels = pluginConfig?.labels\n\n const defaultFields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n readOnly: true,\n },\n localized: pluginConfig.localize,\n },\n {\n name: 'priority',\n type: 'number',\n admin: {\n position: 'sidebar',\n },\n },\n {\n name: 'doc',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n index: true,\n maxDepth: 0,\n relationTo: searchCollections,\n required: true,\n },\n {\n name: 'docUrl',\n type: 'ui',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-search/client#LinkToDoc',\n },\n },\n position: 'sidebar',\n },\n },\n ]\n\n if (!collectionLabels) {\n throw new Error('collectionLabels is required')\n }\n\n const newConfig: CollectionConfig = {\n ...(pluginConfig?.searchOverrides || {}),\n slug: searchSlug,\n access: {\n create: (): boolean => false,\n read: (): boolean => true,\n ...(pluginConfig?.searchOverrides?.access || {}),\n },\n admin: {\n components: {\n views: {\n list: {\n actions: [\n {\n path: '@payloadcms/plugin-search/client#ReindexButton',\n serverProps: {\n collectionLabels,\n searchCollections,\n searchSlug,\n } satisfies ReindexButtonServerProps,\n },\n ],\n },\n },\n },\n defaultColumns: ['title'],\n description:\n 'This is a collection of automatically created search results. These results are used by the global site search and will be updated automatically as documents in the CMS are created or updated.',\n enableRichTextRelationship: false,\n useAsTitle: 'title',\n ...(pluginConfig?.searchOverrides?.admin || {}),\n },\n endpoints: [\n ...(pluginConfig?.searchOverrides?.endpoints || []),\n {\n handler: generateReindexHandler(pluginConfig),\n method: 'post',\n path: '/reindex',\n },\n ],\n fields:\n pluginConfig?.searchOverrides?.fields &&\n typeof pluginConfig?.searchOverrides?.fields === 'function'\n ? pluginConfig?.searchOverrides.fields({ defaultFields })\n : defaultFields,\n labels: {\n ...(pluginConfig?.searchOverrides?.labels || {\n plural: 'Search Results',\n singular: 'Search Result',\n }),\n },\n // Internal search index; opt out of authorship (a searchOverride can re-enable it).\n authorship: pluginConfig?.searchOverrides?.authorship ?? false,\n versions: pluginConfig?.searchOverrides?.versions ?? false,\n }\n\n return newConfig\n}\n"],"names":["generateReindexHandler","generateSearchCollection","pluginConfig","searchSlug","searchOverrides","slug","searchCollections","collections","collectionLabels","labels","defaultFields","name","type","admin","readOnly","localized","localize","position","index","maxDepth","relationTo","required","components","Field","path","Error","newConfig","access","create","read","views","list","actions","serverProps","defaultColumns","description","enableRichTextRelationship","useAsTitle","endpoints","handler","method","fields","plural","singular","authorship","versions"],"mappings":"AAKA,SAASA,sBAAsB,QAAQ,yCAAwC;AAE/E,+CAA+C;AAC/C,OAAO,MAAMC,2BAA2B,CACtCC;IAEA,MAAMC,aAAaD,cAAcE,iBAAiBC,QAAQ;IAC1D,MAAMC,oBAAoBJ,cAAcK,eAAe,EAAE;IACzD,MAAMC,mBAAmBN,cAAcO;IAEvC,MAAMC,gBAAyB;QAC7B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,UAAU;YACZ;YACAC,WAAWb,aAAac,QAAQ;QAClC;QACA;YACEL,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLI,UAAU;YACZ;QACF;QACA;YACEN,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLI,UAAU;gBACVH,UAAU;YACZ;YACAI,OAAO;YACPC,UAAU;YACVC,YAAYd;YACZe,UAAU;QACZ;QACA;YACEV,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLS,YAAY;oBACVC,OAAO;wBACLC,MAAM;oBACR;gBACF;gBACAP,UAAU;YACZ;QACF;KACD;IAED,IAAI,CAACT,kBAAkB;QACrB,MAAM,IAAIiB,MAAM;IAClB;IAEA,MAAMC,YAA8B;QAClC,GAAIxB,cAAcE,mBAAmB,CAAC,CAAC;QACvCC,MAAMF;QACNwB,QAAQ;YACNC,QAAQ,IAAe;YACvBC,MAAM,IAAe;YACrB,GAAI3B,cAAcE,iBAAiBuB,UAAU,CAAC,CAAC;QACjD;QACAd,OAAO;YACLS,YAAY;gBACVQ,OAAO;oBACLC,MAAM;wBACJC,SAAS;4BACP;gCACER,MAAM;gCACNS,aAAa;oCACXzB;oCACAF;oCACAH;gCACF;4BACF;yBACD;oBACH;gBACF;YACF;YACA+B,gBAAgB;gBAAC;aAAQ;YACzBC,aACE;YACFC,4BAA4B;YAC5BC,YAAY;YACZ,GAAInC,cAAcE,iBAAiBS,SAAS,CAAC,CAAC;QAChD;QACAyB,WAAW;eACLpC,cAAcE,iBAAiBkC,aAAa,EAAE;YAClD;gBACEC,SAASvC,uBAAuBE;gBAChCsC,QAAQ;gBACRhB,MAAM;YACR;SACD;QACDiB,QACEvC,cAAcE,iBAAiBqC,UAC/B,OAAOvC,cAAcE,iBAAiBqC,WAAW,aAC7CvC,cAAcE,gBAAgBqC,OAAO;YAAE/B;QAAc,KACrDA;QACND,QAAQ;YACN,GAAIP,cAAcE,iBAAiBK,UAAU;gBAC3CiC,QAAQ;gBACRC,UAAU;YACZ,CAAC;QACH;QACA,oFAAoF;QACpFC,YAAY1C,cAAcE,iBAAiBwC,cAAc;QACzDC,UAAU3C,cAAcE,iBAAiByC,YAAY;IACvD;IAEA,OAAOnB;AACT,EAAC"}
@@ -1,8 +1,10 @@
1
+ import type { AriaAttributes } from 'react';
1
2
  import React from 'react';
2
3
  type ReindexButtonLabelProps = {
3
4
  readonly active?: boolean;
4
- readonly 'aria-expanded'?: boolean;
5
- readonly 'aria-haspopup'?: true;
5
+ readonly 'aria-controls'?: AriaAttributes['aria-controls'];
6
+ readonly 'aria-expanded'?: AriaAttributes['aria-expanded'];
7
+ readonly 'aria-haspopup'?: AriaAttributes['aria-haspopup'];
6
8
  readonly onClick?: React.MouseEventHandler;
7
9
  readonly onKeyDown?: React.KeyboardEventHandler;
8
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/Search/ui/ReindexButton/ReindexButtonLabel/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAA;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAA;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAA;CAChD,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAuBhE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/Search/ui/ReindexButton/ReindexButtonLabel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAA;IAC1D,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAA;IAC1D,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAA;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAA;CAChD,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAuBhE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/Search/ui/ReindexButton/ReindexButtonLabel/index.tsx"],"sourcesContent":["import { Button, ChevronIcon, useTranslation } from '@payloadcms/ui'\nimport React from 'react'\n\ntype ReindexButtonLabelProps = {\n readonly active?: boolean\n readonly 'aria-expanded'?: boolean\n readonly 'aria-haspopup'?: true\n readonly onClick?: React.MouseEventHandler\n readonly onKeyDown?: React.KeyboardEventHandler\n}\n\nexport const ReindexButtonLabel: React.FC<ReindexButtonLabelProps> = ({\n active,\n onClick,\n onKeyDown,\n ...ariaProps\n}) => {\n const {\n i18n: { t },\n } = useTranslation()\n return (\n <Button\n buttonStyle=\"secondary\"\n extraButtonProps={{ onKeyDown }}\n icon={<ChevronIcon direction={active ? 'up' : 'down'} size={16} />}\n iconPosition=\"right\"\n onClick={onClick}\n selected={active}\n size=\"medium\"\n {...ariaProps}\n >\n {t('general:reindex')}\n </Button>\n )\n}\n"],"names":["Button","ChevronIcon","useTranslation","React","ReindexButtonLabel","active","onClick","onKeyDown","ariaProps","i18n","t","buttonStyle","extraButtonProps","icon","direction","size","iconPosition","selected"],"mappings":";AAAA,SAASA,MAAM,EAAEC,WAAW,EAAEC,cAAc,QAAQ,iBAAgB;AACpE,OAAOC,WAAW,QAAO;AAUzB,OAAO,MAAMC,qBAAwD,CAAC,EACpEC,MAAM,EACNC,OAAO,EACPC,SAAS,EACT,GAAGC,WACJ;IACC,MAAM,EACJC,MAAM,EAAEC,CAAC,EAAE,EACZ,GAAGR;IACJ,qBACE,KAACF;QACCW,aAAY;QACZC,kBAAkB;YAAEL;QAAU;QAC9BM,oBAAM,KAACZ;YAAYa,WAAWT,SAAS,OAAO;YAAQU,MAAM;;QAC5DC,cAAa;QACbV,SAASA;QACTW,UAAUZ;QACVU,MAAK;QACJ,GAAGP,SAAS;kBAEZE,EAAE;;AAGT,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/Search/ui/ReindexButton/ReindexButtonLabel/index.tsx"],"sourcesContent":["import type { AriaAttributes } from 'react'\n\nimport { Button, ChevronIcon, useTranslation } from '@payloadcms/ui'\nimport React from 'react'\n\ntype ReindexButtonLabelProps = {\n readonly active?: boolean\n readonly 'aria-controls'?: AriaAttributes['aria-controls']\n readonly 'aria-expanded'?: AriaAttributes['aria-expanded']\n readonly 'aria-haspopup'?: AriaAttributes['aria-haspopup']\n readonly onClick?: React.MouseEventHandler\n readonly onKeyDown?: React.KeyboardEventHandler\n}\n\nexport const ReindexButtonLabel: React.FC<ReindexButtonLabelProps> = ({\n active,\n onClick,\n onKeyDown,\n ...ariaProps\n}) => {\n const {\n i18n: { t },\n } = useTranslation()\n return (\n <Button\n buttonStyle=\"secondary\"\n extraButtonProps={{ onKeyDown }}\n icon={<ChevronIcon direction={active ? 'up' : 'down'} size={16} />}\n iconPosition=\"right\"\n onClick={onClick}\n selected={active}\n size=\"medium\"\n {...ariaProps}\n >\n {t('general:reindex')}\n </Button>\n )\n}\n"],"names":["Button","ChevronIcon","useTranslation","React","ReindexButtonLabel","active","onClick","onKeyDown","ariaProps","i18n","t","buttonStyle","extraButtonProps","icon","direction","size","iconPosition","selected"],"mappings":";AAEA,SAASA,MAAM,EAAEC,WAAW,EAAEC,cAAc,QAAQ,iBAAgB;AACpE,OAAOC,WAAW,QAAO;AAWzB,OAAO,MAAMC,qBAAwD,CAAC,EACpEC,MAAM,EACNC,OAAO,EACPC,SAAS,EACT,GAAGC,WACJ;IACC,MAAM,EACJC,MAAM,EAAEC,CAAC,EAAE,EACZ,GAAGR;IACJ,qBACE,KAACF;QACCW,aAAY;QACZC,kBAAkB;YAAEL;QAAU;QAC9BM,oBAAM,KAACZ;YAAYa,WAAWT,SAAS,OAAO;YAAQU,MAAM;;QAC5DC,cAAa;QACbV,SAASA;QACTW,UAAUZ;QACVU,MAAK;QACJ,GAAGP,SAAS;kBAEZE,EAAE;;AAGT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../../src/Search/ui/ReindexButton/index.client.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAMpD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAqI5D,CAAA"}
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../../src/Search/ui/ReindexButton/index.client.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAMpD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAuI5D,CAAA"}
@@ -10,6 +10,7 @@ export const ReindexButtonClient = ({ collectionLabels, searchCollections, searc
10
10
  const { config } = useConfig();
11
11
  const { i18n: { t } } = useTranslation();
12
12
  const locale = useLocale();
13
+ const localeCode = locale?.code;
13
14
  const router = useRouter();
14
15
  const [reindexCollections, setReindexCollections] = useState([]);
15
16
  const openConfirmModal = useCallback(()=>openModal(confirmReindexModalSlug), [
@@ -22,7 +23,7 @@ export const ReindexButtonClient = ({ collectionLabels, searchCollections, searc
22
23
  try {
23
24
  const res = await fetch(formatAdminURL({
24
25
  apiRoute: config.routes.api,
25
- path: `/${searchSlug}/reindex?locale=${locale.code}`
26
+ path: `/${searchSlug}/reindex${localeCode ? `?locale=${localeCode}` : ''}`
26
27
  }), {
27
28
  body: JSON.stringify({
28
29
  collections: reindexCollections
@@ -45,7 +46,7 @@ export const ReindexButtonClient = ({ collectionLabels, searchCollections, searc
45
46
  reindexCollections,
46
47
  router,
47
48
  searchSlug,
48
- locale,
49
+ localeCode,
49
50
  config
50
51
  ]);
51
52
  const handleShowConfirmModal = useCallback((collections = searchCollections)=>{
@@ -68,11 +69,11 @@ export const ReindexButtonClient = ({ collectionLabels, searchCollections, searc
68
69
  if (typeof label === 'string') {
69
70
  return label;
70
71
  } else {
71
- return label && Object.hasOwn(label, locale.code) ? label[locale.code] : slug;
72
+ return label && localeCode && Object.hasOwn(label, localeCode) ? label[localeCode] : slug;
72
73
  }
73
74
  }, [
74
75
  collectionLabels,
75
- locale.code
76
+ localeCode
76
77
  ]);
77
78
  const pluralizedLabels = useMemo(()=>{
78
79
  return searchCollections.reduce((acc, slug)=>{
@@ -97,6 +98,7 @@ export const ReindexButtonClient = ({ collectionLabels, searchCollections, searc
97
98
  return /*#__PURE__*/ _jsxs("div", {
98
99
  children: [
99
100
  /*#__PURE__*/ _jsx(Popup, {
101
+ popupType: "menu",
100
102
  render: ({ close })=>/*#__PURE__*/ _jsxs(PopupList.ButtonGroup, {
101
103
  children: [
102
104
  searchCollections.map((collectionSlug)=>/*#__PURE__*/ _jsx(PopupList.Button, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/Search/ui/ReindexButton/index.client.tsx"],"sourcesContent":["'use client'\n\nimport {\n ConfirmationModal,\n Popup,\n PopupList,\n toast,\n useConfig,\n useLocale,\n useModal,\n useRouter,\n useTranslation,\n} from '@payloadcms/ui'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useCallback, useMemo, useState } from 'react'\n\nimport type { ReindexButtonProps } from './types.js'\n\nimport { ReindexButtonLabel } from './ReindexButtonLabel/index.js'\n\nconst confirmReindexModalSlug = 'confirm-reindex-modal'\n\nexport const ReindexButtonClient: React.FC<ReindexButtonProps> = ({\n collectionLabels,\n searchCollections,\n searchSlug,\n}) => {\n const { openModal } = useModal()\n\n const { config } = useConfig()\n\n const {\n i18n: { t },\n } = useTranslation()\n\n const locale = useLocale()\n const router = useRouter()\n\n const [reindexCollections, setReindexCollections] = useState<string[]>([])\n\n const openConfirmModal = useCallback(() => openModal(confirmReindexModalSlug), [openModal])\n\n const handleReindexSubmit = useCallback(async () => {\n if (!reindexCollections.length) {\n return\n }\n\n try {\n const res = await fetch(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${searchSlug}/reindex?locale=${locale.code}`,\n }),\n {\n body: JSON.stringify({\n collections: reindexCollections,\n }),\n method: 'POST',\n },\n )\n\n const { message } = (await res.json()) as { message: string }\n\n if (!res.ok) {\n toast.error(message)\n } else {\n toast.success(message)\n return router.refresh()\n }\n } catch (_err: unknown) {\n // swallow error, toast shown above\n } finally {\n setReindexCollections([])\n }\n }, [reindexCollections, router, searchSlug, locale, config])\n\n const handleShowConfirmModal = useCallback(\n (collections: string | string[] = searchCollections) => {\n setReindexCollections(typeof collections === 'string' ? [collections] : collections)\n openConfirmModal()\n },\n [openConfirmModal, searchCollections],\n )\n\n const handlePopupButtonClick = useCallback(\n (closePopup: () => void, slug?: string) => {\n closePopup()\n handleShowConfirmModal(slug)\n },\n [handleShowConfirmModal],\n )\n\n const getPluralizedLabel = useCallback(\n (slug: string) => {\n const label = collectionLabels[slug]\n if (typeof label === 'string') {\n return label\n } else {\n return label && Object.hasOwn(label, locale.code) ? label[locale.code] : slug\n }\n },\n [collectionLabels, locale.code],\n )\n\n const pluralizedLabels = useMemo(() => {\n return searchCollections.reduce<Record<string, string>>((acc, slug) => {\n const label = getPluralizedLabel(slug)\n if (label) {\n acc[slug] = label\n }\n return acc\n }, {})\n }, [searchCollections, getPluralizedLabel])\n\n const selectedAll = reindexCollections.length === searchCollections.length\n const selectedLabels = reindexCollections.map((slug) => pluralizedLabels[slug]).join(', ')\n\n const modalTitle = selectedAll\n ? t('general:confirmReindexAll')\n : t('general:confirmReindex', { collections: selectedLabels })\n const modalDescription = selectedAll\n ? t('general:confirmReindexDescriptionAll')\n : t('general:confirmReindexDescription', { collections: selectedLabels })\n\n return (\n <div>\n <Popup\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {searchCollections.map((collectionSlug) => (\n <PopupList.Button\n key={collectionSlug}\n onClick={() => handlePopupButtonClick(close, collectionSlug)}\n >\n {pluralizedLabels[collectionSlug]}\n </PopupList.Button>\n ))}\n <PopupList.Button onClick={() => handlePopupButtonClick(close)}>\n {t('general:allCollections')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n renderButton={(buttonProps) => <ReindexButtonLabel {...buttonProps} />}\n showScrollbar\n size=\"large\"\n verticalAlign=\"bottom\"\n />\n <ConfirmationModal\n body={modalDescription}\n heading={modalTitle}\n modalSlug={confirmReindexModalSlug}\n onConfirm={handleReindexSubmit}\n />\n </div>\n )\n}\n"],"names":["ConfirmationModal","Popup","PopupList","toast","useConfig","useLocale","useModal","useRouter","useTranslation","formatAdminURL","React","useCallback","useMemo","useState","ReindexButtonLabel","confirmReindexModalSlug","ReindexButtonClient","collectionLabels","searchCollections","searchSlug","openModal","config","i18n","t","locale","router","reindexCollections","setReindexCollections","openConfirmModal","handleReindexSubmit","length","res","fetch","apiRoute","routes","api","path","code","body","JSON","stringify","collections","method","message","json","ok","error","success","refresh","_err","handleShowConfirmModal","handlePopupButtonClick","closePopup","slug","getPluralizedLabel","label","Object","hasOwn","pluralizedLabels","reduce","acc","selectedAll","selectedLabels","map","join","modalTitle","modalDescription","div","render","close","ButtonGroup","collectionSlug","Button","onClick","renderButton","buttonProps","showScrollbar","size","verticalAlign","heading","modalSlug","onConfirm"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/Search/ui/ReindexButton/index.client.tsx"],"sourcesContent":["'use client'\n\nimport {\n ConfirmationModal,\n Popup,\n PopupList,\n toast,\n useConfig,\n useLocale,\n useModal,\n useRouter,\n useTranslation,\n} from '@payloadcms/ui'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useCallback, useMemo, useState } from 'react'\n\nimport type { ReindexButtonProps } from './types.js'\n\nimport { ReindexButtonLabel } from './ReindexButtonLabel/index.js'\n\nconst confirmReindexModalSlug = 'confirm-reindex-modal'\n\nexport const ReindexButtonClient: React.FC<ReindexButtonProps> = ({\n collectionLabels,\n searchCollections,\n searchSlug,\n}) => {\n const { openModal } = useModal()\n\n const { config } = useConfig()\n\n const {\n i18n: { t },\n } = useTranslation()\n\n const locale = useLocale()\n const localeCode = locale?.code\n const router = useRouter()\n\n const [reindexCollections, setReindexCollections] = useState<string[]>([])\n\n const openConfirmModal = useCallback(() => openModal(confirmReindexModalSlug), [openModal])\n\n const handleReindexSubmit = useCallback(async () => {\n if (!reindexCollections.length) {\n return\n }\n\n try {\n const res = await fetch(\n formatAdminURL({\n apiRoute: config.routes.api,\n path: `/${searchSlug}/reindex${localeCode ? `?locale=${localeCode}` : ''}`,\n }),\n {\n body: JSON.stringify({\n collections: reindexCollections,\n }),\n method: 'POST',\n },\n )\n\n const { message } = (await res.json()) as { message: string }\n\n if (!res.ok) {\n toast.error(message)\n } else {\n toast.success(message)\n return router.refresh()\n }\n } catch (_err: unknown) {\n // swallow error, toast shown above\n } finally {\n setReindexCollections([])\n }\n }, [reindexCollections, router, searchSlug, localeCode, config])\n\n const handleShowConfirmModal = useCallback(\n (collections: string | string[] = searchCollections) => {\n setReindexCollections(typeof collections === 'string' ? [collections] : collections)\n openConfirmModal()\n },\n [openConfirmModal, searchCollections],\n )\n\n const handlePopupButtonClick = useCallback(\n (closePopup: () => void, slug?: string) => {\n closePopup()\n handleShowConfirmModal(slug)\n },\n [handleShowConfirmModal],\n )\n\n const getPluralizedLabel = useCallback(\n (slug: string) => {\n const label = collectionLabels[slug]\n if (typeof label === 'string') {\n return label\n } else {\n return label && localeCode && Object.hasOwn(label, localeCode) ? label[localeCode] : slug\n }\n },\n [collectionLabels, localeCode],\n )\n\n const pluralizedLabels = useMemo(() => {\n return searchCollections.reduce<Record<string, string>>((acc, slug) => {\n const label = getPluralizedLabel(slug)\n if (label) {\n acc[slug] = label\n }\n return acc\n }, {})\n }, [searchCollections, getPluralizedLabel])\n\n const selectedAll = reindexCollections.length === searchCollections.length\n const selectedLabels = reindexCollections.map((slug) => pluralizedLabels[slug]).join(', ')\n\n const modalTitle = selectedAll\n ? t('general:confirmReindexAll')\n : t('general:confirmReindex', { collections: selectedLabels })\n const modalDescription = selectedAll\n ? t('general:confirmReindexDescriptionAll')\n : t('general:confirmReindexDescription', { collections: selectedLabels })\n\n return (\n <div>\n <Popup\n popupType=\"menu\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {searchCollections.map((collectionSlug) => (\n <PopupList.Button\n key={collectionSlug}\n onClick={() => handlePopupButtonClick(close, collectionSlug)}\n >\n {pluralizedLabels[collectionSlug]}\n </PopupList.Button>\n ))}\n <PopupList.Button onClick={() => handlePopupButtonClick(close)}>\n {t('general:allCollections')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n renderButton={(buttonProps) => <ReindexButtonLabel {...buttonProps} />}\n showScrollbar\n size=\"large\"\n verticalAlign=\"bottom\"\n />\n <ConfirmationModal\n body={modalDescription}\n heading={modalTitle}\n modalSlug={confirmReindexModalSlug}\n onConfirm={handleReindexSubmit}\n />\n </div>\n )\n}\n"],"names":["ConfirmationModal","Popup","PopupList","toast","useConfig","useLocale","useModal","useRouter","useTranslation","formatAdminURL","React","useCallback","useMemo","useState","ReindexButtonLabel","confirmReindexModalSlug","ReindexButtonClient","collectionLabels","searchCollections","searchSlug","openModal","config","i18n","t","locale","localeCode","code","router","reindexCollections","setReindexCollections","openConfirmModal","handleReindexSubmit","length","res","fetch","apiRoute","routes","api","path","body","JSON","stringify","collections","method","message","json","ok","error","success","refresh","_err","handleShowConfirmModal","handlePopupButtonClick","closePopup","slug","getPluralizedLabel","label","Object","hasOwn","pluralizedLabels","reduce","acc","selectedAll","selectedLabels","map","join","modalTitle","modalDescription","div","popupType","render","close","ButtonGroup","collectionSlug","Button","onClick","renderButton","buttonProps","showScrollbar","size","verticalAlign","heading","modalSlug","onConfirm"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"syncDocAsSearchIndex.d.ts","sourceRoot":"","sources":["../../src/utilities/syncDocAsSearchIndex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzD,eAAO,MAAM,oBAAoB,8FAS9B,WAAW,iBAgRb,CAAA"}
1
+ {"version":3,"file":"syncDocAsSearchIndex.d.ts","sourceRoot":"","sources":["../../src/utilities/syncDocAsSearchIndex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzD,eAAO,MAAM,oBAAoB,8FAS9B,WAAW,iBAyRb,CAAA"}
@@ -51,6 +51,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
51
51
  id,
52
52
  collection,
53
53
  locale: syncLocale,
54
+ overrideAccess: true,
54
55
  req,
55
56
  // Include trashed documents when the document being synced is trashed
56
57
  trash: isTrashDocument
@@ -89,6 +90,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
89
90
  },
90
91
  depth: 0,
91
92
  locale: syncLocale,
93
+ overrideAccess: true,
92
94
  req
93
95
  });
94
96
  }
@@ -99,6 +101,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
99
101
  collection: searchSlug,
100
102
  depth: 0,
101
103
  locale: syncLocale,
104
+ overrideAccess: true,
102
105
  req,
103
106
  where: {
104
107
  'doc.relationTo': {
@@ -119,6 +122,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
119
122
  await payload.delete({
120
123
  collection: searchSlug,
121
124
  depth: 0,
125
+ overrideAccess: true,
122
126
  req,
123
127
  where: {
124
128
  id: {
@@ -143,6 +147,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
143
147
  id: searchDocID,
144
148
  collection: searchSlug,
145
149
  depth: 0,
150
+ overrideAccess: true,
146
151
  req
147
152
  });
148
153
  } catch (err) {
@@ -164,6 +169,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
164
169
  },
165
170
  depth: 0,
166
171
  locale: syncLocale,
172
+ overrideAccess: true,
167
173
  req
168
174
  });
169
175
  } catch (err) {
@@ -182,6 +188,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
182
188
  draft: false,
183
189
  limit: 1,
184
190
  locale: syncLocale,
191
+ overrideAccess: true,
185
192
  pagination: false,
186
193
  req,
187
194
  where: {
@@ -206,6 +213,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
206
213
  id: searchDocID,
207
214
  collection: searchSlug,
208
215
  depth: 0,
216
+ overrideAccess: true,
209
217
  req
210
218
  });
211
219
  } catch (err) {
@@ -227,6 +235,7 @@ export const syncDocAsSearchIndex = async ({ collection, doc, locale, onSyncErro
227
235
  },
228
236
  depth: 0,
229
237
  locale: syncLocale,
238
+ overrideAccess: true,
230
239
  req
231
240
  });
232
241
  } catch (err) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/syncDocAsSearchIndex.ts"],"sourcesContent":["import type { DocToSync, SyncDocArgs } from '../types.js'\n\nexport const syncDocAsSearchIndex = async ({\n collection,\n doc,\n locale,\n onSyncError,\n operation,\n pluginConfig,\n req: { payload },\n req,\n}: SyncDocArgs) => {\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig\n\n const searchSlug = searchOverrides?.slug || 'search'\n\n // Determine sync locale\n const syncLocale = locale || req.locale || undefined\n\n if (typeof pluginConfig.skipSync === 'function') {\n try {\n const skipSync = await pluginConfig.skipSync({\n collectionSlug: collection,\n doc,\n locale: syncLocale,\n req,\n })\n\n if (skipSync) {\n return doc\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: 'Search plugin: Error executing skipSync. Proceeding with sync.',\n })\n }\n }\n\n let dataToSave: DocToSync = {\n doc: {\n relationTo: collection,\n value: id,\n },\n title,\n }\n const docKeyPrefix = `${collection}:${id}`\n const docKey = req.payload.config.localization ? `${docKeyPrefix}:${syncLocale}` : docKeyPrefix\n const syncedDocsSet = (req.context?.syncedDocsSet as Set<string>) || new Set<string>()\n\n if (syncedDocsSet.has(docKey)) {\n /*\n * prevents duplicate syncing of documents in the same request\n * this can happen when hooks call `payload.update` within the create lifecycle\n * like the nested-docs plugin does\n */\n return doc\n } else {\n syncedDocsSet.add(docKey)\n }\n\n req.context.syncedDocsSet = syncedDocsSet\n\n if (typeof beforeSync === 'function') {\n let docToSyncWith = doc\n if (payload.config?.localization) {\n // Check if document is trashed (has deletedAt field)\n const isTrashDocument = doc && 'deletedAt' in doc && doc.deletedAt\n\n docToSyncWith = await payload.findByID({\n id,\n collection,\n locale: syncLocale,\n req,\n // Include trashed documents when the document being synced is trashed\n trash: isTrashDocument,\n })\n }\n dataToSave = await beforeSync({\n collectionSlug: collection,\n originalDoc: docToSyncWith,\n payload,\n req,\n searchDoc: dataToSave,\n })\n }\n\n let defaultPriority = 0\n if (defaultPriorities) {\n const { [collection]: priority } = defaultPriorities\n\n if (typeof priority === 'function') {\n try {\n defaultPriority = await priority(doc)\n } catch (err: unknown) {\n payload.logger.error(err)\n payload.logger.error(\n `Error gathering default priority for ${searchSlug} documents related to ${collection}`,\n )\n }\n } else if (priority !== undefined) {\n defaultPriority = priority\n }\n }\n\n const doSync = syncDrafts || (!syncDrafts && status !== 'draft')\n\n try {\n if (operation === 'create' && doSync) {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n depth: 0,\n locale: syncLocale,\n req,\n })\n }\n\n if (operation === 'update') {\n try {\n // find the correct doc to sync with\n const searchDocQuery = await payload.find({\n collection: searchSlug,\n depth: 0,\n locale: syncLocale,\n req,\n where: {\n 'doc.relationTo': {\n equals: collection,\n },\n 'doc.value': {\n equals: id,\n },\n },\n })\n\n const docs: Array<{\n id: number | string\n priority?: number\n }> = searchDocQuery?.docs || []\n\n const [foundDoc, ...duplicativeDocs] = docs\n\n // delete all duplicative search docs (docs that reference the same page)\n // to ensure the same, out-of-date result does not appear twice (where only syncing the first found doc)\n if (duplicativeDocs.length > 0) {\n try {\n const duplicativeDocIDs = duplicativeDocs.map(({ id }) => id)\n await payload.delete({\n collection: searchSlug,\n depth: 0,\n req,\n where: { id: { in: duplicativeDocIDs } },\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting duplicative ${searchSlug} documents.`,\n })\n }\n }\n\n if (foundDoc) {\n const { id: searchDocID } = foundDoc\n\n // Check if document is trashed and delete from search\n const isTrashDocument = doc && 'deletedAt' in doc && doc.deletedAt\n\n if (isTrashDocument) {\n try {\n await payload.delete({\n id: searchDocID,\n collection: searchSlug,\n depth: 0,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting ${searchSlug} document for trashed doc.`,\n })\n }\n } else {\n if (doSync) {\n // update the doc normally\n try {\n await payload.update({\n id: searchDocID,\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: foundDoc.priority || defaultPriority,\n },\n depth: 0,\n locale: syncLocale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error updating ${searchSlug} document.` })\n }\n }\n\n if (deleteDrafts && status === 'draft') {\n // Check to see if there's a published version of the doc\n // We don't want to remove the search doc if there is a published version but a new draft has been created\n const {\n docs: [docWithPublish],\n } = await payload.find({\n collection,\n depth: 0,\n draft: false,\n limit: 1,\n locale: syncLocale,\n pagination: false,\n req,\n where: {\n and: [\n {\n _status: {\n equals: 'published',\n },\n },\n {\n id: {\n equals: id,\n },\n },\n ],\n },\n })\n\n if (!docWithPublish) {\n // do not include draft docs in search results, so delete the record\n try {\n await payload.delete({\n id: searchDocID,\n collection: searchSlug,\n depth: 0,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error deleting ${searchSlug} document.` })\n }\n }\n }\n }\n } else if (doSync) {\n try {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n depth: 0,\n locale: syncLocale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error creating ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error finding ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error syncing ${searchSlug} document related to ${collection} with id: '${id}'.`,\n })\n\n if (onSyncError) {\n onSyncError()\n }\n }\n\n return doc\n}\n"],"names":["syncDocAsSearchIndex","collection","doc","locale","onSyncError","operation","pluginConfig","req","payload","id","_status","status","title","beforeSync","defaultPriorities","deleteDrafts","searchOverrides","syncDrafts","searchSlug","slug","syncLocale","undefined","skipSync","collectionSlug","err","logger","error","msg","dataToSave","relationTo","value","docKeyPrefix","docKey","config","localization","syncedDocsSet","context","Set","has","add","docToSyncWith","isTrashDocument","deletedAt","findByID","trash","originalDoc","searchDoc","defaultPriority","priority","doSync","create","data","depth","searchDocQuery","find","where","equals","docs","foundDoc","duplicativeDocs","length","duplicativeDocIDs","map","delete","in","searchDocID","update","docWithPublish","draft","limit","pagination","and"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/syncDocAsSearchIndex.ts"],"sourcesContent":["import type { DocToSync, SyncDocArgs } from '../types.js'\n\nexport const syncDocAsSearchIndex = async ({\n collection,\n doc,\n locale,\n onSyncError,\n operation,\n pluginConfig,\n req: { payload },\n req,\n}: SyncDocArgs) => {\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig\n\n const searchSlug = searchOverrides?.slug || 'search'\n\n // Determine sync locale\n const syncLocale = locale || req.locale || undefined\n\n if (typeof pluginConfig.skipSync === 'function') {\n try {\n const skipSync = await pluginConfig.skipSync({\n collectionSlug: collection,\n doc,\n locale: syncLocale,\n req,\n })\n\n if (skipSync) {\n return doc\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: 'Search plugin: Error executing skipSync. Proceeding with sync.',\n })\n }\n }\n\n let dataToSave: DocToSync = {\n doc: {\n relationTo: collection,\n value: id,\n },\n title,\n }\n const docKeyPrefix = `${collection}:${id}`\n const docKey = req.payload.config.localization ? `${docKeyPrefix}:${syncLocale}` : docKeyPrefix\n const syncedDocsSet = (req.context?.syncedDocsSet as Set<string>) || new Set<string>()\n\n if (syncedDocsSet.has(docKey)) {\n /*\n * prevents duplicate syncing of documents in the same request\n * this can happen when hooks call `payload.update` within the create lifecycle\n * like the nested-docs plugin does\n */\n return doc\n } else {\n syncedDocsSet.add(docKey)\n }\n\n req.context.syncedDocsSet = syncedDocsSet\n\n if (typeof beforeSync === 'function') {\n let docToSyncWith = doc\n if (payload.config?.localization) {\n // Check if document is trashed (has deletedAt field)\n const isTrashDocument = doc && 'deletedAt' in doc && doc.deletedAt\n\n docToSyncWith = await payload.findByID({\n id,\n collection,\n locale: syncLocale,\n overrideAccess: true,\n req,\n // Include trashed documents when the document being synced is trashed\n trash: isTrashDocument,\n })\n }\n dataToSave = await beforeSync({\n collectionSlug: collection,\n originalDoc: docToSyncWith,\n payload,\n req,\n searchDoc: dataToSave,\n })\n }\n\n let defaultPriority = 0\n if (defaultPriorities) {\n const { [collection]: priority } = defaultPriorities\n\n if (typeof priority === 'function') {\n try {\n defaultPriority = await priority(doc)\n } catch (err: unknown) {\n payload.logger.error(err)\n payload.logger.error(\n `Error gathering default priority for ${searchSlug} documents related to ${collection}`,\n )\n }\n } else if (priority !== undefined) {\n defaultPriority = priority\n }\n }\n\n const doSync = syncDrafts || (!syncDrafts && status !== 'draft')\n\n try {\n if (operation === 'create' && doSync) {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n depth: 0,\n locale: syncLocale,\n overrideAccess: true,\n req,\n })\n }\n\n if (operation === 'update') {\n try {\n // find the correct doc to sync with\n const searchDocQuery = await payload.find({\n collection: searchSlug,\n depth: 0,\n locale: syncLocale,\n overrideAccess: true,\n req,\n where: {\n 'doc.relationTo': {\n equals: collection,\n },\n 'doc.value': {\n equals: id,\n },\n },\n })\n\n const docs: Array<{\n id: number | string\n priority?: number\n }> = searchDocQuery?.docs || []\n\n const [foundDoc, ...duplicativeDocs] = docs\n\n // delete all duplicative search docs (docs that reference the same page)\n // to ensure the same, out-of-date result does not appear twice (where only syncing the first found doc)\n if (duplicativeDocs.length > 0) {\n try {\n const duplicativeDocIDs = duplicativeDocs.map(({ id }) => id)\n await payload.delete({\n collection: searchSlug,\n depth: 0,\n overrideAccess: true,\n req,\n where: { id: { in: duplicativeDocIDs } },\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting duplicative ${searchSlug} documents.`,\n })\n }\n }\n\n if (foundDoc) {\n const { id: searchDocID } = foundDoc\n\n // Check if document is trashed and delete from search\n const isTrashDocument = doc && 'deletedAt' in doc && doc.deletedAt\n\n if (isTrashDocument) {\n try {\n await payload.delete({\n id: searchDocID,\n collection: searchSlug,\n depth: 0,\n overrideAccess: true,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting ${searchSlug} document for trashed doc.`,\n })\n }\n } else {\n if (doSync) {\n // update the doc normally\n try {\n await payload.update({\n id: searchDocID,\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: foundDoc.priority || defaultPriority,\n },\n depth: 0,\n locale: syncLocale,\n overrideAccess: true,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error updating ${searchSlug} document.` })\n }\n }\n\n if (deleteDrafts && status === 'draft') {\n // Check to see if there's a published version of the doc\n // We don't want to remove the search doc if there is a published version but a new draft has been created\n const {\n docs: [docWithPublish],\n } = await payload.find({\n collection,\n depth: 0,\n draft: false,\n limit: 1,\n locale: syncLocale,\n overrideAccess: true,\n pagination: false,\n req,\n where: {\n and: [\n {\n _status: {\n equals: 'published',\n },\n },\n {\n id: {\n equals: id,\n },\n },\n ],\n },\n })\n\n if (!docWithPublish) {\n // do not include draft docs in search results, so delete the record\n try {\n await payload.delete({\n id: searchDocID,\n collection: searchSlug,\n depth: 0,\n overrideAccess: true,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error deleting ${searchSlug} document.` })\n }\n }\n }\n }\n } else if (doSync) {\n try {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n depth: 0,\n locale: syncLocale,\n overrideAccess: true,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error creating ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error finding ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error syncing ${searchSlug} document related to ${collection} with id: '${id}'.`,\n })\n\n if (onSyncError) {\n onSyncError()\n }\n }\n\n return doc\n}\n"],"names":["syncDocAsSearchIndex","collection","doc","locale","onSyncError","operation","pluginConfig","req","payload","id","_status","status","title","beforeSync","defaultPriorities","deleteDrafts","searchOverrides","syncDrafts","searchSlug","slug","syncLocale","undefined","skipSync","collectionSlug","err","logger","error","msg","dataToSave","relationTo","value","docKeyPrefix","docKey","config","localization","syncedDocsSet","context","Set","has","add","docToSyncWith","isTrashDocument","deletedAt","findByID","overrideAccess","trash","originalDoc","searchDoc","defaultPriority","priority","doSync","create","data","depth","searchDocQuery","find","where","equals","docs","foundDoc","duplicativeDocs","length","duplicativeDocIDs","map","delete","in","searchDocID","update","docWithPublish","draft","limit","pagination","and"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-search",
3
- "version": "4.0.0-internal.435b2d6",
3
+ "version": "4.0.0-internal.44ac9c8",
4
4
  "description": "Search plugin for Payload",
5
5
  "keywords": [
6
6
  "payload",
@@ -50,19 +50,19 @@
50
50
  "dist"
51
51
  ],
52
52
  "dependencies": {
53
- "@payloadcms/next": "4.0.0-internal.435b2d6",
54
- "@payloadcms/ui": "4.0.0-internal.435b2d6"
53
+ "@payloadcms/next": "4.0.0-internal.44ac9c8",
54
+ "@payloadcms/ui": "4.0.0-internal.44ac9c8"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@types/react": "19.2.14",
58
58
  "@types/react-dom": "19.2.3",
59
59
  "@payloadcms/eslint-config": "3.28.0",
60
- "payload": "4.0.0-internal.435b2d6"
60
+ "payload": "4.0.0-internal.44ac9c8"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
64
64
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
65
- "payload": "4.0.0-internal.435b2d6"
65
+ "payload": "4.0.0-internal.44ac9c8"
66
66
  },
67
67
  "publishConfig": {
68
68
  "registry": "https://registry.npmjs.org/"
@@ -74,7 +74,7 @@
74
74
  "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
75
75
  "build:types": "tsc --emitDeclarationOnly --outDir dist",
76
76
  "clean": "rimraf -g {dist,*.tsbuildinfo}",
77
- "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
77
+ "copyfiles": "copyfiles -u 1 -e \"**/*.spec.*\" \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
78
78
  "lint": "eslint .",
79
79
  "lint:fix": "eslint . --fix",
80
80
  "test": "echo \"Error: no tests specified\""