@plasmicpkgs/plasmic-strapi 0.1.168 → 0.1.170

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/index.d.ts CHANGED
@@ -1,9 +1,29 @@
1
+ import { ComponentMeta } from '@plasmicapp/host';
2
+ import { CustomFunctionMeta } from '@plasmicapp/host/registerFunction';
3
+ import { GlobalContextMeta } from '@plasmicapp/host';
4
+ import { default as React_2 } from 'react';
5
+ import { ReactNode } from 'react';
1
6
  import registerComponent from '@plasmicapp/host/registerComponent';
2
7
  import registerGlobalContext from '@plasmicapp/host/registerGlobalContext';
3
- import { ComponentMeta, GlobalContextMeta } from '@plasmicapp/host';
4
- import React, { ReactNode } from 'react';
5
8
 
6
- interface StrapiCollectionProps {
9
+ export declare function queryStrapi(host: string, token: string | undefined, collection: string | undefined, filterField?: string, filterValue?: string, filterParameter?: string): Promise<any>;
10
+
11
+ export declare const queryStrapiMeta: CustomFunctionMeta<typeof queryStrapi>;
12
+
13
+ export declare function registerAll(loader?: {
14
+ registerComponent: typeof registerComponent;
15
+ registerGlobalContext: typeof registerGlobalContext;
16
+ }): void;
17
+
18
+ export declare function registerAllCustomFunctions(loader?: {
19
+ registerFunction: any;
20
+ }): void;
21
+
22
+ export declare function StrapiCollection({ name, filterParameter, filterValue, filterField, limit, children, className, noLayout, noAutoRepeat, setControlContextData, }: StrapiCollectionProps): React_2.JSX.Element;
23
+
24
+ export declare const strapiCollectionMeta: ComponentMeta<StrapiCollectionProps>;
25
+
26
+ declare interface StrapiCollectionProps {
7
27
  name?: string;
8
28
  children?: ReactNode;
9
29
  className?: string;
@@ -17,17 +37,21 @@ interface StrapiCollectionProps {
17
37
  strapiFields: string[];
18
38
  }) => void;
19
39
  }
20
- declare const strapiCollectionMeta: ComponentMeta<StrapiCollectionProps>;
21
- declare function StrapiCollection({ name, filterParameter, filterValue, filterField, limit, children, className, noLayout, noAutoRepeat, setControlContextData, }: StrapiCollectionProps): React.JSX.Element;
22
40
 
