@pakento/cms-sdk 1.2.5 → 2.0.0
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 +48 -24
- package/dist/index.d.ts +48 -24
- package/dist/index.js +113 -119
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +112 -116
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -15,51 +15,75 @@ interface Item {
|
|
|
15
15
|
cover_image_thumbnail_url: string;
|
|
16
16
|
images: ItemImage[];
|
|
17
17
|
}
|
|
18
|
-
interface
|
|
18
|
+
interface Category {
|
|
19
|
+
id: number;
|
|
20
|
+
name: string;
|
|
21
|
+
image_url: string;
|
|
22
|
+
}
|
|
23
|
+
interface WhereEquals {
|
|
24
|
+
equals?: string;
|
|
25
|
+
}
|
|
26
|
+
interface ItemsWhere {
|
|
27
|
+
item_category_id?: WhereEquals;
|
|
28
|
+
item_super_category_id?: WhereEquals;
|
|
29
|
+
brand_id?: WhereEquals;
|
|
30
|
+
}
|
|
31
|
+
interface CategoriesWhere {
|
|
32
|
+
item_super_category_id?: WhereEquals;
|
|
33
|
+
brand_id?: WhereEquals;
|
|
34
|
+
}
|
|
35
|
+
interface GetItemsParams {
|
|
36
|
+
where?: ItemsWhere;
|
|
37
|
+
onlyOffers?: boolean;
|
|
38
|
+
onlyEcommerce?: boolean;
|
|
39
|
+
limit?: number;
|
|
40
|
+
page?: number;
|
|
41
|
+
search?: string;
|
|
42
|
+
sort?: string;
|
|
43
|
+
minPrice?: number;
|
|
44
|
+
maxPrice?: number;
|
|
45
|
+
}
|
|
46
|
+
interface GetCategoriesParams {
|
|
47
|
+
where?: CategoriesWhere;
|
|
48
|
+
limit?: number;
|
|
49
|
+
page?: number;
|
|
50
|
+
sort?: string;
|
|
51
|
+
}
|
|
52
|
+
interface ItemsRawResponse {
|
|
19
53
|
totalDocs: number;
|
|
20
54
|
totalPages: number;
|
|
21
55
|
prevPage: number | null;
|
|
22
56
|
nextPage: number | null;
|
|
23
57
|
docs: Item[];
|
|
24
58
|
}
|
|
25
|
-
interface
|
|
26
|
-
|
|
27
|
-
limit?: number;
|
|
59
|
+
interface CategoriesRawResponse {
|
|
60
|
+
docs: Category[];
|
|
28
61
|
}
|
|
29
|
-
interface
|
|
62
|
+
interface ItemsApiResponse {
|
|
63
|
+
data: ItemsRawResponse | null;
|
|
30
64
|
items: Item[];
|
|
31
65
|
totalDocs: number;
|
|
32
66
|
totalPages: number;
|
|
33
67
|
prevPage: number | null;
|
|
34
68
|
nextPage: number | null;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
refetch: () => void;
|
|
69
|
+
error: boolean;
|
|
70
|
+
errorMessage: string | null;
|
|
38
71
|
}
|
|
39
|
-
interface
|
|
40
|
-
|
|
41
|
-
name: string;
|
|
42
|
-
image_url: string;
|
|
43
|
-
}
|
|
44
|
-
interface UseCategoriesReturn {
|
|
72
|
+
interface CategoriesApiResponse {
|
|
73
|
+
data: Category[] | null;
|
|
45
74
|
categories: Category[];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
refetch: () => void;
|
|
75
|
+
error: boolean;
|
|
76
|
+
errorMessage: string | null;
|
|
49
77
|
}
|
|
50
78
|
|
|
51
|
-
declare function useItems(options?: UseItemsOptions): UseItemsReturn;
|
|
52
|
-
|
|
53
|
-
declare function useCategories(): UseCategoriesReturn;
|
|
54
|
-
|
|
55
79
|
declare class PakentoCMSAPI {
|
|
56
80
|
private client;
|
|
57
81
|
private baseURL;
|
|
58
82
|
private apiKey;
|
|
59
83
|
constructor();
|
|
60
|
-
getItems(
|
|
61
|
-
getCategories(): Promise<
|
|
84
|
+
getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
|
|
85
|
+
getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
|
|
62
86
|
}
|
|
63
87
|
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
64
88
|
|
|
65
|
-
export { type Category, type
|
|
89
|
+
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
|
@@ -15,51 +15,75 @@ interface Item {
|
|
|
15
15
|
cover_image_thumbnail_url: string;
|
|
16
16
|
images: ItemImage[];
|
|
17
17
|
}
|
|
18
|
-
interface
|
|
18
|
+
interface Category {
|
|
19
|
+
id: number;
|
|
20
|
+
name: string;
|
|
21
|
+
image_url: string;
|
|
22
|
+
}
|
|
23
|
+
interface WhereEquals {
|
|
24
|
+
equals?: string;
|
|
25
|
+
}
|
|
26
|
+
interface ItemsWhere {
|
|
27
|
+
item_category_id?: WhereEquals;
|
|
28
|
+
item_super_category_id?: WhereEquals;
|
|
29
|
+
brand_id?: WhereEquals;
|
|
30
|
+
}
|
|
31
|
+
interface CategoriesWhere {
|
|
32
|
+
item_super_category_id?: WhereEquals;
|
|
33
|
+
brand_id?: WhereEquals;
|
|
34
|
+
}
|
|
35
|
+
interface GetItemsParams {
|
|
36
|
+
where?: ItemsWhere;
|
|
37
|
+
onlyOffers?: boolean;
|
|
38
|
+
onlyEcommerce?: boolean;
|
|
39
|
+
limit?: number;
|
|
40
|
+
page?: number;
|
|
41
|
+
search?: string;
|
|
42
|
+
sort?: string;
|
|
43
|
+
minPrice?: number;
|
|
44
|
+
maxPrice?: number;
|
|
45
|
+
}
|
|
46
|
+
interface GetCategoriesParams {
|
|
47
|
+
where?: CategoriesWhere;
|
|
48
|
+
limit?: number;
|
|
49
|
+
page?: number;
|
|
50
|
+
sort?: string;
|
|
51
|
+
}
|
|
52
|
+
interface ItemsRawResponse {
|
|
19
53
|
totalDocs: number;
|
|
20
54
|
totalPages: number;
|
|
21
55
|
prevPage: number | null;
|
|
22
56
|
nextPage: number | null;
|
|
23
57
|
docs: Item[];
|
|
24
58
|
}
|
|
25
|
-
interface
|
|
26
|
-
|
|
27
|
-
limit?: number;
|
|
59
|
+
interface CategoriesRawResponse {
|
|
60
|
+
docs: Category[];
|
|
28
61
|
}
|
|
29
|
-
interface
|
|
62
|
+
interface ItemsApiResponse {
|
|
63
|
+
data: ItemsRawResponse | null;
|
|
30
64
|
items: Item[];
|
|
31
65
|
totalDocs: number;
|
|
32
66
|
totalPages: number;
|
|
33
67
|
prevPage: number | null;
|
|
34
68
|
nextPage: number | null;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
refetch: () => void;
|
|
69
|
+
error: boolean;
|
|
70
|
+
errorMessage: string | null;
|
|
38
71
|
}
|
|
39
|
-
interface
|
|
40
|
-
|
|
41
|
-
name: string;
|
|
42
|
-
image_url: string;
|
|
43
|
-
}
|
|
44
|
-
interface UseCategoriesReturn {
|
|
72
|
+
interface CategoriesApiResponse {
|
|
73
|
+
data: Category[] | null;
|
|
45
74
|
categories: Category[];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
refetch: () => void;
|
|
75
|
+
error: boolean;
|
|
76
|
+
errorMessage: string | null;
|
|
49
77
|
}
|
|
50
78
|
|
|
51
|
-
declare function useItems(options?: UseItemsOptions): UseItemsReturn;
|
|
52
|
-
|
|
53
|
-
declare function useCategories(): UseCategoriesReturn;
|
|
54
|
-
|
|
55
79
|
declare class PakentoCMSAPI {
|
|
56
80
|
private client;
|
|
57
81
|
private baseURL;
|
|
58
82
|
private apiKey;
|
|
59
83
|
constructor();
|
|
60
|
-
getItems(
|
|
61
|
-
getCategories(): Promise<
|
|
84
|
+
getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
|
|
85
|
+
getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
|
|
62
86
|
}
|
|
63
87
|
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
64
88
|
|
|
65
|
-
export { type Category, type
|
|
89
|
+
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
|
|
@@ -101,34 +116,75 @@ var PakentoCMSAPI = class {
|
|
|
101
116
|
`;
|
|
102
117
|
const response = await this.client.post("/api/graphql", {
|
|
103
118
|
query,
|
|
104
|
-
variables:
|
|
119
|
+
variables: params
|
|
105
120
|
});
|
|
106
121
|
if (response.data.errors) {
|
|
107
|
-
|
|
122
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
123
|
+
return {
|
|
124
|
+
data: null,
|
|
125
|
+
items: [],
|
|
126
|
+
totalDocs: 0,
|
|
127
|
+
totalPages: 0,
|
|
128
|
+
prevPage: null,
|
|
129
|
+
nextPage: null,
|
|
130
|
+
error: true,
|
|
131
|
+
errorMessage
|
|
132
|
+
};
|
|
108
133
|
}
|
|
109
|
-
|
|
134
|
+
const rawData = response.data.data.GetEcommerceItems;
|
|
135
|
+
return {
|
|
136
|
+
data: rawData,
|
|
137
|
+
items: rawData.docs,
|
|
138
|
+
totalDocs: rawData.totalDocs,
|
|
139
|
+
totalPages: rawData.totalPages,
|
|
140
|
+
prevPage: rawData.prevPage,
|
|
141
|
+
nextPage: rawData.nextPage,
|
|
142
|
+
error: false,
|
|
143
|
+
errorMessage: null
|
|
144
|
+
};
|
|
110
145
|
} catch (error) {
|
|
146
|
+
let errorMessage = "Error desconocido";
|
|
111
147
|
if (error instanceof import_axios.AxiosError) {
|
|
112
148
|
const status = error.response?.status;
|
|
113
149
|
if (status === 401) {
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
150
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
151
|
+
} else if (status === 404) {
|
|
152
|
+
errorMessage = "Endpoint no encontrado";
|
|
153
|
+
} else if (status && status >= 500) {
|
|
154
|
+
errorMessage = "Error del servidor CMS";
|
|
155
|
+
} else {
|
|
156
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
121
157
|
}
|
|
122
|
-
|
|
158
|
+
} else if (error instanceof Error) {
|
|
159
|
+
errorMessage = error.message;
|
|
123
160
|
}
|
|
124
|
-
|
|
161
|
+
return {
|
|
162
|
+
data: null,
|
|
163
|
+
items: [],
|
|
164
|
+
totalDocs: 0,
|
|
165
|
+
totalPages: 0,
|
|
166
|
+
prevPage: null,
|
|
167
|
+
nextPage: null,
|
|
168
|
+
error: true,
|
|
169
|
+
errorMessage
|
|
170
|
+
};
|
|
125
171
|
}
|
|
126
172
|
}
|
|
127
|
-
async getCategories() {
|
|
173
|
+
async getCategories(params = {}) {
|
|
128
174
|
try {
|
|
129
175
|
const query = `
|
|
130
|
-
query
|
|
131
|
-
|
|
176
|
+
query GetEcommerceCategories(
|
|
177
|
+
$where: EcommerceCategoriesWhere
|
|
178
|
+
$limit: Int
|
|
179
|
+
$page: Int
|
|
180
|
+
$sort: String
|
|
181
|
+
) {
|
|
182
|
+
GetEcommerceCategories(
|
|
183
|
+
where: $where
|
|
184
|
+
limit: $limit
|
|
185
|
+
page: $page
|
|
186
|
+
sort: $sort
|
|
187
|
+
) {
|
|
132
188
|
docs {
|
|
133
189
|
id
|
|
134
190
|
name
|
|
@@ -138,115 +194,53 @@ var PakentoCMSAPI = class {
|
|
|
138
194
|
}
|
|
139
195
|
`;
|
|
140
196
|
const response = await this.client.post("/api/graphql", {
|
|
141
|
-
query
|
|
197
|
+
query,
|
|
198
|
+
variables: params
|
|
142
199
|
});
|
|
143
200
|
if (response.data.errors) {
|
|
144
|
-
|
|
201
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
202
|
+
return {
|
|
203
|
+
data: null,
|
|
204
|
+
categories: [],
|
|
205
|
+
error: true,
|
|
206
|
+
errorMessage
|
|
207
|
+
};
|
|
145
208
|
}
|
|
146
|
-
|
|
209
|
+
const rawData = response.data.data.GetEcommerceCategories;
|
|
210
|
+
return {
|
|
211
|
+
data: rawData.docs,
|
|
212
|
+
categories: rawData.docs,
|
|
213
|
+
error: false,
|
|
214
|
+
errorMessage: null
|
|
215
|
+
};
|
|
147
216
|
} catch (error) {
|
|
217
|
+
let errorMessage = "Error desconocido";
|
|
148
218
|
if (error instanceof import_axios.AxiosError) {
|
|
149
219
|
const status = error.response?.status;
|
|
150
220
|
if (status === 401) {
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
221
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
222
|
+
} else if (status === 404) {
|
|
223
|
+
errorMessage = "Endpoint no encontrado";
|
|
224
|
+
} else if (status && status >= 500) {
|
|
225
|
+
errorMessage = "Error del servidor CMS";
|
|
226
|
+
} else {
|
|
227
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
158
228
|
}
|
|
159
|
-
|
|
229
|
+
} else if (error instanceof Error) {
|
|
230
|
+
errorMessage = error.message;
|
|
160
231
|
}
|
|
161
|
-
|
|
232
|
+
return {
|
|
233
|
+
data: null,
|
|
234
|
+
categories: [],
|
|
235
|
+
error: true,
|
|
236
|
+
errorMessage
|
|
237
|
+
};
|
|
162
238
|
}
|
|
163
239
|
}
|
|
164
240
|
};
|
|
165
241
|
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
242
|
// Annotate the CommonJS export names for ESM import in node:
|
|
247
243
|
0 && (module.exports = {
|
|
248
|
-
pakentoCMSAPI
|
|
249
|
-
useCategories,
|
|
250
|
-
useItems
|
|
244
|
+
pakentoCMSAPI
|
|
251
245
|
});
|
|
252
246
|
//# 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 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
|
|
@@ -63,34 +80,75 @@ var PakentoCMSAPI = class {
|
|
|
63
80
|
`;
|
|
64
81
|
const response = await this.client.post("/api/graphql", {
|
|
65
82
|
query,
|
|
66
|
-
variables:
|
|
83
|
+
variables: params
|
|
67
84
|
});
|
|
68
85
|
if (response.data.errors) {
|
|
69
|
-
|
|
86
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
87
|
+
return {
|
|
88
|
+
data: null,
|
|
89
|
+
items: [],
|
|
90
|
+
totalDocs: 0,
|
|
91
|
+
totalPages: 0,
|
|
92
|
+
prevPage: null,
|
|
93
|
+
nextPage: null,
|
|
94
|
+
error: true,
|
|
95
|
+
errorMessage
|
|
96
|
+
};
|
|
70
97
|
}
|
|
71
|
-
|
|
98
|
+
const rawData = response.data.data.GetEcommerceItems;
|
|
99
|
+
return {
|
|
100
|
+
data: rawData,
|
|
101
|
+
items: rawData.docs,
|
|
102
|
+
totalDocs: rawData.totalDocs,
|
|
103
|
+
totalPages: rawData.totalPages,
|
|
104
|
+
prevPage: rawData.prevPage,
|
|
105
|
+
nextPage: rawData.nextPage,
|
|
106
|
+
error: false,
|
|
107
|
+
errorMessage: null
|
|
108
|
+
};
|
|
72
109
|
} catch (error) {
|
|
110
|
+
let errorMessage = "Error desconocido";
|
|
73
111
|
if (error instanceof AxiosError) {
|
|
74
112
|
const status = error.response?.status;
|
|
75
113
|
if (status === 401) {
|
|
76
|
-
|
|
114
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
115
|
+
} else if (status === 404) {
|
|
116
|
+
errorMessage = "Endpoint no encontrado";
|
|
117
|
+
} else if (status && status >= 500) {
|
|
118
|
+
errorMessage = "Error del servidor CMS";
|
|
119
|
+
} else {
|
|
120
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
77
121
|
}
|
|
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}`);
|
|
122
|
+
} else if (error instanceof Error) {
|
|
123
|
+
errorMessage = error.message;
|
|
85
124
|
}
|
|
86
|
-
|
|
125
|
+
return {
|
|
126
|
+
data: null,
|
|
127
|
+
items: [],
|
|
128
|
+
totalDocs: 0,
|
|
129
|
+
totalPages: 0,
|
|
130
|
+
prevPage: null,
|
|
131
|
+
nextPage: null,
|
|
132
|
+
error: true,
|
|
133
|
+
errorMessage
|
|
134
|
+
};
|
|
87
135
|
}
|
|
88
136
|
}
|
|
89
|
-
async getCategories() {
|
|
137
|
+
async getCategories(params = {}) {
|
|
90
138
|
try {
|
|
91
139
|
const query = `
|
|
92
|
-
query
|
|
93
|
-
|
|
140
|
+
query GetEcommerceCategories(
|
|
141
|
+
$where: EcommerceCategoriesWhere
|
|
142
|
+
$limit: Int
|
|
143
|
+
$page: Int
|
|
144
|
+
$sort: String
|
|
145
|
+
) {
|
|
146
|
+
GetEcommerceCategories(
|
|
147
|
+
where: $where
|
|
148
|
+
limit: $limit
|
|
149
|
+
page: $page
|
|
150
|
+
sort: $sort
|
|
151
|
+
) {
|
|
94
152
|
docs {
|
|
95
153
|
id
|
|
96
154
|
name
|
|
@@ -100,114 +158,52 @@ var PakentoCMSAPI = class {
|
|
|
100
158
|
}
|
|
101
159
|
`;
|
|
102
160
|
const response = await this.client.post("/api/graphql", {
|
|
103
|
-
query
|
|
161
|
+
query,
|
|
162
|
+
variables: params
|
|
104
163
|
});
|
|
105
164
|
if (response.data.errors) {
|
|
106
|
-
|
|
165
|
+
const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
|
|
166
|
+
return {
|
|
167
|
+
data: null,
|
|
168
|
+
categories: [],
|
|
169
|
+
error: true,
|
|
170
|
+
errorMessage
|
|
171
|
+
};
|
|
107
172
|
}
|
|
108
|
-
|
|
173
|
+
const rawData = response.data.data.GetEcommerceCategories;
|
|
174
|
+
return {
|
|
175
|
+
data: rawData.docs,
|
|
176
|
+
categories: rawData.docs,
|
|
177
|
+
error: false,
|
|
178
|
+
errorMessage: null
|
|
179
|
+
};
|
|
109
180
|
} catch (error) {
|
|
181
|
+
let errorMessage = "Error desconocido";
|
|
110
182
|
if (error instanceof AxiosError) {
|
|
111
183
|
const status = error.response?.status;
|
|
112
184
|
if (status === 401) {
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
185
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
186
|
+
} else if (status === 404) {
|
|
187
|
+
errorMessage = "Endpoint no encontrado";
|
|
188
|
+
} else if (status && status >= 500) {
|
|
189
|
+
errorMessage = "Error del servidor CMS";
|
|
190
|
+
} else {
|
|
191
|
+
errorMessage = `Error de conexi\xF3n: ${error.message}`;
|
|
120
192
|
}
|
|
121
|
-
|
|
193
|
+
} else if (error instanceof Error) {
|
|
194
|
+
errorMessage = error.message;
|
|
122
195
|
}
|
|
123
|
-
|
|
196
|
+
return {
|
|
197
|
+
data: null,
|
|
198
|
+
categories: [],
|
|
199
|
+
error: true,
|
|
200
|
+
errorMessage
|
|
201
|
+
};
|
|
124
202
|
}
|
|
125
203
|
}
|
|
126
204
|
};
|
|
127
205
|
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
206
|
export {
|
|
209
|
-
pakentoCMSAPI
|
|
210
|
-
useCategories,
|
|
211
|
-
useItems
|
|
207
|
+
pakentoCMSAPI
|
|
212
208
|
};
|
|
213
209
|
//# 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 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":[]}
|