@payloadcms/plugin-search 3.0.0-canary.b8dd0db → 3.0.0-canary.bb00d64
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/Search/hooks/deleteFromSearch.d.ts +2 -2
- package/dist/Search/hooks/deleteFromSearch.d.ts.map +1 -1
- package/dist/Search/hooks/deleteFromSearch.js +6 -4
- package/dist/Search/hooks/deleteFromSearch.js.map +1 -1
- package/dist/Search/hooks/syncWithSearch.d.ts.map +1 -1
- package/dist/Search/hooks/syncWithSearch.js +32 -15
- package/dist/Search/hooks/syncWithSearch.js.map +1 -1
- package/dist/Search/index.d.ts.map +1 -1
- package/dist/Search/index.js +5 -2
- package/dist/Search/index.js.map +1 -1
- package/dist/Search/ui/index.client.d.ts.map +1 -1
- package/dist/Search/ui/index.client.js +14 -5
- package/dist/Search/ui/index.client.js.map +1 -1
- package/dist/Search/ui/index.d.ts.map +1 -1
- package/dist/Search/ui/index.js +1 -3
- package/dist/Search/ui/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/package.json +13 -12
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const deleteFromSearch:
|
|
1
|
+
import type { DeleteFromSearch } from '../../types.js';
|
|
2
|
+
export declare const deleteFromSearch: DeleteFromSearch;
|
|
3
3
|
//# sourceMappingURL=deleteFromSearch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteFromSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
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,gBAkC9B,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export const deleteFromSearch = async ({ doc, req: { payload }, req })=>{
|
|
1
|
+
export const deleteFromSearch = async ({ doc, pluginConfig, req: { payload }, req })=>{
|
|
2
|
+
const searchSlug = pluginConfig?.searchOverrides?.slug || 'search';
|
|
2
3
|
try {
|
|
3
4
|
const searchDocQuery = await payload.find({
|
|
4
|
-
collection:
|
|
5
|
+
collection: searchSlug,
|
|
5
6
|
depth: 0,
|
|
6
7
|
req,
|
|
7
8
|
where: {
|
|
@@ -13,13 +14,14 @@ export const deleteFromSearch = async ({ doc, req: { payload }, req })=>{
|
|
|
13
14
|
if (searchDocQuery?.docs?.[0]) {
|
|
14
15
|
await payload.delete({
|
|
15
16
|
id: searchDocQuery?.docs?.[0]?.id,
|
|
16
|
-
collection:
|
|
17
|
+
collection: searchSlug,
|
|
17
18
|
req
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
21
|
} catch (err) {
|
|
21
22
|
payload.logger.error({
|
|
22
|
-
err
|
|
23
|
+
err,
|
|
24
|
+
msg: `Error deleting ${searchSlug} doc.`
|
|
23
25
|
});
|
|
24
26
|
}
|
|
25
27
|
return doc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"sourcesContent":["import type { DeleteFromSearch } from '../../types.js'\n\nexport const deleteFromSearch: DeleteFromSearch = async ({\n doc,\n pluginConfig,\n req: { payload },\n req,\n}) => {\n const searchSlug = pluginConfig?.searchOverrides?.slug || 'search'\n try {\n const searchDocQuery = await payload.find({\n collection: searchSlug,\n depth: 0,\n req,\n where: {\n 'doc.value': {\n equals: doc.id,\n },\n },\n })\n\n if (searchDocQuery?.docs?.[0]) {\n await payload.delete({\n id: searchDocQuery?.docs?.[0]?.id,\n collection: searchSlug,\n req,\n })\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting ${searchSlug} doc.`,\n })\n }\n\n return doc\n}\n"],"names":["deleteFromSearch","doc","pluginConfig","req","payload","searchSlug","searchOverrides","slug","searchDocQuery","find","collection","depth","where","equals","id","docs","delete","err","logger","error","msg"],"mappings":"AAEA,OAAO,MAAMA,mBAAqC,OAAO,EACvDC,GAAG,EACHC,YAAY,EACZC,KAAK,EAAEC,OAAO,EAAE,EAChBD,GAAG,EACJ;IACC,MAAME,aAAaH,cAAcI,iBAAiBC,QAAQ;IAC1D,IAAI;QACF,MAAMC,iBAAiB,MAAMJ,QAAQK,IAAI,CAAC;YACxCC,YAAYL;YACZM,OAAO;YACPR;YACAS,OAAO;gBACL,aAAa;oBACXC,QAAQZ,IAAIa,EAAE;gBAChB;YACF;QACF;QAEA,IAAIN,gBAAgBO,MAAM,CAAC,EAAE,EAAE;YAC7B,MAAMX,QAAQY,MAAM,CAAC;gBACnBF,IAAIN,gBAAgBO,MAAM,CAAC,EAAE,EAAED;gBAC/BJ,YAAYL;gBACZF;YACF;QACF;IACF,EAAE,OAAOc,KAAc;QACrBb,QAAQc,MAAM,CAACC,KAAK,CAAC;YACnBF;YACAG,KAAK,CAAC,eAAe,EAAEf,WAAW,KAAK,CAAC;QAC1C;IACF;IAEA,OAAOJ;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncWithSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/syncWithSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"syncWithSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/syncWithSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,cAAc,EAAE,cAgL5B,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export const syncWithSearch = async (args)=>{
|
|
2
2
|
const { collection, doc, operation, pluginConfig, req: { payload }, req } = args;
|
|
3
3
|
const { id, _status: status, title } = doc || {};
|
|
4
|
-
const { beforeSync, defaultPriorities, deleteDrafts, syncDrafts } = pluginConfig;
|
|
4
|
+
const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig;
|
|
5
|
+
const searchSlug = searchOverrides?.slug || 'search';
|
|
5
6
|
let dataToSave = {
|
|
6
7
|
doc: {
|
|
7
8
|
relationTo: collection,
|
|
@@ -15,7 +16,7 @@ export const syncWithSearch = async (args)=>{
|
|
|
15
16
|
docToSyncWith = await payload.findByID({
|
|
16
17
|
id,
|
|
17
18
|
collection,
|
|
18
|
-
locale:
|
|
19
|
+
locale: req.locale,
|
|
19
20
|
req
|
|
20
21
|
});
|
|
21
22
|
}
|
|
@@ -34,7 +35,7 @@ export const syncWithSearch = async (args)=>{
|
|
|
34
35
|
defaultPriority = await priority(doc);
|
|
35
36
|
} catch (err) {
|
|
36
37
|
payload.logger.error(err);
|
|
37
|
-
payload.logger.error(`Error gathering default priority for
|
|
38
|
+
payload.logger.error(`Error gathering default priority for ${searchSlug} documents related to ${collection}`);
|
|
38
39
|
}
|
|
39
40
|
} else {
|
|
40
41
|
defaultPriority = priority;
|
|
@@ -45,11 +46,12 @@ export const syncWithSearch = async (args)=>{
|
|
|
45
46
|
if (operation === 'create') {
|
|
46
47
|
if (doSync) {
|
|
47
48
|
await payload.create({
|
|
48
|
-
collection:
|
|
49
|
+
collection: searchSlug,
|
|
49
50
|
data: {
|
|
50
51
|
...dataToSave,
|
|
51
52
|
priority: defaultPriority
|
|
52
53
|
},
|
|
54
|
+
locale: req.locale,
|
|
53
55
|
req
|
|
54
56
|
});
|
|
55
57
|
}
|
|
@@ -58,8 +60,9 @@ export const syncWithSearch = async (args)=>{
|
|
|
58
60
|
try {
|
|
59
61
|
// find the correct doc to sync with
|
|
60
62
|
const searchDocQuery = await payload.find({
|
|
61
|
-
collection:
|
|
63
|
+
collection: searchSlug,
|
|
62
64
|
depth: 0,
|
|
65
|
+
locale: req.locale,
|
|
63
66
|
req,
|
|
64
67
|
where: {
|
|
65
68
|
'doc.relationTo': {
|
|
@@ -78,7 +81,7 @@ export const syncWithSearch = async (args)=>{
|
|
|
78
81
|
try {
|
|
79
82
|
const duplicativeDocIDs = duplicativeDocs.map(({ id })=>id);
|
|
80
83
|
await payload.delete({
|
|
81
|
-
collection:
|
|
84
|
+
collection: searchSlug,
|
|
82
85
|
req,
|
|
83
86
|
where: {
|
|
84
87
|
id: {
|
|
@@ -87,7 +90,7 @@ export const syncWithSearch = async (args)=>{
|
|
|
87
90
|
}
|
|
88
91
|
});
|
|
89
92
|
} catch (err) {
|
|
90
|
-
payload.logger.error(`Error deleting duplicative
|
|
93
|
+
payload.logger.error(`Error deleting duplicative ${searchSlug} documents.`);
|
|
91
94
|
}
|
|
92
95
|
}
|
|
93
96
|
if (foundDoc) {
|
|
@@ -97,15 +100,16 @@ export const syncWithSearch = async (args)=>{
|
|
|
97
100
|
try {
|
|
98
101
|
await payload.update({
|
|
99
102
|
id: searchDocID,
|
|
100
|
-
collection:
|
|
103
|
+
collection: searchSlug,
|
|
101
104
|
data: {
|
|
102
105
|
...dataToSave,
|
|
103
106
|
priority: foundDoc.priority || defaultPriority
|
|
104
107
|
},
|
|
108
|
+
locale: req.locale,
|
|
105
109
|
req
|
|
106
110
|
});
|
|
107
111
|
} catch (err) {
|
|
108
|
-
payload.logger.error(`Error updating
|
|
112
|
+
payload.logger.error(`Error updating ${searchSlug} document.`);
|
|
109
113
|
}
|
|
110
114
|
}
|
|
111
115
|
if (deleteDrafts && status === 'draft') {
|
|
@@ -113,33 +117,46 @@ export const syncWithSearch = async (args)=>{
|
|
|
113
117
|
try {
|
|
114
118
|
await payload.delete({
|
|
115
119
|
id: searchDocID,
|
|
116
|
-
collection:
|
|
120
|
+
collection: searchSlug,
|
|
117
121
|
req
|
|
118
122
|
});
|
|
119
123
|
} catch (err) {
|
|
120
|
-
payload.logger.error(
|
|
124
|
+
payload.logger.error({
|
|
125
|
+
err,
|
|
126
|
+
msg: `Error deleting ${searchSlug} document.`
|
|
127
|
+
});
|
|
121
128
|
}
|
|
122
129
|
}
|
|
123
130
|
} else if (doSync) {
|
|
124
131
|
try {
|
|
125
132
|
await payload.create({
|
|
126
|
-
collection:
|
|
133
|
+
collection: searchSlug,
|
|
127
134
|
data: {
|
|
128
135
|
...dataToSave,
|
|
129
136
|
priority: defaultPriority
|
|
130
137
|
},
|
|
138
|
+
locale: req.locale,
|
|
131
139
|
req
|
|
132
140
|
});
|
|
133
141
|
} catch (err) {
|
|
134
|
-
payload.logger.error(
|
|
142
|
+
payload.logger.error({
|
|
143
|
+
err,
|
|
144
|
+
msg: `Error creating ${searchSlug} document.`
|
|
145
|
+
});
|
|
135
146
|
}
|
|
136
147
|
}
|
|
137
148
|
} catch (err) {
|
|
138
|
-
payload.logger.error(
|
|
149
|
+
payload.logger.error({
|
|
150
|
+
err,
|
|
151
|
+
msg: `Error finding ${searchSlug} document.`
|
|
152
|
+
});
|
|
139
153
|
}
|
|
140
154
|
}
|
|
141
155
|
} catch (err) {
|
|
142
|
-
payload.logger.error(
|
|
156
|
+
payload.logger.error({
|
|
157
|
+
err,
|
|
158
|
+
msg: `Error syncing ${searchSlug} document related to ${collection} with id: '${id}'.`
|
|
159
|
+
});
|
|
143
160
|
}
|
|
144
161
|
return doc;
|
|
145
162
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Search/hooks/syncWithSearch.ts"],"sourcesContent":["import type { DocToSync, SyncWithSearch } from '../../types.js'\n\nexport const syncWithSearch: SyncWithSearch = async (args) => {\n const {\n collection,\n doc,\n operation,\n pluginConfig,\n req: { payload },\n req,\n } = args\n\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, syncDrafts } = pluginConfig\n\n let dataToSave: DocToSync = {\n doc: {\n relationTo: collection,\n value: id,\n },\n title,\n }\n\n if (typeof beforeSync === 'function') {\n let docToSyncWith = doc\n if (payload.config?.localization) {\n docToSyncWith = await payload.findByID({\n id,\n collection,\n locale:
|
|
1
|
+
{"version":3,"sources":["../../../src/Search/hooks/syncWithSearch.ts"],"sourcesContent":["import type { DocToSync, SyncWithSearch } from '../../types.js'\n\nexport const syncWithSearch: SyncWithSearch = async (args) => {\n const {\n collection,\n doc,\n operation,\n pluginConfig,\n req: { payload },\n req,\n } = args\n\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 let dataToSave: DocToSync = {\n doc: {\n relationTo: collection,\n value: id,\n },\n title,\n }\n\n if (typeof beforeSync === 'function') {\n let docToSyncWith = doc\n if (payload.config?.localization) {\n docToSyncWith = await payload.findByID({\n id,\n collection,\n locale: req.locale,\n req,\n })\n }\n dataToSave = await beforeSync({\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 {\n defaultPriority = priority\n }\n }\n\n const doSync = syncDrafts || (!syncDrafts && status !== 'draft')\n\n try {\n if (operation === 'create') {\n if (doSync) {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n locale: req.locale,\n req,\n })\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: req.locale,\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 req,\n where: { id: { in: duplicativeDocIDs } },\n })\n } catch (err: unknown) {\n payload.logger.error(`Error deleting duplicative ${searchSlug} documents.`)\n }\n }\n\n if (foundDoc) {\n const { id: searchDocID } = foundDoc\n\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 locale: req.locale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error(`Error updating ${searchSlug} document.`)\n }\n }\n if (deleteDrafts && status === 'draft') {\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 req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error deleting ${searchSlug} document.` })\n }\n }\n } else if (doSync) {\n try {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n locale: req.locale,\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\n return doc\n}\n"],"names":["syncWithSearch","args","collection","doc","operation","pluginConfig","req","payload","id","_status","status","title","beforeSync","defaultPriorities","deleteDrafts","searchOverrides","syncDrafts","searchSlug","slug","dataToSave","relationTo","value","docToSyncWith","config","localization","findByID","locale","originalDoc","searchDoc","defaultPriority","priority","err","logger","error","doSync","create","data","searchDocQuery","find","depth","where","equals","docs","foundDoc","duplicativeDocs","length","duplicativeDocIDs","map","delete","in","searchDocID","update","msg"],"mappings":"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"}
|
|
@@ -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,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,eAAO,MAAM,wBAAwB,iBAAkB,kBAAkB,KAAG,
|
|
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,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,eAAO,MAAM,wBAAwB,iBAAkB,kBAAkB,KAAG,gBAyE3E,CAAA"}
|
package/dist/Search/index.js
CHANGED
|
@@ -6,7 +6,8 @@ export const generateSearchCollection = (pluginConfig)=>{
|
|
|
6
6
|
type: 'text',
|
|
7
7
|
admin: {
|
|
8
8
|
readOnly: true
|
|
9
|
-
}
|
|
9
|
+
},
|
|
10
|
+
localized: pluginConfig.localize
|
|
10
11
|
},
|
|
11
12
|
{
|
|
12
13
|
name: 'priority',
|
|
@@ -32,7 +33,9 @@ export const generateSearchCollection = (pluginConfig)=>{
|
|
|
32
33
|
type: 'ui',
|
|
33
34
|
admin: {
|
|
34
35
|
components: {
|
|
35
|
-
Field:
|
|
36
|
+
Field: {
|
|
37
|
+
path: '@payloadcms/plugin-search/client#LinkToDoc'
|
|
38
|
+
}
|
|
36
39
|
},
|
|
37
40
|
position: 'sidebar'
|
|
38
41
|
}
|
package/dist/Search/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Search/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { SearchPluginConfig } from '../types.js'\n\n// all settings can be overridden by the config\nexport const generateSearchCollection = (pluginConfig: SearchPluginConfig): CollectionConfig => {\n const defaultFields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n readOnly: true,\n },\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: pluginConfig?.collections || [],\n required: true,\n },\n {\n name: 'docUrl',\n type: 'ui',\n admin: {\n components: {\n Field: '@payloadcms/plugin-search/client#LinkToDoc',\n },\n position: 'sidebar',\n },\n },\n ]\n\n const newConfig: CollectionConfig = {\n ...(pluginConfig?.searchOverrides || {}),\n slug: pluginConfig?.searchOverrides?.slug || 'search',\n access: {\n create: (): boolean => false,\n read: (): boolean => true,\n ...(pluginConfig?.searchOverrides?.access || {}),\n },\n admin: {\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 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 }\n\n return newConfig\n}\n"],"names":["generateSearchCollection","pluginConfig","defaultFields","name","type","admin","readOnly","position","index","maxDepth","relationTo","collections","required","components","Field","newConfig","searchOverrides","slug","access","create","read","defaultColumns","description","enableRichTextRelationship","useAsTitle","fields","labels","plural","singular"],"mappings":"AAIA,+CAA+C;AAC/C,OAAO,MAAMA,2BAA2B,CAACC;IACvC,MAAMC,gBAAyB;QAC7B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,UAAU;YACZ;
|
|
1
|
+
{"version":3,"sources":["../../src/Search/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { SearchPluginConfig } from '../types.js'\n\n// all settings can be overridden by the config\nexport const generateSearchCollection = (pluginConfig: SearchPluginConfig): CollectionConfig => {\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: pluginConfig?.collections || [],\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 const newConfig: CollectionConfig = {\n ...(pluginConfig?.searchOverrides || {}),\n slug: pluginConfig?.searchOverrides?.slug || 'search',\n access: {\n create: (): boolean => false,\n read: (): boolean => true,\n ...(pluginConfig?.searchOverrides?.access || {}),\n },\n admin: {\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 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 }\n\n return newConfig\n}\n"],"names":["generateSearchCollection","pluginConfig","defaultFields","name","type","admin","readOnly","localized","localize","position","index","maxDepth","relationTo","collections","required","components","Field","path","newConfig","searchOverrides","slug","access","create","read","defaultColumns","description","enableRichTextRelationship","useAsTitle","fields","labels","plural","singular"],"mappings":"AAIA,+CAA+C;AAC/C,OAAO,MAAMA,2BAA2B,CAACC;IACvC,MAAMC,gBAAyB;QAC7B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,UAAU;YACZ;YACAC,WAAWN,aAAaO,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,YAAYX,cAAcY,eAAe,EAAE;YAC3CC,UAAU;QACZ;QACA;YACEX,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLU,YAAY;oBACVC,OAAO;wBACLC,MAAM;oBACR;gBACF;gBACAR,UAAU;YACZ;QACF;KACD;IAED,MAAMS,YAA8B;QAClC,GAAIjB,cAAckB,mBAAmB,CAAC,CAAC;QACvCC,MAAMnB,cAAckB,iBAAiBC,QAAQ;QAC7CC,QAAQ;YACNC,QAAQ,IAAe;YACvBC,MAAM,IAAe;YACrB,GAAItB,cAAckB,iBAAiBE,UAAU,CAAC,CAAC;QACjD;QACAhB,OAAO;YACLmB,gBAAgB;gBAAC;aAAQ;YACzBC,aACE;YACFC,4BAA4B;YAC5BC,YAAY;YACZ,GAAI1B,cAAckB,iBAAiBd,SAAS,CAAC,CAAC;QAChD;QACAuB,QACE3B,cAAckB,iBAAiBS,UAC/B,OAAO3B,cAAckB,iBAAiBS,WAAW,aAC7C3B,cAAckB,gBAAgBS,OAAO;YAAE1B;QAAc,KACrDA;QACN2B,QAAQ;YACN,GAAI5B,cAAckB,iBAAiBU,UAAU;gBAC3CC,QAAQ;gBACRC,UAAU;YACZ,CAAC;QACH;IACF;IAEA,OAAOb;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.client.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.client.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA+CnC,CAAA"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useConfig,
|
|
3
|
+
import { useConfig, useField } from '@payloadcms/ui';
|
|
4
4
|
import { formatAdminURL } from '@payloadcms/ui/shared';
|
|
5
5
|
import React from 'react';
|
|
6
|
+
// TODO: fix this import to work in dev mode within the monorepo in a way that is backwards compatible with 1.x
|
|
7
|
+
// import CopyToClipboard from 'payload/dist/admin/components/elements/CopyToClipboard'
|
|
6
8
|
export const LinkToDocClient = ()=>{
|
|
7
|
-
const form = useWatchForm();
|
|
8
|
-
const fields = form.fields;
|
|
9
|
-
const { doc: { value: { relationTo, value: docId } } } = fields;
|
|
10
9
|
const { config } = useConfig();
|
|
11
10
|
const { routes: { admin: adminRoute }, serverURL } = config;
|
|
11
|
+
const { value } = useField({
|
|
12
|
+
path: 'doc'
|
|
13
|
+
});
|
|
12
14
|
const href = `${serverURL}${formatAdminURL({
|
|
13
15
|
adminRoute,
|
|
14
|
-
path:
|
|
16
|
+
path: `/collections/${value.relationTo || ''}/${value.value || ''}`
|
|
15
17
|
})}`;
|
|
18
|
+
if (!value.relationTo || !value.value) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
16
21
|
return /*#__PURE__*/ _jsxs("div", {
|
|
22
|
+
style: {
|
|
23
|
+
marginBottom: 'var(--spacing-field, 1rem)'
|
|
24
|
+
},
|
|
17
25
|
children: [
|
|
18
26
|
/*#__PURE__*/ _jsx("div", {
|
|
19
27
|
children: /*#__PURE__*/ _jsx("span", {
|
|
@@ -32,6 +40,7 @@ export const LinkToDocClient = ()=>{
|
|
|
32
40
|
},
|
|
33
41
|
children: /*#__PURE__*/ _jsx("a", {
|
|
34
42
|
href: href,
|
|
43
|
+
target: "_blank",
|
|
35
44
|
children: href
|
|
36
45
|
})
|
|
37
46
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Search/ui/index.client.tsx"],"sourcesContent":["'use client'\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/Search/ui/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { useConfig, useField } from '@payloadcms/ui'\nimport { formatAdminURL } from '@payloadcms/ui/shared'\nimport React from 'react'\n// TODO: fix this import to work in dev mode within the monorepo in a way that is backwards compatible with 1.x\n// import CopyToClipboard from 'payload/dist/admin/components/elements/CopyToClipboard'\n\nexport const LinkToDocClient: React.FC = () => {\n const { config } = useConfig()\n\n const {\n routes: {\n admin: adminRoute, // already includes leading slash\n },\n serverURL,\n } = config\n\n const { value } = useField<{ relationTo?: string; value?: string }>({ path: 'doc' })\n\n const href = `${serverURL}${formatAdminURL({\n adminRoute,\n path: `/collections/${value.relationTo || ''}/${value.value || ''}`,\n })}`\n\n if (!value.relationTo || !value.value) {\n return null\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacing-field, 1rem)' }}>\n <div>\n <span\n className=\"label\"\n style={{\n color: '#9A9A9A',\n }}\n >\n Doc URL\n </span>\n {/* <CopyToClipboard value={href} /> */}\n </div>\n <div\n style={{\n fontWeight: '600',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n <a href={href} target=\"_blank\">\n {href}\n </a>\n </div>\n </div>\n )\n}\n"],"names":["useConfig","useField","formatAdminURL","React","LinkToDocClient","config","routes","admin","adminRoute","serverURL","value","path","href","relationTo","div","style","marginBottom","span","className","color","fontWeight","overflow","textOverflow","a","target"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,iBAAgB;AACpD,SAASC,cAAc,QAAQ,wBAAuB;AACtD,OAAOC,WAAW,QAAO;AACzB,+GAA+G;AAC/G,uFAAuF;AAEvF,OAAO,MAAMC,kBAA4B;IACvC,MAAM,EAAEC,MAAM,EAAE,GAAGL;IAEnB,MAAM,EACJM,QAAQ,EACNC,OAAOC,UAAU,EAClB,EACDC,SAAS,EACV,GAAGJ;IAEJ,MAAM,EAAEK,KAAK,EAAE,GAAGT,SAAkD;QAAEU,MAAM;IAAM;IAElF,MAAMC,OAAO,CAAC,EAAEH,UAAU,EAAEP,eAAe;QACzCM;QACAG,MAAM,CAAC,aAAa,EAAED,MAAMG,UAAU,IAAI,GAAG,CAAC,EAAEH,MAAMA,KAAK,IAAI,GAAG,CAAC;IACrE,GAAG,CAAC;IAEJ,IAAI,CAACA,MAAMG,UAAU,IAAI,CAACH,MAAMA,KAAK,EAAE;QACrC,OAAO;IACT;IAEA,qBACE,MAACI;QAAIC,OAAO;YAAEC,cAAc;QAA6B;;0BACvD,KAACF;0BACC,cAAA,KAACG;oBACCC,WAAU;oBACVH,OAAO;wBACLI,OAAO;oBACT;8BACD;;;0BAKH,KAACL;gBACCC,OAAO;oBACLK,YAAY;oBACZC,UAAU;oBACVC,cAAc;gBAChB;0BAEA,cAAA,KAACC;oBAAEX,MAAMA;oBAAMY,QAAO;8BACnBZ;;;;;AAKX,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAEvC,CAAA"}
|
package/dist/Search/ui/index.js
CHANGED
|
@@ -2,9 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { LinkToDocClient } from './index.client.js';
|
|
4
4
|
export const LinkToDoc = ()=>{
|
|
5
|
-
return /*#__PURE__*/ _jsx(
|
|
6
|
-
children: /*#__PURE__*/ _jsx(LinkToDocClient, {})
|
|
7
|
-
});
|
|
5
|
+
return /*#__PURE__*/ _jsx(LinkToDocClient, {});
|
|
8
6
|
};
|
|
9
7
|
|
|
10
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Search/ui/index.tsx"],"sourcesContent":["import type { UIField } from 'payload'\n\nimport React from 'react'\n\nimport { LinkToDocClient } from './index.client.js'\n\nexport const LinkToDoc: React.FC<UIField> = () => {\n return
|
|
1
|
+
{"version":3,"sources":["../../../src/Search/ui/index.tsx"],"sourcesContent":["import type { UIField } from 'payload'\n\nimport React from 'react'\n\nimport { LinkToDocClient } from './index.client.js'\n\nexport const LinkToDoc: React.FC<UIField> = () => {\n return <LinkToDocClient />\n}\n"],"names":["React","LinkToDocClient","LinkToDoc"],"mappings":";AAEA,OAAOA,WAAW,QAAO;AAEzB,SAASC,eAAe,QAAQ,oBAAmB;AAEnD,OAAO,MAAMC,YAA+B;IAC1C,qBAAO,KAACD;AACV,EAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwD,MAAM,EAAE,MAAM,SAAS,CAAA;AAE3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AASpD,eAAO,MAAM,YAAY,yBACA,kBAAkB,cAChC,MAAM,KAAG,MAoEjB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,10 @@ import { syncWithSearch } from './Search/hooks/syncWithSearch.js';
|
|
|
3
3
|
import { generateSearchCollection } from './Search/index.js';
|
|
4
4
|
export const searchPlugin = (incomingPluginConfig)=>(config)=>{
|
|
5
5
|
const { collections } = config;
|
|
6
|
+
// If the user defines `localize` to either true or false, use that
|
|
7
|
+
// Otherwise, set it based on if their config has localization enabled or disabled
|
|
8
|
+
const shouldLocalize = typeof incomingPluginConfig.localize === 'boolean' ? incomingPluginConfig.localize : Boolean(config.localization);
|
|
9
|
+
incomingPluginConfig.localize = shouldLocalize;
|
|
6
10
|
if (collections) {
|
|
7
11
|
const pluginConfig = {
|
|
8
12
|
// write any config defaults here
|
|
@@ -32,7 +36,12 @@ export const searchPlugin = (incomingPluginConfig)=>(config)=>{
|
|
|
32
36
|
],
|
|
33
37
|
afterDelete: [
|
|
34
38
|
...existingHooks?.afterDelete || [],
|
|
35
|
-
|
|
39
|
+
async (args)=>{
|
|
40
|
+
await deleteFromSearch({
|
|
41
|
+
...args,
|
|
42
|
+
pluginConfig
|
|
43
|
+
});
|
|
44
|
+
}
|
|
36
45
|
]
|
|
37
46
|
}
|
|
38
47
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport type { SearchPluginConfig } from './types.js'\n\nimport { deleteFromSearch } from './Search/hooks/deleteFromSearch.js'\nimport { syncWithSearch } from './Search/hooks/syncWithSearch.js'\nimport { generateSearchCollection } from './Search/index.js'\n\nexport const searchPlugin =\n (incomingPluginConfig: SearchPluginConfig) =>\n (config: Config): Config => {\n const { collections } = config\n\n if (collections) {\n const pluginConfig: SearchPluginConfig = {\n // write any config defaults here\n deleteDrafts: true,\n syncDrafts: false,\n ...incomingPluginConfig,\n }\n\n // add afterChange and afterDelete hooks to every search-enabled collection\n const collectionsWithSearchHooks = config?.collections\n ?.map((collection) => {\n const { hooks: existingHooks } = collection\n\n const enabledCollections = pluginConfig.collections || []\n const isEnabled = enabledCollections.indexOf(collection.slug) > -1\n if (isEnabled) {\n return {\n ...collection,\n hooks: {\n ...collection.hooks,\n afterChange: [\n ...(existingHooks?.afterChange || []),\n async (args:
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, Config } from 'payload'\n\nimport type { SearchPluginConfig } from './types.js'\n\nimport { deleteFromSearch } from './Search/hooks/deleteFromSearch.js'\nimport { syncWithSearch } from './Search/hooks/syncWithSearch.js'\nimport { generateSearchCollection } from './Search/index.js'\n\ntype CollectionAfterChangeHookArgs = Parameters<CollectionAfterChangeHook>[0]\ntype CollectionAfterDeleteHookArgs = Parameters<CollectionAfterDeleteHook>[0]\n\nexport const searchPlugin =\n (incomingPluginConfig: SearchPluginConfig) =>\n (config: Config): Config => {\n const { collections } = config\n\n // If the user defines `localize` to either true or false, use that\n // Otherwise, set it based on if their config has localization enabled or disabled\n const shouldLocalize =\n typeof incomingPluginConfig.localize === 'boolean'\n ? incomingPluginConfig.localize\n : Boolean(config.localization)\n incomingPluginConfig.localize = shouldLocalize\n\n if (collections) {\n const pluginConfig: SearchPluginConfig = {\n // write any config defaults here\n deleteDrafts: true,\n syncDrafts: false,\n ...incomingPluginConfig,\n }\n\n // add afterChange and afterDelete hooks to every search-enabled collection\n const collectionsWithSearchHooks = config?.collections\n ?.map((collection) => {\n const { hooks: existingHooks } = collection\n\n const enabledCollections = pluginConfig.collections || []\n const isEnabled = enabledCollections.indexOf(collection.slug) > -1\n if (isEnabled) {\n return {\n ...collection,\n hooks: {\n ...collection.hooks,\n afterChange: [\n ...(existingHooks?.afterChange || []),\n async (args: CollectionAfterChangeHookArgs) => {\n await syncWithSearch({\n ...args,\n collection: collection.slug,\n pluginConfig,\n })\n },\n ],\n afterDelete: [\n ...(existingHooks?.afterDelete || []),\n async (args: CollectionAfterDeleteHookArgs) => {\n await deleteFromSearch({\n ...args,\n pluginConfig,\n })\n },\n ],\n },\n }\n }\n\n return collection\n })\n .filter(Boolean)\n\n return {\n ...config,\n collections: [\n ...(collectionsWithSearchHooks || []),\n generateSearchCollection(pluginConfig),\n ],\n }\n }\n\n return config\n }\n"],"names":["deleteFromSearch","syncWithSearch","generateSearchCollection","searchPlugin","incomingPluginConfig","config","collections","shouldLocalize","localize","Boolean","localization","pluginConfig","deleteDrafts","syncDrafts","collectionsWithSearchHooks","map","collection","hooks","existingHooks","enabledCollections","isEnabled","indexOf","slug","afterChange","args","afterDelete","filter"],"mappings":"AAIA,SAASA,gBAAgB,QAAQ,qCAAoC;AACrE,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,wBAAwB,QAAQ,oBAAmB;AAK5D,OAAO,MAAMC,eACX,CAACC,uBACD,CAACC;QACC,MAAM,EAAEC,WAAW,EAAE,GAAGD;QAExB,mEAAmE;QACnE,kFAAkF;QAClF,MAAME,iBACJ,OAAOH,qBAAqBI,QAAQ,KAAK,YACrCJ,qBAAqBI,QAAQ,GAC7BC,QAAQJ,OAAOK,YAAY;QACjCN,qBAAqBI,QAAQ,GAAGD;QAEhC,IAAID,aAAa;YACf,MAAMK,eAAmC;gBACvC,iCAAiC;gBACjCC,cAAc;gBACdC,YAAY;gBACZ,GAAGT,oBAAoB;YACzB;YAEA,2EAA2E;YAC3E,MAAMU,6BAA6BT,QAAQC,aACvCS,IAAI,CAACC;gBACL,MAAM,EAAEC,OAAOC,aAAa,EAAE,GAAGF;gBAEjC,MAAMG,qBAAqBR,aAAaL,WAAW,IAAI,EAAE;gBACzD,MAAMc,YAAYD,mBAAmBE,OAAO,CAACL,WAAWM,IAAI,IAAI,CAAC;gBACjE,IAAIF,WAAW;oBACb,OAAO;wBACL,GAAGJ,UAAU;wBACbC,OAAO;4BACL,GAAGD,WAAWC,KAAK;4BACnBM,aAAa;mCACPL,eAAeK,eAAe,EAAE;gCACpC,OAAOC;oCACL,MAAMvB,eAAe;wCACnB,GAAGuB,IAAI;wCACPR,YAAYA,WAAWM,IAAI;wCAC3BX;oCACF;gCACF;6BACD;4BACDc,aAAa;mCACPP,eAAeO,eAAe,EAAE;gCACpC,OAAOD;oCACL,MAAMxB,iBAAiB;wCACrB,GAAGwB,IAAI;wCACPb;oCACF;gCACF;6BACD;wBACH;oBACF;gBACF;gBAEA,OAAOK;YACT,GACCU,OAAOjB;YAEV,OAAO;gBACL,GAAGJ,MAAM;gBACTC,aAAa;uBACPQ,8BAA8B,EAAE;oBACpCZ,yBAAyBS;iBAC1B;YACH;QACF;QAEA,OAAON;IACT,EAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CollectionAfterChangeHook, CollectionConfig, Field, Payload, PayloadRequest } from 'payload';
|
|
1
|
+
import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, CollectionConfig, Field, Payload, PayloadRequest } from 'payload';
|
|
2
2
|
export type DocToSync = {
|
|
3
3
|
[key: string]: any;
|
|
4
4
|
doc: {
|
|
@@ -22,9 +22,10 @@ export type SearchPluginConfig = {
|
|
|
22
22
|
beforeSync?: BeforeSync;
|
|
23
23
|
collections?: string[];
|
|
24
24
|
defaultPriorities?: {
|
|
25
|
-
[collection: string]: ((doc: any) =>
|
|
25
|
+
[collection: string]: ((doc: any) => number | Promise<number>) | number;
|
|
26
26
|
};
|
|
27
27
|
deleteDrafts?: boolean;
|
|
28
|
+
localize?: boolean;
|
|
28
29
|
searchOverrides?: {
|
|
29
30
|
fields?: FieldsOverride;
|
|
30
31
|
} & Partial<Omit<CollectionConfig, 'fields'>>;
|
|
@@ -34,4 +35,7 @@ export type SyncWithSearch = (Args: {
|
|
|
34
35
|
collection: string;
|
|
35
36
|
pluginConfig: SearchPluginConfig;
|
|
36
37
|
} & Omit<Parameters<CollectionAfterChangeHook>[0], 'collection'>) => ReturnType<CollectionAfterChangeHook>;
|
|
38
|
+
export type DeleteFromSearch = (Args: {
|
|
39
|
+
pluginConfig: SearchPluginConfig;
|
|
40
|
+
} & Omit<Parameters<CollectionAfterDeleteHook>[0], 'collection'>) => ReturnType<CollectionAfterDeleteHook>;
|
|
37
41
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,cAAc,EACf,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE;IAC9B,WAAW,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAA;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAEpC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAAE,aAAa,EAAE,KAAK,EAAE,CAAA;CAAE,KAAK,KAAK,EAAE,CAAA;AAE1E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,iBAAiB,CAAC,EAAE;QAClB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,cAAc,EACf,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE;IAC9B,WAAW,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAA;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAEpC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAAE,aAAa,EAAE,KAAK,EAAE,CAAA;CAAE,KAAK,KAAK,EAAE,CAAA;AAE1E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,iBAAiB,CAAC,EAAE;QAClB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAA;KACxE,CAAA;IACD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAA;IACzF,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAID,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,kBAAkB,CAAA;CACjC,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAC7D,UAAU,CAAC,yBAAyB,CAAC,CAAA;AAE1C,MAAM,MAAM,gBAAgB,GAAG,CAC7B,IAAI,EAAE;IACJ,YAAY,EAAE,kBAAkB,CAAA;CACjC,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAC7D,UAAU,CAAC,yBAAyB,CAAC,CAAA"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Field,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nexport type DocToSync = {\n [key: string]: any\n doc: {\n relationTo: string\n value: string\n }\n title: string\n}\n\nexport type BeforeSync = (args: {\n originalDoc: {\n [key: string]: any\n }\n payload: Payload\n req: PayloadRequest\n searchDoc: DocToSync\n}) => DocToSync | Promise<DocToSync>\n\nexport type FieldsOverride = (args: { defaultFields: Field[] }) => Field[]\n\nexport type SearchPluginConfig = {\n beforeSync?: BeforeSync\n collections?: string[]\n defaultPriorities?: {\n [collection: string]: ((doc: any) =>
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionAfterDeleteHook,\n CollectionConfig,\n Field,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nexport type DocToSync = {\n [key: string]: any\n doc: {\n relationTo: string\n value: string\n }\n title: string\n}\n\nexport type BeforeSync = (args: {\n originalDoc: {\n [key: string]: any\n }\n payload: Payload\n req: PayloadRequest\n searchDoc: DocToSync\n}) => DocToSync | Promise<DocToSync>\n\nexport type FieldsOverride = (args: { defaultFields: Field[] }) => Field[]\n\nexport type SearchPluginConfig = {\n beforeSync?: BeforeSync\n collections?: string[]\n defaultPriorities?: {\n [collection: string]: ((doc: any) => number | Promise<number>) | number\n }\n deleteDrafts?: boolean\n localize?: boolean\n searchOverrides?: { fields?: FieldsOverride } & Partial<Omit<CollectionConfig, 'fields'>>\n syncDrafts?: boolean\n}\n\n// Extend the `CollectionAfterChangeHook` with more function args\n// Convert the `collection` arg from `SanitizedCollectionConfig` to a string\nexport type SyncWithSearch = (\n Args: {\n collection: string\n pluginConfig: SearchPluginConfig\n } & Omit<Parameters<CollectionAfterChangeHook>[0], 'collection'>,\n) => ReturnType<CollectionAfterChangeHook>\n\nexport type DeleteFromSearch = (\n Args: {\n pluginConfig: SearchPluginConfig\n } & Omit<Parameters<CollectionAfterDeleteHook>[0], 'collection'>,\n) => ReturnType<CollectionAfterDeleteHook>\n"],"names":[],"mappings":"AAkDA,WAI0C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-search",
|
|
3
|
-
"version": "3.0.0-canary.
|
|
3
|
+
"version": "3.0.0-canary.bb00d64",
|
|
4
4
|
"description": "Search plugin for Payload",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -42,33 +42,34 @@
|
|
|
42
42
|
"dist"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@payloadcms/ui": "3.0.0-canary.
|
|
45
|
+
"@payloadcms/ui": "3.0.0-canary.bb00d64"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@types/
|
|
49
|
-
"@types/react": "npm:types-react@19.0.0-rc.
|
|
50
|
-
"
|
|
51
|
-
"@payloadcms/eslint-config": "3.0.0-beta.
|
|
52
|
-
"payload": "3.0.0-canary.b8dd0db"
|
|
48
|
+
"@types/react": "npm:types-react@19.0.0-rc.1",
|
|
49
|
+
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
|
|
50
|
+
"payload": "3.0.0-canary.bb00d64",
|
|
51
|
+
"@payloadcms/eslint-config": "3.0.0-beta.112"
|
|
53
52
|
},
|
|
54
53
|
"peerDependencies": {
|
|
55
|
-
"react": "^19.0.0 || ^19.0.0-rc-
|
|
56
|
-
"react-dom": "^19.0.0 || ^19.0.0-rc-
|
|
57
|
-
"payload": "3.0.0-canary.
|
|
54
|
+
"react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
55
|
+
"react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
56
|
+
"payload": "3.0.0-canary.bb00d64"
|
|
58
57
|
},
|
|
59
58
|
"publishConfig": {
|
|
60
59
|
"registry": "https://registry.npmjs.org/"
|
|
61
60
|
},
|
|
62
61
|
"homepage:": "https://payloadcms.com",
|
|
63
62
|
"overrides": {
|
|
64
|
-
"@types/react": "npm:types-react@19.0.0-rc.
|
|
65
|
-
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.
|
|
63
|
+
"@types/react": "npm:types-react@19.0.0-rc.1",
|
|
64
|
+
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1"
|
|
66
65
|
},
|
|
67
66
|
"scripts": {
|
|
68
67
|
"build": "pnpm build:types && pnpm build:swc",
|
|
69
68
|
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
|
|
70
69
|
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
71
70
|
"clean": "rimraf {dist,*.tsbuildinfo}",
|
|
71
|
+
"lint": "eslint .",
|
|
72
|
+
"lint:fix": "eslint . --fix",
|
|
72
73
|
"test": "echo \"Error: no tests specified\""
|
|
73
74
|
}
|
|
74
75
|
}
|