23
- interface StrapiCredentials {
41
+ declare interface StrapiCredentials {
24
42
  host?: string;
25
43
  token?: string;
26
44
  }
27
- declare const strapiCredentialsProviderMeta: GlobalContextMeta<StrapiCredentials>;
28
- declare function StrapiCredentialsProvider({ host, token, children, }: React.PropsWithChildren<StrapiCredentials>): React.JSX.Element;
29
45
 
30
- interface StrapiFieldProps {
46
+ export declare function StrapiCredentialsProvider({ host, token, children, }: React_2.PropsWithChildren<StrapiCredentials>): React_2.JSX.Element;
47
+
48
+ export declare const strapiCredentialsProviderMeta: GlobalContextMeta<StrapiCredentials>;
49
+
50
+ export declare function StrapiField({ className, path, setControlContextData, }: StrapiFieldProps): React_2.JSX.Element;
51
+
52
+ export declare const strapiFieldMeta: ComponentMeta<StrapiFieldProps>;
53
+
54
+ declare interface StrapiFieldProps {
31
55
  className?: string;
32
56
  path?: string;
33
57
  setControlContextData?: (data: {
@@ -35,12 +59,5 @@ interface StrapiFieldProps {
35
59
  isImage: boolean;
36
60
  }) => void;
37
61
  }
38
- declare const strapiFieldMeta: ComponentMeta<StrapiFieldProps>;
39
- declare function StrapiField({ className, path, setControlContextData, }: StrapiFieldProps): React.JSX.Element;
40
-
41
- declare function registerAll(loader?: {
42
- registerComponent: typeof registerComponent;
43
- registerGlobalContext: typeof registerGlobalContext;
44
- }): void;
45
62
 
46
- export { StrapiCollection, StrapiCredentialsProvider, StrapiField, registerAll, strapiCollectionMeta, strapiCredentialsProviderMeta, strapiFieldMeta };
63
+ export { }
@@ -1,3 +1,56 @@
1
+ "use client";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+ var __async = (__this, __arguments, generator) => {
34
+ return new Promise((resolve, reject) => {
35
+ var fulfilled = (value) => {
36
+ try {
37
+ step(generator.next(value));
38
+ } catch (e) {
39
+ reject(e);
40
+ }
41
+ };
42
+ var rejected = (value) => {
43
+ try {
44
+ step(generator.throw(value));
45
+ } catch (e) {
46
+ reject(e);
47
+ }
48
+ };
49
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
50
+ step((generator = generator.apply(__this, __arguments)).next());
51
+ });
52
+ };
53
+
1
54
  // src/index.tsx
2
55
  import registerComponent from "@plasmicapp/host/registerComponent";
3
56
  import registerGlobalContext from "@plasmicapp/host/registerGlobalContext";
@@ -6,12 +59,13 @@ import registerGlobalContext from "@plasmicapp/host/registerGlobalContext";
6
59
  import { DataProvider, repeatedElement } from "@plasmicapp/host";
7
60
  import { usePlasmicQueryData } from "@plasmicapp/query";
8
61
  import { pascalCase } from "change-case";
9
- import get from "dlv";
10
- import * as qs from "qs";
62
+ import get2 from "dlv";
11
63
  import React2 from "react";
12
64
 
13
- // src/StrapiCredentialsProvider.tsx
14
- import React, { useContext } from "react";
65
+ // src/custom-functions.tsx
66
+ import registerFunction from "@plasmicapp/host/registerFunction";
67
+ import get from "dlv";
68
+ import qs from "qs";
15
69
 
16
70
  // src/utils.ts
17
71
  var modulePath = "@plasmicpkgs/plasmic-strapi";
@@ -65,11 +119,123 @@ var getAttributes = (item) => {
65
119
  if (item.attributes) {
66
120
  return item.attributes;
67
121
  }
68
- const { documentId: _documentId, locale: _locale, ...rest } = item;
122
+ const _a = item, { documentId: _documentId, locale: _locale } = _a, rest = __objRest(_a, ["documentId", "locale"]);
69
123
  return rest;
70
124
  };
125
+ function filterFields(collectionData) {
126
+ return collectionData.flatMap((item) => {
127
+ const attributes = getAttributes(item);
128
+ const displayableFields = Object.keys(attributes).filter((field) => {
129
+ var _a;
130
+ const value = attributes[field];
131
+ const maybeMime = (_a = getAttributes(value == null ? void 0 : value.data)) == null ? void 0 : _a.mime;
132
+ return typeof value !== "object" || typeof maybeMime === "string" && maybeMime.startsWith("image");
133
+ });
134
+ return displayableFields;
135
+ });
136
+ }
137
+
138
+ // src/custom-functions.tsx
139
+ var queryStrapiMeta = {
140
+ name: "queryStrapi",
141
+ displayName: "Query Strapi",
142
+ description: "Query a Strapi collection",
143
+ importPath: modulePath,
144
+ params: [
145
+ {
146
+ name: "strapiHost",
147
+ type: "string",
148
+ description: "The Strapi host URL (e.g., https://example.com)"
149
+ },
150
+ {
151
+ name: "strapiToken",
152
+ type: "string",
153
+ description: "The Strapi API token (optional, for authenticated requests)"
154
+ },
155
+ {
156
+ name: "collection",
157
+ type: "string",
158
+ description: "The name of the Strapi collection to query"
159
+ },
160
+ {
161
+ name: "filterField",
162
+ type: "choice",
163
+ options: (_, ctx) => {
164
+ return ctx == null ? void 0 : ctx.strapiFields;
165
+ }
166
+ },
167
+ {
168
+ name: "filterValue",
169
+ type: "string",
170
+ description: "The value to filter by (optional, if you want to filter results)"
171
+ },
172
+ {
173
+ name: "filterParameter",
174
+ type: "choice",
175
+ description: "The parameter for filtering (e.g., 'eq', 'contains', etc.) (optional)",
176
+ options: () => {
177
+ return queryParameters.map((item) => ({
178
+ label: item == null ? void 0 : item.label,
179
+ value: item == null ? void 0 : item.value
180
+ }));
181
+ }
182
+ }
183
+ ],
184
+ fnContext: (host, token, collection) => {
185
+ return {
186
+ dataKey: JSON.stringify({ host, token, collection }),
187
+ fetcher: () => __async(void 0, null, function* () {
188
+ if (!host) {
189
+ return {};
190
+ }
191
+ const data = yield queryStrapi(host, token, collection);
192
+ if (!get(data.data, ["data"])) {
193
+ return { strapiFields: [] };
194
+ }
195
+ const collectionData = get(data.data, ["data"]);
196
+ const filteredFields = filterFields(collectionData);
197
+ return { strapiFields: uniq(filteredFields != null ? filteredFields : []) };
198
+ })
199
+ };
200
+ }
201
+ };
202
+ function queryStrapi(host, token, collection, filterField, filterValue, filterParameter) {
203
+ return __async(this, null, function* () {
204
+ if (!host) {
205
+ return null;
206
+ }
207
+ collection = collection != null ? collection : "";
208
+ const query = host.trim() + "/api/" + collection.trim();
209
+ const requestInit = { method: "GET" };
210
+ if (token) {
211
+ requestInit.headers = { Authorization: "Bearer " + token };
212
+ }
213
+ const queryParams = qs.stringify(__spreadProps(__spreadValues({}, filterField && filterParameter && filterValue ? {
214
+ filters: {
215
+ [filterField]: {
216
+ [filterParameter]: filterValue
217
+ }
218
+ }
219
+ } : {}), {
220
+ populate: "*"
221
+ }));
222
+ const resp = yield fetch(`${query}?${queryParams}`, requestInit);
223
+ return resp.json();
224
+ });
225
+ }
226
+ function registerAllCustomFunctions(loader) {
227
+ function _registerFunction(fn, meta) {
228
+ if (loader) {
229
+ loader.registerFunction(fn, meta);
230
+ } else {
231
+ registerFunction(fn, meta);
232
+ }
233
+ }
234
+ _registerFunction(queryStrapi, queryStrapiMeta);
235
+ }
71
236
 
72
237
  // src/StrapiCredentialsProvider.tsx
238
+ import React, { useContext } from "react";
73
239
  var StrapiCredentialsContext = React.createContext(void 0);
74
240
  function useStrapiCredentials() {
75
241
  const creds = useContext(StrapiCredentialsContext);
@@ -150,34 +316,34 @@ var strapiCollectionMeta = {
150
316
  type: "choice",
151
317
  displayName: "Filter field",
152
318
  description: "Field (from Collection) to filter by",
153
- options: (props, ctx) => {
319
+ options: (_, ctx) => {
154
320
  var _a;
155
321
  return (_a = ctx == null ? void 0 : ctx.strapiFields) != null ? _a : [];
156
322
  },
157
- hidden: (props, ctx) => !props.name
323
+ hidden: (props) => !props.name
158
324
  },
159
325
  filterParameter: {
160
326
  type: "choice",
161
327
  displayName: "Filter Parameter",
162
328
  description: "Field Parameter filter by",
163
- options: (props, ctx) => {
329
+ options: () => {
164
330
  return queryParameters.map((item) => ({
165
331
  label: item == null ? void 0 : item.label,
166
332
  value: item == null ? void 0 : item.value
167
333
  }));
168
334
  },
169
- hidden: (props, ctx) => !props.filterField
335
+ hidden: (props) => !props.filterField
170
336
  },
171
337
  filterValue: {
172
338
  type: "string",
173
339
  displayName: "Filter value",
174
340
  description: "Value to filter by, should be of filter field type",
175
- hidden: (props, ctx) => !props.filterParameter
341
+ hidden: (props) => !props.filterParameter
176
342
  },
177
343
  limit: {
178
344
  type: "number",
179
345
  displayName: "Limit",
180
- description: "Maximum n umber of collections to fetch (0 for unlimited)."
346
+ description: "Maximum number of collections to fetch (0 for unlimited)."
181
347
  },
182
348
  noLayout: {
183
349
  type: "boolean",
@@ -205,58 +371,34 @@ function StrapiCollection({
205
371
  noAutoRepeat,
206
372
  setControlContextData
207
373
  }) {
208
- const creds = useStrapiCredentials();
209
- if (!creds.host) {
374
+ const { host, token } = useStrapiCredentials();
375
+ if (!host) {
210
376
  return /* @__PURE__ */ React2.createElement("div", null, "Please specify a host.");
211
377
  }
212
- const query = creds.host + "/api/" + name;
213
378
  const cacheKey = JSON.stringify({
214
- creds,
379
+ host,
380
+ token,
215
381
  name,
216
382
  filterField,
217
383
  filterValue,
218
384
  filterParameter
219
385
  });
220
- const data = usePlasmicQueryData(cacheKey, async () => {
221
- if (!query) {
222
- return null;
223
- }
224
- const requestInit = { method: "GET" };
225
- if (creds.token) {
226
- requestInit.headers = { Authorization: "Bearer " + creds.token };
227
- }
228
- const queryParams = qs.stringify({
229
- ...filterField && filterParameter && filterValue ? {
230
- filters: {
231
- [filterField]: {
232
- [filterParameter]: filterValue
233
- }
234
- }
235
- } : {},
236
- populate: "*"
237
- });
238
- const resp = await fetch(`${query}?${queryParams}`, requestInit);
239
- return resp.json();
240
- });
386
+ const data = usePlasmicQueryData(
387
+ cacheKey,
388
+ () => __async(this, null, function* () {
389
+ return queryStrapi(host, token, name, filterField, filterValue, filterParameter);
390
+ })
391
+ );
241
392
  if (!(data == null ? void 0 : data.data)) {
242
393
  return /* @__PURE__ */ React2.createElement("div", null, "Please configure the Strapi provider with a valid host and token.");
243
394
  }
244
- if (!get(data.data, ["data"])) {
395
+ if (!get2(data.data, ["data"])) {
245
396
  return /* @__PURE__ */ React2.createElement("div", null, "Please specify a valid collection.");
246
397
  }
247
- const collectionData = get(data.data, ["data"]);
248
- const filterFields = collectionData.flatMap((item) => {
249
- const attributes = getAttributes(item);
250
- const displayableFields = Object.keys(attributes).filter((field) => {
251
- var _a;
252
- const value = attributes[field];
253
- const maybeMime = (_a = getAttributes(value == null ? void 0 : value.data)) == null ? void 0 : _a.mime;
254
- return typeof value !== "object" || typeof maybeMime === "string" && maybeMime.startsWith("image");
255
- });
256
- return displayableFields;
257
- });
398
+ const collectionData = get2(data.data, ["data"]);
399
+ const filteredFields = filterFields(collectionData);
258
400
  setControlContextData == null ? void 0 : setControlContextData({
259
- strapiFields: uniq(filterFields != null ? filterFields : [])
401
+ strapiFields: uniq(filteredFields != null ? filteredFields : [])
260
402
  });
261
403
  if (filterParameter && !filterValue && !filterField) {
262
404
  return /* @__PURE__ */ React2.createElement("div", null, "Please specify a Filter Field and a Filter Value");
@@ -298,7 +440,7 @@ function StrapiCollection({
298
440
 
299
441
  // src/StrapiField.tsx
300
442
  import { useSelector } from "@plasmicapp/host";
301
- import get2 from "dlv";
443
+ import get3 from "dlv";
302
444
  import React3 from "react";
303
445
  var strapiFieldMeta = {
304
446
  name: "StrapiField",
@@ -308,7 +450,7 @@ var strapiFieldMeta = {
308
450
  props: {
309
451
  path: {
310
452
  type: "choice",
311
- options: (props, ctx) => {
453
+ options: (_, ctx) => {
312
454
  var _a;
313
455
  return (_a = ctx == null ? void 0 : ctx.fields) != null ? _a : [];
314
456
  },
@@ -341,7 +483,7 @@ function StrapiField({
341
483
  if (!path) {
342
484
  return /* @__PURE__ */ React3.createElement("div", null, "StrapiField must specify a field name.");
343
485
  }
344
- const data = get2(attributes, [path]);
486
+ const data = get3(attributes, [path]);
345
487
  const maybeMime = (_a = getAttributes(data == null ? void 0 : data.data)) == null ? void 0 : _a.mime;
346
488
  setControlContextData == null ? void 0 : setControlContextData({
347
489
  fields: displayableFields,
@@ -396,8 +538,12 @@ export {
396
538
  StrapiCollection,
397
539
  StrapiCredentialsProvider,
398
540
  StrapiField,
541
+ queryStrapi,
542
+ queryStrapiMeta,
399
543
  registerAll,
544
+ registerAllCustomFunctions,
400
545
  strapiCollectionMeta,
401
546
  strapiCredentialsProviderMeta,
402
547
  strapiFieldMeta
403
548
  };
549
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.tsx", "../src/StrapiCollection.tsx", "../src/custom-functions.tsx", "../src/utils.ts", "../src/StrapiCredentialsProvider.tsx", "../src/StrapiField.tsx"],
4
+ "sourcesContent": ["import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport registerGlobalContext from \"@plasmicapp/host/registerGlobalContext\";\nimport { StrapiCollection, strapiCollectionMeta } from \"./StrapiCollection\";\nimport {\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta,\n} from \"./StrapiCredentialsProvider\";\nimport { StrapiField, strapiFieldMeta } from \"./StrapiField\";\n\nexport function registerAll(loader?: {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n}) {\n const _registerComponent = <T extends React.ComponentType<any>>(\n Component: T,\n defaultMeta: ComponentMeta<React.ComponentProps<T>>\n ) => {\n if (loader) {\n loader.registerComponent(Component, defaultMeta);\n } else {\n registerComponent(Component, defaultMeta);\n }\n };\n\n if (loader) {\n loader.registerGlobalContext(\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta\n );\n } else {\n registerGlobalContext(\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta\n );\n }\n\n _registerComponent(StrapiCollection, strapiCollectionMeta);\n _registerComponent(StrapiField, strapiFieldMeta);\n}\n\nexport * from \"./custom-functions\";\nexport { StrapiCollection, strapiCollectionMeta } from \"./StrapiCollection\";\nexport {\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta,\n} from \"./StrapiCredentialsProvider\";\nexport { StrapiField, strapiFieldMeta } from \"./StrapiField\";\n", "import { ComponentMeta, DataProvider, repeatedElement } from \"@plasmicapp/host\";\nimport { usePlasmicQueryData } from \"@plasmicapp/query\";\nimport { pascalCase } from \"change-case\";\nimport get from \"dlv\";\nimport React, { ReactNode } from \"react\";\nimport { queryStrapi } from \"./custom-functions\";\nimport { useStrapiCredentials } from \"./StrapiCredentialsProvider\";\nimport { filterFields, modulePath, queryParameters, uniq } from \"./utils\";\n\nconst makeDataProviderName = (collection: string) =>\n `currentStrapi${pascalCase(collection)}Item`;\n\ninterface StrapiCollectionProps {\n name?: string;\n children?: ReactNode;\n className?: string;\n noLayout?: boolean;\n noAutoRepeat?: boolean;\n filterField?: string;\n filterValue?: string;\n limit?: number;\n filterParameter?: string;\n setControlContextData?: (data: { strapiFields: string[] }) => void;\n}\n\nexport const strapiCollectionMeta: ComponentMeta<StrapiCollectionProps> = {\n name: \"StrapiCollection\",\n displayName: \"Strapi Collection\",\n importName: \"StrapiCollection\",\n importPath: modulePath,\n providesData: true,\n description:\n \"Fetches Strapi data of a given collection, and repeats `children` slot content for each row fetched. [See tutorial video](https://www.youtube.com/watch?v=1SLoVY3hkQ4).\",\n defaultStyles: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr 1fr\",\n gridRowGap: \"8px\",\n gridColumnGap: \"8px\",\n padding: \"8px\",\n maxWidth: \"100%\",\n },\n props: {\n children: {\n type: \"slot\",\n defaultValue: {\n type: \"vbox\",\n children: {\n type: \"component\",\n name: \"StrapiField\",\n },\n },\n },\n name: {\n type: \"string\",\n displayName: \"Name\",\n description: \"Name of the collection to be fetched.\",\n defaultValueHint: \"restaurants\",\n },\n filterField: {\n type: \"choice\",\n displayName: \"Filter field\",\n description: \"Field (from Collection) to filter by\",\n options: (_, ctx) => ctx?.strapiFields ?? [],\n hidden: (props) => !props.name,\n },\n filterParameter: {\n type: \"choice\",\n displayName: \"Filter Parameter\",\n description: \"Field Parameter filter by\",\n options: () => {\n return queryParameters.map((item: any) => ({\n label: item?.label,\n value: item?.value,\n }));\n },\n hidden: (props) => !props.filterField,\n },\n filterValue: {\n type: \"string\",\n displayName: \"Filter value\",\n description: \"Value to filter by, should be of filter field type\",\n hidden: (props) => !props.filterParameter,\n },\n limit: {\n type: \"number\",\n displayName: \"Limit\",\n description: \"Maximum number of collections to fetch (0 for unlimited).\",\n },\n noLayout: {\n type: \"boolean\",\n displayName: \"No layout\",\n description:\n \"When set, Strapi Collection will not layout its children; instead, the layout set on its parent element will be used. Useful if you want to set flex gap or control container tag type.\",\n defaultValue: false,\n },\n noAutoRepeat: {\n type: \"boolean\",\n displayName: \"No auto-repeat\",\n description: \"Do not automatically repeat children for every category.\",\n defaultValue: false,\n },\n },\n};\n\nexport function StrapiCollection({\n name,\n filterParameter,\n filterValue,\n filterField,\n limit,\n children,\n className,\n noLayout,\n noAutoRepeat,\n setControlContextData,\n}: StrapiCollectionProps) {\n const { host, token } = useStrapiCredentials();\n\n if (!host) {\n return <div>Please specify a host.</div>;\n }\n\n const cacheKey = JSON.stringify({\n host,\n token,\n name,\n filterField,\n filterValue,\n filterParameter,\n });\n\n const data = usePlasmicQueryData<any[] | null>(cacheKey, async () =>\n queryStrapi(host, token, name, filterField, filterValue, filterParameter)\n );\n\n if (!data?.data) {\n return (\n <div>\n Please configure the Strapi provider with a valid host and token.\n </div>\n );\n }\n\n if (!get(data.data, [\"data\"])) {\n return <div>Please specify a valid collection.</div>;\n }\n\n const collectionData = get(data.data, [\"data\"]) as any[];\n\n const filteredFields = filterFields(collectionData);\n\n setControlContextData?.({\n strapiFields: uniq(filteredFields ?? []),\n });\n if (filterParameter && !filterValue && !filterField) {\n return <div>Please specify a Filter Field and a Filter Value</div>;\n }\n if (!filterParameter && filterValue && !filterField) {\n return <div>Please specify a Filter Parameter and a Filter Field</div>;\n }\n if (!filterParameter && !filterValue && filterField) {\n return <div>Please specify a Filter Parameter and a Filter Value</div>;\n }\n\n if (filterParameter && filterValue && !filterField) {\n return <div>Please specify a Filter Field</div>;\n }\n if (!filterParameter && filterValue && filterField) {\n return <div>Please specify a Filter Parameter</div>;\n }\n if (filterParameter && !filterValue && filterField) {\n return <div>Please specify a Filter Value</div>;\n }\n\n const collection =\n limit! > 0 ? collectionData.slice(0, limit) : collectionData;\n\n if (collection.length === 0) {\n return <div>No collection found </div>;\n }\n\n const repElements = noAutoRepeat\n ? children\n : collection.map((item, index) => (\n <DataProvider\n key={item.documentId ?? item.id}\n name={\"strapiItem\"}\n data={item}\n hidden={true}\n >\n <DataProvider name={makeDataProviderName(name!)} data={item}>\n {repeatedElement(index, children)}\n </DataProvider>\n </DataProvider>\n ));\n\n return (\n <DataProvider name=\"strapiItems\" data={collection}>\n {noLayout ? (\n <> {repElements} </>\n ) : (\n <div className={className}> {repElements} </div>\n )}\n </DataProvider>\n );\n}\n", "import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\nimport get from \"dlv\";\nimport qs from \"qs\";\nimport { filterFields, modulePath, queryParameters, uniq } from \"./utils\";\n\nexport const queryStrapiMeta: CustomFunctionMeta<typeof queryStrapi> = {\n name: \"queryStrapi\",\n displayName: \"Query Strapi\",\n description: \"Query a Strapi collection\",\n importPath: modulePath,\n params: [\n {\n name: \"strapiHost\",\n type: \"string\",\n description: \"The Strapi host URL (e.g., https://example.com)\",\n },\n {\n name: \"strapiToken\",\n type: \"string\",\n description:\n \"The Strapi API token (optional, for authenticated requests)\",\n },\n {\n name: \"collection\",\n type: \"string\",\n description: \"The name of the Strapi collection to query\",\n },\n {\n name: \"filterField\",\n type: \"choice\",\n options: (_, ctx) => {\n return ctx?.strapiFields;\n },\n },\n {\n name: \"filterValue\",\n type: \"string\",\n description:\n \"The value to filter by (optional, if you want to filter results)\",\n },\n {\n name: \"filterParameter\",\n type: \"choice\",\n description:\n \"The parameter for filtering (e.g., 'eq', 'contains', etc.) (optional)\",\n options: () => {\n return queryParameters.map((item: any) => ({\n label: item?.label,\n value: item?.value,\n }));\n },\n },\n ],\n fnContext: (host, token, collection) => {\n return {\n dataKey: JSON.stringify({ host, token, collection }),\n fetcher: async () => {\n if (!host) {\n return {};\n }\n const data = await queryStrapi(host, token, collection);\n if (!get(data.data, [\"data\"])) {\n return { strapiFields: [] };\n }\n\n const collectionData = get(data.data, [\"data\"]) as any[];\n\n const filteredFields = filterFields(collectionData);\n return { strapiFields: uniq(filteredFields ?? []) };\n },\n };\n },\n};\n\nexport async function queryStrapi(\n host: string,\n token: string | undefined,\n collection: string | undefined,\n filterField?: string,\n filterValue?: string,\n filterParameter?: string\n) {\n if (!host) {\n return null;\n }\n\n collection = collection ?? \"\";\n\n const query = host.trim() + \"/api/\" + collection.trim();\n\n const requestInit: any = { method: \"GET\" };\n if (token) {\n requestInit.headers = { Authorization: \"Bearer \" + token };\n }\n\n const queryParams = qs.stringify({\n ...(filterField && filterParameter && filterValue\n ? {\n filters: {\n [filterField]: {\n [filterParameter]: filterValue,\n },\n },\n }\n : {}),\n populate: \"*\",\n });\n\n const resp = await fetch(`${query}?${queryParams}`, requestInit);\n return resp.json();\n}\n\nexport function registerAllCustomFunctions(loader?: { registerFunction: any }) {\n function _registerFunction<T extends (...args: any[]) => any>(\n fn: T,\n meta: CustomFunctionMeta<T>\n ) {\n if (loader) {\n loader.registerFunction(fn, meta);\n } else {\n registerFunction(fn, meta);\n }\n }\n\n _registerFunction(queryStrapi, queryStrapiMeta);\n}\n", "export const modulePath = \"@plasmicpkgs/plasmic-strapi\";\n\nexport const queryParameters = [\n {\n value: \"$eq\",\n label: \"Equal\",\n },\n {\n value: \"$ne\",\n label: \"Not equal\",\n },\n {\n value: \"$lt\",\n label: \"Less than\",\n },\n {\n value: \"$lte\",\n label: \"Less than or equal to\",\n },\n {\n value: \"$gt\",\n label: \"Greater than\",\n },\n {\n value: \"$gte\",\n label: \"Greater than or equal to\",\n },\n {\n value: \"$in\",\n label: \"Included in an array\",\n },\n {\n value: \"$notIn\",\n label: \"Not included in an array\",\n },\n {\n value: \"$contains\",\n label: \"Contains\",\n },\n {\n value: \"$notContains\",\n label: \"Does not contain\",\n },\n];\n\nexport const uniq = <T>(xs: Array<T>): T[] => Array.from(new Set(xs));\n\nexport const getAttributes = (item?: Record<string, any>) => {\n if (!item) {\n return undefined;\n }\n // Strapi v4\n if (item.attributes) {\n return item.attributes;\n }\n // Strapi v5\n const { documentId: _documentId, locale: _locale, ...rest } = item;\n return rest;\n};\n\nexport function filterFields(collectionData: any[]) {\n return collectionData.flatMap((item: any) => {\n const attributes = getAttributes(item);\n const displayableFields = Object.keys(attributes).filter((field) => {\n const value = attributes[field];\n const maybeMime = getAttributes(value?.data)?.mime;\n return (\n typeof value !== \"object\" ||\n (typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\"))\n );\n });\n return displayableFields;\n });\n}\n", "import { GlobalContextMeta } from \"@plasmicapp/host\";\nimport React, { useContext } from \"react\";\nimport { modulePath } from \"./utils\";\n\ninterface StrapiCredentials {\n host?: string;\n token?: string;\n}\n\nconst StrapiCredentialsContext = React.createContext<\n StrapiCredentials | undefined\n>(undefined);\n\nexport function useStrapiCredentials() {\n const creds = useContext(StrapiCredentialsContext);\n if (!creds) {\n throw new Error(\"Missing StrapiCredentials\");\n }\n\n return creds;\n}\n\nexport const strapiCredentialsProviderMeta: GlobalContextMeta<StrapiCredentials> =\n {\n name: \"StrapiCredentialsProvider\",\n displayName: \"Strapi Credentials Provider\",\n description: `[See tutorial video](https://www.youtube.com/watch?v=1SLoVY3hkQ4).\n\nAPI token is needed only if data is not publicly readable.\n\nLearn how to [get your API token](https://docs.strapi.io/user-docs/latest/settings/managing-global-settings.html#managing-api-tokens).`,\n importName: \"StrapiCredentialsProvider\",\n importPath: modulePath,\n props: {\n host: {\n type: \"string\",\n displayName: \"Host\",\n defaultValueHint: \"https://strapi-app.plasmic.app\",\n defaultValue: \"https://strapi-app.plasmic.app\",\n description: \"Server where you application is hosted.\",\n },\n token: {\n type: \"string\",\n displayName: \"API Token\",\n description:\n \"API Token (generated in http://yourhost/admin/settings/api-tokens) (or leave blank for unauthenticated usage).\",\n },\n },\n };\n\nexport function StrapiCredentialsProvider({\n host,\n token,\n children,\n}: React.PropsWithChildren<StrapiCredentials>) {\n host = host?.replace(/\\/+$/, \"\");\n return (\n <StrapiCredentialsContext.Provider value={{ host, token }}>\n {children}\n </StrapiCredentialsContext.Provider>\n );\n}\n", "import { ComponentMeta, useSelector } from \"@plasmicapp/host\";\nimport get from \"dlv\";\nimport React from \"react\";\nimport { useStrapiCredentials } from \"./StrapiCredentialsProvider\";\nimport { getAttributes, modulePath } from \"./utils\";\n\ninterface StrapiFieldProps {\n className?: string;\n path?: string;\n setControlContextData?: (data: {\n fields: string[];\n isImage: boolean;\n }) => void;\n}\n\nexport const strapiFieldMeta: ComponentMeta<StrapiFieldProps> = {\n name: \"StrapiField\",\n displayName: \"Strapi Field\",\n importName: \"StrapiField\",\n importPath: modulePath,\n props: {\n path: {\n type: \"choice\",\n options: (_, ctx) => {\n return ctx?.fields ?? [];\n },\n displayName: \"Field\",\n description: \"Field name\",\n },\n },\n};\n\nexport function StrapiField({\n className,\n path,\n setControlContextData,\n}: StrapiFieldProps) {\n const item = useSelector(\"strapiItem\");\n if (!item) {\n return <div>StrapiField must be used within a StrapiCollection</div>;\n }\n\n // Getting only fields that aren't objects\n const attributes = getAttributes(item);\n const displayableFields = Object.keys(attributes).filter((field) => {\n const value = attributes[field];\n const maybeMime = getAttributes(value?.data)?.mime;\n return (\n typeof value !== \"object\" ||\n (typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\"))\n );\n });\n\n setControlContextData?.({\n fields: displayableFields,\n isImage: false,\n });\n\n if (!path) {\n return <div>StrapiField must specify a field name.</div>;\n }\n\n const data = get(attributes, [path]);\n const maybeMime = getAttributes(data?.data)?.mime;\n\n setControlContextData?.({\n fields: displayableFields,\n isImage: typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\"),\n });\n\n if (!data) {\n return <div>Please specify a valid field name.</div>;\n } else if (typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\")) {\n const creds = useStrapiCredentials();\n const attrs = getAttributes(data.data);\n const img_url = attrs.url.startsWith(\"http\")\n ? attrs.url\n : creds.host + attrs.url;\n const img_width = attrs.width;\n const img_height = attrs.height;\n return (\n <img\n className={className}\n src={img_url}\n width={300}\n height={(300 * img_height) / img_width}\n />\n );\n } else {\n return <div className={className}>{data}</div>;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["get", "React", "React", "get", "get", "React", "React", "_a", "maybeMime", "get"]
7
+ }
package/dist/index.js CHANGED
@@ -1,10 +1,40 @@
1
+ "use client";
1
2
  "use strict";
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
5
+ var __defProps = Object.defineProperties;
4
6
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
8
  var __getOwnPropNames = Object.getOwnPropertyNames;
9
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
10
  var __getProtoOf = Object.getPrototypeOf;
7
11
  var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
13
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
+ var __spreadValues = (a, b) => {
15
+ for (var prop in b || (b = {}))
16
+ if (__hasOwnProp.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ if (__getOwnPropSymbols)
19
+ for (var prop of __getOwnPropSymbols(b)) {
20
+ if (__propIsEnum.call(b, prop))
21
+ __defNormalProp(a, prop, b[prop]);
22
+ }
23
+ return a;
24
+ };
25
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
26
+ var __objRest = (source, exclude) => {
27
+ var target = {};
28
+ for (var prop in source)
29
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
30
+ target[prop] = source[prop];
31
+ if (source != null && __getOwnPropSymbols)
32
+ for (var prop of __getOwnPropSymbols(source)) {
33
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
34
+ target[prop] = source[prop];
35
+ }
36
+ return target;
37
+ };
8
38
  var __export = (target, all) => {
9
39
  for (var name in all)
10
40
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -26,6 +56,26 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
56
  mod
27
57
  ));
28
58
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
59
+ var __async = (__this, __arguments, generator) => {
60
+ return new Promise((resolve, reject) => {
61
+ var fulfilled = (value) => {
62
+ try {
63
+ step(generator.next(value));
64
+ } catch (e) {
65
+ reject(e);
66
+ }
67
+ };
68
+ var rejected = (value) => {
69
+ try {
70
+ step(generator.throw(value));
71
+ } catch (e) {
72
+ reject(e);
73
+ }
74
+ };
75
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
76
+ step((generator = generator.apply(__this, __arguments)).next());
77
+ });
78
+ };
29
79
 
30
80
  // src/index.tsx
31
81
  var src_exports = {};
@@ -33,7 +83,10 @@ __export(src_exports, {
33
83
  StrapiCollection: () => StrapiCollection,
34
84
  StrapiCredentialsProvider: () => StrapiCredentialsProvider,
35
85
  StrapiField: () => StrapiField,
86
+ queryStrapi: () => queryStrapi,
87
+ queryStrapiMeta: () => queryStrapiMeta,
36
88
  registerAll: () => registerAll,
89
+ registerAllCustomFunctions: () => registerAllCustomFunctions,
37
90
  strapiCollectionMeta: () => strapiCollectionMeta,
38
91
  strapiCredentialsProviderMeta: () => strapiCredentialsProviderMeta,
39
92
  strapiFieldMeta: () => strapiFieldMeta
@@ -46,12 +99,13 @@ var import_registerGlobalContext = __toESM(require("@plasmicapp/host/registerGlo
46
99
  var import_host = require("@plasmicapp/host");
47
100
  var import_query = require("@plasmicapp/query");
48
101
  var import_change_case = require("change-case");
49
- var import_dlv = __toESM(require("dlv"));
50
- var qs = __toESM(require("qs"));
102
+ var import_dlv2 = __toESM(require("dlv"));
51
103
  var import_react2 = __toESM(require("react"));
52
104
 
53
- // src/StrapiCredentialsProvider.tsx
54
- var import_react = __toESM(require("react"));
105
+ // src/custom-functions.tsx
106
+ var import_registerFunction = __toESM(require("@plasmicapp/host/registerFunction"));
107
+ var import_dlv = __toESM(require("dlv"));
108
+ var import_qs = __toESM(require("qs"));
55
109
 
56
110
  // src/utils.ts
57
111
  var modulePath = "@plasmicpkgs/plasmic-strapi";
@@ -105,11 +159,123 @@ var getAttributes = (item) => {
105
159
  if (item.attributes) {
106
160
  return item.attributes;
107
161
  }
108
- const { documentId: _documentId, locale: _locale, ...rest } = item;
162
+ const _a = item, { documentId: _documentId, locale: _locale } = _a, rest = __objRest(_a, ["documentId", "locale"]);
109
163
  return rest;
110
164
  };
165
+ function filterFields(collectionData) {
166
+ return collectionData.flatMap((item) => {
167
+ const attributes = getAttributes(item);
168
+ const displayableFields = Object.keys(attributes).filter((field) => {
169
+ var _a;
170
+ const value = attributes[field];
171
+ const maybeMime = (_a = getAttributes(value == null ? void 0 : value.data)) == null ? void 0 : _a.mime;
172
+ return typeof value !== "object" || typeof maybeMime === "string" && maybeMime.startsWith("image");
173
+ });
174
+ return displayableFields;
175
+ });
176
+ }
177
+
178
+ // src/custom-functions.tsx
179
+ var queryStrapiMeta = {
180
+ name: "queryStrapi",
181
+ displayName: "Query Strapi",
182
+ description: "Query a Strapi collection",
183
+ importPath: modulePath,
184
+ params: [
185
+ {
186
+ name: "strapiHost",
187
+ type: "string",
188
+ description: "The Strapi host URL (e.g., https://example.com)"
189
+ },
190
+ {
191
+ name: "strapiToken",
192
+ type: "string",
193
+ description: "The Strapi API token (optional, for authenticated requests)"
194
+ },
195
+ {
196
+ name: "collection",
197
+ type: "string",
198
+ description: "The name of the Strapi collection to query"
199
+ },
200
+ {
201
+ name: "filterField",
202
+ type: "choice",
203
+ options: (_, ctx) => {
204
+ return ctx == null ? void 0 : ctx.strapiFields;
205
+ }
206
+ },
207
+ {
208
+ name: "filterValue",
209
+ type: "string",
210
+ description: "The value to filter by (optional, if you want to filter results)"
211
+ },
212
+ {
213
+ name: "filterParameter",
214
+ type: "choice",
215
+ description: "The parameter for filtering (e.g., 'eq', 'contains', etc.) (optional)",
216
+ options: () => {
217
+ return queryParameters.map((item) => ({
218
+ label: item == null ? void 0 : item.label,
219
+ value: item == null ? void 0 : item.value
220
+ }));
221
+ }
222
+ }
223
+ ],
224
+ fnContext: (host, token, collection) => {
225
+ return {
226
+ dataKey: JSON.stringify({ host, token, collection }),
227
+ fetcher: () => __async(void 0, null, function* () {
228
+ if (!host) {
229
+ return {};
230
+ }
231
+ const data = yield queryStrapi(host, token, collection);
232
+ if (!(0, import_dlv.default)(data.data, ["data"])) {
233
+ return { strapiFields: [] };
234
+ }
235
+ const collectionData = (0, import_dlv.default)(data.data, ["data"]);
236
+ const filteredFields = filterFields(collectionData);
237
+ return { strapiFields: uniq(filteredFields != null ? filteredFields : []) };
238
+ })
239
+ };
240
+ }
241
+ };
242
+ function queryStrapi(host, token, collection, filterField, filterValue, filterParameter) {
243
+ return __async(this, null, function* () {
244
+ if (!host) {
245
+ return null;
246
+ }
247
+ collection = collection != null ? collection : "";
248
+ const query = host.trim() + "/api/" + collection.trim();
249
+ const requestInit = { method: "GET" };
250
+ if (token) {
251
+ requestInit.headers = { Authorization: "Bearer " + token };
252
+ }
253
+ const queryParams = import_qs.default.stringify(__spreadProps(__spreadValues({}, filterField && filterParameter && filterValue ? {
254
+ filters: {
255
+ [filterField]: {
256
+ [filterParameter]: filterValue
257
+ }
258
+ }
259
+ } : {}), {
260
+ populate: "*"
261
+ }));
262
+ const resp = yield fetch(`${query}?${queryParams}`, requestInit);
263
+ return resp.json();
264
+ });
265
+ }
266
+ function registerAllCustomFunctions(loader) {
267
+ function _registerFunction(fn, meta) {
268
+ if (loader) {
269
+ loader.registerFunction(fn, meta);
270
+ } else {
271
+ (0, import_registerFunction.default)(fn, meta);
272
+ }
273
+ }
274
+ _registerFunction(queryStrapi, queryStrapiMeta);
275
+ }
111
276
 
112
277
  // src/StrapiCredentialsProvider.tsx
278
+ var import_react = __toESM(require("react"));
113
279
  var StrapiCredentialsContext = import_react.default.createContext(void 0);
114
280
  function useStrapiCredentials() {
115
281
  const creds = (0, import_react.useContext)(StrapiCredentialsContext);
@@ -190,34 +356,34 @@ var strapiCollectionMeta = {
190
356
  type: "choice",
191
357
  displayName: "Filter field",
192
358
  description: "Field (from Collection) to filter by",
193
- options: (props, ctx) => {
359
+ options: (_, ctx) => {
194
360
  var _a;
195
361
  return (_a = ctx == null ? void 0 : ctx.strapiFields) != null ? _a : [];
196
362
  },
197
- hidden: (props, ctx) => !props.name
363
+ hidden: (props) => !props.name
198
364
  },
199
365
  filterParameter: {
200
366
  type: "choice",
201
367
  displayName: "Filter Parameter",
202
368
  description: "Field Parameter filter by",
203
- options: (props, ctx) => {
369
+ options: () => {
204
370
  return queryParameters.map((item) => ({
205
371
  label: item == null ? void 0 : item.label,
206
372
  value: item == null ? void 0 : item.value
207
373
  }));
208
374
  },
209
- hidden: (props, ctx) => !props.filterField
375
+ hidden: (props) => !props.filterField
210
376
  },
211
377
  filterValue: {
212
378
  type: "string",
213
379
  displayName: "Filter value",
214
380
  description: "Value to filter by, should be of filter field type",
215
- hidden: (props, ctx) => !props.filterParameter
381
+ hidden: (props) => !props.filterParameter
216
382
  },
217
383
  limit: {
218
384
  type: "number",
219
385
  displayName: "Limit",
220
- description: "Maximum n umber of collections to fetch (0 for unlimited)."
386
+ description: "Maximum number of collections to fetch (0 for unlimited)."
221
387
  },
222
388
  noLayout: {
223
389
  type: "boolean",
@@ -245,58 +411,34 @@ function StrapiCollection({
245
411
  noAutoRepeat,
246
412
  setControlContextData
247
413
  }) {
248
- const creds = useStrapiCredentials();
249
- if (!creds.host) {
414
+ const { host, token } = useStrapiCredentials();
415
+ if (!host) {
250
416
  return /* @__PURE__ */ import_react2.default.createElement("div", null, "Please specify a host.");
251
417
  }
252
- const query = creds.host + "/api/" + name;
253
418
  const cacheKey = JSON.stringify({
254
- creds,
419
+ host,
420
+ token,
255
421
  name,
256
422
  filterField,
257
423
  filterValue,
258
424
  filterParameter
259
425
  });
260
- const data = (0, import_query.usePlasmicQueryData)(cacheKey, async () => {
261
- if (!query) {
262
- return null;
263
- }
264
- const requestInit = { method: "GET" };
265
- if (creds.token) {
266
- requestInit.headers = { Authorization: "Bearer " + creds.token };
267
- }
268
- const queryParams = qs.stringify({
269
- ...filterField && filterParameter && filterValue ? {
270
- filters: {
271
- [filterField]: {
272
- [filterParameter]: filterValue
273
- }
274
- }
275
- } : {},
276
- populate: "*"
277
- });
278
- const resp = await fetch(`${query}?${queryParams}`, requestInit);
279
- return resp.json();
280
- });
426
+ const data = (0, import_query.usePlasmicQueryData)(
427
+ cacheKey,
428
+ () => __async(this, null, function* () {
429
+ return queryStrapi(host, token, name, filterField, filterValue, filterParameter);
430
+ })
431
+ );
281
432
  if (!(data == null ? void 0 : data.data)) {
282
433
  return /* @__PURE__ */ import_react2.default.createElement("div", null, "Please configure the Strapi provider with a valid host and token.");
283
434
  }
284
- if (!(0, import_dlv.default)(data.data, ["data"])) {
435
+ if (!(0, import_dlv2.default)(data.data, ["data"])) {
285
436
  return /* @__PURE__ */ import_react2.default.createElement("div", null, "Please specify a valid collection.");
286
437
  }
287
- const collectionData = (0, import_dlv.default)(data.data, ["data"]);
288
- const filterFields = collectionData.flatMap((item) => {
289
- const attributes = getAttributes(item);
290
- const displayableFields = Object.keys(attributes).filter((field) => {
291
- var _a;
292
- const value = attributes[field];
293
- const maybeMime = (_a = getAttributes(value == null ? void 0 : value.data)) == null ? void 0 : _a.mime;
294
- return typeof value !== "object" || typeof maybeMime === "string" && maybeMime.startsWith("image");
295
- });
296
- return displayableFields;
297
- });
438
+ const collectionData = (0, import_dlv2.default)(data.data, ["data"]);
439
+ const filteredFields = filterFields(collectionData);
298
440
  setControlContextData == null ? void 0 : setControlContextData({
299
- strapiFields: uniq(filterFields != null ? filterFields : [])
441
+ strapiFields: uniq(filteredFields != null ? filteredFields : [])
300
442
  });
301
443
  if (filterParameter && !filterValue && !filterField) {
302
444
  return /* @__PURE__ */ import_react2.default.createElement("div", null, "Please specify a Filter Field and a Filter Value");
@@ -338,7 +480,7 @@ function StrapiCollection({
338
480
 
339
481
  // src/StrapiField.tsx
340
482
  var import_host2 = require("@plasmicapp/host");
341
- var import_dlv2 = __toESM(require("dlv"));
483
+ var import_dlv3 = __toESM(require("dlv"));
342
484
  var import_react3 = __toESM(require("react"));
343
485
  var strapiFieldMeta = {
344
486
  name: "StrapiField",
@@ -348,7 +490,7 @@ var strapiFieldMeta = {
348
490
  props: {
349
491
  path: {
350
492
  type: "choice",
351
- options: (props, ctx) => {
493
+ options: (_, ctx) => {
352
494
  var _a;
353
495
  return (_a = ctx == null ? void 0 : ctx.fields) != null ? _a : [];
354
496
  },
@@ -381,7 +523,7 @@ function StrapiField({
381
523
  if (!path) {
382
524
  return /* @__PURE__ */ import_react3.default.createElement("div", null, "StrapiField must specify a field name.");
383
525
  }
384
- const data = (0, import_dlv2.default)(attributes, [path]);
526
+ const data = (0, import_dlv3.default)(attributes, [path]);
385
527
  const maybeMime = (_a = getAttributes(data == null ? void 0 : data.data)) == null ? void 0 : _a.mime;
386
528
  setControlContextData == null ? void 0 : setControlContextData({
387
529
  fields: displayableFields,
@@ -432,13 +574,4 @@ function registerAll(loader) {
432
574
  _registerComponent(StrapiCollection, strapiCollectionMeta);
433
575
  _registerComponent(StrapiField, strapiFieldMeta);
434
576
  }
435
- // Annotate the CommonJS export names for ESM import in node:
436
- 0 && (module.exports = {
437
- StrapiCollection,
438
- StrapiCredentialsProvider,
439
- StrapiField,
440
- registerAll,
441
- strapiCollectionMeta,
442
- strapiCredentialsProviderMeta,
443
- strapiFieldMeta
444
- });
577
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.tsx", "../src/StrapiCollection.tsx", "../src/custom-functions.tsx", "../src/utils.ts", "../src/StrapiCredentialsProvider.tsx", "../src/StrapiField.tsx"],
4
+ "sourcesContent": ["import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport registerGlobalContext from \"@plasmicapp/host/registerGlobalContext\";\nimport { StrapiCollection, strapiCollectionMeta } from \"./StrapiCollection\";\nimport {\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta,\n} from \"./StrapiCredentialsProvider\";\nimport { StrapiField, strapiFieldMeta } from \"./StrapiField\";\n\nexport function registerAll(loader?: {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n}) {\n const _registerComponent = <T extends React.ComponentType<any>>(\n Component: T,\n defaultMeta: ComponentMeta<React.ComponentProps<T>>\n ) => {\n if (loader) {\n loader.registerComponent(Component, defaultMeta);\n } else {\n registerComponent(Component, defaultMeta);\n }\n };\n\n if (loader) {\n loader.registerGlobalContext(\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta\n );\n } else {\n registerGlobalContext(\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta\n );\n }\n\n _registerComponent(StrapiCollection, strapiCollectionMeta);\n _registerComponent(StrapiField, strapiFieldMeta);\n}\n\nexport * from \"./custom-functions\";\nexport { StrapiCollection, strapiCollectionMeta } from \"./StrapiCollection\";\nexport {\n StrapiCredentialsProvider,\n strapiCredentialsProviderMeta,\n} from \"./StrapiCredentialsProvider\";\nexport { StrapiField, strapiFieldMeta } from \"./StrapiField\";\n", "import { ComponentMeta, DataProvider, repeatedElement } from \"@plasmicapp/host\";\nimport { usePlasmicQueryData } from \"@plasmicapp/query\";\nimport { pascalCase } from \"change-case\";\nimport get from \"dlv\";\nimport React, { ReactNode } from \"react\";\nimport { queryStrapi } from \"./custom-functions\";\nimport { useStrapiCredentials } from \"./StrapiCredentialsProvider\";\nimport { filterFields, modulePath, queryParameters, uniq } from \"./utils\";\n\nconst makeDataProviderName = (collection: string) =>\n `currentStrapi${pascalCase(collection)}Item`;\n\ninterface StrapiCollectionProps {\n name?: string;\n children?: ReactNode;\n className?: string;\n noLayout?: boolean;\n noAutoRepeat?: boolean;\n filterField?: string;\n filterValue?: string;\n limit?: number;\n filterParameter?: string;\n setControlContextData?: (data: { strapiFields: string[] }) => void;\n}\n\nexport const strapiCollectionMeta: ComponentMeta<StrapiCollectionProps> = {\n name: \"StrapiCollection\",\n displayName: \"Strapi Collection\",\n importName: \"StrapiCollection\",\n importPath: modulePath,\n providesData: true,\n description:\n \"Fetches Strapi data of a given collection, and repeats `children` slot content for each row fetched. [See tutorial video](https://www.youtube.com/watch?v=1SLoVY3hkQ4).\",\n defaultStyles: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr 1fr\",\n gridRowGap: \"8px\",\n gridColumnGap: \"8px\",\n padding: \"8px\",\n maxWidth: \"100%\",\n },\n props: {\n children: {\n type: \"slot\",\n defaultValue: {\n type: \"vbox\",\n children: {\n type: \"component\",\n name: \"StrapiField\",\n },\n },\n },\n name: {\n type: \"string\",\n displayName: \"Name\",\n description: \"Name of the collection to be fetched.\",\n defaultValueHint: \"restaurants\",\n },\n filterField: {\n type: \"choice\",\n displayName: \"Filter field\",\n description: \"Field (from Collection) to filter by\",\n options: (_, ctx) => ctx?.strapiFields ?? [],\n hidden: (props) => !props.name,\n },\n filterParameter: {\n type: \"choice\",\n displayName: \"Filter Parameter\",\n description: \"Field Parameter filter by\",\n options: () => {\n return queryParameters.map((item: any) => ({\n label: item?.label,\n value: item?.value,\n }));\n },\n hidden: (props) => !props.filterField,\n },\n filterValue: {\n type: \"string\",\n displayName: \"Filter value\",\n description: \"Value to filter by, should be of filter field type\",\n hidden: (props) => !props.filterParameter,\n },\n limit: {\n type: \"number\",\n displayName: \"Limit\",\n description: \"Maximum number of collections to fetch (0 for unlimited).\",\n },\n noLayout: {\n type: \"boolean\",\n displayName: \"No layout\",\n description:\n \"When set, Strapi Collection will not layout its children; instead, the layout set on its parent element will be used. Useful if you want to set flex gap or control container tag type.\",\n defaultValue: false,\n },\n noAutoRepeat: {\n type: \"boolean\",\n displayName: \"No auto-repeat\",\n description: \"Do not automatically repeat children for every category.\",\n defaultValue: false,\n },\n },\n};\n\nexport function StrapiCollection({\n name,\n filterParameter,\n filterValue,\n filterField,\n limit,\n children,\n className,\n noLayout,\n noAutoRepeat,\n setControlContextData,\n}: StrapiCollectionProps) {\n const { host, token } = useStrapiCredentials();\n\n if (!host) {\n return <div>Please specify a host.</div>;\n }\n\n const cacheKey = JSON.stringify({\n host,\n token,\n name,\n filterField,\n filterValue,\n filterParameter,\n });\n\n const data = usePlasmicQueryData<any[] | null>(cacheKey, async () =>\n queryStrapi(host, token, name, filterField, filterValue, filterParameter)\n );\n\n if (!data?.data) {\n return (\n <div>\n Please configure the Strapi provider with a valid host and token.\n </div>\n );\n }\n\n if (!get(data.data, [\"data\"])) {\n return <div>Please specify a valid collection.</div>;\n }\n\n const collectionData = get(data.data, [\"data\"]) as any[];\n\n const filteredFields = filterFields(collectionData);\n\n setControlContextData?.({\n strapiFields: uniq(filteredFields ?? []),\n });\n if (filterParameter && !filterValue && !filterField) {\n return <div>Please specify a Filter Field and a Filter Value</div>;\n }\n if (!filterParameter && filterValue && !filterField) {\n return <div>Please specify a Filter Parameter and a Filter Field</div>;\n }\n if (!filterParameter && !filterValue && filterField) {\n return <div>Please specify a Filter Parameter and a Filter Value</div>;\n }\n\n if (filterParameter && filterValue && !filterField) {\n return <div>Please specify a Filter Field</div>;\n }\n if (!filterParameter && filterValue && filterField) {\n return <div>Please specify a Filter Parameter</div>;\n }\n if (filterParameter && !filterValue && filterField) {\n return <div>Please specify a Filter Value</div>;\n }\n\n const collection =\n limit! > 0 ? collectionData.slice(0, limit) : collectionData;\n\n if (collection.length === 0) {\n return <div>No collection found </div>;\n }\n\n const repElements = noAutoRepeat\n ? children\n : collection.map((item, index) => (\n <DataProvider\n key={item.documentId ?? item.id}\n name={\"strapiItem\"}\n data={item}\n hidden={true}\n >\n <DataProvider name={makeDataProviderName(name!)} data={item}>\n {repeatedElement(index, children)}\n </DataProvider>\n </DataProvider>\n ));\n\n return (\n <DataProvider name=\"strapiItems\" data={collection}>\n {noLayout ? (\n <> {repElements} </>\n ) : (\n <div className={className}> {repElements} </div>\n )}\n </DataProvider>\n );\n}\n", "import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\nimport get from \"dlv\";\nimport qs from \"qs\";\nimport { filterFields, modulePath, queryParameters, uniq } from \"./utils\";\n\nexport const queryStrapiMeta: CustomFunctionMeta<typeof queryStrapi> = {\n name: \"queryStrapi\",\n displayName: \"Query Strapi\",\n description: \"Query a Strapi collection\",\n importPath: modulePath,\n params: [\n {\n name: \"strapiHost\",\n type: \"string\",\n description: \"The Strapi host URL (e.g., https://example.com)\",\n },\n {\n name: \"strapiToken\",\n type: \"string\",\n description:\n \"The Strapi API token (optional, for authenticated requests)\",\n },\n {\n name: \"collection\",\n type: \"string\",\n description: \"The name of the Strapi collection to query\",\n },\n {\n name: \"filterField\",\n type: \"choice\",\n options: (_, ctx) => {\n return ctx?.strapiFields;\n },\n },\n {\n name: \"filterValue\",\n type: \"string\",\n description:\n \"The value to filter by (optional, if you want to filter results)\",\n },\n {\n name: \"filterParameter\",\n type: \"choice\",\n description:\n \"The parameter for filtering (e.g., 'eq', 'contains', etc.) (optional)\",\n options: () => {\n return queryParameters.map((item: any) => ({\n label: item?.label,\n value: item?.value,\n }));\n },\n },\n ],\n fnContext: (host, token, collection) => {\n return {\n dataKey: JSON.stringify({ host, token, collection }),\n fetcher: async () => {\n if (!host) {\n return {};\n }\n const data = await queryStrapi(host, token, collection);\n if (!get(data.data, [\"data\"])) {\n return { strapiFields: [] };\n }\n\n const collectionData = get(data.data, [\"data\"]) as any[];\n\n const filteredFields = filterFields(collectionData);\n return { strapiFields: uniq(filteredFields ?? []) };\n },\n };\n },\n};\n\nexport async function queryStrapi(\n host: string,\n token: string | undefined,\n collection: string | undefined,\n filterField?: string,\n filterValue?: string,\n filterParameter?: string\n) {\n if (!host) {\n return null;\n }\n\n collection = collection ?? \"\";\n\n const query = host.trim() + \"/api/\" + collection.trim();\n\n const requestInit: any = { method: \"GET\" };\n if (token) {\n requestInit.headers = { Authorization: \"Bearer \" + token };\n }\n\n const queryParams = qs.stringify({\n ...(filterField && filterParameter && filterValue\n ? {\n filters: {\n [filterField]: {\n [filterParameter]: filterValue,\n },\n },\n }\n : {}),\n populate: \"*\",\n });\n\n const resp = await fetch(`${query}?${queryParams}`, requestInit);\n return resp.json();\n}\n\nexport function registerAllCustomFunctions(loader?: { registerFunction: any }) {\n function _registerFunction<T extends (...args: any[]) => any>(\n fn: T,\n meta: CustomFunctionMeta<T>\n ) {\n if (loader) {\n loader.registerFunction(fn, meta);\n } else {\n registerFunction(fn, meta);\n }\n }\n\n _registerFunction(queryStrapi, queryStrapiMeta);\n}\n", "export const modulePath = \"@plasmicpkgs/plasmic-strapi\";\n\nexport const queryParameters = [\n {\n value: \"$eq\",\n label: \"Equal\",\n },\n {\n value: \"$ne\",\n label: \"Not equal\",\n },\n {\n value: \"$lt\",\n label: \"Less than\",\n },\n {\n value: \"$lte\",\n label: \"Less than or equal to\",\n },\n {\n value: \"$gt\",\n label: \"Greater than\",\n },\n {\n value: \"$gte\",\n label: \"Greater than or equal to\",\n },\n {\n value: \"$in\",\n label: \"Included in an array\",\n },\n {\n value: \"$notIn\",\n label: \"Not included in an array\",\n },\n {\n value: \"$contains\",\n label: \"Contains\",\n },\n {\n value: \"$notContains\",\n label: \"Does not contain\",\n },\n];\n\nexport const uniq = <T>(xs: Array<T>): T[] => Array.from(new Set(xs));\n\nexport const getAttributes = (item?: Record<string, any>) => {\n if (!item) {\n return undefined;\n }\n // Strapi v4\n if (item.attributes) {\n return item.attributes;\n }\n // Strapi v5\n const { documentId: _documentId, locale: _locale, ...rest } = item;\n return rest;\n};\n\nexport function filterFields(collectionData: any[]) {\n return collectionData.flatMap((item: any) => {\n const attributes = getAttributes(item);\n const displayableFields = Object.keys(attributes).filter((field) => {\n const value = attributes[field];\n const maybeMime = getAttributes(value?.data)?.mime;\n return (\n typeof value !== \"object\" ||\n (typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\"))\n );\n });\n return displayableFields;\n });\n}\n", "import { GlobalContextMeta } from \"@plasmicapp/host\";\nimport React, { useContext } from \"react\";\nimport { modulePath } from \"./utils\";\n\ninterface StrapiCredentials {\n host?: string;\n token?: string;\n}\n\nconst StrapiCredentialsContext = React.createContext<\n StrapiCredentials | undefined\n>(undefined);\n\nexport function useStrapiCredentials() {\n const creds = useContext(StrapiCredentialsContext);\n if (!creds) {\n throw new Error(\"Missing StrapiCredentials\");\n }\n\n return creds;\n}\n\nexport const strapiCredentialsProviderMeta: GlobalContextMeta<StrapiCredentials> =\n {\n name: \"StrapiCredentialsProvider\",\n displayName: \"Strapi Credentials Provider\",\n description: `[See tutorial video](https://www.youtube.com/watch?v=1SLoVY3hkQ4).\n\nAPI token is needed only if data is not publicly readable.\n\nLearn how to [get your API token](https://docs.strapi.io/user-docs/latest/settings/managing-global-settings.html#managing-api-tokens).`,\n importName: \"StrapiCredentialsProvider\",\n importPath: modulePath,\n props: {\n host: {\n type: \"string\",\n displayName: \"Host\",\n defaultValueHint: \"https://strapi-app.plasmic.app\",\n defaultValue: \"https://strapi-app.plasmic.app\",\n description: \"Server where you application is hosted.\",\n },\n token: {\n type: \"string\",\n displayName: \"API Token\",\n description:\n \"API Token (generated in http://yourhost/admin/settings/api-tokens) (or leave blank for unauthenticated usage).\",\n },\n },\n };\n\nexport function StrapiCredentialsProvider({\n host,\n token,\n children,\n}: React.PropsWithChildren<StrapiCredentials>) {\n host = host?.replace(/\\/+$/, \"\");\n return (\n <StrapiCredentialsContext.Provider value={{ host, token }}>\n {children}\n </StrapiCredentialsContext.Provider>\n );\n}\n", "import { ComponentMeta, useSelector } from \"@plasmicapp/host\";\nimport get from \"dlv\";\nimport React from \"react\";\nimport { useStrapiCredentials } from \"./StrapiCredentialsProvider\";\nimport { getAttributes, modulePath } from \"./utils\";\n\ninterface StrapiFieldProps {\n className?: string;\n path?: string;\n setControlContextData?: (data: {\n fields: string[];\n isImage: boolean;\n }) => void;\n}\n\nexport const strapiFieldMeta: ComponentMeta<StrapiFieldProps> = {\n name: \"StrapiField\",\n displayName: \"Strapi Field\",\n importName: \"StrapiField\",\n importPath: modulePath,\n props: {\n path: {\n type: \"choice\",\n options: (_, ctx) => {\n return ctx?.fields ?? [];\n },\n displayName: \"Field\",\n description: \"Field name\",\n },\n },\n};\n\nexport function StrapiField({\n className,\n path,\n setControlContextData,\n}: StrapiFieldProps) {\n const item = useSelector(\"strapiItem\");\n if (!item) {\n return <div>StrapiField must be used within a StrapiCollection</div>;\n }\n\n // Getting only fields that aren't objects\n const attributes = getAttributes(item);\n const displayableFields = Object.keys(attributes).filter((field) => {\n const value = attributes[field];\n const maybeMime = getAttributes(value?.data)?.mime;\n return (\n typeof value !== \"object\" ||\n (typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\"))\n );\n });\n\n setControlContextData?.({\n fields: displayableFields,\n isImage: false,\n });\n\n if (!path) {\n return <div>StrapiField must specify a field name.</div>;\n }\n\n const data = get(attributes, [path]);\n const maybeMime = getAttributes(data?.data)?.mime;\n\n setControlContextData?.({\n fields: displayableFields,\n isImage: typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\"),\n });\n\n if (!data) {\n return <div>Please specify a valid field name.</div>;\n } else if (typeof maybeMime === \"string\" && maybeMime.startsWith(\"image\")) {\n const creds = useStrapiCredentials();\n const attrs = getAttributes(data.data);\n const img_url = attrs.url.startsWith(\"http\")\n ? attrs.url\n : creds.host + attrs.url;\n const img_width = attrs.width;\n const img_height = attrs.height;\n return (\n <img\n className={className}\n src={img_url}\n width={300}\n height={(300 * img_height) / img_width}\n />\n );\n } else {\n return <div className={className}>{data}</div>;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_dlv", "import_react", "get", "qs", "registerFunction", "React", "React", "get", "import_host", "import_dlv", "import_react", "React", "_a", "maybeMime", "get", "registerComponent", "registerGlobalContext"]
7
+ }
package/package.json CHANGED
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "name": "@plasmicpkgs/plasmic-strapi",
3
- "version": "0.1.168",
3
+ "version": "0.1.170",
4
4
  "description": "Plasmic Strapi components.",
5
- "main": "dist/index.js",
6
- "typings": "dist/index.d.ts",
7
- "module": "dist/index.mjs",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "module": "./dist/index.esm.js",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.esm.js",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
8
15
  "publishConfig": {
9
16
  "access": "public"
10
17
  },
@@ -12,7 +19,9 @@
12
19
  "dist"
13
20
  ],
14
21
  "scripts": {
15
- "build": "tsup-node src/index.tsx --dts --format esm,cjs --target es2019",
22
+ "build": "yarn build:types && yarn build:index",
23
+ "build:types": "yarn tsc",
24
+ "build:index": "node ../../build.mjs ./src/index.tsx --use-client",
16
25
  "test": "TEST_CWD=`pwd` yarn --cwd=../.. test --passWithNoTests",
17
26
  "prepublishOnly": "npm run build",
18
27
  "size": "size-limit",
@@ -27,7 +36,7 @@
27
36
  "limit": "10 KB"
28
37
  },
29
38
  {
30
- "path": "dist/index.mjs",
39
+ "path": "dist/index.esm.js",
31
40
  "limit": "10 KB"
32
41
  }
33
42
  ],
@@ -38,20 +47,17 @@
38
47
  "qs": "^6.11.0"
39
48
  },
40
49
  "devDependencies": {
41
- "@plasmicapp/host": "1.0.218",
50
+ "@plasmicapp/host": "1.0.219",
42
51
  "@plasmicapp/query": "0.1.79",
43
52
  "@size-limit/preset-small-lib": "^7.0.8",
44
53
  "@types/dlv": "^1.1.2",
45
54
  "@types/qs": "^6.9.7",
46
55
  "@types/react": "^18.0.27",
47
56
  "@types/react-dom": "^18.0.10",
48
- "husky": "^7.0.4",
49
57
  "react": "^18.2.0",
50
58
  "react-dom": "^18.2.0",
51
59
  "size-limit": "^7.0.8",
52
- "tslib": "^2.3.1",
53
- "tsup": "^7.2.0",
54
60
  "typescript": "^5.2.2"
55
61
  },
56
- "gitHead": "916ebe6189d169a4368e46f2f2de7331bc4943b7"
62
+ "gitHead": "337d10f8345a4823692cfb12d3f1df8958e1091c"
57
63
  }
package/dist/index.d.mts DELETED
@@ -1,46 +0,0 @@
1
- import registerComponent from '@plasmicapp/host/registerComponent';
2
- import registerGlobalContext from '@plasmicapp/host/registerGlobalContext';
3
- import { ComponentMeta, GlobalContextMeta } from '@plasmicapp/host';
4
- import React, { ReactNode } from 'react';
5
-
6
- interface StrapiCollectionProps {
7
- name?: string;
8
- children?: ReactNode;
9
- className?: string;
10
- noLayout?: boolean;
11
- noAutoRepeat?: boolean;
12
- filterField?: string;
13
- filterValue?: string;
14
- limit?: number;
15
- filterParameter?: string;
16
- setControlContextData?: (data: {
17
- strapiFields: string[];
18
- }) => void;
19
- }
20
- declare const strapiCollectionMeta: ComponentMeta<StrapiCollectionProps>;
21
- declare function StrapiCollection({ name, filterParameter, filterValue, filterField, limit, children, className, noLayout, noAutoRepeat, setControlContextData, }: StrapiCollectionProps): React.JSX.Element;
22
-
23
- interface StrapiCredentials {
24
- host?: string;
25
- token?: string;
26
- }
27
- declare const strapiCredentialsProviderMeta: GlobalContextMeta<StrapiCredentials>;
28
- declare function StrapiCredentialsProvider({ host, token, children, }: React.PropsWithChildren<StrapiCredentials>): React.JSX.Element;
29
-
30
- interface StrapiFieldProps {
31
- className?: string;
32
- path?: string;
33
- setControlContextData?: (data: {
34
- fields: string[];
35
- isImage: boolean;
36
- }) => void;
37
- }
38
- declare const strapiFieldMeta: ComponentMeta<StrapiFieldProps>;
39
- declare function StrapiField({ className, path, setControlContextData, }: StrapiFieldProps): React.JSX.Element;
40
-
41
- declare function registerAll(loader?: {
42
- registerComponent: typeof registerComponent;
43
- registerGlobalContext: typeof registerGlobalContext;
44
- }): void;
45
-
46
- export { StrapiCollection, StrapiCredentialsProvider, StrapiField, registerAll, strapiCollectionMeta, strapiCredentialsProviderMeta, strapiFieldMeta };