contentoh-components-library 21.3.53 → 21.3.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.env.development +2 -0
  2. package/dist/components/atoms/ButtonV2/styles.js +1 -1
  3. package/dist/components/atoms/Status/styles.js +1 -1
  4. package/dist/components/atoms/VerticalSideMenuMainPage/index.js +18 -23
  5. package/dist/components/atoms/VerticalSideMenuMainPage/styles.js +4 -4
  6. package/dist/components/molecules/CarouselImagesLogin/index.js +1 -1
  7. package/dist/components/molecules/HeaderTop/index.js +68 -11
  8. package/dist/components/organisms/Chat/Chat.stories.js +21 -1
  9. package/dist/components/organisms/Chat/ContainerItems/index.js +19 -3
  10. package/dist/components/organisms/Chat/ContainerItems/styles.js +1 -1
  11. package/dist/components/organisms/Chat/ContentChat/index.js +343 -191
  12. package/dist/components/organisms/Chat/Footer/index.js +48 -39
  13. package/dist/components/organisms/Chat/index.js +48 -3
  14. package/dist/components/organisms/DashboardMetric/dashboardMetricUtils.js +27 -0
  15. package/dist/components/organisms/FullProductNameHeader/index.js +2 -2
  16. package/dist/components/organisms/GlobalModal/styles.js +1 -1
  17. package/dist/components/organisms/OrderDetail/styles.js +1 -1
  18. package/dist/components/organisms/OrderDetail/utils/Table/styles.js +1 -1
  19. package/dist/components/pages/Dashboard/Dashboard.stories.js +31 -50
  20. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +198 -81
  21. package/dist/components/pages/ProviderProductEdition/index.js +725 -429
  22. package/dist/components/pages/ProviderProductEdition/styles.js +1 -1
  23. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +72 -89
  24. package/dist/components/pages/RetailerProductEdition/index.js +267 -278
  25. package/dist/components/pages/RetailerProductEdition/styles.js +1 -1
  26. package/dist/components/pages/RetailerProductEdition/utils.js +61 -2
  27. package/dist/index.js +13 -0
  28. package/package.json +7 -6
  29. package/src/components/atoms/ButtonV2/styles.js +1 -1
  30. package/src/components/atoms/Status/styles.js +4 -0
  31. package/src/components/atoms/VerticalSideMenuMainPage/index.js +18 -22
  32. package/src/components/atoms/VerticalSideMenuMainPage/styles.js +3 -4
  33. package/src/components/molecules/CarouselImagesLogin/index.js +1 -1
  34. package/src/components/molecules/HeaderTop/index.js +52 -6
  35. package/src/components/organisms/Chat/Chat.stories.js +21 -0
  36. package/src/components/organisms/Chat/ContainerItems/index.js +18 -2
  37. package/src/components/organisms/Chat/ContainerItems/styles.js +10 -2
  38. package/src/components/organisms/Chat/ContentChat/index.js +81 -6
  39. package/src/components/organisms/Chat/Footer/index.js +11 -0
  40. package/src/components/organisms/Chat/index.js +47 -3
  41. package/src/components/organisms/DashboardMetric/dashboardMetricUtils.js +18 -1
  42. package/src/components/organisms/FullProductNameHeader/index.js +1 -1
  43. package/src/components/organisms/GlobalModal/styles.js +10 -0
  44. package/src/components/organisms/OrderDetail/index.js +1 -0
  45. package/src/components/organisms/OrderDetail/styles.js +1 -1
  46. package/src/components/organisms/OrderDetail/utils/Table/styles.js +0 -1
  47. package/src/components/organisms/TableResizable/TableResizable.stories.js +17 -0
  48. package/src/components/organisms/TableResizable/index.js +119 -0
  49. package/src/components/organisms/TableResizable/styles.js +133 -0
  50. package/src/components/organisms/TableResizable/utils.js +46 -0
  51. package/src/components/pages/Dashboard/Dashboard.stories.js +31 -55
  52. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +214 -88
  53. package/src/components/pages/ProviderProductEdition/index.js +323 -160
  54. package/src/components/pages/ProviderProductEdition/styles.js +5 -1
  55. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +75 -91
  56. package/src/components/pages/RetailerProductEdition/index.js +111 -137
  57. package/src/components/pages/RetailerProductEdition/styles.js +4 -0
  58. package/src/components/pages/RetailerProductEdition/utils.js +37 -0
  59. package/src/index.js +1 -0
