@soppiya/app-bridge 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/components/index.d.ts +2 -0
  2. package/dist/components/index.js +2 -0
  3. package/dist/components/media/Media.js +7 -7
  4. package/dist/components/meta-data/api/query.js +3 -0
  5. package/dist/components/meta-data/model/meta.types.js +3 -1
  6. package/dist/components/meta-data/model/useGetMetaFields.d.ts +4 -0
  7. package/dist/components/meta-data/ui/MetaData.stories.d.ts +1 -0
  8. package/dist/components/meta-data/ui/MetaData.stories.js +22 -1
  9. package/dist/components/meta-data/ui/MetaDataItem.js +22 -0
  10. package/dist/components/meta-data/ui/MetaobjectRefMetaField.d.ts +3 -0
  11. package/dist/components/meta-data/ui/MetaobjectRefMetaField.js +30 -0
  12. package/dist/components/meta-data/ui/SingleLineTextMetaField.js +10 -9
  13. package/dist/components/metaobjects-entries-picker/index.d.ts +1 -0
  14. package/dist/components/metaobjects-entries-picker/index.js +2 -0
  15. package/dist/components/metaobjects-entries-picker/ui/MetaobjectEntriesPicker.d.ts +10 -0
  16. package/dist/components/{metafield-entries/ui/MetaobjectEntries.js → metaobjects-entries-picker/ui/MetaobjectEntriesPicker.js} +3 -3
  17. package/dist/components/{metafield-entries/ui/MetaobjectEntries.stories.d.ts → metaobjects-entries-picker/ui/MetaobjectEntriesPicker.stories.d.ts} +1 -1
  18. package/dist/components/metaobjects-entries-picker/ui/MetaobjectEntriesPicker.stories.js +10 -0
  19. package/dist/components/metaobjects-picker/api/query.d.ts +8 -0
  20. package/dist/components/metaobjects-picker/api/query.js +18 -0
  21. package/dist/components/metaobjects-picker/index.d.ts +1 -0
  22. package/dist/components/metaobjects-picker/index.js +2 -0
  23. package/dist/components/metaobjects-picker/model/useMetaobjects.d.ts +24 -0
  24. package/dist/components/metaobjects-picker/model/useMetaobjects.js +45 -0
  25. package/dist/components/metaobjects-picker/ui/MetaobjectsPicker.d.ts +9 -0
  26. package/dist/components/metaobjects-picker/ui/MetaobjectsPicker.js +104 -0
  27. package/dist/components/metaobjects-picker/ui/MetaobjectsPicker.stories.d.ts +14 -0
  28. package/dist/components/metaobjects-picker/ui/MetaobjectsPicker.stories.js +10 -0
  29. package/dist/shared/graphql/gql.d.ts +7 -2
  30. package/dist/shared/graphql/gql.js +3 -2
  31. package/dist/shared/graphql/graphql.d.ts +71 -25
  32. package/dist/shared/graphql/graphql.js +318 -8
  33. package/dist/styles.css +20 -15
  34. package/package.json +1 -1
  35. package/dist/components/metafield-entries/index.d.ts +0 -0
  36. package/dist/components/metafield-entries/index.js +0 -0
  37. package/dist/components/metafield-entries/ui/MetaobjectEntries.d.ts +0 -10
  38. package/dist/components/metafield-entries/ui/MetaobjectEntries.stories.js +0 -10
  39. package/dist/components/metafields-picker/api/query.d.ts +0 -0
  40. package/dist/components/metafields-picker/api/query.js +0 -0
  41. package/dist/components/metafields-picker/index.d.ts +0 -0
  42. package/dist/components/metafields-picker/index.js +0 -0
  43. package/dist/components/metafields-picker/model/useMetafields.d.ts +0 -0
  44. package/dist/components/metafields-picker/model/useMetafields.js +0 -0
  45. package/dist/components/metafields-picker/ui/MetafieldsPicker.d.ts +0 -2
  46. package/dist/components/metafields-picker/ui/MetafieldsPicker.js +0 -7
  47. package/dist/components/metafields-picker/ui/MetafieldsPicker.stories.d.ts +0 -6
  48. package/dist/components/metafields-picker/ui/MetafieldsPicker.stories.js +0 -8
  49. /package/dist/components/{metafield-entries → metaobjects-entries-picker}/api/query.d.ts +0 -0
  50. /package/dist/components/{metafield-entries → metaobjects-entries-picker}/api/query.js +0 -0
  51. /package/dist/components/{metafield-entries → metaobjects-entries-picker}/model/useMetaobjectEntries.d.ts +0 -0
  52. /package/dist/components/{metafield-entries → metaobjects-entries-picker}/model/useMetaobjectEntries.js +0 -0
@@ -4,6 +4,8 @@ export * from "./collections-pciker";
4
4
  export * from "./link-list-picker";
5
5
  export * from "./media";
6
6
  export * from "./meta-data";
7
+ export * from "./metaobjects-entries-picker";
8
+ export * from "./metaobjects-picker";
7
9
  export * from "./pages-picker";
