@pakento/cms-sdk 1.2.5 → 2.0.1
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 +49 -24
- package/dist/index.d.ts +49 -24
- package/dist/index.js +114 -119
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +113 -116
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -11,55 +11,80 @@ interface Item {
|
|
|
11
11
|
currency_prefix: string;
|
|
12
12
|
description: string;
|
|
13
13
|
price_text: string;
|
|
14
|
+
price: number;
|
|
14
15
|
cover_image_url: string;
|
|
15
16
|
cover_image_thumbnail_url: string;
|
|
16
17
|
images: ItemImage[];
|
|
17
18
|
}
|
|
18
|
-
interface
|
|
19
|
+
interface Category {
|
|
20
|
+
id: number;
|
|
21
|
+
name: string;
|
|
22
|
+
image_url: string;
|
|
23
|
+
}
|
|
24
|
+
interface WhereEquals {
|
|
25
|
+
equals?: string;
|
|
26
|
+
}
|
|
27
|
+
interface ItemsWhere {
|
|
28
|
+
item_category_id?: WhereEquals;
|
|
29
|
+
item_super_category_id?: WhereEquals;
|
|
30
|
+
brand_id?: WhereEquals;
|
|
31
|
+
}
|
|
32
|
+
interface CategoriesWhere {
|
|
33
|
+
item_super_category_id?: WhereEquals;
|
|
34
|
+
brand_id?: WhereEquals;
|
|
35
|
+
}
|
|
36
|
+
interface GetItemsParams {
|
|
37
|
+
where?: ItemsWhere;
|
|
38
|
+
onlyOffers?: boolean;
|
|
39
|
+
onlyEcommerce?: boolean;
|
|
40
|
+
limit?: number;
|
|
41
|
+
page?: number;
|
|
42
|
+
search?: string;
|
|
43
|
+
sort?: string;
|
|
44
|
+
minPrice?: number;
|
|
45
|
+
maxPrice?: number;
|
|
46
|
+
}
|
|
47
|
+
interface GetCategoriesParams {
|
|
48
|
+
where?: CategoriesWhere;
|
|
49
|
+
limit?: number;
|
|
50
|
+
page?: number;
|
|
51
|
+
sort?: string;
|
|
52
|
+
}
|
|
53
|
+
interface ItemsRawResponse {
|
|
19
54
|
totalDocs: number;
|
|
20
55
|
totalPages: number;
|
|
21
56
|
prevPage: number | null;
|
|
22
57
|
nextPage: number | null;
|
|
23
58
|
docs: Item[];
|
|
24
59
|
}
|
|
25
|
-
interface
|
|
26
|
-
|
|
27
|
-
limit?: number;
|
|
60
|
+
interface CategoriesRawResponse {
|
|
61
|
+
docs: Category[];
|
|
28
62
|
}
|
|
29
|
-
interface
|
|
63
|
+
interface ItemsApiResponse {
|
|
64
|
+
data: ItemsRawResponse | null;
|
|
30
65
|
items: Item[];
|
|
31
66
|
totalDocs: number;
|
|
32
67
|
totalPages: number;
|
|
33
68
|
prevPage: number | null;
|
|
34
69
|
nextPage: number | null;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
refetch: () => void;
|
|
70
|
+
error: boolean;
|
|
71
|
+
errorMessage: string | null;
|
|
38
72
|
}
|
|
39
|
-
interface
|
|
40
|
-
|
|
41
|
-
name: string;
|
|
42
|
-
image_url: string;
|
|
43
|
-
}
|
|
44
|
-
interface UseCategoriesReturn {
|
|
73
|
+
interface CategoriesApiResponse {
|
|
74
|
+
data: Category[] | null;
|
|
45
75
|
categories: Category[];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
refetch: () => void;
|
|
76
|
+
error: boolean;
|
|
77
|
+
errorMessage: string | null;
|
|
49
78
|
}
|
|
50
79
|
|
|
51
|
-
declare function useItems(options?: UseItemsOptions): UseItemsReturn;
|
|
52
|
-
|
|
53
|
-
declare function useCategories(): UseCategoriesReturn;
|
|
54
|
-
|
|
55
80
|
declare class PakentoCMSAPI {
|
|
56
81
|
private client;
|
|
57
82
|
private baseURL;
|
|
58
83
|
private apiKey;
|
|
59
84
|
constructor();
|
|
60
|
-
getItems(
|
|
61
|
-
getCategories(): Promise<
|
|
85
|
+
getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
|
|
86
|
+
getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
|
|
62
87
|
}
|
|
63
88
|
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
64
89
|
|
|
65
|
-
export { type Category, type
|
|
90
|
+
export { type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type GetCategoriesParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type WhereEquals, pakentoCMSAPI };
|
package/dist/index.d.ts
CHANGED
|
@@ -11,55 +11,80 @@ interface Item {
|
|
|
11
11
|
currency_prefix: string;
|
|
12
12
|
description: string;
|
|
13
13
|
price_text: string;
|
|
14
|
+
price: number;
|
|
14
15
|
cover_image_url: string;
|
|
15
16
|
cover_image_thumbnail_url: string;
|
|
16
17
|
images: ItemImage[];
|
|
17
18
|
}
|
|
18
|
-
interface
|
|
19
|
+
interface Category {
|
|
20
|
+
id: number;
|
|
21
|
+
name: string;
|
|
22
|
+
image_url: string;
|
|
23
|
+
}
|
|
24
|
+
interface WhereEquals {
|
|
25
|
+
equals?: string;
|
|
26
|
+
}
|
|
27
|
+
interface ItemsWhere {
|
|
28
|
+
item_category_id?: WhereEquals;
|
|
29
|
+
item_super_category_id?: WhereEquals;
|
|
30
|
+
brand_id?: WhereEquals;
|
|
31
|
+
}
|
|
32
|
+
interface CategoriesWhere {
|
|
33
|
+
item_super_category_id?: WhereEquals;
|
|
34
|
+
brand_id?: WhereEquals;
|
|
35
|
+
}
|
|
36
|
+
interface GetItemsParams {
|
|
37
|
+
where?: ItemsWhere;
|
|
38
|
+
onlyOffers?: boolean;
|
|
39
|
+
onlyEcommerce?: boolean;
|
|
40
|
+
limit?: number;
|
|
41
|
+
page?: number;
|
|
42
|
+
search?: string;
|
|
43
|
+
sort?: string;
|
|
44
|
+
minPrice?: number;
|
|
45
|
+
maxPrice?: number;
|
|
46
|
+
}
|
|
47
|
+
interface GetCategoriesParams {
|
|
48
|
+
where?: CategoriesWhere;
|
|
49
|
+
limit?: number;
|
|
50
|
+
page?: number;
|
|
51
|
+
sort?: string;
|
|
52
|
+
}
|
|
53
|
+
interface ItemsRawResponse {
|
|
19
54
|
totalDocs: number;
|
|
20
55
|
totalPages: number;
|
|
21
56
|
prevPage: number | null;
|
|
22
57
|
nextPage: number | null;
|
|
23
58
|
docs: Item[];
|
|
24
59
|
}
|
|
25
|
-
interface
|
|
26
|
-
|
|
27
|
-
limit?: number;
|
|
60
|
+
interface CategoriesRawResponse {
|
|
61
|
+
docs: Category[];
|
|
28
62
|
}
|
|
29
|
-
interface
|
|
63
|
+
interface ItemsApiResponse {
|
|
64
|
+
data: ItemsRawResponse | null;
|
|
30
65
|
items: Item[];
|
|
31
66
|
totalDocs: number;
|
|
32
67
|
totalPages: number;
|
|
33
68
|
prevPage: number | null;
|
|
34
69
|
nextPage: number | null;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
refetch: () => void;
|
|
70
|
+
error: boolean;
|
|
71
|
+
errorMessage: string | null;
|
|
38
72
|
}
|
|
39
|
-
interface
|
|
40
|
-
|
|
41
|
-
name: string;
|
|
42
|
-
image_url: string;
|
|
43
|
-
}
|
|
44
|
-
interface UseCategoriesReturn {
|
|
73
|
+
interface CategoriesApiResponse {
|
|
74
|
+
data: Category[] | null;
|
|
45
75
|
categories: Category[];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
refetch: () => void;
|
|
76
|
+
error: boolean;
|
|
77
|
+
errorMessage: string | null;
|
|
49
78
|
}
|
|
50
79
|
|
|
51
|
-
declare function useItems(options?: UseItemsOptions): UseItemsReturn;
|
|
52
|
-
|
|
53
|
-
declare function useCategories(): UseCategoriesReturn;
|
|
54
|
-
|
|
55
80
|
declare class PakentoCMSAPI {
|
|
56
81
|
private client;
|
|
57
82
|
private baseURL;
|
|
58
83
|
private apiKey;
|
|
59
84
|
constructor();
|
|
60
|
-
getItems(
|
|
61
|
-
getCategories(): Promise<
|
|
85
|
+
getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
|
|
86
|
+
getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
|
|
62
87
|
}
|
|
63
88
|
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
64
89
|
|
|
65
|
-
export { type Category, type
|
|
90
|
+
export { type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type GetCategoriesParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type WhereEquals, pakentoCMSAPI };
|
package/dist/index.js
CHANGED
|
@@ -30,15 +30,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
|
-
pakentoCMSAPI: () => pakentoCMSAPI
|
|
34
|
-
useCategories: () => useCategories,
|
|
35
|
-
useItems: () => useItems
|
|
33
|
+
pakentoCMSAPI: () => pakentoCMSAPI
|
|
36
34
|
});
|
|
37
35
|
module.exports = __toCommonJS(index_exports);
|
|
38
36
|
|
|
39
|
-
// src/hooks/useItems.ts
|
|
40
|
-
var import_react = require("react");
|
|
41
|
-
|
|
42
37
|
// src/services/api.ts
|
|
43
38
|
var import_axios = __toESM(require("axios"));
|
|
44
39
|
var PakentoCMSAPI = class {
|
|
@@ -71,11 +66,31 @@ var PakentoCMSAPI = class {
|
|
|
71
66
|
}
|
|
72
67
|
);
|
|
73
68
|
}
|
|
74
|
-
async getItems(
|
|
69
|
+
async getItems(params = {}) {
|
|
75
70
|
try {
|
|
76
71
|
const query = `
|
|
77
|
-
query
|
|
78
|
-
|
|
72
|
+
query GetEcommerceItems(
|
|
73
|
+
$where: EcommerceItemsWhere
|
|
74
|
+
$onlyOffers: Boolean
|
|
75
|
+
$onlyEcommerce: Boolean
|
|
76
|
+
$limit: Int
|
|
77
|
+
$page: Int
|
|
78
|
+
$search: String
|
|
79
|
+
$sort: String
|
|
80
|
+
$minPrice: Float
|
|
81
|
+
$maxPrice: Float
|
|
82
|
+
) {
|
|
83
|
+
GetEcommerceItems(
|
|
84
|
+
where: $where
|
|
85
|
+
onlyOffers: $onlyOffers
|
|
86
|
+
onlyEcommerce: $onlyEcommerce
|
|
87
|
+
limit: $limit
|
|
88
|
+
page: $page
|
|
89
|
+
search: $search
|
|
90
|
+
sort: $sort
|
|
91
|
+
minPrice: $minPrice
|
|
92
|
+
maxPrice: $maxPrice
|
|
93
|
+
) {
|
|
79
94
|
totalDocs
|
|
80
95
|
totalPages
|
|
81
96
|
prevPage
|
|
@@ -88,6 +103,7 @@ var PakentoCMSAPI = class {
|
|
|
88
103
|
currency_prefix
|
|
89
104
|
description
|
|
90
105
|
price_text
|
|
106
|
+
price
|
|
91
107
|
cover_image_url
|
|
92
108
|
cover_image_thumbnail_url
|
|
93
109
|
images {
|
|
@@ -101,34 +117,75 @@ var PakentoCMSAPI = class {
|
|
|
101
117
|
`;
|
|
102
118
|
const response = await this.client.post("/api/graphql", {
|
|
103
119
|
query,
|
|
104
|
-
variables:
|
|
120
|
+
variables: params
|
|
105
121
|
});
|
|
106
122
|
if (response.data.errors) {
|
|
107
|
-
|
|
123
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
124
|
+
return {
|
|
125
|
+
data: null,
|
|
126
|
+
items: [],
|
|
127
|
+
totalDocs: 0,
|
|
128
|
+
totalPages: 0,
|
|
129
|
+
prevPage: null,
|
|
130
|
+
nextPage: null,
|
|
131
|
+
error: true,
|
|
132
|
+
errorMessage
|
|
133
|
+
};
|
|
108
134
|
}
|
|
109
|
-
|
|
135
|
+
const rawData = response.data.data.GetEcommerceItems;
|
|
136
|
+
return {
|
|
137
|
+
data: rawData,
|
|
138
|
+
items: rawData.docs,
|
|
139
|
+
totalDocs: rawData.totalDocs,
|
|
140
|
+
totalPages: rawData.totalPages,
|
|
141
|
+
prevPage: rawData.prevPage,
|
|
142
|
+
nextPage: rawData.nextPage,
|
|
143
|
+
error: false,
|
|
144
|
+
errorMessage: null
|
|
145
|
+
};
|
|
110
146
|
} catch (error) {
|
|
147
|
+
let errorMessage = "Error desconocido";
|
|
111
148
|
if (error instanceof import_axios.AxiosError) {
|
|
112
149
|
const status = error.response?.status;
|
|
113
150
|
if (status === 401) {
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
151
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
152
|
+
} else if (status === 404) {
|
|
153
|
+
errorMessage = "Endpoint no encontrado";
|
|
154
|
+
} else if (status && status >= 500) {
|
|
155
|
+
errorMessage = "Error del servidor CMS";
|
|
156
|
+
} else {
|
|
157
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
121
158
|
}
|
|
122
|
-
|
|
159
|
+
} else if (error instanceof Error) {
|
|
160
|
+
errorMessage = error.message;
|
|
123
161
|
}
|
|
124
|
-
|
|
162
|
+
return {
|
|
163
|
+
data: null,
|
|
164
|
+
items: [],
|
|
165
|
+
totalDocs: 0,
|
|
166
|
+
totalPages: 0,
|
|
167
|
+
prevPage: null,
|
|
168
|
+
nextPage: null,
|
|
169
|
+
error: true,
|
|
170
|
+
errorMessage
|
|
171
|
+
};
|
|
125
172
|
}
|
|
126
173
|
}
|
|
127
|
-
async getCategories() {
|
|
174
|
+
async getCategories(params = {}) {
|
|
128
175
|
try {
|
|
129
176
|
const query = `
|
|
130
|
-
query
|
|
131
|
-
|
|
177
|
+
query GetEcommerceCategories(
|
|
178
|
+
$where: EcommerceCategoriesWhere
|
|
179
|
+
$limit: Int
|
|
180
|
+
$page: Int
|
|
181
|
+
$sort: String
|
|
182
|
+
) {
|
|
183
|
+
GetEcommerceCategories(
|
|
184
|
+
where: $where
|
|
185
|
+
limit: $limit
|
|
186
|
+
page: $page
|
|
187
|
+
sort: $sort
|
|
188
|
+
) {
|
|
132
189
|
docs {
|
|
133
190
|
id
|
|
134
191
|
name
|
|
@@ -138,115 +195,53 @@ var PakentoCMSAPI = class {
|
|
|
138
195
|
}
|
|
139
196
|
`;
|
|
140
197
|
const response = await this.client.post("/api/graphql", {
|
|
141
|
-
query
|
|
198
|
+
query,
|
|
199
|
+
variables: params
|
|
142
200
|
});
|
|
143
201
|
if (response.data.errors) {
|
|
144
|
-
|
|
202
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
203
|
+
return {
|
|
204
|
+
data: null,
|
|
205
|
+
categories: [],
|
|
206
|
+
error: true,
|
|
207
|
+
errorMessage
|
|
208
|
+
};
|
|
145
209
|
}
|
|
146
|
-
|
|
210
|
+
const rawData = response.data.data.GetEcommerceCategories;
|
|
211
|
+
return {
|
|
212
|
+
data: rawData.docs,
|
|
213
|
+
categories: rawData.docs,
|
|
214
|
+
error: false,
|
|
215
|
+
errorMessage: null
|
|
216
|
+
};
|
|
147
217
|
} catch (error) {
|
|
218
|
+
let errorMessage = "Error desconocido";
|
|
148
219
|
if (error instanceof import_axios.AxiosError) {
|
|
149
220
|
const status = error.response?.status;
|
|
150
221
|
if (status === 401) {
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
222
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
223
|
+
} else if (status === 404) {
|
|
224
|
+
errorMessage = "Endpoint no encontrado";
|
|
225
|
+
} else if (status && status >= 500) {
|
|
226
|
+
errorMessage = "Error del servidor CMS";
|
|
227
|
+
} else {
|
|
228
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
158
229
|
}
|
|
159
|
-
|
|
230
|
+
} else if (error instanceof Error) {
|
|
231
|
+
errorMessage = error.message;
|
|
160
232
|
}
|
|
161
|
-
|
|
233
|
+
return {
|
|
234
|
+
data: null,
|
|
235
|
+
categories: [],
|
|
236
|
+
error: true,
|
|
237
|
+
errorMessage
|
|
238
|
+
};
|
|
162
239
|
}
|
|
163
240
|
}
|
|
164
241
|
};
|
|
165
242
|
var pakentoCMSAPI = new PakentoCMSAPI();
|
|
166
|
-
|
|
167
|
-
// src/hooks/useItems.ts
|
|
168
|
-
function useItems(options = {}) {
|
|
169
|
-
const { page = 1, limit = 10 } = options;
|
|
170
|
-
const [items, setItems] = (0, import_react.useState)([]);
|
|
171
|
-
const [totalDocs, setTotalDocs] = (0, import_react.useState)(0);
|
|
172
|
-
const [totalPages, setTotalPages] = (0, import_react.useState)(0);
|
|
173
|
-
const [prevPage, setPrevPage] = (0, import_react.useState)(null);
|
|
174
|
-
const [nextPage, setNextPage] = (0, import_react.useState)(null);
|
|
175
|
-
const [loading, setLoading] = (0, import_react.useState)(true);
|
|
176
|
-
const [error, setError] = (0, import_react.useState)(null);
|
|
177
|
-
const fetchItems = (0, import_react.useCallback)(async () => {
|
|
178
|
-
try {
|
|
179
|
-
setLoading(true);
|
|
180
|
-
setError(null);
|
|
181
|
-
const response = await pakentoCMSAPI.getItems(page, limit);
|
|
182
|
-
setItems(response.docs);
|
|
183
|
-
setTotalDocs(response.totalDocs);
|
|
184
|
-
setTotalPages(response.totalPages);
|
|
185
|
-
setPrevPage(response.prevPage);
|
|
186
|
-
setNextPage(response.nextPage);
|
|
187
|
-
} catch (err) {
|
|
188
|
-
const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar items";
|
|
189
|
-
setError(errorMessage);
|
|
190
|
-
console.error("Error fetching items:", err);
|
|
191
|
-
} finally {
|
|
192
|
-
setLoading(false);
|
|
193
|
-
}
|
|
194
|
-
}, [page, limit]);
|
|
195
|
-
(0, import_react.useEffect)(() => {
|
|
196
|
-
fetchItems();
|
|
197
|
-
}, [fetchItems]);
|
|
198
|
-
const refetch = (0, import_react.useCallback)(() => {
|
|
199
|
-
fetchItems();
|
|
200
|
-
}, [fetchItems]);
|
|
201
|
-
return {
|
|
202
|
-
items,
|
|
203
|
-
totalDocs,
|
|
204
|
-
totalPages,
|
|
205
|
-
prevPage,
|
|
206
|
-
nextPage,
|
|
207
|
-
loading,
|
|
208
|
-
error,
|
|
209
|
-
refetch
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// src/hooks/useCategories.ts
|
|
214
|
-
var import_react2 = require("react");
|
|
215
|
-
function useCategories() {
|
|
216
|
-
const [categories, setCategories] = (0, import_react2.useState)([]);
|
|
217
|
-
const [loading, setLoading] = (0, import_react2.useState)(true);
|
|
218
|
-
const [error, setError] = (0, import_react2.useState)(null);
|
|
219
|
-
const fetchCategories = (0, import_react2.useCallback)(async () => {
|
|
220
|
-
try {
|
|
221
|
-
setLoading(true);
|
|
222
|
-
setError(null);
|
|
223
|
-
const response = await pakentoCMSAPI.getCategories();
|
|
224
|
-
setCategories(response);
|
|
225
|
-
} catch (err) {
|
|
226
|
-
const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar categor\xEDas";
|
|
227
|
-
setError(errorMessage);
|
|
228
|
-
console.error("Error fetching categories:", err);
|
|
229
|
-
} finally {
|
|
230
|
-
setLoading(false);
|
|
231
|
-
}
|
|
232
|
-
}, []);
|
|
233
|
-
(0, import_react2.useEffect)(() => {
|
|
234
|
-
fetchCategories();
|
|
235
|
-
}, [fetchCategories]);
|
|
236
|
-
const refetch = (0, import_react2.useCallback)(() => {
|
|
237
|
-
fetchCategories();
|
|
238
|
-
}, [fetchCategories]);
|
|
239
|
-
return {
|
|
240
|
-
categories,
|
|
241
|
-
loading,
|
|
242
|
-
error,
|
|
243
|
-
refetch
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
243
|
// Annotate the CommonJS export names for ESM import in node:
|
|
247
244
|
0 && (module.exports = {
|
|
248
|
-
pakentoCMSAPI
|
|
249
|
-
useCategories,
|
|
250
|
-
useItems
|
|
245
|
+
pakentoCMSAPI
|
|
251
246
|
});
|
|
252
247
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/hooks/useItems.ts","../src/services/api.ts","../src/hooks/useCategories.ts"],"sourcesContent":["// Hooks\nexport { useItems } from \"./hooks/useItems\";\nexport { useCategories } from \"./hooks/useCategories\";\n\n// Services\nexport { pakentoCMSAPI } from \"./services/api\";\n\n// Types\nexport type {\n Item,\n ItemImage,\n ItemsResponse,\n UseItemsOptions,\n UseItemsReturn,\n Category,\n UseCategoriesReturn,\n} from \"./types\";\n","import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseItemsOptions, UseItemsReturn, Item } from \"../types\";\n\nexport function useItems(options: UseItemsOptions = {}): UseItemsReturn {\n const { page = 1, limit = 10 } = options;\n\n const [items, setItems] = useState<Item[]>([]);\n const [totalDocs, setTotalDocs] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [prevPage, setPrevPage] = useState<number | null>(null);\n const [nextPage, setNextPage] = useState<number | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchItems = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getItems(page, limit);\n\n setItems(response.docs);\n setTotalDocs(response.totalDocs);\n setTotalPages(response.totalPages);\n setPrevPage(response.prevPage);\n setNextPage(response.nextPage);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar items\";\n setError(errorMessage);\n console.error(\"Error fetching items:\", err);\n } finally {\n setLoading(false);\n }\n }, [page, limit]);\n\n useEffect(() => {\n fetchItems();\n }, [fetchItems]);\n\n const refetch = useCallback(() => {\n fetchItems();\n }, [fetchItems]);\n\n return {\n items,\n totalDocs,\n totalPages,\n prevPage,\n nextPage,\n loading,\n error,\n refetch,\n };\n}\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(page: number = 1, limit: number = 10) {\n try {\n const query = `\n query Query($page: Int, $limit: Int) {\n GetEcommerceItems(page: $page, limit: $limit) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n cover_image_url\n cover_image_thumbnail_url\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: { page, limit },\n });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceItems\n return response.data.data.GetEcommerceItems;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n\n async getCategories() {\n try {\n const query = `\n query Query {\n GetEcommerceCategories {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceCategories\n return response.data.data.GetEcommerceCategories.docs;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n","import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseCategoriesReturn, Category } from \"../types\";\n\nexport function useCategories(): UseCategoriesReturn {\n const [categories, setCategories] = useState<Category[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchCategories = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getCategories();\n\n setCategories(response);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar categorías\";\n setError(errorMessage);\n console.error(\"Error fetching categories:\", err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n const refetch = useCallback(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n return {\n categories,\n loading,\n error,\n refetch,\n };\n}\n"],"mappings":"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","names":["axios","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/services/api.ts"],"sourcesContent":["// Services\nexport { pakentoCMSAPI } from \"./services/api\";\n\n// Types\nexport type {\n // Base types\n Item,\n ItemImage,\n Category,\n\n // GraphQL Where conditions\n WhereEquals,\n ItemsWhere,\n CategoriesWhere,\n\n // API Parameters\n GetItemsParams,\n GetCategoriesParams,\n\n // Raw API Response types\n ItemsRawResponse,\n CategoriesRawResponse,\n\n // API Response types with error handling\n ItemsApiResponse,\n CategoriesApiResponse,\n} from \"./types\";\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\n} from \"../types\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(params: GetItemsParams = {}): Promise<ItemsApiResponse> {\n try {\n const query = `\n query GetEcommerceItems(\n $where: EcommerceItemsWhere\n $onlyOffers: Boolean\n $onlyEcommerce: Boolean\n $limit: Int\n $page: Int\n $search: String\n $sort: String\n $minPrice: Float\n $maxPrice: Float\n ) {\n GetEcommerceItems(\n where: $where\n onlyOffers: $onlyOffers\n onlyEcommerce: $onlyEcommerce\n limit: $limit\n page: $page\n search: $search\n sort: $sort\n minPrice: $minPrice\n maxPrice: $maxPrice\n ) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n price\n cover_image_url\n cover_image_thumbnail_url\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: ItemsRawResponse = response.data.data.GetEcommerceItems;\n\n return {\n data: rawData,\n items: rawData.docs,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n prevPage: rawData.prevPage,\n nextPage: rawData.nextPage,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getCategories(\n params: GetCategoriesParams = {}\n ): Promise<CategoriesApiResponse> {\n try {\n const query = `\n query GetEcommerceCategories(\n $where: EcommerceCategoriesWhere\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceCategories(\n where: $where\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n\n const rawData: CategoriesRawResponse =\n response.data.data.GetEcommerceCategories;\n\n return {\n data: rawData.docs,\n categories: rawData.docs,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":["axios"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
// src/hooks/useItems.ts
|
|
2
|
-
import { useState, useEffect, useCallback } from "react";
|
|
3
|
-
|
|
4
1
|
// src/services/api.ts
|
|
5
2
|
import axios, { AxiosError } from "axios";
|
|
6
3
|
var PakentoCMSAPI = class {
|
|
@@ -33,11 +30,31 @@ var PakentoCMSAPI = class {
|
|
|
33
30
|
}
|
|
34
31
|
);
|
|
35
32
|
}
|
|
36
|
-
async getItems(
|
|
33
|
+
async getItems(params = {}) {
|
|
37
34
|
try {
|
|
38
35
|
const query = `
|
|
39
|
-
query
|
|
40
|
-
|
|
36
|
+
query GetEcommerceItems(
|
|
37
|
+
$where: EcommerceItemsWhere
|
|
38
|
+
$onlyOffers: Boolean
|
|
39
|
+
$onlyEcommerce: Boolean
|
|
40
|
+
$limit: Int
|
|
41
|
+
$page: Int
|
|
42
|
+
$search: String
|
|
43
|
+
$sort: String
|
|
44
|
+
$minPrice: Float
|
|
45
|
+
$maxPrice: Float
|
|
46
|
+
) {
|
|
47
|
+
GetEcommerceItems(
|
|
48
|
+
where: $where
|
|
49
|
+
onlyOffers: $onlyOffers
|
|
50
|
+
onlyEcommerce: $onlyEcommerce
|
|
51
|
+
limit: $limit
|
|
52
|
+
page: $page
|
|
53
|
+
search: $search
|
|
54
|
+
sort: $sort
|
|
55
|
+
minPrice: $minPrice
|
|
56
|
+
maxPrice: $maxPrice
|
|
57
|
+
) {
|
|
41
58
|
totalDocs
|
|
42
59
|
totalPages
|
|
43
60
|
prevPage
|
|
@@ -50,6 +67,7 @@ var PakentoCMSAPI = class {
|
|
|
50
67
|
currency_prefix
|
|
51
68
|
description
|
|
52
69
|
price_text
|
|
70
|
+
price
|
|
53
71
|
cover_image_url
|
|
54
72
|
cover_image_thumbnail_url
|
|
55
73
|
images {
|
|
@@ -63,34 +81,75 @@ var PakentoCMSAPI = class {
|
|
|
63
81
|
`;
|
|
64
82
|
const response = await this.client.post("/api/graphql", {
|
|
65
83
|
query,
|
|
66
|
-
variables:
|
|
84
|
+
variables: params
|
|
67
85
|
});
|
|
68
86
|
if (response.data.errors) {
|
|
69
|
-
|
|
87
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
88
|
+
return {
|
|
89
|
+
data: null,
|
|
90
|
+
items: [],
|
|
91
|
+
totalDocs: 0,
|
|
92
|
+
totalPages: 0,
|
|
93
|
+
prevPage: null,
|
|
94
|
+
nextPage: null,
|
|
95
|
+
error: true,
|
|
96
|
+
errorMessage
|
|
97
|
+
};
|
|
70
98
|
}
|
|
71
|
-
|
|
99
|
+
const rawData = response.data.data.GetEcommerceItems;
|
|
100
|
+
return {
|
|
101
|
+
data: rawData,
|
|
102
|
+
items: rawData.docs,
|
|
103
|
+
totalDocs: rawData.totalDocs,
|
|
104
|
+
totalPages: rawData.totalPages,
|
|
105
|
+
prevPage: rawData.prevPage,
|
|
106
|
+
nextPage: rawData.nextPage,
|
|
107
|
+
error: false,
|
|
108
|
+
errorMessage: null
|
|
109
|
+
};
|
|
72
110
|
} catch (error) {
|
|
111
|
+
let errorMessage = "Error desconocido";
|
|
73
112
|
if (error instanceof AxiosError) {
|
|
74
113
|
const status = error.response?.status;
|
|
75
114
|
if (status === 401) {
|
|
76
|
-
|
|
115
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
116
|
+
} else if (status === 404) {
|
|
117
|
+
errorMessage = "Endpoint no encontrado";
|
|
118
|
+
} else if (status && status >= 500) {
|
|
119
|
+
errorMessage = "Error del servidor CMS";
|
|
120
|
+
} else {
|
|
121
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
77
122
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
if (status && status >= 500) {
|
|
82
|
-
throw new Error("Error del servidor CMS");
|
|
83
|
-
}
|
|
84
|
-
throw new Error(`Error de conexi\xF3n: ${error.message}`);
|
|
123
|
+
} else if (error instanceof Error) {
|
|
124
|
+
errorMessage = error.message;
|
|
85
125
|
}
|
|
86
|
-
|
|
126
|
+
return {
|
|
127
|
+
data: null,
|
|
128
|
+
items: [],
|
|
129
|
+
totalDocs: 0,
|
|
130
|
+
totalPages: 0,
|
|
131
|
+
prevPage: null,
|
|
132
|
+
nextPage: null,
|
|
133
|
+
error: true,
|
|
134
|
+
errorMessage
|
|
135
|
+
};
|
|
87
136
|
}
|
|
88
137
|
}
|
|
89
|
-
async getCategories() {
|
|
138
|
+
async getCategories(params = {}) {
|
|
90
139
|
try {
|
|
91
140
|
const query = `
|
|
92
|
-
query
|
|
93
|
-
|
|
141
|
+
query GetEcommerceCategories(
|
|
142
|
+
$where: EcommerceCategoriesWhere
|
|
143
|
+
$limit: Int
|
|
144
|
+
$page: Int
|
|
145
|
+
$sort: String
|
|
146
|
+
) {
|
|
147
|
+
GetEcommerceCategories(
|
|
148
|
+
where: $where
|
|
149
|
+
limit: $limit
|
|
150
|
+
page: $page
|
|
151
|
+
sort: $sort
|
|
152
|
+
) {
|
|
94
153
|
docs {
|
|
95
154
|
id
|
|
96
155
|
name
|
|
@@ -100,114 +159,52 @@ var PakentoCMSAPI = class {
|
|
|
100
159
|
}
|
|
101
160
|
`;
|
|
102
161
|
const response = await this.client.post("/api/graphql", {
|
|
103
|
-
query
|
|
162
|
+
query,
|
|
163
|
+
variables: params
|
|
104
164
|
});
|
|
105
165
|
if (response.data.errors) {
|
|
106
|
-
|
|
166
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
167
|
+
return {
|
|
168
|
+
data: null,
|
|
169
|
+
categories: [],
|
|
170
|
+
error: true,
|
|
171
|
+
errorMessage
|
|
172
|
+
};
|
|
107
173
|
}
|
|
108
|
-
|
|
174
|
+
const rawData = response.data.data.GetEcommerceCategories;
|
|
175
|
+
return {
|
|
176
|
+
data: rawData.docs,
|
|
177
|
+
categories: rawData.docs,
|
|
178
|
+
error: false,
|
|
179
|
+
errorMessage: null
|
|
180
|
+
};
|
|
109
181
|
} catch (error) {
|
|
182
|
+
let errorMessage = "Error desconocido";
|
|
110
183
|
if (error instanceof AxiosError) {
|
|
111
184
|
const status = error.response?.status;
|
|
112
185
|
if (status === 401) {
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
186
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
187
|
+
} else if (status === 404) {
|
|
188
|
+
errorMessage = "Endpoint no encontrado";
|
|
189
|
+
} else if (status && status >= 500) {
|
|
190
|
+
errorMessage = "Error del servidor CMS";
|
|
191
|
+
} else {
|
|
192
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
120
193
|
}
|
|
121
|
-
|
|
194
|
+
} else if (error instanceof Error) {
|
|
195
|
+
errorMessage = error.message;
|
|
122
196
|
}
|
|
123
|
-
|
|
197
|
+
return {
|
|
198
|
+
data: null,
|
|
199
|
+
categories: [],
|
|
200
|
+
error: true,
|
|
201
|
+
errorMessage
|
|
202
|
+
};
|
|
124
203
|
}
|
|
125
204
|
}
|
|
126
205
|
};
|
|
127
206
|
var pakentoCMSAPI = new PakentoCMSAPI();
|
|
128
|
-
|
|
129
|
-
// src/hooks/useItems.ts
|
|
130
|
-
function useItems(options = {}) {
|
|
131
|
-
const { page = 1, limit = 10 } = options;
|
|
132
|
-
const [items, setItems] = useState([]);
|
|
133
|
-
const [totalDocs, setTotalDocs] = useState(0);
|
|
134
|
-
const [totalPages, setTotalPages] = useState(0);
|
|
135
|
-
const [prevPage, setPrevPage] = useState(null);
|
|
136
|
-
const [nextPage, setNextPage] = useState(null);
|
|
137
|
-
const [loading, setLoading] = useState(true);
|
|
138
|
-
const [error, setError] = useState(null);
|
|
139
|
-
const fetchItems = useCallback(async () => {
|
|
140
|
-
try {
|
|
141
|
-
setLoading(true);
|
|
142
|
-
setError(null);
|
|
143
|
-
const response = await pakentoCMSAPI.getItems(page, limit);
|
|
144
|
-
setItems(response.docs);
|
|
145
|
-
setTotalDocs(response.totalDocs);
|
|
146
|
-
setTotalPages(response.totalPages);
|
|
147
|
-
setPrevPage(response.prevPage);
|
|
148
|
-
setNextPage(response.nextPage);
|
|
149
|
-
} catch (err) {
|
|
150
|
-
const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar items";
|
|
151
|
-
setError(errorMessage);
|
|
152
|
-
console.error("Error fetching items:", err);
|
|
153
|
-
} finally {
|
|
154
|
-
setLoading(false);
|
|
155
|
-
}
|
|
156
|
-
}, [page, limit]);
|
|
157
|
-
useEffect(() => {
|
|
158
|
-
fetchItems();
|
|
159
|
-
}, [fetchItems]);
|
|
160
|
-
const refetch = useCallback(() => {
|
|
161
|
-
fetchItems();
|
|
162
|
-
}, [fetchItems]);
|
|
163
|
-
return {
|
|
164
|
-
items,
|
|
165
|
-
totalDocs,
|
|
166
|
-
totalPages,
|
|
167
|
-
prevPage,
|
|
168
|
-
nextPage,
|
|
169
|
-
loading,
|
|
170
|
-
error,
|
|
171
|
-
refetch
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// src/hooks/useCategories.ts
|
|
176
|
-
import { useState as useState2, useEffect as useEffect2, useCallback as useCallback2 } from "react";
|
|
177
|
-
function useCategories() {
|
|
178
|
-
const [categories, setCategories] = useState2([]);
|
|
179
|
-
const [loading, setLoading] = useState2(true);
|
|
180
|
-
const [error, setError] = useState2(null);
|
|
181
|
-
const fetchCategories = useCallback2(async () => {
|
|
182
|
-
try {
|
|
183
|
-
setLoading(true);
|
|
184
|
-
setError(null);
|
|
185
|
-
const response = await pakentoCMSAPI.getCategories();
|
|
186
|
-
setCategories(response);
|
|
187
|
-
} catch (err) {
|
|
188
|
-
const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar categor\xEDas";
|
|
189
|
-
setError(errorMessage);
|
|
190
|
-
console.error("Error fetching categories:", err);
|
|
191
|
-
} finally {
|
|
192
|
-
setLoading(false);
|
|
193
|
-
}
|
|
194
|
-
}, []);
|
|
195
|
-
useEffect2(() => {
|
|
196
|
-
fetchCategories();
|
|
197
|
-
}, [fetchCategories]);
|
|
198
|
-
const refetch = useCallback2(() => {
|
|
199
|
-
fetchCategories();
|
|
200
|
-
}, [fetchCategories]);
|
|
201
|
-
return {
|
|
202
|
-
categories,
|
|
203
|
-
loading,
|
|
204
|
-
error,
|
|
205
|
-
refetch
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
207
|
export {
|
|
209
|
-
pakentoCMSAPI
|
|
210
|
-
useCategories,
|
|
211
|
-
useItems
|
|
208
|
+
pakentoCMSAPI
|
|
212
209
|
};
|
|
213
210
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useItems.ts","../src/services/api.ts","../src/hooks/useCategories.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseItemsOptions, UseItemsReturn, Item } from \"../types\";\n\nexport function useItems(options: UseItemsOptions = {}): UseItemsReturn {\n const { page = 1, limit = 10 } = options;\n\n const [items, setItems] = useState<Item[]>([]);\n const [totalDocs, setTotalDocs] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [prevPage, setPrevPage] = useState<number | null>(null);\n const [nextPage, setNextPage] = useState<number | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchItems = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getItems(page, limit);\n\n setItems(response.docs);\n setTotalDocs(response.totalDocs);\n setTotalPages(response.totalPages);\n setPrevPage(response.prevPage);\n setNextPage(response.nextPage);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar items\";\n setError(errorMessage);\n console.error(\"Error fetching items:\", err);\n } finally {\n setLoading(false);\n }\n }, [page, limit]);\n\n useEffect(() => {\n fetchItems();\n }, [fetchItems]);\n\n const refetch = useCallback(() => {\n fetchItems();\n }, [fetchItems]);\n\n return {\n items,\n totalDocs,\n totalPages,\n prevPage,\n nextPage,\n loading,\n error,\n refetch,\n };\n}\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(page: number = 1, limit: number = 10) {\n try {\n const query = `\n query Query($page: Int, $limit: Int) {\n GetEcommerceItems(page: $page, limit: $limit) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n cover_image_url\n cover_image_thumbnail_url\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: { page, limit },\n });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceItems\n return response.data.data.GetEcommerceItems;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n\n async getCategories() {\n try {\n const query = `\n query Query {\n GetEcommerceCategories {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceCategories\n return response.data.data.GetEcommerceCategories.docs;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n","import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseCategoriesReturn, Category } from \"../types\";\n\nexport function useCategories(): UseCategoriesReturn {\n const [categories, setCategories] = useState<Category[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchCategories = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getCategories();\n\n setCategories(response);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar categorías\";\n setError(errorMessage);\n console.error(\"Error fetching categories:\", err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n const refetch = useCallback(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n return {\n categories,\n loading,\n error,\n refetch,\n };\n}\n"],"mappings":"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","names":["useState","useEffect","useCallback","useState","useCallback","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/services/api.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\n} from \"../types\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(params: GetItemsParams = {}): Promise<ItemsApiResponse> {\n try {\n const query = `\n query GetEcommerceItems(\n $where: EcommerceItemsWhere\n $onlyOffers: Boolean\n $onlyEcommerce: Boolean\n $limit: Int\n $page: Int\n $search: String\n $sort: String\n $minPrice: Float\n $maxPrice: Float\n ) {\n GetEcommerceItems(\n where: $where\n onlyOffers: $onlyOffers\n onlyEcommerce: $onlyEcommerce\n limit: $limit\n page: $page\n search: $search\n sort: $sort\n minPrice: $minPrice\n maxPrice: $maxPrice\n ) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n price\n cover_image_url\n cover_image_thumbnail_url\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: ItemsRawResponse = response.data.data.GetEcommerceItems;\n\n return {\n data: rawData,\n items: rawData.docs,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n prevPage: rawData.prevPage,\n nextPage: rawData.nextPage,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getCategories(\n params: GetCategoriesParams = {}\n ): Promise<CategoriesApiResponse> {\n try {\n const query = `\n query GetEcommerceCategories(\n $where: EcommerceCategoriesWhere\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceCategories(\n where: $where\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n\n const rawData: CategoriesRawResponse =\n response.data.data.GetEcommerceCategories;\n\n return {\n data: rawData.docs,\n categories: rawData.docs,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":[]}
|