@@ -169,6 +169,17 @@ export const Footer = (props) => {
169
169
  errorMessage = "El ID del ticket no es valido";
170
170
  }
171
171
  break;
172
+ case "product_status":
173
+ if (
174
+ isValidNaturalNumber(dataChat?.id) &&
175
+ isValidNaturalNumber(dataChat?.version) &&
176
+ isValidNaturalNumber(dataChat?.retailerId)
177
+ ) {
178
+ fileKey += `productStatus/${dataChat.id}-${dataChat?.version}-${dataChat?.retailerId}/`;
179
+ } else {
180
+ errorMessage = "El ID del ticket no es valido";
181
+ }
182
+ break;
172
183
 
173
184
  default:
174
185
  errorMessage =
@@ -24,7 +24,7 @@ export const Chat = (props) => {
24
24
  const [showPopUpChat, setShowPopUpChat] = useState(false);
25
25
  const [data, setData] = useState();
26
26
 
27
- const { ticketCompany } = chatData || {};
27
+ const { ticketCompany, retailerId } = chatData || {};
28
28
 
29
29
  useEffect(() => {
30
30
  switch (chatType) {
@@ -37,6 +37,9 @@ export const Chat = (props) => {
37
37
  case "ticket":
38
38
  validateChatTicket();
39
39
  break;
40
+ case "product_status":
41
+ validateProductStatus();
42
+ break;
40
43
  default:
41
44
  setData({
42
45
  code: 404,
@@ -46,6 +49,45 @@ export const Chat = (props) => {
46
49
  }
47
50
  }, [chatType]);
48
51
 
52
+ const validateProductStatus = () => {
53
+ const {
54
+ userToken, // string
55
+ id, // number
56
+ version,
57
+ retailerId, // number
58
+ status,
59
+ orderId,
60
+ } = chatData;
61
+
62
+ if (!isValidGeneral(userToken, id)) return;
63
+
64
+ // validar el ID de la cadena asociada al producto en la OT
65
+ if (!isValidNaturalNumber(retailerId)) {
66
+ setDataError("La cadena relacionada al producto no es válida");
67
+ return;
68
+ }
69
+
70
+ // validar el ID de la version asociada al producto en la OT
71
+ if (!isValidNaturalNumber(version)) {
72
+ setDataError("La versión del producto no es válida");
73
+ return;
74
+ }
75
+
76
+ if (orderId && !isValidNaturalNumber(orderId)) {
77
+ setDataError("La orden del producto no es válida");
78
+ return;
79
+ }
80
+
81
+ setData({
82
+ userToken,
83
+ id,
84
+ version,
85
+ retailerId,
86
+ orderId,
87
+ status,
88
+ });
89
+ };
90
+
49
91
  const isValidGeneral = (userToken, id) => {
50
92
  // validar token del user
51
93
  if (isStringEmpty(userToken)) {
@@ -69,6 +111,8 @@ export const Chat = (props) => {
69
111
  retailerId, // number
70
112
  } = chatData;
71
113
 
114
+ console.log(chatData, "chatData");
115
+
72
116
  if (!isValidGeneral(userToken, id)) return;
73
117
 
74
118
  // validar el ID de la OT en donde se encuentra el producto
@@ -197,7 +241,7 @@ export const Chat = (props) => {
197
241
  dataChat={data}
198
242
  showBtnClose={false}
199
243
  ticketCompany={ticketCompany}
200
- activeRetailer={props.activeRetailer}
244
+ activeRetailer={props.activeRetailer || { id: retailerId }}
201
245
  />
202
246
  </ContainerFixed>
203
247
  );
@@ -230,7 +274,7 @@ export const Chat = (props) => {
230
274
  onClickBtnClose={() => {
231
275
  setShowPopUpChat(false);
232
276
  }}
233
- activeRetailer={props.activeRetailer}
277
+ activeRetailer={props.activeRetailer || { id: retailerId }}
234
278
  />
235
279
  </ContainerPopUp>
236
280
  </Slide>
@@ -35,6 +35,16 @@ export const getFullStatus = (status) => {
35
35
  return "Exportado";
36
36
  case "NS":
37
37
  return "No solicitado";
38
+ case "SAC":
39
+ return "Solicitud Auditoría Content-oh!";
40
+ case "AAC":
41
+ return "Aprobado Auditoría Content-oh!";
42
+ case "RAC":
43
+ return "Rechazado Auditoría Content-oh!";
44
+ case "FAP":
45
+ return "Finalización Auditoría por Proveedor";
46
+ default:
47
+ return "";
38
48
  }
39
49
  };
40
50
 
@@ -75,6 +85,14 @@ export const getStatusColor = (status) => {
75
85
  return "black";
76
86
  case "Ex":
77
87
  return "#09CAD8";
88
+ case "SAC":
89
+ return "#2471A3";
90
+ case "AAC":
91
+ return "#1ABC9C";
92
+ case "RAC":
93
+ return "#229954";
94
+ case "FAP":
95
+ return "#F1C40F";
78
96
  default:
79
97
  return "white";
80
98
  }
@@ -104,7 +122,6 @@ export const removeOldStatus = (object) => {
104
122
  object["AC"] = object["AC"] + object["AF"];
105
123
  delete object["AF"];
106
124
  break;
107
-
108
125
  default:
109
126
  break;
110
127
  }
@@ -23,7 +23,7 @@ export const FullProductNameHeader = ({
23
23
  useEffect(() => {
24
24
  const rtls = headerData?.retailers || headerData?.retailersAvailable;
25
25
  servicesData &&
26
- rtls.forEach((rt) => {
26
+ rtls?.forEach((rt) => {
27
27
  const element = [];
28
28
  servicesData.forEach((sd) => {
29
29
  if (sd.id_retailer === rt.id) {
@@ -27,6 +27,16 @@ export const MessageContainer = styled.div`
27
27
  min-height: ${(props) => (props.height ? "300px" : "190px")};
28
28
  background: #281f33;
29
29
  border-radius: 39px;
30
+ & > .generic-text {
31
+ width: 100%;
32
+ font-family: Raleway;
33
+ font-style: normal;
34
+ font-weight: normal;
35
+ font-size: 16px;
36
+ text-align: center;
37
+ color: #f7f7f7;
38
+ margin: 20px 0px;
39
+ }
30
40
  `;
31
41
  export const TextArea = styled.textarea`
32
42
  display: block;
@@ -117,6 +117,7 @@ export const OrderDetail = (props) => {
117
117
  <img src={downloadIcon} alt="Download detail order" />
118
118
  </IconButton>
119
119
  )}
120
+
120
121
  <Button
121
122
  type="image"
122
123
  onClick={() => {
@@ -14,7 +14,7 @@ export const MainContainer = styled.div`
14
14
  & > * {
15
15
  padding: 0 30px;
16
16
  }
17
- box-shadow: -4px 0px 8px 0px rgba(0,0,0,0.1);
17
+ box-shadow: -4px 0px 8px 0px rgba(0, 0, 0, 0.1);
18
18
  .headerTitle {
19
19
  font-weight: bold;
20
20
  font-size: 25px;
@@ -36,7 +36,6 @@ export const Column = styled.div`
36
36
  &:nth-child(-n + 2) {
37
37
  overflow: hidden;
38
38
  }
39
-
40
39
  .tooltip {
41
40
  position: relative;
42
41
  display: inline-block;
@@ -0,0 +1,17 @@
1
+ import { TableResizable } from ".";
2
+ import { data } from "./utils.js";
3
+
4
+ export default {
5
+ title: "Components/organisms/TableResizable",
6
+ component: TableResizable,
7
+ };
8
+
9
+ const Template = (args) => <TableResizable {...args} />;
10
+
11
+ export const DefaultTableResizable = Template.bind({});
12
+ DefaultTableResizable.args = {
13
+ headers: ["Col 1", "Col 2", "Col 3", "Col 4", "Col 5"],
14
+ tableContent: data,
15
+ minCellWidth: 120,
16
+ withResetSizeButton: true,
17
+ };
@@ -0,0 +1,119 @@
1
+ import React, { useState, useCallback, useEffect, useRef } from "react";
2
+ import { RestartAlt } from "@mui/icons-material";
3
+ import { Container } from "./styles.js";
4
+
5
+ const createHeaders = (headers) => {
6
+ return headers.map((item) => ({
7
+ text: item,
8
+ ref: useRef(),
9
+ }));
10
+ };
11
+
12
+ /*
13
+ * Read the blog post here:
14
+ * https://letsbuildui.dev/articles/resizable-tables-with-react-and-css-grid
15
+ */
16
+ export const TableResizable = (props) => {
17
+ const {
18
+ gridTemplateColumns,
19
+ headers,
20
+ minCellWidth,
21
+ tableContent,
22
+ withResetSizeButton,
23
+ } = props;
24
+ // const [tableHeight, setTableHeight] = useState("auto");
25
+ const [activeIndex, setActiveIndex] = useState(null);
26
+ const tableElement = useRef(null);
27
+ const columns = createHeaders(headers);
28
+
29
+ // useEffect(() => {
30
+ // setTableHeight(tableElement.current.offsetHeight);
31
+ // }, []);
32
+
33
+ const mouseDown = (index) => setActiveIndex(index);
34
+
35
+ const mouseMove = useCallback(
36
+ (e) => {
37
+ const gridColumns = columns.map((col, i) => {
38
+ if (i === activeIndex) {
39
+ const width = e.clientX - col.ref.current.offsetLeft;
40
+ if (width >= minCellWidth) return `${width}px`;
41
+ }
42
+ return `${col.ref.current.offsetWidth}px`;
43
+ });
44
+ const gridTemplateColumns = `${gridColumns.join(" ")}`;
45
+ tableElement.current.style.gridTemplateColumns = gridTemplateColumns;
46
+ },
47
+ [activeIndex, columns, minCellWidth]
48
+ );
49
+
50
+ const removeListeners = useCallback(() => {
51
+ window.removeEventListener("mousemove", mouseMove);
52
+ window.removeEventListener("mouseup", removeListeners);
53
+ }, [mouseMove]);
54
+
55
+ const mouseUp = useCallback(() => {
56
+ setActiveIndex(null);
57
+ removeListeners();
58
+ }, [setActiveIndex, removeListeners]);
59
+
60
+ useEffect(() => {
61
+ if (activeIndex > -1) {
62
+ window.addEventListener("mousemove", mouseMove);
63
+ window.addEventListener("mouseup", mouseUp);
64
+ }
65
+ return () => removeListeners();
66
+ }, [activeIndex, mouseMove, mouseUp, removeListeners]);
67
+
68
+ const resetTableCells = () => {
69
+ tableElement.current.style.gridTemplateColumns = "";
70
+ };
71
+
72
+ return (
73
+ <Container
74
+ gridTemplateColumns={gridTemplateColumns}
75
+ totalColumns={columns?.length}
76
+ totalRows={tableContent?.length}
77
+ >
78
+ {withResetSizeButton ? (
79
+ <button className="reset-button" onClick={resetTableCells}>
80
+ <RestartAlt sx={{ fontSize: 18 }} />
81
+ </button>
82
+ ) : null}
83
+ <div className="table-wrapper">
84
+ <table className="resizeable-table" ref={tableElement}>
85
+ <thead>
86
+ <tr>
87
+ {columns?.map(({ ref, text }, i) => (
88
+ <th ref={ref} key={i}>
89
+ <span>{text}</span>
90
+ <div
91
+ style={{ height: "50px" /* tableHeight */ }}
92
+ onMouseDown={() => mouseDown(i)}
93
+ className={`resize-handle ${
94
+ activeIndex === i ? "active" : "idle"
95
+ }`}
96
+ />
97
+ </th>
98
+ ))}
99
+ </tr>
100
+ </thead>
101
+ <tbody>
102
+ {tableContent.map((row) => (
103
+ <tr key={row.key}>
104
+ {row?.columns?.map((column, indexColumn) => (
105
+ <td
106
+ className={typeof column === "object" ? "noOverflow" : ""}
107
+ key={`${row.key}-${indexColumn}`}
108
+ >
109
+ <span>{column}</span>
110
+ </td>
111
+ ))}
112
+ </tr>
113
+ ))}
114
+ </tbody>
115
+ </table>
116
+ </div>
117
+ </Container>
118
+ );
119
+ };
@@ -0,0 +1,133 @@
1
+ import styled from "styled-components";
2
+
3
+ const defaultTemplateColumns = (totalColumns) =>
4
+ `minmax(100px, 1fr) `.repeat(totalColumns);
5
+
6
+ export const Container = styled.div`
7
+ position: absolute;
8
+ overflow: hidden; /* Clips any scrollbars that appear */
9
+ font-family: Avenir Next;
10
+ font-size: 13px;
11
+ width: 90%;
12
+
13
+ .reset-button {
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: center;
17
+ border-radius: 50%;
18
+ cursor: pointer;
19
+ padding: 3px;
20
+ border: 0;
21
+ background: #f5f5f5;
22
+ position: absolute;
23
+ top: 5px;
24
+ left: 5px;
25
+ margin: 0;
26
+ z-index: 10;
27
+ }
28
+
29
+ .table-wrapper {
30
+ border-radius: 6px;
31
+ background: #fff;
32
+ }
33
+
34
+ table {
35
+ width: 100%;
36
+ height: calc(100vh - 250px);
37
+ overflow: auto; /* Allow scrolling within the table */
38
+ display: grid;
39
+ grid-template-columns: ${(props) =>
40
+ props.gridTemplateColumns ?? defaultTemplateColumns(props.totalColumns)};
41
+ grid-template-rows: ${(props) => `repeat(${props.totalRows + 2}, 50px)`};
42
+ }
43
+
44
+ table th {
45
+ font-size: 15px;
46
+ }
47
+
48
+ table th,
49
+ table td {
50
+ text-align: left;
51
+ padding: 5px;
52
+ }
53
+
54
+ table th span,
55
+ table td span {
56
+ white-space: nowrap;
57
+ text-overflow: ellipsis;
58
+ overflow: hidden;
59
+ display: block;
60
+ border-right: 1px solid #ccc;
61
+ text-align: center;
62
+ height: 100%;
63
+ }
64
+
65
+ table th:last-child span,
66
+ table td:last-child span {
67
+ border-right: 0px;
68
+ }
69
+
70
+ table tr td {
71
+ border-bottom: 1px solid #ccc;
72
+ }
73
+
74
+ table tr th {
75
+ border-bottom: 1px solid #ccc;
76
+ }
77
+
78
+ table thead,
79
+ table tbody,
80
+ table tr {
81
+ display: contents;
82
+ background: red;
83
+ }
84
+
85
+ table thead {
86
+ -webkit-user-select: none; /* Safari */
87
+ -ms-user-select: none; /* IE 10 and IE 11 */
88
+ user-select: none; /* Standard syntax */
89
+ }
90
+
91
+ th {
92
+ position: sticky;
93
+ top: 0;
94
+ background-color: #fff;
95
+ line-height: 40px;
96
+ z-index: 8;
97
+ }
98
+
99
+ td {
100
+ line-height: 40px;
101
+ height: 50px;
102
+ }
103
+
104
+ .resize-handle {
105
+ display: block;
106
+ position: absolute;
107
+ cursor: col-resize;
108
+ width: 8px;
109
+ right: 0;
110
+ top: 0;
111
+ z-index: 1;
112
+ border-right: 1px solid transparent;
113
+ }
114
+
115
+ .resize-handle:hover {
116
+ border-color: #ccc;
117
+ }
118
+
119
+ .resize-handle.active {
120
+ border-color: #517ea5;
121
+ }
122
+
123
+ .resizeable-table {
124
+ width: 100%;
125
+ }
126
+
127
+ .noOverflow {
128
+ overflow: inherit;
129
+ span {
130
+ overflow: inherit;
131
+ }
132
+ }
133
+ `;
@@ -0,0 +1,46 @@
1
+ export const data = [
2
+ {
3
+ key: 1,
4
+ object: {},
5
+ columns: [
6
+ "Large Detroit Style Pizza",
7
+ 3213456785,
8
+ "$31.43",
9
+ "Pending",
10
+ "Dave",
11
+ ],
12
+ },
13
+ {
14
+ key: 2,
15
+ object: {},
16
+ columns: [
17
+ "Large Detroit Style Pizza",
18
+ 3213456785,
19
+ "$31.43",
20
+ "Pending",
21
+ "Dave",
22
+ ],
23
+ },
24
+ {
25
+ key: 3,
26
+ object: {},
27
+ columns: [
28
+ "Large Detroit Style Pizza",
29
+ 3213456785,
30
+ "$31.43",
31
+ "Pending",
32
+ "Dave",
33
+ ],
34
+ },
35
+ {
36
+ key: 4,
37
+ object: {},
38
+ columns: [
39
+ "Large Detroit Style Pizza",
40
+ 3213456785,
41
+ "$31.43",
42
+ "Pending",
43
+ "Dave",
44
+ ],
45
+ },
46
+ ];
@@ -9,83 +9,59 @@ const Template = (args) => <Dashboard {...args} />;
9
9
  export const DashboardDeafult = Template.bind({});
10
10
  DashboardDeafult.args = {
11
11
  user: {
12
- id_user: 59,
13
- name: "Cadena",
14
- last_name: "Comercial",
15
- email: "cadena.ismael@allfreemail.net",
16
- position: "Admin",
17
- telephone: "+523111366336",
18
- country: "México",
19
- id_company: 817,
20
- id_cognito: "5884ae34-59d6-4454-b98e-821518bcc3a7",
12
+ id_user: 51,
13
+ name: "ADMIN PRUEBA",
14
+ last_name: "",
15
+ email: "etc@contentoh.com",
16
+ position: "",
17
+ telephone: "",
18
+ country: "",
19
+ id_company: 2,
20
+ id_cognito: "a6c4d3d6-24a4-41d4-ad0f-d087438ab5b6",
21
21
  birth_Date: null,
22
22
  about_me: "",
23
23
  zip_code: "",
24
24
  address: "",
25
25
  job: "",
26
26
  id_stripe: "",
27
- id_role: 0,
27
+ id_role: 1,
28
28
  active: 1,
29
- is_retailer: 1,
30
- email_notify: 0,
29
+ is_retailer: 0,
30
+ email_notify: 1,
31
31
  is_user_tech: null,
32
32
  membership: {
33
- id: 47,
34
- start_date: "2022-05-25T14:31:12.000Z",
35
- end_date: "2023-05-25T14:31:12.000Z",
36
- planID: 5,
37
- plan: "prod_Ktl6B5Ou2gqTB2",
38
- name: "Plan Pro",
39
- user_limit: "5",
40
- products_limit: "500",
33
+ id: 2,
34
+ start_date: "2021-11-05T02:35:12.000Z",
35
+ end_date: "2022-11-05T02:34:49.000Z",
36
+ planID: 1,
37
+ plan: "prod_KtkvuFFLpOdP6e",
38
+ name: "Plan Free",
39
+ user_limit: "1",
40
+ products_limit: "3",
41
41
  type: "PyMES",
42
42
  },
43
- src: "https://content-management-profile.s3.amazonaws.com/id-59/59.png?1681406304781",
43
+ src: "https://content-management-profile.s3.amazonaws.com/id-51/51.png?1681499918721",
44
44
  },
45
45
  company: {
46
- id_company: 817,
47
- trade_name: "Retailer acc",
48
- company_name: "Retailer acc",
49
- rfc: "ASER12345",
50
- adress: "Av. Insurgentes",
46
+ id_company: 2,
47
+ trade_name: "Content-oh!",
48
+ company_name: "Content-oh!",
49
+ rfc: null,
50
+ adress: null,
51
51
  about_company: null,
52
52
  telephone: null,
53
53
  web_site: null,
54
54
  zip_code: null,
55
55
  email: null,
56
56
  social_link: null,
57
- is_retailer: 1,
58
- financedRetailers: [
59
- {
60
- id: 68,
61
- name: "The Home Depot Merchants",
62
- country: "México",
63
- id_region: 1,
64
- active: 1,
65
- },
66
- ],
57
+ is_retailer: 0,
67
58
  retailers: [
68
59
  {
69
- id: 59,
70
- name: "The Home Depot Platinum",
71
- country: "México",
72
- },
73
- {
74
- id: 60,
75
- name: "The Home Depot Resizing",
76
- country: "México",
77
- },
78
- {
79
- id: 61,
80
- name: "Home Depot TAB",
81
- country: "México",
82
- },
83
- {
84
- id: 68,
85
- name: "The Home Depot Merchants",
86
- country: "México",
60
+ id: null,
61
+ name: null,
62
+ country: null,
87
63
  },
88
64
  ],
89
65
  },
90
- jwt: "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIyNDlhMjJkMC00Y2VhLTRjNGEtYTNjYS0zM2ZjN2VmNjAwOTEiLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwiY29nbml0bzp1c2VybmFtZSI6IjI0OWEyMmQwLTRjZWEtNGM0YS1hM2NhLTMzZmM3ZWY2MDA5MSIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiI0MzRhODBmZi0yZmNiLTQyMmItOGI5ZC0wNzU4OGQ3NGQyNmIiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY4MTQyNjgyOCwibmFtZSI6IkNvbGFib3JhZG9yIiwicGhvbmVfbnVtYmVyIjoiKzUyMTExMSIsImV4cCI6MTY4MTQzMDQyOCwiaWF0IjoxNjgxNDI2ODI4LCJlbWFpbCI6Im1lcmNoYW50c2lsdW1pbmFjaW9uQGFsbGZyZWVtYWlsLm5ldCJ9.IJNkSNUBmeOFQiDzyR2R0dDtwqg7U5GbXIwtW60cpxVBXj5Lr4zRdPuQnW3o02PxVR189IX2S3jcGgHhnvGMMKh4jRr-YM_eFpXYRQL_279tjG_rlZjwYFC333XMOcHViB8rEqNAti1PnuphCzqNiWH1z_b6aynxlbAeR23-P3VhSb0v6z_EWTdnuEw7ETXLFu2V6qaZTJCx6l7CZKECG2UExbaA0Be5_Ju56Q5cSNSf-lngetTvlb5DGeCge4nQ36y2qy9HnjAPDtP6c1v7KrT6zE74qh_L6u-xrdwYlaP5KBg4B3qJobtI9bgtKiqY1AZSTjWp4vr0T0_5M6GA7Q",
66
+ jwt: "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJhNmM0ZDNkNi0yNGE0LTQxZDQtYWQwZi1kMDg3NDM4YWI1YjYiLCJjb2duaXRvOmdyb3VwcyI6WyJjb2xhYm9yYWRvcmVzX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwiY29nbml0bzp1c2VybmFtZSI6ImE2YzRkM2Q2LTI0YTQtNDFkNC1hZDBmLWQwODc0MzhhYjViNiIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiIyNjJmNTBkNC0xZjMzLTQ3YTktOWY2MS1mMGY5NTcxNTcxNWUiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY4MTQ5OTkxNywibmFtZSI6IkNvbGFib3JhZG9yIiwicGhvbmVfbnVtYmVyIjoiKzUyMTExMSIsImV4cCI6MTY4MTUwMzUxNywiaWF0IjoxNjgxNDk5OTE3LCJlbWFpbCI6ImV0Y0Bjb250ZW50b2guY29tIn0.FKonzS94MWaxk2_Ip1p87zPjtguiHtkasBrLc6bPOGpeVSz4RYab0_Bwus_ANfiauJhQzhcY5vq2tmUmQtM8kEQ2oSIP3S58A9BTTkH0qkiXO8fkG_s9yricPePx1ut4gQ2wMCtDnrTF6k1NVn2VvWnEPr4dv4t0jYIjW2af48g2souwETOUiukAoRFq3BDuMgVg_pXW7lZfMR73Q6FS_l-RKVZp-f0_Jk3HBvLimmOUTxjbHcfp2Z7JIcxndZcnzQPAXdNjeP1DV9J4e4ePedX4163qTDOx264edNZbUFcLl4ErKPJE2RJIBPvoo9Ics2shBAdDFbY5wkkea0ODwQ",
91
67
  };