@swishapp/react 0.90.4 → 0.119.0-unstable.20260302112819

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.mts CHANGED
@@ -1,7 +1,7 @@
1
- import { ApiError, ApiResponse, CreateItemSuccessResponse, DeleteItemSuccessResponse, EditItemListsSuccessResponse, EditItemVariantSuccessResponse, EventName, Intent, IntentResponse, IntentToData, Item, PageInfo, PaginatedApiResponse, SwishApp, SwishOptions } from "@swishapp/sdk";
1
+ import * as _swishapp_sdk0 from "@swishapp/sdk";
2
+ import { ApiError, ApiResponse, EditItemListsSuccessResponse, EditItemVariantSuccessResponse, EventName, Intent, IntentResponse, IntentToData, Item, PageInfo, PaginatedApiResponse, SaveItemSuccessResponse, SwishApp, SwishOptions, UnsaveItemSuccessResponse } from "@swishapp/sdk";
2
3
  import { ReactNode } from "react";
3
4
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
- import * as _swishapp_api_client3 from "@swishapp/api-client";
5
5
  export * from "@swishapp/sdk";
6
6
 
7
7
  //#region src/types.d.ts
@@ -57,8 +57,8 @@ declare const useSwishIntent: <I extends Intent = Intent>(intent: I, ...args: In
57
57
  //#region src/hooks/use-swish-lists.d.ts
58
58
  declare const useSwishLists: () => {
59
59
  loading: boolean;
60
- lists: _swishapp_api_client3.ListDetail[] | null;
61
- error: _swishapp_api_client3.ApiError | null;
60
+ lists: _swishapp_sdk0.ListDetail[] | null;
61
+ error: _swishapp_sdk0.ApiError | null;
62
62
  reset: () => void;
63
63
  };
64
64
  //#endregion
@@ -73,8 +73,8 @@ declare const useSwishItems: ({
73
73
  }?: UseSwishItemsOptions) => {
74
74
  loading: boolean;
75
75
  data: Item[];
76
- pageInfo: _swishapp_api_client3.PageInfo | null;
77
- error: _swishapp_api_client3.ApiError | null;
76
+ pageInfo: _swishapp_sdk0.PageInfo | null;
77
+ error: _swishapp_sdk0.ApiError | null;
78
78
  reset: () => void;
79
79
  hasMore: boolean;
80
80
  loadMore: () => void;
@@ -85,8 +85,8 @@ interface UseSwishItemProps {
85
85
  productId: string | number;
86
86
  variantId?: string | number;
87
87
  itemId?: string;
88
- onSave?: (data: CreateItemSuccessResponse["data"]) => void;
89
- onUnsave?: (data: DeleteItemSuccessResponse["data"]) => void;
88
+ onSave?: (data: SaveItemSuccessResponse["data"]) => void;
89
+ onUnsave?: (data: UnsaveItemSuccessResponse["data"]) => void;
90
90
  onListsUpdate?: (data: EditItemListsSuccessResponse["data"]) => void;
91
91
  onVariantUpdate?: (data: EditItemVariantSuccessResponse["data"]) => void;
92
92
  }
@@ -101,7 +101,7 @@ declare const useSwishItem: ({
101
101
  }: UseSwishItemProps) => {
102
102
  saved: boolean;
103
103
  loading: boolean;
104
- error: _swishapp_api_client3.ApiError | null;
104
+ error: _swishapp_sdk0.ApiError | null;
105
105
  save: () => Promise<void>;
106
106
  unsave: () => Promise<void>;
107
107
  updateLists: () => Promise<void>;
@@ -113,7 +113,7 @@ declare const useSwishItem: ({
113
113
  declare const useSwishItemCount: () => {
114
114
  count: number;
115
115
  loading: boolean;
116
- error: _swishapp_api_client3.ApiError | null;
116
+ error: _swishapp_sdk0.ApiError | null;
117
117
  };
118
118
  //#endregion
119
119
  export { SwishContextValue, SwishProvider, type SwishProviderProps, useSwish, useSwishIntent, useSwishItem, useSwishItemCount, useSwishItems, useSwishLists, useSwishQuery };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/context.tsx","../src/hooks/use-swish.ts","../src/hooks/use-swish-query.ts","../src/hooks/use-swish-intent.ts","../src/hooks/use-swish-lists.ts","../src/hooks/use-swish-items.ts","../src/hooks/use-swish-item.ts","../src/hooks/use-swish-item-count.ts"],"sourcesContent":[],"mappings":";;;;;;;UAEiB,iBAAA;SACR;;SAEA;;;;UCSQ,kBAAA;YACL;WACD;;EDdM,CAAA;;iBCiBD,aAAA;;;;;;GAGb,qBAAkB,kBAAA,CAAA,GAAA,CAAA;;;iBClBL,QAAA,CAAA,GAAY;;;KCOhB,yCACH,6BACK,eACT,QAAQ;KAeR,YAAY;;IAA8B;cAElC,kCACO,mBAAmB,8CAG9B,QAAQ,WAAW;cAEZ;;EHnCC,OAAA,CAAA,EAAA,OAAA,GGqCO,SHrCU,EACzB;;;;ECWQ,KAAA,UAAA,GAAA,IAAkB;EAKnB,OAAA,EAAA,OAAa;EAC3B,KAAA,EAAA,GAAA,GAAA,IAAA;EACW,OAAA,EAAA,GAAA,GAAA,IAAA;EACV,UAAA,EAAA,OAAA;CAAkB;;;cGlBR,2BAA4B,SAAS,gBACxC,YACC,aAAa,sCAAsC,aAAa;gBAUpC,QAAQ,eAAe;;;;;cCTjD;;SAyBZ,qBAAA,CAAA,UAAA;SAAA,qBAAA,CAAA,QAAA;;AL9BD,CAAA;;;UMEiB,oBAAA;;;;cAKJ;;;IAGV;;;ENVc,QAAA,mCAGH,IAAA;;;;ECSG,QAAA,EAAA,GAAA,GAAA,IAAA;AAKjB,CAAA;;;UMRU,iBAAA;;;;kBAIQ;oBACE;yBACK;EPfR,eAAA,CAAA,EAAA,CAAA,IAAiB,EOgBP,8BPbb,CAAA,MAAA,CAAA,EAAA,GAAA,IAAA;;cOgBD;;;;;;;;GAQV;;ENfc,OAAA,EAAA,OAAA;EAKD,KAAA,EMUI,qBAAA,CAAA,QAAA,GNVS,IAAA;EAC3B,IAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EACW,MAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EACV,WAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EAAkB,aAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EAAA,MAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;;;;cOnBR;;;SAYZ,qBAAA,CAAA,QAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/context.tsx","../src/hooks/use-swish.ts","../src/hooks/use-swish-query.ts","../src/hooks/use-swish-intent.ts","../src/hooks/use-swish-lists.ts","../src/hooks/use-swish-items.ts","../src/hooks/use-swish-item.ts","../src/hooks/use-swish-item-count.ts"],"sourcesContent":[],"mappings":";;;;;;;UAEiB,iBAAA;SACR;;SAEA;;;;UCKQ,kBAAA;YACL;WACD;;EDVM,CAAA;;iBCaD,aAAA;;;;;;GAGb,qBAAkB,kBAAA,CAAA,GAAA,CAAA;;;iBCdL,QAAA,CAAA,GAAY;;;KCOhB,yCACH,6BACK,eACT,QAAQ;KAeR,YAAY;;;cAEJ,kCACO,mBAAmB,8CAG9B,QAAQ,WAAW;cAEZ;;EHnCC,OAAA,CAAA,EAAA,OAAA,GGqCO,SHrCU,EACzB;;;;ECOQ,KAAA,UAAA,GAAA,IAAkB;EAKnB,OAAA,EAAA,OAAa;EAC3B,KAAA,EAAA,GAAA,GAAA,IAAA;EACW,OAAA,EAAA,GAAA,GAAA,IAAA;EACV,UAAA,EAAA,OAAA;CAAkB;;;cGdR,2BAA4B,SAAS,gBACxC,YACC,aAAa,sCAAsC,aAAa;gBAUpC,QAAQ,eAAe;;;;;cCbjD;;SAyBZ,cAAA,CAAA,UAAA;SAAA,cAAA,CAAA,QAAA;;;;;UCxBgB,oBAAA;;;;cAKJ;;;IAGV;;;ENVc,QAAA,4BAGR,IAAK;;;;ECKG,QAAA,EAAA,GAAA,GAAA,IAAA;AAKjB,CAAA;;;UMJU,iBAAA;;;;kBAIQ;oBACE;yBACK;EPfR,eAAA,CAAA,EAAA,CAAA,IAAiB,EOgBP,8BPbb,CAAA,MAAA,CAAA,EAAA,GAAA,IAAA;;cOgBD;;;;;;;;GAQV;;ENnBc,OAAA,EAAA,OAAA;EAKD,KAAA,EMcI,cAAA,CAAA,QAAA,GNdS,IAAA;EAC3B,IAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EACW,MAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EACV,WAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EAAkB,aAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EAAA,MAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;;;;cOfR;;;SAYZ,cAAA,CAAA,QAAA"}
package/dist/index.mjs CHANGED
@@ -3,11 +3,7 @@ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, use
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
5
5
  //#region src/context.tsx
6
- const SwishContext = createContext({
7
- swish: null,
8
- isLoading: false,
9
- error: null
10
- });
6
+ const SwishContext = createContext(null);
11
7
  function SwishProvider({ children, options: { swishSdkUrl: swishSdkUrl$1 = swishSdkUrl, ...options } }) {
12
8
  const [swish, setSwish] = useState(null);
13
9
  const [isLoading, setIsLoading] = useState(typeof window !== "undefined");
@@ -54,7 +50,7 @@ function SwishProvider({ children, options: { swishSdkUrl: swishSdkUrl$1 = swish
54
50
  function useSwish() {
55
51
  const context = useContext(SwishContext);
56
52
  if (typeof window !== "undefined" && window.swish) return window.swish;
57
- if (!context) throw new Error("useSwishContext must be used within a SwishProvider");
53
+ if (!context) throw new Error("useSwish must be used within a SwishProvider");
58
54
  return context.swish;
59
55
  }
60
56
 
@@ -89,11 +85,10 @@ const useSwishQuery = (fetch, options) => {
89
85
  }, []);
90
86
  const deps = options?.variables ? Object.values(options.variables) : [];
91
87
  const skip = !!options?.skip;
92
- const refetchEvents = useMemo(() => {
93
- if (options?.refetch === true) return defaultRefetchEvents;
94
- if (Array.isArray(options?.refetch)) return [...options.refetch, tokenUpdateEvent];
95
- return [];
96
- }, [options?.refetch]);
88
+ const refetchEvents = options?.refetch === true ? defaultRefetchEvents : Array.isArray(options?.refetch) ? [...options.refetch, tokenUpdateEvent] : [];
89
+ const refetchEventsRef = useRef(refetchEvents);
90
+ refetchEventsRef.current = refetchEvents;
91
+ const refetchEventsKey = refetchEvents.join(",");
97
92
  const executeFetch = useCallback(() => {
98
93
  if (!swish || skip) return;
99
94
  setLoading(true);
@@ -116,11 +111,15 @@ const useSwishQuery = (fetch, options) => {
116
111
  useEffect(() => {
117
112
  if (!swish) return;
118
113
  executeFetch();
119
- const unsubscribe = swish.events.subscribe(refetchEvents, () => {
114
+ const unsubscribe = swish.events.subscribe(refetchEventsRef.current, () => {
120
115
  refetch();
121
116
  });
122
117
  return () => unsubscribe();
123
- }, [executeFetch, refetch]);
118
+ }, [
119
+ executeFetch,
120
+ refetch,
121
+ refetchEventsKey
122
+ ]);
124
123
  return useMemo(() => ({
125
124
  data,
126
125
  pageInfo,
@@ -153,9 +152,11 @@ const useSwishIntent = (intent, ...args) => {
153
152
  invoke: useCallback(async () => {
154
153
  if (!swish) throw new Error("Swish SDK not initialized");
155
154
  setPending(true);
156
- const response = await (await swish.intents.invoke(intent, ...dataRef.current)).complete;
157
- setPending(false);
158
- return response;
155
+ try {
156
+ return await (await swish.intents.invoke(intent, ...dataRef.current)).complete;
157
+ } finally {
158
+ setPending(false);
159
+ }
159
160
  }, [swish]),
160
161
  pending
161
162
  };
@@ -244,7 +245,7 @@ const useSwishItem = ({ productId, variantId, itemId, onSave, onUnsave, onListsU
244
245
  onSaveRef.current = onSave;
245
246
  onListsUpdateRef.current = onListsUpdate;
246
247
  onVariantUpdateRef.current = onVariantUpdate;
247
- const { invoke: saveItem, pending: creatingItem } = useSwishIntent("create:item", {
248
+ const { invoke: saveItem, pending: creatingItem } = useSwishIntent("save:item", {
248
249
  productId,
249
250
  variantId
250
251
  });
@@ -254,7 +255,7 @@ const useSwishItem = ({ productId, variantId, itemId, onSave, onUnsave, onListsU
254
255
  productId,
255
256
  variantId
256
257
  });
257
- const { invoke: unsaveItem } = useSwishIntent("delete:item", { itemId: savedItemId ?? "" });
258
+ const { invoke: unsaveItem } = useSwishIntent("unsave:item", { itemId: savedItemId ?? "" });
258
259
  const { data: savedItems, loading: savedItemsLoading, error: savedItemsError } = useSwishQuery((api, variables) => api.items.list(variables), {
259
260
  refetch: [
260
261
  "item-create",
@@ -289,7 +290,7 @@ const useSwishItem = ({ productId, variantId, itemId, onSave, onUnsave, onListsU
289
290
  const updateLists = useCallback(async () => {
290
291
  const response = await editItemLists();
291
292
  if (response.code !== "ok") return;
292
- if (response.intent === "delete:item") {
293
+ if (response.intent === "unsave:item") {
293
294
  const data = response.data;
294
295
  setSavedItemId(null);
295
296
  onUnsaveRef.current?.(data);
@@ -316,7 +317,11 @@ const useSwishItem = ({ productId, variantId, itemId, onSave, onUnsave, onListsU
316
317
  const toggle = useCallback(async () => {
317
318
  if (saved) await unsave();
318
319
  else await save();
319
- }, [saved, save]);
320
+ }, [
321
+ saved,
322
+ save,
323
+ unsave
324
+ ]);
320
325
  return useMemo(() => {
321
326
  return {
322
327
  saved,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["defaultSwishSdkUrl","swishSdkUrl","swish","value: SwishContextValue","defaultRefetchEvents: EventName[]","tokenUpdateEvent: EventName","error"],"sources":["../src/context.tsx","../src/hooks/use-swish.ts","../src/hooks/use-swish-query.ts","../src/hooks/use-swish-intent.ts","../src/hooks/use-swish-lists.ts","../src/hooks/use-swish-items.ts","../src/utils/shopify-utils.ts","../src/hooks/use-swish-item.ts","../src/hooks/use-swish-item-count.ts"],"sourcesContent":["import {\n type SwishApp,\n type SwishOptions,\n swishSdkUrl as defaultSwishSdkUrl,\n} from \"@swishapp/sdk\";\nimport { createContext, ReactNode, useEffect, useRef, useState } from \"react\";\nimport type { SwishContextValue } from \"./types\";\n\nexport const SwishContext = createContext<SwishContextValue>({\n swish: null,\n isLoading: false,\n error: null,\n});\n\nexport interface SwishProviderProps {\n children: ReactNode;\n options: SwishOptions & { swishSdkUrl?: string };\n}\n\nexport function SwishProvider({\n children,\n options: { swishSdkUrl = defaultSwishSdkUrl, ...options },\n}: SwishProviderProps) {\n const [swish, setSwish] = useState<SwishApp | null>(null);\n const [isLoading, setIsLoading] = useState(typeof window !== \"undefined\");\n const [error, setError] = useState<Error | null>(null);\n const optionsRef = useRef<SwishOptions>(options);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n let cancelled = false;\n\n const initializeSdk = async () => {\n try {\n setIsLoading(true);\n setError(null);\n\n const { createSwish } = await import(\n /* webpackIgnore: true */\n swishSdkUrl\n );\n const swish = await createSwish(optionsRef.current);\n\n if (!cancelled) {\n setSwish(swish);\n }\n } catch (err) {\n console.error(\"Failed to initialize Swish\", err);\n if (!cancelled) {\n setError(\n err instanceof Error ? err : new Error(\"Failed to initialize Swish\")\n );\n }\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n initializeSdk();\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n const value: SwishContextValue = {\n swish,\n isLoading,\n error,\n };\n\n return (\n <SwishContext.Provider value={value}>{children}</SwishContext.Provider>\n );\n}\n","import type { SwishApp } from \"@swishapp/sdk\";\nimport { useContext } from \"react\";\nimport { SwishContext } from \"../context\";\n\nexport function useSwish(): SwishApp | null {\n const context = useContext(SwishContext);\n\n if (typeof window !== \"undefined\" && window.swish) {\n return window.swish;\n }\n\n if (!context) {\n throw new Error(\"useSwishContext must be used within a SwishProvider\");\n }\n\n return context.swish;\n}\n","import type {\n SwishApp,\n ApiResponse,\n ApiError,\n PageInfo,\n EventName,\n PaginatedApiResponse,\n} from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSwish } from \"./use-swish\";\n\nexport type FetchFn<TResponse, TVariables> = (\n swish: SwishApp[\"api\"],\n variables?: TVariables\n) => Promise<TResponse>;\n\nconst defaultRefetchEvents: EventName[] = [\n \"item-create\",\n \"item-update\",\n \"item-delete\",\n \"item-lists-update\",\n \"list-create\",\n \"list-update\",\n \"list-delete\",\n \"token-update\",\n];\n\nconst tokenUpdateEvent: EventName = \"token-update\";\n\ntype DataOf<T> = T extends { data: infer D } ? D : never;\n\nexport const useSwishQuery = <\n TResponse extends ApiResponse<any> | PaginatedApiResponse<any>,\n TVariables\n>(\n fetch: FetchFn<TResponse, TVariables>,\n options?: {\n variables?: TVariables;\n skip?: boolean;\n refetch?: boolean | EventName[];\n }\n) => {\n const swish = useSwish();\n const fetchRef = useRef<FetchFn<TResponse, TVariables>>(fetch);\n\n const [data, setData] = useState<DataOf<TResponse> | null>(null);\n const [pageInfo, setPageInfo] = useState<PageInfo | null>(null);\n const [error, setError] = useState<ApiError | null>(null);\n const [loading, setLoading] = useState(!options?.skip);\n const [initialized, setInitialized] = useState(false);\n const refetching = loading && initialized;\n\n const reset = useCallback(() => {\n setData(null);\n setPageInfo(null);\n setError(null);\n setLoading(false);\n setInitialized(false);\n }, []);\n\n const deps = options?.variables ? Object.values(options.variables) : [];\n const skip = !!options?.skip;\n const refetchEvents = useMemo(() => {\n if (options?.refetch === true) {\n return defaultRefetchEvents;\n }\n\n if (Array.isArray(options?.refetch)) {\n return [...options.refetch, tokenUpdateEvent];\n }\n\n return [];\n }, [options?.refetch]);\n\n const executeFetch = useCallback(() => {\n if (!swish || skip) {\n return;\n }\n\n setLoading(true);\n\n fetchRef\n .current(swish.api, options?.variables)\n .then((response) => {\n setError(\"error\" in response ? response.error : null);\n setData(\"data\" in response ? response.data : null);\n setPageInfo(\"pageInfo\" in response ? response.pageInfo : null);\n })\n .catch((error) => setError(error))\n .finally(() => {\n setLoading(false);\n setInitialized(true);\n });\n }, [swish, skip, ...deps]);\n\n const refetch = useCallback(() => {\n executeFetch();\n }, [executeFetch]);\n\n useEffect(() => {\n if (!swish) {\n return;\n }\n\n executeFetch();\n\n const unsubscribe = swish.events.subscribe(refetchEvents, () => {\n refetch();\n });\n\n return () => unsubscribe();\n }, [executeFetch, refetch]);\n\n return useMemo(\n () => ({\n data,\n pageInfo,\n error,\n loading,\n reset,\n refetch,\n refetching,\n }),\n [data, pageInfo, error, loading, reset, refetch, refetching]\n );\n};\n","import type { Intent, IntentResponse, IntentToData } from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useSwish } from \"./use-swish\";\n\nexport const useSwishIntent = <I extends Intent = Intent>(\n intent: I,\n ...args: IntentToData<I> extends void ? [] | [undefined] : [IntentToData<I>]\n) => {\n const swish = useSwish();\n const [pending, setPending] = useState(false);\n const dataRef = useRef(args);\n\n useEffect(() => {\n dataRef.current = args;\n }, [args]);\n\n const invoke = useCallback(async (): Promise<IntentResponse<I>> => {\n if (!swish) {\n throw new Error(\"Swish SDK not initialized\");\n }\n\n setPending(true);\n const activity = await swish.intents.invoke(intent, ...dataRef.current);\n const response = await activity.complete;\n setPending(false);\n return response as IntentResponse<I>;\n }, [swish]);\n\n return { invoke, pending };\n};\n","import { useMemo } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport interface UseSwishListsOptions {\n limit?: number;\n}\n\nexport const useSwishLists = () => {\n const {\n data: lists,\n loading,\n error,\n reset,\n } = useSwishQuery((api) => api.lists.list(), {\n refetch: [\n \"item-lists-update\",\n \"item-delete\",\n \"list-create\",\n \"list-update\",\n \"list-delete\",\n ],\n });\n\n return useMemo(\n () => ({\n loading,\n lists,\n error,\n reset,\n }),\n [lists, loading, error, reset]\n );\n};\n","import type { Item } from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport interface UseSwishItemsOptions {\n listId?: string;\n limit?: number;\n}\n\nexport const useSwishItems = ({\n listId,\n limit = 24,\n}: UseSwishItemsOptions = {}) => {\n const [nextPage, setNextPage] = useState<string | null>(null);\n const [data, setData] = useState<Item[]>([]);\n\n const {\n data: remoteData,\n pageInfo,\n loading,\n error,\n reset: resetRemoteData,\n } = useSwishQuery((api, variables) => api.items.list(variables), {\n variables: {\n page: nextPage ?? undefined,\n limit,\n listId,\n },\n refetch: false,\n });\n\n const reset = useCallback(() => {\n setData([]);\n setNextPage(null);\n resetRemoteData();\n }, [resetRemoteData]);\n\n useEffect(() => {\n if (remoteData) {\n setData((prev) => [...prev, ...remoteData]);\n }\n }, [remoteData]);\n\n const loadMore = useCallback(() => {\n if (pageInfo?.next) {\n setNextPage(pageInfo.next);\n }\n }, [pageInfo?.next]);\n\n return useMemo(\n () => ({\n loading,\n data,\n pageInfo,\n error,\n reset,\n hasMore: !!pageInfo?.next,\n loadMore,\n }),\n [data, pageInfo, loading, error, reset, loadMore]\n );\n};\n","export const gidToId = (gid: string) => {\n return gid?.split(\"/\").pop();\n};\n\nexport const idToGid = (id: string | number, type: string) => {\n return `gid://shopify/${type}/${id}`;\n};\n","import type {\n CreateItemSuccessResponse,\n DeleteItemSuccessResponse,\n EditItemListsSuccessResponse,\n EditItemVariantSuccessResponse,\n} from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { gidToId } from \"../utils/shopify-utils\";\nimport { useSwishIntent } from \"./use-swish-intent\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\ninterface UseSwishItemProps {\n productId: string | number;\n variantId?: string | number;\n itemId?: string;\n onSave?: (data: CreateItemSuccessResponse[\"data\"]) => void;\n onUnsave?: (data: DeleteItemSuccessResponse[\"data\"]) => void;\n onListsUpdate?: (data: EditItemListsSuccessResponse[\"data\"]) => void;\n onVariantUpdate?: (data: EditItemVariantSuccessResponse[\"data\"]) => void;\n}\n\nexport const useSwishItem = ({\n productId,\n variantId,\n itemId,\n onSave,\n onUnsave,\n onListsUpdate,\n onVariantUpdate,\n}: UseSwishItemProps) => {\n const [savedItemId, setSavedItemId] = useState<string | null>(itemId ?? null);\n\n const onUnsaveRef =\n useRef<NonNullable<UseSwishItemProps[\"onUnsave\"]>>(onUnsave);\n const onSaveRef = useRef<NonNullable<UseSwishItemProps[\"onSave\"]>>(onSave);\n const onListsUpdateRef =\n useRef<NonNullable<UseSwishItemProps[\"onListsUpdate\"]>>(onListsUpdate);\n const onVariantUpdateRef =\n useRef<NonNullable<UseSwishItemProps[\"onVariantUpdate\"]>>(onVariantUpdate);\n\n onUnsaveRef.current = onUnsave;\n onSaveRef.current = onSave;\n onListsUpdateRef.current = onListsUpdate;\n onVariantUpdateRef.current = onVariantUpdate;\n\n const { invoke: saveItem, pending: creatingItem } = useSwishIntent(\n \"create:item\",\n {\n productId,\n variantId,\n }\n );\n\n const { invoke: editItemLists } = useSwishIntent(\"edit:item-lists\", {\n itemId: savedItemId ?? \"\",\n });\n\n const { invoke: editItemVariant } = useSwishIntent(\"edit:item-variant\", {\n itemId: savedItemId ?? \"\",\n productId,\n variantId,\n });\n\n const { invoke: unsaveItem } = useSwishIntent(\"delete:item\", {\n itemId: savedItemId ?? \"\",\n });\n\n const query = useMemo(() => {\n if (variantId) {\n return `variant:${gidToId(variantId.toString())}`;\n }\n return `product:${gidToId(productId.toString())}`;\n }, [productId, variantId]);\n\n // Load saved items for the product or variant\n const {\n data: savedItems,\n loading: savedItemsLoading,\n error: savedItemsError,\n } = useSwishQuery((api, variables) => api.items.list(variables), {\n refetch: [\"item-create\", \"item-update\", \"item-delete\"],\n variables: {\n limit: 1,\n query,\n },\n skip: Boolean(itemId) || !productId,\n });\n\n const saved = useMemo(() => Boolean(savedItemId), [savedItemId]);\n const error = useMemo(() => savedItemsError, [savedItemsError]);\n const loading = useMemo(\n () => savedItemsLoading || creatingItem,\n [savedItemsLoading, creatingItem]\n );\n\n useEffect(() => {\n if (itemId) return;\n\n if (savedItems?.[0]) {\n setSavedItemId(savedItems[0].id);\n } else {\n setSavedItemId(null);\n }\n }, [savedItems, itemId]);\n\n const unsave = useCallback(async () => {\n const response = await unsaveItem();\n\n if (response.code === \"ok\") {\n const data = response.data;\n setSavedItemId(null);\n onUnsaveRef.current?.(data);\n }\n }, [unsaveItem]);\n\n const updateLists = useCallback(async () => {\n const response = await editItemLists();\n if (response.code !== \"ok\") {\n return;\n }\n if (response.intent === \"delete:item\") {\n // Item was unsaved from list-select\n const data = response.data as DeleteItemSuccessResponse[\"data\"];\n setSavedItemId(null);\n onUnsaveRef.current?.(data);\n } else {\n const data = response.data as EditItemListsSuccessResponse[\"data\"];\n onListsUpdateRef.current?.(data);\n }\n }, [editItemLists]);\n\n const updateVariant = useCallback(async () => {\n const response = await editItemVariant();\n if (response.code === \"ok\") {\n const data = response.data;\n onVariantUpdateRef.current?.(data);\n }\n }, [editItemVariant]);\n\n const save = useCallback(async () => {\n const response = await saveItem();\n\n if (response.code === \"ok\") {\n const data = response.data;\n setSavedItemId(data.item.id);\n onSaveRef.current?.(data);\n }\n }, [saveItem]);\n\n const toggle = useCallback(async () => {\n if (saved) {\n await unsave();\n } else {\n await save();\n }\n }, [saved, save]);\n\n return useMemo(() => {\n return {\n saved,\n loading,\n error,\n save,\n unsave,\n updateLists,\n updateVariant,\n toggle,\n };\n }, [saved, loading, error, save, unsave, updateLists, updateVariant, toggle]);\n};\n","import { useMemo } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport const useSwishItemCount = () => {\n const { data, loading, error } = useSwishQuery((api) => api.items.count(), {\n refetch: [\"item-create\", \"item-delete\"],\n });\n\n return useMemo(() => {\n return {\n count: data?.count ?? 0,\n loading,\n error,\n };\n }, [data, loading, error]);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["defaultSwishSdkUrl","swishSdkUrl","swish","value: SwishContextValue","defaultRefetchEvents: EventName[]","tokenUpdateEvent: EventName","error"],"sources":["../src/context.tsx","../src/hooks/use-swish.ts","../src/hooks/use-swish-query.ts","../src/hooks/use-swish-intent.ts","../src/hooks/use-swish-lists.ts","../src/hooks/use-swish-items.ts","../src/utils/shopify-utils.ts","../src/hooks/use-swish-item.ts","../src/hooks/use-swish-item-count.ts"],"sourcesContent":["import {\n type SwishApp,\n type SwishOptions,\n swishSdkUrl as defaultSwishSdkUrl,\n} from \"@swishapp/sdk\";\nimport { createContext, ReactNode, useEffect, useRef, useState } from \"react\";\nimport type { SwishContextValue } from \"./types\";\n\nexport const SwishContext = createContext<SwishContextValue | null>(null);\n\nexport interface SwishProviderProps {\n children: ReactNode;\n options: SwishOptions & { swishSdkUrl?: string };\n}\n\nexport function SwishProvider({\n children,\n options: { swishSdkUrl = defaultSwishSdkUrl, ...options },\n}: SwishProviderProps) {\n const [swish, setSwish] = useState<SwishApp | null>(null);\n const [isLoading, setIsLoading] = useState(typeof window !== \"undefined\");\n const [error, setError] = useState<Error | null>(null);\n const optionsRef = useRef<SwishOptions>(options);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n let cancelled = false;\n\n const initializeSdk = async () => {\n try {\n setIsLoading(true);\n setError(null);\n\n const { createSwish } = await import(\n /* webpackIgnore: true */\n swishSdkUrl\n );\n const swish = await createSwish(optionsRef.current);\n\n if (!cancelled) {\n setSwish(swish);\n }\n } catch (err) {\n console.error(\"Failed to initialize Swish\", err);\n if (!cancelled) {\n setError(\n err instanceof Error ? err : new Error(\"Failed to initialize Swish\")\n );\n }\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n initializeSdk();\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n const value: SwishContextValue = {\n swish,\n isLoading,\n error,\n };\n\n return (\n <SwishContext.Provider value={value}>{children}</SwishContext.Provider>\n );\n}\n","import type { SwishApp } from \"@swishapp/sdk\";\nimport { useContext } from \"react\";\nimport { SwishContext } from \"../context\";\n\nexport function useSwish(): SwishApp | null {\n const context = useContext(SwishContext);\n\n if (typeof window !== \"undefined\" && window.swish) {\n return window.swish;\n }\n\n if (!context) {\n throw new Error(\"useSwish must be used within a SwishProvider\");\n }\n\n return context.swish;\n}\n","import type {\n SwishApp,\n ApiResponse,\n ApiError,\n PageInfo,\n EventName,\n PaginatedApiResponse,\n} from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSwish } from \"./use-swish\";\n\nexport type FetchFn<TResponse, TVariables> = (\n swish: SwishApp[\"api\"],\n variables?: TVariables\n) => Promise<TResponse>;\n\nconst defaultRefetchEvents: EventName[] = [\n \"item-create\",\n \"item-update\",\n \"item-delete\",\n \"item-lists-update\",\n \"list-create\",\n \"list-update\",\n \"list-delete\",\n \"token-update\",\n];\n\nconst tokenUpdateEvent: EventName = \"token-update\";\n\ntype DataOf<T> = T extends { data: infer D } ? D : never;\n\nexport const useSwishQuery = <\n TResponse extends ApiResponse<any> | PaginatedApiResponse<any>,\n TVariables\n>(\n fetch: FetchFn<TResponse, TVariables>,\n options?: {\n variables?: TVariables;\n skip?: boolean;\n refetch?: boolean | EventName[];\n }\n) => {\n const swish = useSwish();\n const fetchRef = useRef<FetchFn<TResponse, TVariables>>(fetch);\n\n const [data, setData] = useState<DataOf<TResponse> | null>(null);\n const [pageInfo, setPageInfo] = useState<PageInfo | null>(null);\n const [error, setError] = useState<ApiError | null>(null);\n const [loading, setLoading] = useState(!options?.skip);\n const [initialized, setInitialized] = useState(false);\n const refetching = loading && initialized;\n\n const reset = useCallback(() => {\n setData(null);\n setPageInfo(null);\n setError(null);\n setLoading(false);\n setInitialized(false);\n }, []);\n\n const deps = options?.variables ? Object.values(options.variables) : [];\n const skip = !!options?.skip;\n const refetchEvents = options?.refetch === true\n ? defaultRefetchEvents\n : Array.isArray(options?.refetch)\n ? [...options.refetch, tokenUpdateEvent]\n : [];\n\n const refetchEventsRef = useRef(refetchEvents);\n refetchEventsRef.current = refetchEvents;\n\n // Stable string key so the effect re-subscribes only when events actually change\n const refetchEventsKey = refetchEvents.join(\",\");\n\n const executeFetch = useCallback(() => {\n if (!swish || skip) {\n return;\n }\n\n setLoading(true);\n\n fetchRef\n .current(swish.api, options?.variables)\n .then((response) => {\n setError(\"error\" in response ? response.error : null);\n setData(\"data\" in response ? response.data : null);\n setPageInfo(\"pageInfo\" in response ? response.pageInfo : null);\n })\n .catch((error) => setError(error))\n .finally(() => {\n setLoading(false);\n setInitialized(true);\n });\n }, [swish, skip, ...deps]);\n\n const refetch = useCallback(() => {\n executeFetch();\n }, [executeFetch]);\n\n useEffect(() => {\n if (!swish) {\n return;\n }\n\n executeFetch();\n\n const unsubscribe = swish.events.subscribe(refetchEventsRef.current, () => {\n refetch();\n });\n\n return () => unsubscribe();\n }, [executeFetch, refetch, refetchEventsKey]);\n\n return useMemo(\n () => ({\n data,\n pageInfo,\n error,\n loading,\n reset,\n refetch,\n refetching,\n }),\n [data, pageInfo, error, loading, reset, refetch, refetching]\n );\n};\n","import type { Intent, IntentResponse, IntentToData } from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useSwish } from \"./use-swish\";\n\nexport const useSwishIntent = <I extends Intent = Intent>(\n intent: I,\n ...args: IntentToData<I> extends void ? [] | [undefined] : [IntentToData<I>]\n) => {\n const swish = useSwish();\n const [pending, setPending] = useState(false);\n const dataRef = useRef(args);\n\n useEffect(() => {\n dataRef.current = args;\n }, [args]);\n\n const invoke = useCallback(async (): Promise<IntentResponse<I>> => {\n if (!swish) {\n throw new Error(\"Swish SDK not initialized\");\n }\n\n setPending(true);\n try {\n const activity = await swish.intents.invoke(intent, ...dataRef.current);\n const response = await activity.complete;\n return response as IntentResponse<I>;\n } finally {\n setPending(false);\n }\n }, [swish]);\n\n return { invoke, pending };\n};\n","import { useMemo } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport const useSwishLists = () => {\n const {\n data: lists,\n loading,\n error,\n reset,\n } = useSwishQuery((api) => api.lists.list(), {\n refetch: [\n \"item-lists-update\",\n \"item-delete\",\n \"list-create\",\n \"list-update\",\n \"list-delete\",\n ],\n });\n\n return useMemo(\n () => ({\n loading,\n lists,\n error,\n reset,\n }),\n [lists, loading, error, reset]\n );\n};\n","import type { Item } from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport interface UseSwishItemsOptions {\n listId?: string;\n limit?: number;\n}\n\nexport const useSwishItems = ({\n listId,\n limit = 24,\n}: UseSwishItemsOptions = {}) => {\n const [nextPage, setNextPage] = useState<string | null>(null);\n const [data, setData] = useState<Item[]>([]);\n\n const {\n data: remoteData,\n pageInfo,\n loading,\n error,\n reset: resetRemoteData,\n } = useSwishQuery((api, variables) => api.items.list(variables), {\n variables: {\n page: nextPage ?? undefined,\n limit,\n listId,\n },\n refetch: false,\n });\n\n const reset = useCallback(() => {\n setData([]);\n setNextPage(null);\n resetRemoteData();\n }, [resetRemoteData]);\n\n useEffect(() => {\n if (remoteData) {\n setData((prev) => [...prev, ...remoteData]);\n }\n }, [remoteData]);\n\n const loadMore = useCallback(() => {\n if (pageInfo?.next) {\n setNextPage(pageInfo.next);\n }\n }, [pageInfo?.next]);\n\n return useMemo(\n () => ({\n loading,\n data,\n pageInfo,\n error,\n reset,\n hasMore: !!pageInfo?.next,\n loadMore,\n }),\n [data, pageInfo, loading, error, reset, loadMore]\n );\n};\n","export const gidToId = (gid: string) => {\n return gid?.split(\"/\").pop();\n};\n","import type {\n SaveItemSuccessResponse,\n UnsaveItemSuccessResponse,\n EditItemListsSuccessResponse,\n EditItemVariantSuccessResponse,\n} from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { gidToId } from \"../utils/shopify-utils\";\nimport { useSwishIntent } from \"./use-swish-intent\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\ninterface UseSwishItemProps {\n productId: string | number;\n variantId?: string | number;\n itemId?: string;\n onSave?: (data: SaveItemSuccessResponse[\"data\"]) => void;\n onUnsave?: (data: UnsaveItemSuccessResponse[\"data\"]) => void;\n onListsUpdate?: (data: EditItemListsSuccessResponse[\"data\"]) => void;\n onVariantUpdate?: (data: EditItemVariantSuccessResponse[\"data\"]) => void;\n}\n\nexport const useSwishItem = ({\n productId,\n variantId,\n itemId,\n onSave,\n onUnsave,\n onListsUpdate,\n onVariantUpdate,\n}: UseSwishItemProps) => {\n const [savedItemId, setSavedItemId] = useState<string | null>(itemId ?? null);\n\n const onUnsaveRef =\n useRef<NonNullable<UseSwishItemProps[\"onUnsave\"]>>(onUnsave);\n const onSaveRef = useRef<NonNullable<UseSwishItemProps[\"onSave\"]>>(onSave);\n const onListsUpdateRef =\n useRef<NonNullable<UseSwishItemProps[\"onListsUpdate\"]>>(onListsUpdate);\n const onVariantUpdateRef =\n useRef<NonNullable<UseSwishItemProps[\"onVariantUpdate\"]>>(onVariantUpdate);\n\n onUnsaveRef.current = onUnsave;\n onSaveRef.current = onSave;\n onListsUpdateRef.current = onListsUpdate;\n onVariantUpdateRef.current = onVariantUpdate;\n\n const { invoke: saveItem, pending: creatingItem } = useSwishIntent(\n \"save:item\",\n {\n productId,\n variantId,\n }\n );\n\n const { invoke: editItemLists } = useSwishIntent(\"edit:item-lists\", {\n itemId: savedItemId ?? \"\",\n });\n\n const { invoke: editItemVariant } = useSwishIntent(\"edit:item-variant\", {\n itemId: savedItemId ?? \"\",\n productId,\n variantId,\n });\n\n const { invoke: unsaveItem } = useSwishIntent(\"unsave:item\", {\n itemId: savedItemId ?? \"\",\n });\n\n const query = useMemo(() => {\n if (variantId) {\n return `variant:${gidToId(variantId.toString())}`;\n }\n return `product:${gidToId(productId.toString())}`;\n }, [productId, variantId]);\n\n // Load saved items for the product or variant\n const {\n data: savedItems,\n loading: savedItemsLoading,\n error: savedItemsError,\n } = useSwishQuery((api, variables) => api.items.list(variables), {\n refetch: [\"item-create\", \"item-update\", \"item-delete\"],\n variables: {\n limit: 1,\n query,\n },\n skip: Boolean(itemId) || !productId,\n });\n\n const saved = useMemo(() => Boolean(savedItemId), [savedItemId]);\n const error = useMemo(() => savedItemsError, [savedItemsError]);\n const loading = useMemo(\n () => savedItemsLoading || creatingItem,\n [savedItemsLoading, creatingItem]\n );\n\n useEffect(() => {\n if (itemId) return;\n\n if (savedItems?.[0]) {\n setSavedItemId(savedItems[0].id);\n } else {\n setSavedItemId(null);\n }\n }, [savedItems, itemId]);\n\n const unsave = useCallback(async () => {\n const response = await unsaveItem();\n\n if (response.code === \"ok\") {\n const data = response.data;\n setSavedItemId(null);\n onUnsaveRef.current?.(data);\n }\n }, [unsaveItem]);\n\n const updateLists = useCallback(async () => {\n const response = await editItemLists();\n if (response.code !== \"ok\") {\n return;\n }\n if (response.intent === \"unsave:item\") {\n // Item was unsaved from list-select\n const data = response.data as UnsaveItemSuccessResponse[\"data\"];\n setSavedItemId(null);\n onUnsaveRef.current?.(data);\n } else {\n const data = response.data as EditItemListsSuccessResponse[\"data\"];\n onListsUpdateRef.current?.(data);\n }\n }, [editItemLists]);\n\n const updateVariant = useCallback(async () => {\n const response = await editItemVariant();\n if (response.code === \"ok\") {\n const data = response.data;\n onVariantUpdateRef.current?.(data);\n }\n }, [editItemVariant]);\n\n const save = useCallback(async () => {\n const response = await saveItem();\n\n if (response.code === \"ok\") {\n const data = response.data;\n setSavedItemId(data.item.id);\n onSaveRef.current?.(data);\n }\n }, [saveItem]);\n\n const toggle = useCallback(async () => {\n if (saved) {\n await unsave();\n } else {\n await save();\n }\n }, [saved, save, unsave]);\n\n return useMemo(() => {\n return {\n saved,\n loading,\n error,\n save,\n unsave,\n updateLists,\n updateVariant,\n toggle,\n };\n }, [saved, loading, error, save, unsave, updateLists, updateVariant, toggle]);\n};\n","import { useMemo } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport const useSwishItemCount = () => {\n const { data, loading, error } = useSwishQuery((api) => api.items.count(), {\n refetch: [\"item-create\", \"item-delete\"],\n });\n\n return useMemo(() => {\n return {\n count: data?.count ?? 0,\n loading,\n error,\n };\n }, [data, loading, error]);\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,39 +1,17 @@
1
1
  {
2
2
  "name": "@swishapp/react",
3
- "version": "0.90.4",
3
+ "version": "0.119.0-unstable.20260302112819",
4
+ "description": "React bindings for Swish SDK",
5
+ "author": "Swish",
6
+ "license": "UNLICENSED",
7
+ "homepage": "https://developers.swish.app/libraries/react",
8
+ "type": "module",
4
9
  "publishConfig": {
5
10
  "access": "public"
6
11
  },
7
- "description": "React bindings for Swish SDK",
8
- "main": "./dist/index.js",
9
- "module": "./dist/index.mjs",
10
- "types": "./dist/index.d.ts",
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.mjs",
15
- "require": "./dist/index.js"
16
- }
17
- },
18
- "files": [
19
- "dist"
20
- ],
21
- "scripts": {
22
- "build": "tsdown",
23
- "dev": "tsdown --watch",
24
- "type-check": "tsc --noEmit",
25
- "lint": "eslint src --ext .ts,.tsx",
26
- "prepublishOnly": "npm run build"
12
+ "dependencies": {
13
+ "@swishapp/sdk": "0.119.0-unstable.20260302112819"
27
14
  },
28
- "keywords": [
29
- "react",
30
- "preact",
31
- "swish",
32
- "sdk",
33
- "typescript"
34
- ],
35
- "author": "Swish",
36
- "license": "UNLICENSED",
37
15
  "peerDependencies": {
38
16
  "react": ">=16.8.0 || >=17.0.0 || >=18.0.0",
39
17
  "react-dom": ">=16.8.0 || >=17.0.0 || >=18.0.0"
@@ -43,25 +21,48 @@
43
21
  "optional": true
44
22
  }
45
23
  },
46
- "dependencies": {
47
- "@swishapp/sdk": "^0.90.2"
48
- },
49
24
  "devDependencies": {
50
25
  "@types/react": "^19.2.6",
51
26
  "@types/react-dom": "^19.2.3",
52
- "@typescript-eslint/eslint-plugin": "^8.47.0",
53
- "@typescript-eslint/parser": "^8.47.0",
54
- "eslint": "^9.39.1",
55
- "eslint-plugin-react": "^7.37.5",
56
- "eslint-plugin-react-hooks": "^7.0.1",
57
- "preact": "^10.27.2",
58
27
  "react": "^19.2.0",
59
28
  "react-dom": "^19.2.0",
29
+ "rimraf": "^6.1.2",
60
30
  "tsdown": "^0.16.6",
61
31
  "typescript": "^5.9.3"
62
32
  },
63
- "repository": {
64
- "type": "git",
65
- "url": "https://github.com/yourusername/swish-react.git"
33
+ "main": "./dist/index.mjs",
34
+ "module": "./dist/index.mjs",
35
+ "types": "./dist/index.d.mts",
36
+ "exports": {
37
+ ".": {
38
+ "module": {
39
+ "types": "./dist/index.d.mts",
40
+ "default": "./dist/index.mjs"
41
+ },
42
+ "import": {
43
+ "types": "./dist/index.d.mts",
44
+ "default": "./dist/index.mjs"
45
+ },
46
+ "default": "./dist/index.mjs"
47
+ }
48
+ },
49
+ "files": [
50
+ "dist/**/*.*",
51
+ "README.md"
52
+ ],
53
+ "keywords": [
54
+ "react",
55
+ "swish",
56
+ "sdk",
57
+ "shopify",
58
+ "wishlist",
59
+ "typescript"
60
+ ],
61
+ "scripts": {
62
+ "build": "tsdown",
63
+ "dev": "tsdown --watch",
64
+ "clean": "rimraf dist",
65
+ "type-check": "tsc --noEmit",
66
+ "test": "echo \"No test specified\""
66
67
  }
67
- }
68
+ }
package/README.md DELETED
@@ -1,64 +0,0 @@
1
- # Swish React
2
-
3
- Lightweight React/Preact bindings for the Swish SDK.
4
- Use Swish’s features directly in your React app with simple hooks and a provider-based setup.
5
-
6
- ## Installation
7
-
8
- ```bash
9
- npm install @swishapp/react
10
- # or
11
- yarn add @swishapp/react
12
- # or
13
- pnpm add @swishapp/react
14
- ```
15
-
16
- ## Quick Start
17
-
18
- ### 1. Wrap your app with SwishProvider
19
-
20
- ```tsx
21
- import { SwishProvider } from "@swishapp/react";
22
-
23
- const config = {
24
- // your Swish SDK config
25
- };
26
-
27
- function App() {
28
- return (
29
- <SwishProvider config={config}>
30
- <YourApp />
31
- </SwishProvider>
32
- );
33
- }
34
- ```
35
-
36
- ### 2. Use Swish hooks in your components
37
-
38
- ```tsx
39
- import { useSwishItem } from "@swishapp/react";
40
-
41
- interface SaveButtonProps {
42
- productId: string;
43
- variantId?: string;
44
- }
45
-
46
- export function SaveButton({ productId, variantId }: SaveButtonProps) {
47
- const { saved, toggle, loading } = useSwishItem({
48
- productId,
49
- variantId,
50
- });
51
-
52
- return (
53
- <button type="button" onClick={toggle} disabled={loading}>
54
- {saved ? "Saved" : "Save"}
55
- </button>
56
- );
57
- }
58
- ```
59
-
60
- ## Documentation
61
-
62
- Full documentation, examples, and API reference are available at:
63
-
64
- 👉 https://swish.app/docs/react
package/dist/index.cjs DELETED
@@ -1,369 +0,0 @@
1
- let __swishapp_sdk = require("@swishapp/sdk");
2
- let react = require("react");
3
- let react_jsx_runtime = require("react/jsx-runtime");
4
-
5
- //#region src/context.tsx
6
- const SwishContext = (0, react.createContext)({
7
- swish: null,
8
- isLoading: false,
9
- error: null
10
- });
11
- function SwishProvider({ children, options: { swishSdkUrl = __swishapp_sdk.swishSdkUrl, ...options } }) {
12
- const [swish, setSwish] = (0, react.useState)(null);
13
- const [isLoading, setIsLoading] = (0, react.useState)(typeof window !== "undefined");
14
- const [error, setError] = (0, react.useState)(null);
15
- const optionsRef = (0, react.useRef)(options);
16
- (0, react.useEffect)(() => {
17
- if (typeof window === "undefined") return;
18
- let cancelled = false;
19
- const initializeSdk = async () => {
20
- try {
21
- setIsLoading(true);
22
- setError(null);
23
- const { createSwish } = await import(
24
- /* webpackIgnore: true */
25
- swishSdkUrl
26
- );
27
- const swish$1 = await createSwish(optionsRef.current);
28
- if (!cancelled) setSwish(swish$1);
29
- } catch (err) {
30
- console.error("Failed to initialize Swish", err);
31
- if (!cancelled) setError(err instanceof Error ? err : /* @__PURE__ */ new Error("Failed to initialize Swish"));
32
- } finally {
33
- if (!cancelled) setIsLoading(false);
34
- }
35
- };
36
- initializeSdk();
37
- return () => {
38
- cancelled = true;
39
- };
40
- }, []);
41
- const value = {
42
- swish,
43
- isLoading,
44
- error
45
- };
46
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SwishContext.Provider, {
47
- value,
48
- children
49
- });
50
- }
51
-
52
- //#endregion
53
- //#region src/hooks/use-swish.ts
54
- function useSwish() {
55
- const context = (0, react.useContext)(SwishContext);
56
- if (typeof window !== "undefined" && window.swish) return window.swish;
57
- if (!context) throw new Error("useSwishContext must be used within a SwishProvider");
58
- return context.swish;
59
- }
60
-
61
- //#endregion
62
- //#region src/hooks/use-swish-query.ts
63
- const defaultRefetchEvents = [
64
- "item-create",
65
- "item-update",
66
- "item-delete",
67
- "item-lists-update",
68
- "list-create",
69
- "list-update",
70
- "list-delete",
71
- "token-update"
72
- ];
73
- const tokenUpdateEvent = "token-update";
74
- const useSwishQuery = (fetch, options) => {
75
- const swish = useSwish();
76
- const fetchRef = (0, react.useRef)(fetch);
77
- const [data, setData] = (0, react.useState)(null);
78
- const [pageInfo, setPageInfo] = (0, react.useState)(null);
79
- const [error, setError] = (0, react.useState)(null);
80
- const [loading, setLoading] = (0, react.useState)(!options?.skip);
81
- const [initialized, setInitialized] = (0, react.useState)(false);
82
- const refetching = loading && initialized;
83
- const reset = (0, react.useCallback)(() => {
84
- setData(null);
85
- setPageInfo(null);
86
- setError(null);
87
- setLoading(false);
88
- setInitialized(false);
89
- }, []);
90
- const deps = options?.variables ? Object.values(options.variables) : [];
91
- const skip = !!options?.skip;
92
- const refetchEvents = (0, react.useMemo)(() => {
93
- if (options?.refetch === true) return defaultRefetchEvents;
94
- if (Array.isArray(options?.refetch)) return [...options.refetch, tokenUpdateEvent];
95
- return [];
96
- }, [options?.refetch]);
97
- const executeFetch = (0, react.useCallback)(() => {
98
- if (!swish || skip) return;
99
- setLoading(true);
100
- fetchRef.current(swish.api, options?.variables).then((response) => {
101
- setError("error" in response ? response.error : null);
102
- setData("data" in response ? response.data : null);
103
- setPageInfo("pageInfo" in response ? response.pageInfo : null);
104
- }).catch((error$1) => setError(error$1)).finally(() => {
105
- setLoading(false);
106
- setInitialized(true);
107
- });
108
- }, [
109
- swish,
110
- skip,
111
- ...deps
112
- ]);
113
- const refetch = (0, react.useCallback)(() => {
114
- executeFetch();
115
- }, [executeFetch]);
116
- (0, react.useEffect)(() => {
117
- if (!swish) return;
118
- executeFetch();
119
- const unsubscribe = swish.events.subscribe(refetchEvents, () => {
120
- refetch();
121
- });
122
- return () => unsubscribe();
123
- }, [executeFetch, refetch]);
124
- return (0, react.useMemo)(() => ({
125
- data,
126
- pageInfo,
127
- error,
128
- loading,
129
- reset,
130
- refetch,
131
- refetching
132
- }), [
133
- data,
134
- pageInfo,
135
- error,
136
- loading,
137
- reset,
138
- refetch,
139
- refetching
140
- ]);
141
- };
142
-
143
- //#endregion
144
- //#region src/hooks/use-swish-intent.ts
145
- const useSwishIntent = (intent, ...args) => {
146
- const swish = useSwish();
147
- const [pending, setPending] = (0, react.useState)(false);
148
- const dataRef = (0, react.useRef)(args);
149
- (0, react.useEffect)(() => {
150
- dataRef.current = args;
151
- }, [args]);
152
- return {
153
- invoke: (0, react.useCallback)(async () => {
154
- if (!swish) throw new Error("Swish SDK not initialized");
155
- setPending(true);
156
- const response = await (await swish.intents.invoke(intent, ...dataRef.current)).complete;
157
- setPending(false);
158
- return response;
159
- }, [swish]),
160
- pending
161
- };
162
- };
163
-
164
- //#endregion
165
- //#region src/hooks/use-swish-lists.ts
166
- const useSwishLists = () => {
167
- const { data: lists, loading, error, reset } = useSwishQuery((api) => api.lists.list(), { refetch: [
168
- "item-lists-update",
169
- "item-delete",
170
- "list-create",
171
- "list-update",
172
- "list-delete"
173
- ] });
174
- return (0, react.useMemo)(() => ({
175
- loading,
176
- lists,
177
- error,
178
- reset
179
- }), [
180
- lists,
181
- loading,
182
- error,
183
- reset
184
- ]);
185
- };
186
-
187
- //#endregion
188
- //#region src/hooks/use-swish-items.ts
189
- const useSwishItems = ({ listId, limit = 24 } = {}) => {
190
- const [nextPage, setNextPage] = (0, react.useState)(null);
191
- const [data, setData] = (0, react.useState)([]);
192
- const { data: remoteData, pageInfo, loading, error, reset: resetRemoteData } = useSwishQuery((api, variables) => api.items.list(variables), {
193
- variables: {
194
- page: nextPage ?? void 0,
195
- limit,
196
- listId
197
- },
198
- refetch: false
199
- });
200
- const reset = (0, react.useCallback)(() => {
201
- setData([]);
202
- setNextPage(null);
203
- resetRemoteData();
204
- }, [resetRemoteData]);
205
- (0, react.useEffect)(() => {
206
- if (remoteData) setData((prev) => [...prev, ...remoteData]);
207
- }, [remoteData]);
208
- const loadMore = (0, react.useCallback)(() => {
209
- if (pageInfo?.next) setNextPage(pageInfo.next);
210
- }, [pageInfo?.next]);
211
- return (0, react.useMemo)(() => ({
212
- loading,
213
- data,
214
- pageInfo,
215
- error,
216
- reset,
217
- hasMore: !!pageInfo?.next,
218
- loadMore
219
- }), [
220
- data,
221
- pageInfo,
222
- loading,
223
- error,
224
- reset,
225
- loadMore
226
- ]);
227
- };
228
-
229
- //#endregion
230
- //#region src/utils/shopify-utils.ts
231
- const gidToId = (gid) => {
232
- return gid?.split("/").pop();
233
- };
234
-
235
- //#endregion
236
- //#region src/hooks/use-swish-item.ts
237
- const useSwishItem = ({ productId, variantId, itemId, onSave, onUnsave, onListsUpdate, onVariantUpdate }) => {
238
- const [savedItemId, setSavedItemId] = (0, react.useState)(itemId ?? null);
239
- const onUnsaveRef = (0, react.useRef)(onUnsave);
240
- const onSaveRef = (0, react.useRef)(onSave);
241
- const onListsUpdateRef = (0, react.useRef)(onListsUpdate);
242
- const onVariantUpdateRef = (0, react.useRef)(onVariantUpdate);
243
- onUnsaveRef.current = onUnsave;
244
- onSaveRef.current = onSave;
245
- onListsUpdateRef.current = onListsUpdate;
246
- onVariantUpdateRef.current = onVariantUpdate;
247
- const { invoke: saveItem, pending: creatingItem } = useSwishIntent("create:item", {
248
- productId,
249
- variantId
250
- });
251
- const { invoke: editItemLists } = useSwishIntent("edit:item-lists", { itemId: savedItemId ?? "" });
252
- const { invoke: editItemVariant } = useSwishIntent("edit:item-variant", {
253
- itemId: savedItemId ?? "",
254
- productId,
255
- variantId
256
- });
257
- const { invoke: unsaveItem } = useSwishIntent("delete:item", { itemId: savedItemId ?? "" });
258
- const { data: savedItems, loading: savedItemsLoading, error: savedItemsError } = useSwishQuery((api, variables) => api.items.list(variables), {
259
- refetch: [
260
- "item-create",
261
- "item-update",
262
- "item-delete"
263
- ],
264
- variables: {
265
- limit: 1,
266
- query: (0, react.useMemo)(() => {
267
- if (variantId) return `variant:${gidToId(variantId.toString())}`;
268
- return `product:${gidToId(productId.toString())}`;
269
- }, [productId, variantId])
270
- },
271
- skip: Boolean(itemId) || !productId
272
- });
273
- const saved = (0, react.useMemo)(() => Boolean(savedItemId), [savedItemId]);
274
- const error = (0, react.useMemo)(() => savedItemsError, [savedItemsError]);
275
- const loading = (0, react.useMemo)(() => savedItemsLoading || creatingItem, [savedItemsLoading, creatingItem]);
276
- (0, react.useEffect)(() => {
277
- if (itemId) return;
278
- if (savedItems?.[0]) setSavedItemId(savedItems[0].id);
279
- else setSavedItemId(null);
280
- }, [savedItems, itemId]);
281
- const unsave = (0, react.useCallback)(async () => {
282
- const response = await unsaveItem();
283
- if (response.code === "ok") {
284
- const data = response.data;
285
- setSavedItemId(null);
286
- onUnsaveRef.current?.(data);
287
- }
288
- }, [unsaveItem]);
289
- const updateLists = (0, react.useCallback)(async () => {
290
- const response = await editItemLists();
291
- if (response.code !== "ok") return;
292
- if (response.intent === "delete:item") {
293
- const data = response.data;
294
- setSavedItemId(null);
295
- onUnsaveRef.current?.(data);
296
- } else {
297
- const data = response.data;
298
- onListsUpdateRef.current?.(data);
299
- }
300
- }, [editItemLists]);
301
- const updateVariant = (0, react.useCallback)(async () => {
302
- const response = await editItemVariant();
303
- if (response.code === "ok") {
304
- const data = response.data;
305
- onVariantUpdateRef.current?.(data);
306
- }
307
- }, [editItemVariant]);
308
- const save = (0, react.useCallback)(async () => {
309
- const response = await saveItem();
310
- if (response.code === "ok") {
311
- const data = response.data;
312
- setSavedItemId(data.item.id);
313
- onSaveRef.current?.(data);
314
- }
315
- }, [saveItem]);
316
- const toggle = (0, react.useCallback)(async () => {
317
- if (saved) await unsave();
318
- else await save();
319
- }, [saved, save]);
320
- return (0, react.useMemo)(() => {
321
- return {
322
- saved,
323
- loading,
324
- error,
325
- save,
326
- unsave,
327
- updateLists,
328
- updateVariant,
329
- toggle
330
- };
331
- }, [
332
- saved,
333
- loading,
334
- error,
335
- save,
336
- unsave,
337
- updateLists,
338
- updateVariant,
339
- toggle
340
- ]);
341
- };
342
-
343
- //#endregion
344
- //#region src/hooks/use-swish-item-count.ts
345
- const useSwishItemCount = () => {
346
- const { data, loading, error } = useSwishQuery((api) => api.items.count(), { refetch: ["item-create", "item-delete"] });
347
- return (0, react.useMemo)(() => {
348
- return {
349
- count: data?.count ?? 0,
350
- loading,
351
- error
352
- };
353
- }, [
354
- data,
355
- loading,
356
- error
357
- ]);
358
- };
359
-
360
- //#endregion
361
- exports.SwishProvider = SwishProvider;
362
- exports.useSwish = useSwish;
363
- exports.useSwishIntent = useSwishIntent;
364
- exports.useSwishItem = useSwishItem;
365
- exports.useSwishItemCount = useSwishItemCount;
366
- exports.useSwishItems = useSwishItems;
367
- exports.useSwishLists = useSwishLists;
368
- exports.useSwishQuery = useSwishQuery;
369
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":["defaultSwishSdkUrl","swish","value: SwishContextValue","defaultRefetchEvents: EventName[]","tokenUpdateEvent: EventName","error"],"sources":["../src/context.tsx","../src/hooks/use-swish.ts","../src/hooks/use-swish-query.ts","../src/hooks/use-swish-intent.ts","../src/hooks/use-swish-lists.ts","../src/hooks/use-swish-items.ts","../src/utils/shopify-utils.ts","../src/hooks/use-swish-item.ts","../src/hooks/use-swish-item-count.ts"],"sourcesContent":["import {\n type SwishApp,\n type SwishOptions,\n swishSdkUrl as defaultSwishSdkUrl,\n} from \"@swishapp/sdk\";\nimport { createContext, ReactNode, useEffect, useRef, useState } from \"react\";\nimport type { SwishContextValue } from \"./types\";\n\nexport const SwishContext = createContext<SwishContextValue>({\n swish: null,\n isLoading: false,\n error: null,\n});\n\nexport interface SwishProviderProps {\n children: ReactNode;\n options: SwishOptions & { swishSdkUrl?: string };\n}\n\nexport function SwishProvider({\n children,\n options: { swishSdkUrl = defaultSwishSdkUrl, ...options },\n}: SwishProviderProps) {\n const [swish, setSwish] = useState<SwishApp | null>(null);\n const [isLoading, setIsLoading] = useState(typeof window !== \"undefined\");\n const [error, setError] = useState<Error | null>(null);\n const optionsRef = useRef<SwishOptions>(options);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n let cancelled = false;\n\n const initializeSdk = async () => {\n try {\n setIsLoading(true);\n setError(null);\n\n const { createSwish } = await import(\n /* webpackIgnore: true */\n swishSdkUrl\n );\n const swish = await createSwish(optionsRef.current);\n\n if (!cancelled) {\n setSwish(swish);\n }\n } catch (err) {\n console.error(\"Failed to initialize Swish\", err);\n if (!cancelled) {\n setError(\n err instanceof Error ? err : new Error(\"Failed to initialize Swish\")\n );\n }\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n initializeSdk();\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n const value: SwishContextValue = {\n swish,\n isLoading,\n error,\n };\n\n return (\n <SwishContext.Provider value={value}>{children}</SwishContext.Provider>\n );\n}\n","import type { SwishApp } from \"@swishapp/sdk\";\nimport { useContext } from \"react\";\nimport { SwishContext } from \"../context\";\n\nexport function useSwish(): SwishApp | null {\n const context = useContext(SwishContext);\n\n if (typeof window !== \"undefined\" && window.swish) {\n return window.swish;\n }\n\n if (!context) {\n throw new Error(\"useSwishContext must be used within a SwishProvider\");\n }\n\n return context.swish;\n}\n","import type {\n SwishApp,\n ApiResponse,\n ApiError,\n PageInfo,\n EventName,\n PaginatedApiResponse,\n} from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSwish } from \"./use-swish\";\n\nexport type FetchFn<TResponse, TVariables> = (\n swish: SwishApp[\"api\"],\n variables?: TVariables\n) => Promise<TResponse>;\n\nconst defaultRefetchEvents: EventName[] = [\n \"item-create\",\n \"item-update\",\n \"item-delete\",\n \"item-lists-update\",\n \"list-create\",\n \"list-update\",\n \"list-delete\",\n \"token-update\",\n];\n\nconst tokenUpdateEvent: EventName = \"token-update\";\n\ntype DataOf<T> = T extends { data: infer D } ? D : never;\n\nexport const useSwishQuery = <\n TResponse extends ApiResponse<any> | PaginatedApiResponse<any>,\n TVariables\n>(\n fetch: FetchFn<TResponse, TVariables>,\n options?: {\n variables?: TVariables;\n skip?: boolean;\n refetch?: boolean | EventName[];\n }\n) => {\n const swish = useSwish();\n const fetchRef = useRef<FetchFn<TResponse, TVariables>>(fetch);\n\n const [data, setData] = useState<DataOf<TResponse> | null>(null);\n const [pageInfo, setPageInfo] = useState<PageInfo | null>(null);\n const [error, setError] = useState<ApiError | null>(null);\n const [loading, setLoading] = useState(!options?.skip);\n const [initialized, setInitialized] = useState(false);\n const refetching = loading && initialized;\n\n const reset = useCallback(() => {\n setData(null);\n setPageInfo(null);\n setError(null);\n setLoading(false);\n setInitialized(false);\n }, []);\n\n const deps = options?.variables ? Object.values(options.variables) : [];\n const skip = !!options?.skip;\n const refetchEvents = useMemo(() => {\n if (options?.refetch === true) {\n return defaultRefetchEvents;\n }\n\n if (Array.isArray(options?.refetch)) {\n return [...options.refetch, tokenUpdateEvent];\n }\n\n return [];\n }, [options?.refetch]);\n\n const executeFetch = useCallback(() => {\n if (!swish || skip) {\n return;\n }\n\n setLoading(true);\n\n fetchRef\n .current(swish.api, options?.variables)\n .then((response) => {\n setError(\"error\" in response ? response.error : null);\n setData(\"data\" in response ? response.data : null);\n setPageInfo(\"pageInfo\" in response ? response.pageInfo : null);\n })\n .catch((error) => setError(error))\n .finally(() => {\n setLoading(false);\n setInitialized(true);\n });\n }, [swish, skip, ...deps]);\n\n const refetch = useCallback(() => {\n executeFetch();\n }, [executeFetch]);\n\n useEffect(() => {\n if (!swish) {\n return;\n }\n\n executeFetch();\n\n const unsubscribe = swish.events.subscribe(refetchEvents, () => {\n refetch();\n });\n\n return () => unsubscribe();\n }, [executeFetch, refetch]);\n\n return useMemo(\n () => ({\n data,\n pageInfo,\n error,\n loading,\n reset,\n refetch,\n refetching,\n }),\n [data, pageInfo, error, loading, reset, refetch, refetching]\n );\n};\n","import type { Intent, IntentResponse, IntentToData } from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useSwish } from \"./use-swish\";\n\nexport const useSwishIntent = <I extends Intent = Intent>(\n intent: I,\n ...args: IntentToData<I> extends void ? [] | [undefined] : [IntentToData<I>]\n) => {\n const swish = useSwish();\n const [pending, setPending] = useState(false);\n const dataRef = useRef(args);\n\n useEffect(() => {\n dataRef.current = args;\n }, [args]);\n\n const invoke = useCallback(async (): Promise<IntentResponse<I>> => {\n if (!swish) {\n throw new Error(\"Swish SDK not initialized\");\n }\n\n setPending(true);\n const activity = await swish.intents.invoke(intent, ...dataRef.current);\n const response = await activity.complete;\n setPending(false);\n return response as IntentResponse<I>;\n }, [swish]);\n\n return { invoke, pending };\n};\n","import { useMemo } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport interface UseSwishListsOptions {\n limit?: number;\n}\n\nexport const useSwishLists = () => {\n const {\n data: lists,\n loading,\n error,\n reset,\n } = useSwishQuery((api) => api.lists.list(), {\n refetch: [\n \"item-lists-update\",\n \"item-delete\",\n \"list-create\",\n \"list-update\",\n \"list-delete\",\n ],\n });\n\n return useMemo(\n () => ({\n loading,\n lists,\n error,\n reset,\n }),\n [lists, loading, error, reset]\n );\n};\n","import type { Item } from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport interface UseSwishItemsOptions {\n listId?: string;\n limit?: number;\n}\n\nexport const useSwishItems = ({\n listId,\n limit = 24,\n}: UseSwishItemsOptions = {}) => {\n const [nextPage, setNextPage] = useState<string | null>(null);\n const [data, setData] = useState<Item[]>([]);\n\n const {\n data: remoteData,\n pageInfo,\n loading,\n error,\n reset: resetRemoteData,\n } = useSwishQuery((api, variables) => api.items.list(variables), {\n variables: {\n page: nextPage ?? undefined,\n limit,\n listId,\n },\n refetch: false,\n });\n\n const reset = useCallback(() => {\n setData([]);\n setNextPage(null);\n resetRemoteData();\n }, [resetRemoteData]);\n\n useEffect(() => {\n if (remoteData) {\n setData((prev) => [...prev, ...remoteData]);\n }\n }, [remoteData]);\n\n const loadMore = useCallback(() => {\n if (pageInfo?.next) {\n setNextPage(pageInfo.next);\n }\n }, [pageInfo?.next]);\n\n return useMemo(\n () => ({\n loading,\n data,\n pageInfo,\n error,\n reset,\n hasMore: !!pageInfo?.next,\n loadMore,\n }),\n [data, pageInfo, loading, error, reset, loadMore]\n );\n};\n","export const gidToId = (gid: string) => {\n return gid?.split(\"/\").pop();\n};\n\nexport const idToGid = (id: string | number, type: string) => {\n return `gid://shopify/${type}/${id}`;\n};\n","import type {\n CreateItemSuccessResponse,\n DeleteItemSuccessResponse,\n EditItemListsSuccessResponse,\n EditItemVariantSuccessResponse,\n} from \"@swishapp/sdk\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { gidToId } from \"../utils/shopify-utils\";\nimport { useSwishIntent } from \"./use-swish-intent\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\ninterface UseSwishItemProps {\n productId: string | number;\n variantId?: string | number;\n itemId?: string;\n onSave?: (data: CreateItemSuccessResponse[\"data\"]) => void;\n onUnsave?: (data: DeleteItemSuccessResponse[\"data\"]) => void;\n onListsUpdate?: (data: EditItemListsSuccessResponse[\"data\"]) => void;\n onVariantUpdate?: (data: EditItemVariantSuccessResponse[\"data\"]) => void;\n}\n\nexport const useSwishItem = ({\n productId,\n variantId,\n itemId,\n onSave,\n onUnsave,\n onListsUpdate,\n onVariantUpdate,\n}: UseSwishItemProps) => {\n const [savedItemId, setSavedItemId] = useState<string | null>(itemId ?? null);\n\n const onUnsaveRef =\n useRef<NonNullable<UseSwishItemProps[\"onUnsave\"]>>(onUnsave);\n const onSaveRef = useRef<NonNullable<UseSwishItemProps[\"onSave\"]>>(onSave);\n const onListsUpdateRef =\n useRef<NonNullable<UseSwishItemProps[\"onListsUpdate\"]>>(onListsUpdate);\n const onVariantUpdateRef =\n useRef<NonNullable<UseSwishItemProps[\"onVariantUpdate\"]>>(onVariantUpdate);\n\n onUnsaveRef.current = onUnsave;\n onSaveRef.current = onSave;\n onListsUpdateRef.current = onListsUpdate;\n onVariantUpdateRef.current = onVariantUpdate;\n\n const { invoke: saveItem, pending: creatingItem } = useSwishIntent(\n \"create:item\",\n {\n productId,\n variantId,\n }\n );\n\n const { invoke: editItemLists } = useSwishIntent(\"edit:item-lists\", {\n itemId: savedItemId ?? \"\",\n });\n\n const { invoke: editItemVariant } = useSwishIntent(\"edit:item-variant\", {\n itemId: savedItemId ?? \"\",\n productId,\n variantId,\n });\n\n const { invoke: unsaveItem } = useSwishIntent(\"delete:item\", {\n itemId: savedItemId ?? \"\",\n });\n\n const query = useMemo(() => {\n if (variantId) {\n return `variant:${gidToId(variantId.toString())}`;\n }\n return `product:${gidToId(productId.toString())}`;\n }, [productId, variantId]);\n\n // Load saved items for the product or variant\n const {\n data: savedItems,\n loading: savedItemsLoading,\n error: savedItemsError,\n } = useSwishQuery((api, variables) => api.items.list(variables), {\n refetch: [\"item-create\", \"item-update\", \"item-delete\"],\n variables: {\n limit: 1,\n query,\n },\n skip: Boolean(itemId) || !productId,\n });\n\n const saved = useMemo(() => Boolean(savedItemId), [savedItemId]);\n const error = useMemo(() => savedItemsError, [savedItemsError]);\n const loading = useMemo(\n () => savedItemsLoading || creatingItem,\n [savedItemsLoading, creatingItem]\n );\n\n useEffect(() => {\n if (itemId) return;\n\n if (savedItems?.[0]) {\n setSavedItemId(savedItems[0].id);\n } else {\n setSavedItemId(null);\n }\n }, [savedItems, itemId]);\n\n const unsave = useCallback(async () => {\n const response = await unsaveItem();\n\n if (response.code === \"ok\") {\n const data = response.data;\n setSavedItemId(null);\n onUnsaveRef.current?.(data);\n }\n }, [unsaveItem]);\n\n const updateLists = useCallback(async () => {\n const response = await editItemLists();\n if (response.code !== \"ok\") {\n return;\n }\n if (response.intent === \"delete:item\") {\n // Item was unsaved from list-select\n const data = response.data as DeleteItemSuccessResponse[\"data\"];\n setSavedItemId(null);\n onUnsaveRef.current?.(data);\n } else {\n const data = response.data as EditItemListsSuccessResponse[\"data\"];\n onListsUpdateRef.current?.(data);\n }\n }, [editItemLists]);\n\n const updateVariant = useCallback(async () => {\n const response = await editItemVariant();\n if (response.code === \"ok\") {\n const data = response.data;\n onVariantUpdateRef.current?.(data);\n }\n }, [editItemVariant]);\n\n const save = useCallback(async () => {\n const response = await saveItem();\n\n if (response.code === \"ok\") {\n const data = response.data;\n setSavedItemId(data.item.id);\n onSaveRef.current?.(data);\n }\n }, [saveItem]);\n\n const toggle = useCallback(async () => {\n if (saved) {\n await unsave();\n } else {\n await save();\n }\n }, [saved, save]);\n\n return useMemo(() => {\n return {\n saved,\n loading,\n error,\n save,\n unsave,\n updateLists,\n updateVariant,\n toggle,\n };\n }, [saved, loading, error, save, unsave, updateLists, updateVariant, toggle]);\n};\n","import { useMemo } from \"react\";\nimport { useSwishQuery } from \"./use-swish-query\";\n\nexport const useSwishItemCount = () => {\n const { data, loading, error } = useSwishQuery((api) => api.items.count(), {\n refetch: [\"item-create\", \"item-delete\"],\n });\n\n return useMemo(() => {\n return {\n count: data?.count ?? 0,\n loading,\n error,\n };\n }, [data, loading, error]);\n};\n"],"mappings":"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"}
package/dist/index.d.cts DELETED
@@ -1,120 +0,0 @@
1
- import { ReactNode } from "react";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
- import { ApiError, ApiResponse, CreateItemSuccessResponse, DeleteItemSuccessResponse, EditItemListsSuccessResponse, EditItemVariantSuccessResponse, EventName, Intent, IntentResponse, IntentToData, Item, PageInfo, PaginatedApiResponse, SwishApp, SwishOptions } from "@swishapp/sdk";
4
- import * as _swishapp_api_client2 from "@swishapp/api-client";
5
- export * from "@swishapp/sdk";
6
-
7
- //#region src/types.d.ts
8
- interface SwishContextValue {
9
- swish: SwishApp | null;
10
- isLoading: boolean;
11
- error: Error | null;
12
- }
13
- //#endregion
14
- //#region src/context.d.ts
15
- interface SwishProviderProps {
16
- children: ReactNode;
17
- options: SwishOptions & {
18
- swishSdkUrl?: string;
19
- };
20
- }
21
- declare function SwishProvider({
22
- children,
23
- options: {
24
- swishSdkUrl,
25
- ...options
26
- }
27
- }: SwishProviderProps): react_jsx_runtime0.JSX.Element;
28
- //#endregion
29
- //#region src/hooks/use-swish.d.ts
30
- declare function useSwish(): SwishApp | null;
31
- //#endregion
32
- //#region src/hooks/use-swish-query.d.ts
33
- type FetchFn<TResponse, TVariables> = (swish: SwishApp["api"], variables?: TVariables) => Promise<TResponse>;
34
- type DataOf<T> = T extends {
35
- data: infer D;
36
- } ? D : never;
37
- declare const useSwishQuery: <TResponse extends ApiResponse<any> | PaginatedApiResponse<any>, TVariables>(fetch: FetchFn<TResponse, TVariables>, options?: {
38
- variables?: TVariables;
39
- skip?: boolean;
40
- refetch?: boolean | EventName[];
41
- }) => {
42
- data: DataOf<TResponse> | null;
43
- pageInfo: PageInfo | null;
44
- error: ApiError | null;
45
- loading: boolean;
46
- reset: () => void;
47
- refetch: () => void;
48
- refetching: boolean;
49
- };
50
- //#endregion
51
- //#region src/hooks/use-swish-intent.d.ts
52
- declare const useSwishIntent: <I extends Intent = Intent>(intent: I, ...args: IntentToData<I> extends void ? [] | [undefined] : [IntentToData<I>]) => {
53
- invoke: () => Promise<IntentResponse<I>>;
54
- pending: boolean;
55
- };
56
- //#endregion
57
- //#region src/hooks/use-swish-lists.d.ts
58
- declare const useSwishLists: () => {
59
- loading: boolean;
60
- lists: _swishapp_api_client2.ListDetail[] | null;
61
- error: _swishapp_api_client2.ApiError | null;
62
- reset: () => void;
63
- };
64
- //#endregion
65
- //#region src/hooks/use-swish-items.d.ts
66
- interface UseSwishItemsOptions {
67
- listId?: string;
68
- limit?: number;
69
- }
70
- declare const useSwishItems: ({
71
- listId,
72
- limit
73
- }?: UseSwishItemsOptions) => {
74
- loading: boolean;
75
- data: Item[];
76
- pageInfo: _swishapp_api_client2.PageInfo | null;
77
- error: _swishapp_api_client2.ApiError | null;
78
- reset: () => void;
79
- hasMore: boolean;
80
- loadMore: () => void;
81
- };
82
- //#endregion
83
- //#region src/hooks/use-swish-item.d.ts
84
- interface UseSwishItemProps {
85
- productId: string | number;
86
- variantId?: string | number;
87
- itemId?: string;
88
- onSave?: (data: CreateItemSuccessResponse["data"]) => void;
89
- onUnsave?: (data: DeleteItemSuccessResponse["data"]) => void;
90
- onListsUpdate?: (data: EditItemListsSuccessResponse["data"]) => void;
91
- onVariantUpdate?: (data: EditItemVariantSuccessResponse["data"]) => void;
92
- }
93
- declare const useSwishItem: ({
94
- productId,
95
- variantId,
96
- itemId,
97
- onSave,
98
- onUnsave,
99
- onListsUpdate,
100
- onVariantUpdate
101
- }: UseSwishItemProps) => {
102
- saved: boolean;
103
- loading: boolean;
104
- error: _swishapp_api_client2.ApiError | null;
105
- save: () => Promise<void>;
106
- unsave: () => Promise<void>;
107
- updateLists: () => Promise<void>;
108
- updateVariant: () => Promise<void>;
109
- toggle: () => Promise<void>;
110
- };
111
- //#endregion
112
- //#region src/hooks/use-swish-item-count.d.ts
113
- declare const useSwishItemCount: () => {
114
- count: number;
115
- loading: boolean;
116
- error: _swishapp_api_client2.ApiError | null;
117
- };
118
- //#endregion
119
- export { SwishContextValue, SwishProvider, type SwishProviderProps, useSwish, useSwishIntent, useSwishItem, useSwishItemCount, useSwishItems, useSwishLists, useSwishQuery };
120
- //# sourceMappingURL=index.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/context.tsx","../src/hooks/use-swish.ts","../src/hooks/use-swish-query.ts","../src/hooks/use-swish-intent.ts","../src/hooks/use-swish-lists.ts","../src/hooks/use-swish-items.ts","../src/hooks/use-swish-item.ts","../src/hooks/use-swish-item-count.ts"],"sourcesContent":[],"mappings":";;;;;;;UAEiB,iBAAA;SACR;;SAEA;;;;UCSQ,kBAAA;YACL;WACD;;EDdM,CAAA;;iBCiBD,aAAA;;;;;;GAGb,qBAAkB,kBAAA,CAAA,GAAA,CAAA;;;iBClBL,QAAA,CAAA,GAAY;;;KCOhB,yCACH,6BACK,eACT,QAAQ;KAeR,YAAY;;IAA8B;cAElC,kCACO,mBAAmB,8CAG9B,QAAQ,WAAW;cAEZ;;EHnCC,OAAA,CAAA,EAAA,OAAA,GGqCO,SHrCU,EACzB;;;;ECWQ,KAAA,UAAA,GAAA,IAAkB;EAKnB,OAAA,EAAA,OAAa;EAC3B,KAAA,EAAA,GAAA,GAAA,IAAA;EACW,OAAA,EAAA,GAAA,GAAA,IAAA;EACV,UAAA,EAAA,OAAA;CAAkB;;;cGlBR,2BAA4B,SAAS,gBACxC,YACC,aAAa,sCAAsC,aAAa;gBAUpC,QAAQ,eAAe;;;;;cCTjD;;SAyBZ,qBAAA,CAAA,UAAA;SAAA,qBAAA,CAAA,QAAA;;AL9BD,CAAA;;;UMEiB,oBAAA;;;;cAKJ;;;IAGV;;;ENVc,QAAA,mCAGH,IAAA;;;;ECSG,QAAA,EAAA,GAAA,GAAA,IAAA;AAKjB,CAAA;;;UMRU,iBAAA;;;;kBAIQ;oBACE;yBACK;EPfR,eAAA,CAAA,EAAA,CAAA,IAAiB,EOgBP,8BPbb,CAAA,MAAA,CAAA,EAAA,GAAA,IAAA;;cOgBD;;;;;;;;GAQV;;ENfc,OAAA,EAAA,OAAA;EAKD,KAAA,EMUI,qBAAA,CAAA,QAAA,GNVS,IAAA;EAC3B,IAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EACW,MAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EACV,WAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EAAkB,aAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;EAAA,MAAA,EAAA,GAAA,UAAA,CAAA,IAAA,CAAA;;;;cOnBR;;;SAYZ,qBAAA,CAAA,QAAA"}