8
10
  export * from "./products-picker";
9
11
  export * from "./savebar";
@@ -4,6 +4,8 @@ export * from "./collections-pciker/index.js";
4
4
  export * from "./link-list-picker/index.js";
5
5
  export * from "./media/index.js";
6
6
  export * from "./meta-data/index.js";
7
+ export * from "./metaobjects-entries-picker/index.js";
8
+ export * from "./metaobjects-picker/index.js";
7
9
  export * from "./pages-picker/index.js";
8
10
  export * from "./products-picker/index.js";
9
11
  export * from "./savebar/index.js";
@@ -98,7 +98,7 @@ const Media_Media = ({ title = "Media", types = [
98
98
  alignItems: "center",
99
99
  children: [
100
100
  /*#__PURE__*/ jsxs(BlockStack, {
101
- className: "!max-w-[150px] w-full",
101
+ className: "max-w-[150px]! w-full",
102
102
  gapY: 30,
103
103
  children: [
104
104
  /*#__PURE__*/ jsxs(InlineStack, {
@@ -192,7 +192,7 @@ const Media_Media = ({ title = "Media", types = [
192
192
  children: [
193
193
  /*#__PURE__*/ jsx(Button, {
194
194
  color: "primary",
195
- className: "!px-[8px]",
195
+ className: "px-2!",
196
196
  onClick: ()=>ref.current?.click(),
197
197
  children: /*#__PURE__*/ jsx(SoppiyaIcon, {
198
198
  size: "sm",
@@ -250,7 +250,7 @@ const Media_Media = ({ title = "Media", types = [
250
250
  children: /*#__PURE__*/ jsx(Button, {
251
251
  variant: "outline",
252
252
  color: "secondary",
253
- className: "!px-[8px]",
253
+ className: "px-2!",
254
254
  onClick: toggleView,
255
255
  children: /*#__PURE__*/ jsx(SoppiyaIcon, {
256
256
  size: "sm",
@@ -262,7 +262,7 @@ const Media_Media = ({ title = "Media", types = [
262
262
  children: /*#__PURE__*/ jsx(Button, {
263
263
  variant: "outline",
264
264
  color: "secondary",
265
- className: "!px-[8px]",
265
+ className: "px-2!",
266
266
  disabled: !isMediaSelected,
267
267
  loading: isDeletingMedias,
268
268
  onClick: handleDeleteMedias,
@@ -308,7 +308,7 @@ const Media_Media = ({ title = "Media", types = [
308
308
  /*#__PURE__*/ jsxs(BlockStack, {
309
309
  gapY: 90,
310
310
  className: classnames("max-h-[calc(100dvh-300px)] overflow-x-hidden overflow-y-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden", {
311
- "md:!w-[calc(100%-300px)] lg:!w-[calc(100%-336px)]": Boolean(preview)
311
+ "md:w-[calc(100%-300px)]! lg:w-[calc(100%-336px)]!": Boolean(preview)
312
312
  }),
313
313
  children: [
314
314
  /*#__PURE__*/ jsx(Box, {
@@ -316,8 +316,8 @@ const Media_Media = ({ title = "Media", types = [
316
316
  children: /*#__PURE__*/ jsx(Box, {
317
317
  className: classnames("grid", {
318
318
  "grid-cols-[repeat(1,1fr)]": view === View.List,
319
- "grid-cols-[repeat(auto-fill,minmax(150px,1fr))] md:grid-cols-[repeat(auto-fill,minmax(117px,1fr))] !rounded-[6px] gap-[20px] lg:gap-[35px]": view === View.Grid,
320
- "gap-[20px]": view === View.Grid && Boolean(preview)
319
+ "grid-cols-[repeat(auto-fill,minmax(150px,1fr))] md:grid-cols-[repeat(auto-fill,minmax(117px,1fr))] rounded-md! gap-5 lg:gap-[35px]": view === View.Grid,
320
+ "gap-5": view === View.Grid && Boolean(preview)
321
321
  }),
322
322
  children: medias.map((media)=>/*#__PURE__*/ jsx(MediaItem, {
323
323
  view: view,
@@ -7,6 +7,9 @@ const getMetaFields = graphql(`query Metafields($filterKeys: MetafieldFilterKeys
7
7
  entry
8
8
  name
9
9
  type
10
+ metaobject_reference {
11
+ _id
12
+ }
10
13
  }
11
14
  }
12
15
  }
@@ -8,6 +8,7 @@ class Meta {
8
8
  variant_ref: "Variants",
9
9
  page_ref: "Pages",
10
10
  blog_ref: "Blogs",
11
+ metaobject_ref_ref: "Meatobject",
11
12
  single_line_text: "Text",
12
13
  multiline_text: "Multiline text",
13
14
  boolean: "Boolean",
@@ -24,7 +25,8 @@ class Meta {
24
25
  "variant_ref",
25
26
  "page_ref",
26
27
  "article_ref",
27
- "blog_ref"
28
+ "blog_ref",
29
+ "metaobject_ref"
28
30
  ];
29
31
  return refTypes.includes(type);
30
32
  }
@@ -6,6 +6,10 @@ export declare const useGetMetaFields: (scope?: MetafieldScope[]) => {
6
6
  entry?: import("../../../shared/graphql/graphql").MetafieldEntryType | null;
7
7
  name?: string | null;
8
8
  type?: import("../../../shared/graphql/graphql").MetafieldType | null;
9
+ metaobject_reference?: {
10
+ __typename: "Metaobject";
11
+ _id?: string | null;
12
+ } | null;
9
13
  } | null | undefined)[];
10
14
  loading: boolean;
11
15
  metaFieldsError: import("@apollo/client").ErrorLike | undefined;
@@ -8,3 +8,4 @@ export declare const Variant: () => import("react/jsx-runtime").JSX.Element;
8
8
  export declare const Blog: () => import("react/jsx-runtime").JSX.Element;
9
9
  export declare const Page: () => import("react/jsx-runtime").JSX.Element;
10
10
  export declare const Collection: () => import("react/jsx-runtime").JSX.Element;
11
+ export declare const Metaobject: () => import("react/jsx-runtime").JSX.Element;
@@ -141,4 +141,25 @@ const Collection = ()=>{
141
141
  })
142
142
  });
143
143
  };
144
- export { Article, Blog, Collection, Page, Product, Variant, MetaData_stories as default };
144
+ const Metaobject = ()=>{
145
+ const [product, setProduct] = useState([]);
146
+ const handleChange = (field)=>{
147
+ setProduct((prev)=>{
148
+ const exists = prev.find((f)=>f.metafield === field.metafield);
149
+ if (!exists) return [
150
+ ...prev,
151
+ field
152
+ ];
153
+ return prev.map((f)=>f.metafield === field.metafield ? field : f);
154
+ });
155
+ };
156
+ return /*#__PURE__*/ jsx(Card, {
157
+ padding: 70,
158
+ children: /*#__PURE__*/ jsx(MetaData, {
159
+ scope: "collection",
160
+ metafieldsData: product,
161
+ onChange: handleChange
162
+ })
163
+ });
164
+ };
165
+ export { Article, Blog, Collection, Metaobject, Page, Product, Variant, MetaData_stories as default };
@@ -3,6 +3,7 @@ import { Button, Card, InlineStack, SoppiyaIcon, Text } from "@soppiya/elementus
3
3
  import ArticlesPicker from "../../articles-picker/ui/ArticlesPicker.js";
4
4
  import BlogsPicker from "../../blogs-picker/ui/BlogsPicker.js";
5
5
  import CollectionPicker from "../../collections-pciker/ui/CollectionPicker.js";
6
+ import { MetaobjectEntriesPicker } from "../../metaobjects-entries-picker/index.js";
6
7
  import PagesPicker from "../../pages-picker/ui/PagesPicker.js";
7
8
  import { ProductsPicker } from "../../products-picker/index.js";
8
9
  import { VariantsPicker } from "../../variants-picker/index.js";
@@ -19,6 +20,7 @@ import ColorMetaField from "./ColorMetaField.js";
19
20
  import DateAndTimeMetaField from "./DateAndTimeMetaField.js";
20
21
  import DateMetaField from "./DateMetaField.js";
21
22
  import MetaDataTypePopup from "./MetaDataTypePopup.js";
23
+ import MetaobjectRefMetaField from "./MetaobjectRefMetaField.js";
22
24
  import MultilineTextMetaField from "./MultilineTextMetaField.js";
23
25
  import NumberMetaField from "./NumberMetaField.js";
24
26
  import PageRefMetaField from "./PageRefMetaField.js";
@@ -28,6 +30,7 @@ import VariantRefMetaField from "./VariantRefMetaField.js";
28
30
  const MetaDataItem_MetaDataItem = ({ metaField, value = [], onChange })=>{
29
31
  const [activeMetaField, setActiveMetaField] = useState(null);
30
32
  const [visibleExplorer, setVisibleExplorer] = useState("");
33
+ const [metaobjectRef, setMetaobjectRef] = useState([]);
31
34
  const metaFieldRef = useClickAway(()=>visibleExplorer ? null : setActiveMetaField(null));
32
35
  const isRefType = meta_types.isRefType(metaField.type);
33
36
  let MetaFieldJSX;
@@ -65,6 +68,9 @@ const MetaDataItem_MetaDataItem = ({ metaField, value = [], onChange })=>{
65
68
  case "blog_ref":
66
69
  MetaFieldJSX = BlogRefMetaField;
67
70
  break;
71
+ case "metaobject_ref":
72
+ MetaFieldJSX = MetaobjectRefMetaField;
73
+ break;
68
74
  case "boolean":
69
75
  MetaFieldJSX = BooleanMetaField;
70
76
  break;
@@ -99,6 +105,15 @@ const MetaDataItem_MetaDataItem = ({ metaField, value = [], onChange })=>{
99
105
  case "article_ref":
100
106
  setVisibleExplorer("article");
101
107
  break;
108
+ case "metaobject_ref":
109
+ setVisibleExplorer("metaobject");
110
+ if (metaField.metaobject_reference?._id) {
111
+ console.log(metaField.metaobject_reference?._id);
112
+ setMetaobjectRef([
113
+ String(metaField.metaobject_reference._id)
114
+ ]);
115
+ }
116
+ break;
102
117
  default:
103
118
  isFunction(onChange) && onChange(value.concat(""));
104
119
  }
@@ -249,6 +264,13 @@ const MetaDataItem_MetaDataItem = ({ metaField, value = [], onChange })=>{
249
264
  limit: "multiple" === metaField.entry ? 1 / 0 : 1,
250
265
  onClose: ()=>setVisibleExplorer(""),
251
266
  onOk: handleSelectExplorerItems
267
+ }),
268
+ "metaobject" === visibleExplorer && /*#__PURE__*/ jsx(MetaobjectEntriesPicker, {
269
+ initialIds: value,
270
+ limit: "multiple" === metaField.entry ? 1 / 0 : 1,
271
+ onClose: ()=>setVisibleExplorer(""),
272
+ onOk: handleSelectExplorerItems,
273
+ metaobjects: metaobjectRef
252
274
  })
253
275
  ]
254
276
  });
@@ -0,0 +1,3 @@
1
+ import { MetaDataProps } from "./MetaDataItem";
2
+ declare const MetaobjectRefMetaField: ({ value, children }: MetaDataProps) => import("react/jsx-runtime").JSX.Element | import("react/jsx-runtime").JSX.Element[] | undefined;
3
+ export default MetaobjectRefMetaField;
@@ -0,0 +1,30 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useMetaobjectEntries } from "../../metaobjects-entries-picker/model/useMetaobjectEntries.js";
3
+ import { Loading } from "../../../shared/loading/index.js";
4
+ import { InlineStack, Text } from "@soppiya/elementus";
5
+ const MetaobjectRefMetaField = ({ value, children })=>{
6
+ const { metaobjectEntries, isLoadingMetaobjectEntries } = useMetaobjectEntries({
7
+ skip: !value,
8
+ filterKeys: {
9
+ cursors: value?.split(",")
10
+ }
11
+ });
12
+ if (isLoadingMetaobjectEntries) return /*#__PURE__*/ jsx(Loading, {});
13
+ return metaobjectEntries?.map((metaobjectEntry)=>/*#__PURE__*/ jsxs(InlineStack, {
14
+ justifyContent: "space-between",
15
+ children: [
16
+ /*#__PURE__*/ jsx(InlineStack, {
17
+ gapX: 70,
18
+ alignItems: "center",
19
+ children: /*#__PURE__*/ jsx(Text, {
20
+ size: "md",
21
+ weight: "regular",
22
+ children: metaobjectEntry.title
23
+ })
24
+ }),
25
+ children
26
+ ]
27
+ }, metaobjectEntry._id));
28
+ };
29
+ const ui_MetaobjectRefMetaField = MetaobjectRefMetaField;
30
+ export { ui_MetaobjectRefMetaField as default };
@@ -1,14 +1,15 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { Input } from "@soppiya/elementus";
3
- const SingleLineTextMetaField_SingleLineTextMetaField = ({ entry, value, children, onChange })=>/*#__PURE__*/ jsxs("div", {
2
+ import { InlineStack, Input } from "@soppiya/elementus";
3
+ const SingleLineTextMetaField_SingleLineTextMetaField = ({ entry, value, children, onChange })=>/*#__PURE__*/ jsxs(InlineStack, {
4
+ justifyContent: "space-between",
5
+ gapX: 70,
4
6
  children: [
5
- /*#__PURE__*/ jsx("div", {
6
- children: /*#__PURE__*/ jsx("div", {
7
- children: /*#__PURE__*/ jsx(Input, {
8
- size: "sm",
9
- value: value,
10
- onChange: (e)=>onChange(e.target.value)
11
- })
7
+ /*#__PURE__*/ jsx(InlineStack, {
8
+ stack: "full",
9
+ children: /*#__PURE__*/ jsx(Input, {
10
+ size: "sm",
11
+ value: value,
12
+ onChange: (e)=>onChange(e.target.value)
12
13
  })
13
14
  }),
14
15
  "multiple" === entry && children
@@ -0,0 +1 @@
1
+ export { default as MetaobjectEntriesPicker } from "./ui/MetaobjectEntriesPicker";
@@ -0,0 +1,2 @@
1
+ import MetaobjectEntriesPicker from "./ui/MetaobjectEntriesPicker.js";
2
+ export { MetaobjectEntriesPicker };
@@ -0,0 +1,10 @@
1
+ type Props = {
2
+ title?: string;
3
+ initialIds?: string[];
4
+ limit?: number;
5
+ metaobjects?: string[];
6
+ onClose?: () => void;
7
+ onOk?: (metaobjectEntries: string[]) => void;
8
+ };
9
+ declare const MetaobjectEntriesPicker: ({ title, initialIds, limit, metaobjects, onClose, onOk }: Props) => import("react/jsx-runtime").JSX.Element;
10
+ export default MetaobjectEntriesPicker;
@@ -6,7 +6,7 @@ import classnames from "classnames";
6
6
  import lodash from "lodash";
7
7
  import { useState } from "react";
8
8
  import { useMetaobjectEntries } from "../model/useMetaobjectEntries.js";
9
- const MetaobjectEntries_MetaobjectEntries = ({ title = "Metaobject entries", initialIds = [], limit = 1 / 0, metaobjects = [], onClose, onOk })=>{
9
+ const MetaobjectEntriesPicker = ({ title = "Metaobject entries", initialIds = [], limit = 1 / 0, metaobjects = [], onClose, onOk })=>{
10
10
  const [selectedMetaobjectEntries, setSelectedMetaobjectEntries] = useState(initialIds);
11
11
  const { query, debounceQuery, onChangeQuery } = useFilterQuery();
12
12
  const { metaobjectEntries, isLoadingMetaobjectEntries, fetchMoreMetaobjectEntries, pageInfo } = useMetaobjectEntries({
@@ -104,5 +104,5 @@ const MetaobjectEntries_MetaobjectEntries = ({ title = "Metaobject entries", ini
104
104
  })
105
105
  });
106
106
  };
107
- const MetaobjectEntries = MetaobjectEntries_MetaobjectEntries;
108
- export { MetaobjectEntries as default };
107
+ const ui_MetaobjectEntriesPicker = MetaobjectEntriesPicker;
108
+ export { ui_MetaobjectEntriesPicker as default };
@@ -6,7 +6,7 @@ declare const meta: {
6
6
  limit?: number;
7
7
  metaobjects?: string[];
8
8
  onClose?: () => void;
9
- onOk?: (linklist: string[]) => void;
9
+ onOk?: (metaobjectEntries: string[]) => void;
10
10
  }) => import("react/jsx-runtime").JSX.Element;
11
11
  };
12
12
  export default meta;
@@ -0,0 +1,10 @@
1
+ import MetaobjectEntriesPicker from "./MetaobjectEntriesPicker.js";
2
+ const meta = {
3
+ title: "Example/MetaobjectEntriesPicker",
4
+ component: MetaobjectEntriesPicker
5
+ };
6
+ const MetaobjectEntriesPicker_stories = meta;
7
+ const Default = {
8
+ args: {}
9
+ };
10
+ export { Default, MetaobjectEntriesPicker_stories as default };
@@ -0,0 +1,8 @@
1
+ export declare const metaobjectQuery: import("@graphql-typed-document-node/core").TypedDocumentNode<import("../../../shared/graphql/graphql").MetaobjectsQuery, import("../../../shared/graphql/graphql").Exact<{
2
+ filterKeys?: import("../../../shared/graphql/graphql").InputMaybe<import("../../../shared/graphql/graphql").MetaobjectFilterKeys>;
3
+ after?: import("../../../shared/graphql/graphql").InputMaybe<import("../../../shared/graphql/graphql").Scalars["ID"]["input"]>;
4
+ before?: import("../../../shared/graphql/graphql").InputMaybe<import("../../../shared/graphql/graphql").Scalars["ID"]["input"]>;
5
+ first?: import("../../../shared/graphql/graphql").InputMaybe<import("../../../shared/graphql/graphql").Scalars["Int"]["input"]>;
6
+ last?: import("../../../shared/graphql/graphql").InputMaybe<import("../../../shared/graphql/graphql").Scalars["Int"]["input"]>;
7
+ query?: import("../../../shared/graphql/graphql").InputMaybe<import("../../../shared/graphql/graphql").Scalars["String"]["input"]>;
8
+ }>>;
@@ -0,0 +1,18 @@
1
+ import { graphql } from "../../../shared/graphql/index.js";
2
+ const metaobjectQuery = graphql(`query Metaobjects($filterKeys: MetaobjectFilterKeys, $after: ID, $before: ID, $first: Int, $last: Int, $query: String) {
3
+ metaobjects(filterKeys: $filterKeys, after: $after, before: $before, first: $first, last: $last, query: $query) {
4
+ pageInfo {
5
+ endCursor
6
+ hasNextPage
7
+ hasPreviousPage
8
+ startCursor
9
+ }
10
+ edges {
11
+ node {
12
+ _id
13
+ name
14
+ }
15
+ }
16
+ }
17
+ }`);
18
+ export { metaobjectQuery };
@@ -0,0 +1 @@
1
+ export { default as MetaobjectsPicker } from "./ui/MetaobjectsPicker";
@@ -0,0 +1,2 @@
1
+ import MetaobjectsPicker from "./ui/MetaobjectsPicker.js";
2
+ export { MetaobjectsPicker };
@@ -0,0 +1,24 @@
1
+ import { MetaobjectFilterKeys } from "../../../shared/graphql/graphql";
2
+ type Props = {
3
+ skip?: boolean;
4
+ first?: number;
5
+ query?: string | null;
6
+ filterKeys?: MetaobjectFilterKeys;
7
+ };
8
+ export declare const useMetaobjects: (props?: Props) => {
9
+ metaobjects: {
10
+ __typename: "Metaobject";
11
+ _id?: string | null;
12
+ name?: string | null;
13
+ }[] | undefined;
14
+ isMetaobjectsLoading: boolean;
15
+ pageInfo: {
16
+ __typename: "PageInfo";
17
+ endCursor?: string | null;
18
+ hasNextPage?: boolean | null;
19
+ hasPreviousPage?: boolean | null;
20
+ startCursor?: string | null;
21
+ } | null | undefined;
22
+ fetchMoreMetaobjects: () => void;
23
+ };
24
+ export {};
@@ -0,0 +1,45 @@
1
+ import { useQuery } from "@apollo/client/react";
2
+ import { metaobjectQuery } from "../api/query.js";
3
+ const useMetaobjects = (props = {})=>{
4
+ const { skip, first, query, filterKeys } = props;
5
+ const { data, loading: isMetaobjectsLoading, error, fetchMore } = useQuery(metaobjectQuery, {
6
+ skip,
7
+ variables: {
8
+ first,
9
+ query,
10
+ filterKeys
11
+ }
12
+ });
13
+ const metaobjects = data?.metaobjects?.edges?.map((edge)=>edge?.node).filter((node)=>null != node);
14
+ const pageInfo = data?.metaobjects?.pageInfo;
15
+ const fetchMoreMetaobjects = ()=>{
16
+ if (!pageInfo?.hasNextPage) return;
17
+ fetchMore({
18
+ variables: {
19
+ first,
20
+ query,
21
+ filterKeys,
22
+ after: pageInfo.endCursor
23
+ },
24
+ updateQuery (prev, { fetchMoreResult }) {
25
+ if (!fetchMoreResult.metaobjects?.edges || !prev.metaobjects?.edges) return prev;
26
+ return {
27
+ metaobjects: {
28
+ ...fetchMoreResult.metaobjects,
29
+ edges: [
30
+ ...prev.metaobjects.edges,
31
+ ...fetchMoreResult.metaobjects.edges
32
+ ]
33
+ }
34
+ };
35
+ }
36
+ });
37
+ };
38
+ return {
39
+ metaobjects,
40
+ isMetaobjectsLoading,
41
+ pageInfo,
42
+ fetchMoreMetaobjects
43
+ };
44
+ };
45
+ export { useMetaobjects };
@@ -0,0 +1,9 @@
1
+ type Props = {
2
+ title?: string;
3
+ initialIds?: string[];
4
+ limit?: number;
5
+ onClose?: () => void;
6
+ onOk?: (metaobjectEntries: string[]) => void;
7
+ };
8
+ declare const MetaobjectsPicker: ({ title, initialIds, limit, onClose, onOk }: Props) => import("react/jsx-runtime").JSX.Element;
9
+ export default MetaobjectsPicker;
@@ -0,0 +1,104 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { InfinityScroll } from "../../infinity-scroll/index.js";
3
+ import { useFilterQuery } from "../../../shared/lib/index.js";
4
+ import { BlockStack, Box, Button, Checkbox, InlineStack, Input, Modal, Spinner, Text } from "@soppiya/elementus";
5
+ import classnames from "classnames";
6
+ import lodash from "lodash";
7
+ import { useState } from "react";
8
+ import { useMetaobjects } from "../model/useMetaobjects.js";
9
+ const MetaobjectsPicker = ({ title = "Metaobjects", initialIds = [], limit = 1 / 0, onClose, onOk })=>{
10
+ const [selectedMetaobject, setSelectedMetaobject] = useState(initialIds);
11
+ const { query, debounceQuery, onChangeQuery } = useFilterQuery();
12
+ const { metaobjects, isMetaobjectsLoading, fetchMoreMetaobjects, pageInfo } = useMetaobjects({
13
+ first: 20,
14
+ query: debounceQuery
15
+ });
16
+ const isReached = limit !== 1 / 0 && selectedMetaobject.length >= limit;
17
+ const isDisabled = limit !== 1 / 0 && selectedMetaobject.length > limit;
18
+ const handleSelectedMetaobject = (metaobjectId)=>{
19
+ if (selectedMetaobject?.includes(metaobjectId)) return void setSelectedMetaobject((prev)=>prev.filter((id)=>metaobjectId !== id));
20
+ if (isReached) return;
21
+ setSelectedMetaobject((prev)=>[
22
+ ...prev,
23
+ metaobjectId
24
+ ]);
25
+ };
26
+ const handleOk = ()=>{
27
+ if (lodash.isFunction(onOk)) onOk(selectedMetaobject);
28
+ };
29
+ const ButtonJSX = /*#__PURE__*/ jsx(InlineStack, {
30
+ justifyContent: "end",
31
+ children: /*#__PURE__*/ jsx(Button, {
32
+ disabled: lodash.isEmpty(selectedMetaobject) || isDisabled,
33
+ onClick: handleOk,
34
+ children: "Add"
35
+ })
36
+ });
37
+ return /*#__PURE__*/ jsx(Modal, {
38
+ open: true,
39
+ title: title,
40
+ buttons: ButtonJSX,
41
+ bodyPadding: 0,
42
+ onClose: onClose,
43
+ children: /*#__PURE__*/ jsxs(BlockStack, {
44
+ children: [
45
+ /*#__PURE__*/ jsx(Box, {
46
+ padding: 60,
47
+ children: /*#__PURE__*/ jsx(Input, {
48
+ size: "sm",
49
+ type: "search",
50
+ value: query ?? "",
51
+ onChange: (event)=>onChangeQuery(event.target.value)
52
+ })
53
+ }),
54
+ isMetaobjectsLoading ? /*#__PURE__*/ jsx(InlineStack, {
55
+ justifyContent: "center",
56
+ padding: 80,
57
+ children: /*#__PURE__*/ jsx(Spinner, {
58
+ size: "md"
59
+ })
60
+ }) : /*#__PURE__*/ jsxs(BlockStack, {
61
+ children: [
62
+ metaobjects?.map((metaobjects)=>/*#__PURE__*/ jsxs(InlineStack, {
63
+ stack: "full",
64
+ className: classnames('lg:cursor-pointer border-t border-t-[#ebebeb]!', {
65
+ 'bg-[#f1f1f1ab] cursor-default!': !selectedMetaobject.includes(metaobjects._id) && isReached
66
+ }),
67
+ gapX: 60,
68
+ padding: 60,
69
+ onClick: ()=>handleSelectedMetaobject(String(metaobjects._id)),
70
+ children: [
71
+ /*#__PURE__*/ jsx(InlineStack, {
72
+ alignItems: "center",
73
+ gapX: 60,
74
+ children: /*#__PURE__*/ jsx(Box, {
75
+ children: /*#__PURE__*/ jsx(Checkbox, {
76
+ disabled: !selectedMetaobject.includes(metaobjects._id) && isReached,
77
+ checked: selectedMetaobject.includes(String(metaobjects._id)),
78
+ onChange: ()=>{}
79
+ })
80
+ })
81
+ }),
82
+ /*#__PURE__*/ jsx(BlockStack, {
83
+ gapY: 30,
84
+ justifyContent: "center",
85
+ children: /*#__PURE__*/ jsx(Text, {
86
+ size: "sm",
87
+ color: "secondary",
88
+ truncate: "truncate-1",
89
+ children: metaobjects.name
90
+ })
91
+ })
92
+ ]
93
+ }, metaobjects._id)),
94
+ pageInfo?.hasNextPage && /*#__PURE__*/ jsx(InfinityScroll, {
95
+ onFetch: fetchMoreMetaobjects
96
+ })
97
+ ]
98
+ })
99
+ ]
100
+ })
101
+ });
102
+ };
103
+ const ui_MetaobjectsPicker = MetaobjectsPicker;
104
+ export { ui_MetaobjectsPicker as default };
@@ -0,0 +1,14 @@
1
+ declare const meta: {
2
+ title: string;
3
+ component: ({ title, initialIds, limit, onClose, onOk }: {
4
+ title?: string;
5
+ initialIds?: string[];
6
+ limit?: number;
7
+ onClose?: () => void;
8
+ onOk?: (metaobjectEntries: string[]) => void;
9
+ }) => import("react/jsx-runtime").JSX.Element;
10
+ };
11
+ export default meta;
12
+ export declare const Default: {
13
+ args: {};
14
+ };
@@ -0,0 +1,10 @@
1
+ import MetaobjectsPicker from "./MetaobjectsPicker.js";
2
+ const meta = {
3
+ title: "Example/MetaobjectsPicker",
4
+ component: MetaobjectsPicker
5
+ };
6
+ const MetaobjectsPicker_stories = meta;
7
+ const Default = {
8
+ args: {}
9
+ };
10
+ export { Default, MetaobjectsPicker_stories as default };
@@ -21,8 +21,9 @@ type Documents = {
21
21
  "\n query MediaUsage {\n mediaUsage\n }\n": typeof types.MediaUsageDocument;
22
22
  "\n mutation AddMedias($input: [Upload!]!) {\n addMedias(input: $input) {\n _id\n file_name\n url\n size\n }\n }\n": typeof types.AddMediasDocument;
23
23
  "\n mutation DeleteMedias($cursors: [ID!]!) {\n deleteMedias(cursors: $cursors) {\n message\n }\n }\n": typeof types.DeleteMediasDocument;
24
- "query Metafields($filterKeys: MetafieldFilterKeys, $first: Int) {\n metafields(filterKeys: $filterKeys, first: $first) {\n edges {\n node {\n _id\n entry\n name\n type\n }\n }\n }\n}": typeof types.MetafieldsDocument;
24
+ "query Metafields($filterKeys: MetafieldFilterKeys, $first: Int) {\n metafields(filterKeys: $filterKeys, first: $first) {\n edges {\n node {\n _id\n entry\n name\n type\n metaobject_reference {\n _id\n }\n }\n }\n }\n}": typeof types.MetafieldsDocument;
25
25
  "query MetaobjectEntries($after: ID, $before: ID, $first: Int, $last: Int, $query: String, $filterKeys: MetaobjectEntryFilterKeys) {\n metaobjectEntries(after: $after, before: $before, first: $first, last: $last, query: $query, filterKeys: $filterKeys) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n title\n }\n }\n }\n}": typeof types.MetaobjectEntriesDocument;
26
+ "query Metaobjects($filterKeys: MetaobjectFilterKeys, $after: ID, $before: ID, $first: Int, $last: Int, $query: String) {\n metaobjects(filterKeys: $filterKeys, after: $after, before: $before, first: $first, last: $last, query: $query) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n name\n }\n }\n }\n}": typeof types.MetaobjectsDocument;
26
27
  "query Pages($filterKeys: PageFilterKeys, $after: ID, $before: ID, $first: Int, $last: Int, $query: String) {\n pages(filterKeys: $filterKeys, after: $after, before: $before, first: $first, last: $last, query: $query) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n title\n image {\n _id\n url\n }\n }\n }\n }\n}": typeof types.PagesDocument;
27
28
  "\n query Products($after: ID, $before: ID, $first: Int, $last: Int, $query: String,$filterKeys: ProductFilterKeys) {\n products(after: $after, before: $before, first: $first, last: $last, query: $query,filterKeys: $filterKeys) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n title\n image {\n _id\n url\n }\n }\n }\n }\n }\n": typeof types.ProductsDocument;
28
29
  "\n query Variants($after: ID, $before: ID, $first: Int, $last: Int, $query: String,$filterKeys: VariantFilterKeys) {\n variants(after: $after, before: $before, first: $first, last: $last, query: $query,filterKeys: $filterKeys) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n option1\n option2\n option3\n image {\n _id\n url\n }\n product {\n _id\n title\n }\n }\n }\n }\n }\n": typeof types.VariantsDocument;
@@ -80,11 +81,15 @@ export declare function graphql(source: "\n mutation DeleteMedias($cursors: [ID
80
81
  /**
81
82
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
82
83
  */
83
- export declare function graphql(source: "query Metafields($filterKeys: MetafieldFilterKeys, $first: Int) {\n metafields(filterKeys: $filterKeys, first: $first) {\n edges {\n node {\n _id\n entry\n name\n type\n }\n }\n }\n}"): (typeof documents)["query Metafields($filterKeys: MetafieldFilterKeys, $first: Int) {\n metafields(filterKeys: $filterKeys, first: $first) {\n edges {\n node {\n _id\n entry\n name\n type\n }\n }\n }\n}"];
84
+ export declare function graphql(source: "query Metafields($filterKeys: MetafieldFilterKeys, $first: Int) {\n metafields(filterKeys: $filterKeys, first: $first) {\n edges {\n node {\n _id\n entry\n name\n type\n metaobject_reference {\n _id\n }\n }\n }\n }\n}"): (typeof documents)["query Metafields($filterKeys: MetafieldFilterKeys, $first: Int) {\n metafields(filterKeys: $filterKeys, first: $first) {\n edges {\n node {\n _id\n entry\n name\n type\n metaobject_reference {\n _id\n }\n }\n }\n }\n}"];
84
85
  /**
85
86
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
86
87
  */
87
88
  export declare function graphql(source: "query MetaobjectEntries($after: ID, $before: ID, $first: Int, $last: Int, $query: String, $filterKeys: MetaobjectEntryFilterKeys) {\n metaobjectEntries(after: $after, before: $before, first: $first, last: $last, query: $query, filterKeys: $filterKeys) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n title\n }\n }\n }\n}"): (typeof documents)["query MetaobjectEntries($after: ID, $before: ID, $first: Int, $last: Int, $query: String, $filterKeys: MetaobjectEntryFilterKeys) {\n metaobjectEntries(after: $after, before: $before, first: $first, last: $last, query: $query, filterKeys: $filterKeys) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n title\n }\n }\n }\n}"];
89
+ /**
90
+ * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
91
+ */
92
+ export declare function graphql(source: "query Metaobjects($filterKeys: MetaobjectFilterKeys, $after: ID, $before: ID, $first: Int, $last: Int, $query: String) {\n metaobjects(filterKeys: $filterKeys, after: $after, before: $before, first: $first, last: $last, query: $query) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n name\n }\n }\n }\n}"): (typeof documents)["query Metaobjects($filterKeys: MetaobjectFilterKeys, $after: ID, $before: ID, $first: Int, $last: Int, $query: String) {\n metaobjects(filterKeys: $filterKeys, after: $after, before: $before, first: $first, last: $last, query: $query) {\n pageInfo {\n endCursor\n hasNextPage\n hasPreviousPage\n startCursor\n }\n edges {\n node {\n _id\n name\n }\n }\n }\n}"];
88
93
  /**
89
94
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
90
95
  */