@griddo/cx 1.75.178 → 1.75.180
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/README.md +22 -14
- package/build/index.js +49 -0
- package/gatsby-browser.tsx +140 -0
- package/gatsby-config.ts +40 -0
- package/gatsby-node.ts +130 -0
- package/gatsby-ssr.tsx +63 -0
- package/index.js +4 -0
- package/package.json +119 -100
- package/scripts/build-reset.ts +9 -0
- package/scripts/griddo-exporter.ts +302 -0
- package/src/components/Head.tsx +207 -0
- package/src/components/template.tsx +90 -0
- package/src/components/types.ts +35 -0
- package/src/components/utils.ts +138 -0
- package/src/html.tsx +31 -0
- package/src/services/auth.ts +64 -0
- package/src/services/distributors.ts +153 -0
- package/src/services/domains.ts +27 -0
- package/src/services/navigation.ts +169 -0
- package/src/services/robots.ts +64 -0
- package/src/services/settings.ts +52 -0
- package/src/services/sites.ts +199 -0
- package/src/services/store-with-for-loop.ts +513 -0
- package/src/services/store-with-promise-all.ts +515 -0
- package/src/services/store.ts +513 -0
- package/src/types/api.ts +155 -0
- package/src/types/global.ts +72 -0
- package/src/types/navigation.ts +25 -0
- package/src/types/pages.ts +145 -0
- package/src/types/sites.ts +64 -0
- package/src/types/templates.ts +11 -0
- package/src/utils/api.ts +326 -0
- package/src/utils/cache.ts +114 -0
- package/src/utils/domains.ts +32 -0
- package/src/utils/folders.ts +147 -0
- package/src/utils/instance.ts +71 -0
- package/src/utils/pages.ts +534 -0
- package/src/utils/searches.ts +102 -0
- package/src/utils/shared.ts +131 -0
- package/src/utils/sites.ts +280 -0
- package/.babelrc +0 -7
- package/LICENSE +0 -1
- package/gatsby-browser.js +0 -115
- package/gatsby-config.js +0 -38
- package/gatsby-node.js +0 -273
- package/gatsby-ssr.js +0 -43
- package/scripts/griddo-exporter.js +0 -133
- package/src/api/index.js +0 -172
- package/src/components/template.js +0 -261
- package/src/html.js +0 -30
- package/src/images/readme.md +0 -1
- package/src/scripts/build-reset.js +0 -12
- package/src/services/auth.js +0 -44
- package/src/services/distributors.js +0 -85
- package/src/services/domains.js +0 -16
- package/src/services/navigation.js +0 -104
- package/src/services/robots.js +0 -37
- package/src/services/settings.js +0 -25
- package/src/services/sites.js +0 -110
- package/src/utils/cache.js +0 -70
- package/src/utils/component-lib-helpers.js +0 -56
- package/src/utils/dataLayer.js +0 -47
- package/src/utils/delay.js +0 -5
- package/src/utils/domains.js +0 -24
- package/src/utils/folders.js +0 -123
- package/src/utils/helpers.js +0 -144
- package/src/utils/index.js +0 -44
- package/src/utils/package.js +0 -20
- package/src/utils/pages.js +0 -236
- package/src/utils/searches.js +0 -62
- package/src/utils/sites.js +0 -207
- package/static/griddo-full-logo.png +0 -0
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
/* eslint-disable node/no-extraneous-import */
|
|
2
|
-
import { Page as RenderGriddoPage } from '@griddo/core';
|
|
3
|
-
import {
|
|
4
|
-
components,
|
|
5
|
-
generateAutomaticDimensions,
|
|
6
|
-
SiteProvider,
|
|
7
|
-
templates,
|
|
8
|
-
} from 'components';
|
|
9
|
-
import { Link, navigate } from 'gatsby';
|
|
10
|
-
import parse from 'html-react-parser';
|
|
11
|
-
import * as React from 'react';
|
|
12
|
-
import { Helmet } from 'react-helmet';
|
|
13
|
-
import { composeAnalytics } from '../utils/dataLayer';
|
|
14
|
-
import { formatImage, cleanCommaSeparated } from '../utils/helpers';
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
// Gatsby Head API, almost deprecate Helmet.
|
|
18
|
-
//
|
|
19
|
-
// I put here everything we had in the seo.js component because is easier to
|
|
20
|
-
// access to the `pageContext` prop of the Gatsby `<Head>` component. If this
|
|
21
|
-
// strategy works, maybe we want to isolate `<Head>` in its own file as we did
|
|
22
|
-
// with seo.js.
|
|
23
|
-
//
|
|
24
|
-
export const Head = data => {
|
|
25
|
-
const {
|
|
26
|
-
pageContext: {
|
|
27
|
-
siteMetadata,
|
|
28
|
-
pageMetadata,
|
|
29
|
-
siteOptions,
|
|
30
|
-
locale,
|
|
31
|
-
openGraph,
|
|
32
|
-
componentsVersion,
|
|
33
|
-
griddoVersion,
|
|
34
|
-
page: { defaultLang, fullUrl, disableHrefLangs },
|
|
35
|
-
},
|
|
36
|
-
} = data;
|
|
37
|
-
|
|
38
|
-
const metaRobots = cleanCommaSeparated(
|
|
39
|
-
`${pageMetadata?.index},${pageMetadata?.follow},${pageMetadata?.translate},${pageMetadata?.metasAdvanced}`
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
const showMetaRobots =
|
|
43
|
-
!!metaRobots &&
|
|
44
|
-
(siteOptions?.showBasicMetaRobots || metaRobots !== 'index,follow');
|
|
45
|
-
|
|
46
|
-
const { analyticsScript, analyticsDimensions } = composeAnalytics(
|
|
47
|
-
data,
|
|
48
|
-
generateAutomaticDimensions
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
const emptyCodeScript = { props: { dangerouslySetInnerHTML: {} } };
|
|
52
|
-
|
|
53
|
-
const analyticsSrc =
|
|
54
|
-
(analyticsScript &&
|
|
55
|
-
analyticsScript.startsWith('UA-') &&
|
|
56
|
-
`https://www.googletagmanager.com/gtag/js?id=${analyticsScript}`) ||
|
|
57
|
-
null;
|
|
58
|
-
|
|
59
|
-
const analyticsCode =
|
|
60
|
-
analyticsScript && !analyticsSrc && analyticsScript.includes('<script')
|
|
61
|
-
? parse(analyticsScript)
|
|
62
|
-
: emptyCodeScript;
|
|
63
|
-
|
|
64
|
-
const fixedAnalyticsCode = Array.isArray(analyticsCode)
|
|
65
|
-
? analyticsCode.find(item => item.type === 'script') || emptyCodeScript
|
|
66
|
-
: analyticsCode;
|
|
67
|
-
|
|
68
|
-
const {
|
|
69
|
-
props: {
|
|
70
|
-
dangerouslySetInnerHTML: { __html: analyticsScriptCode },
|
|
71
|
-
// eslint-disable-next-line no-unused-vars
|
|
72
|
-
children: analyticsScriptChildren,
|
|
73
|
-
...analyticsScriptProps
|
|
74
|
-
},
|
|
75
|
-
} = fixedAnalyticsCode;
|
|
76
|
-
|
|
77
|
-
// Resize favicon
|
|
78
|
-
const faviconResized = formatImage(siteMetadata?.favicon, 32, 32, 'png');
|
|
79
|
-
|
|
80
|
-
// Validate options
|
|
81
|
-
const cleanPageLanguages =
|
|
82
|
-
pageMetadata?.pageLanguages?.filter(item => item.isLive) || [];
|
|
83
|
-
|
|
84
|
-
const useCanonical =
|
|
85
|
-
!!pageMetadata?.canonical &&
|
|
86
|
-
!(
|
|
87
|
-
siteOptions?.avoidSelfReferenceCanonicals &&
|
|
88
|
-
pageMetadata?.canonical === fullUrl
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
const useHrefLangs =
|
|
92
|
-
!(
|
|
93
|
-
siteOptions?.avoidHrefLangsOnCanonicals &&
|
|
94
|
-
useCanonical &&
|
|
95
|
-
pageMetadata?.canonical !== fullUrl
|
|
96
|
-
) &&
|
|
97
|
-
pageMetadata?.index === 'index' &&
|
|
98
|
-
cleanPageLanguages.length > 1 &&
|
|
99
|
-
!disableHrefLangs;
|
|
100
|
-
|
|
101
|
-
const defaultLangId = defaultLang?.id || null;
|
|
102
|
-
const hrefLangXDefaultUrl =
|
|
103
|
-
(useHrefLangs &&
|
|
104
|
-
!siteOptions?.avoidHrefLangXDefault &&
|
|
105
|
-
defaultLangId &&
|
|
106
|
-
cleanPageLanguages.find(item => item.languageId === defaultLangId)
|
|
107
|
-
?.url) ||
|
|
108
|
-
null;
|
|
109
|
-
|
|
110
|
-
const currentTime = new Date().toString();
|
|
111
|
-
|
|
112
|
-
return (
|
|
113
|
-
<>
|
|
114
|
-
{!!pageMetadata?.title && <title>{pageMetadata?.title}</title>}
|
|
115
|
-
{!!pageMetadata?.description && (
|
|
116
|
-
<meta name="description" content={pageMetadata?.description} />
|
|
117
|
-
)}
|
|
118
|
-
{siteOptions?.useMetaTitle && (
|
|
119
|
-
<meta name="title" content={pageMetadata?.title} />
|
|
120
|
-
)}
|
|
121
|
-
{useCanonical && <link rel="canonical" href={pageMetadata?.canonical} />}
|
|
122
|
-
{!!faviconResized && <link rel="icon" href={faviconResized} />}
|
|
123
|
-
|
|
124
|
-
{/* Alternate, solo si se indexa la página y tiene traducciones */}
|
|
125
|
-
{hrefLangXDefaultUrl && (
|
|
126
|
-
<link rel="alternate" href={hrefLangXDefaultUrl} hreflang="x-default" />
|
|
127
|
-
)}
|
|
128
|
-
{useHrefLangs &&
|
|
129
|
-
cleanPageLanguages.map(item => (
|
|
130
|
-
<link
|
|
131
|
-
key={item.pageId}
|
|
132
|
-
rel="alternate"
|
|
133
|
-
href={`${item.url}`}
|
|
134
|
-
hreflang={item.locale?.replace(/_/g, '-')}
|
|
135
|
-
/>
|
|
136
|
-
))}
|
|
137
|
-
|
|
138
|
-
{/* Robots */}
|
|
139
|
-
{showMetaRobots && <meta name="robots" content={metaRobots} />}
|
|
140
|
-
|
|
141
|
-
{/* Open Graph */}
|
|
142
|
-
{!!siteMetadata?.title && (
|
|
143
|
-
<meta property="og:site_name" content={siteMetadata?.title} />
|
|
144
|
-
)}
|
|
145
|
-
{!!locale && <meta property="og:locale" content={locale} />}
|
|
146
|
-
{(!!openGraph?.title || !!pageMetadata?.title) && (
|
|
147
|
-
<meta
|
|
148
|
-
property="og:title"
|
|
149
|
-
content={openGraph?.title || pageMetadata?.title}
|
|
150
|
-
/>
|
|
151
|
-
)}
|
|
152
|
-
<meta property="og:type" content={openGraph?.type || 'website'} />
|
|
153
|
-
{(!!openGraph?.description || !!pageMetadata?.description) && (
|
|
154
|
-
<meta
|
|
155
|
-
property="og:description"
|
|
156
|
-
content={openGraph?.description || pageMetadata?.description}
|
|
157
|
-
/>
|
|
158
|
-
)}
|
|
159
|
-
{!!openGraph?.image && (
|
|
160
|
-
<meta property="og:image" content={openGraph?.image} />
|
|
161
|
-
)}
|
|
162
|
-
<meta property="og:url" content={pageMetadata?.canonical || fullUrl} />
|
|
163
|
-
|
|
164
|
-
{/* Twitter */}
|
|
165
|
-
<meta property="twitter:card" content="summary_large_image" />
|
|
166
|
-
{!!openGraph?.twitterImage && (
|
|
167
|
-
<meta property="twitter:image" content={openGraph?.twitterImage} />
|
|
168
|
-
)}
|
|
169
|
-
|
|
170
|
-
{/* Debug */}
|
|
171
|
-
{!siteOptions?.avoidDebugMetas && (
|
|
172
|
-
<meta
|
|
173
|
-
property="debug"
|
|
174
|
-
content={`Components v${componentsVersion} by Griddo v${griddoVersion} @ ${currentTime}}`}
|
|
175
|
-
/>
|
|
176
|
-
)}
|
|
177
|
-
|
|
178
|
-
{/* Data Layer */}
|
|
179
|
-
<script>{`window.dataLayer = window.dataLayer || [];`}</script>
|
|
180
|
-
{analyticsDimensions && (
|
|
181
|
-
<script>{`const {__HIDDEN, ...newDataLayer} = ${analyticsDimensions};newDataLayer && window.dataLayer && window.dataLayer.push(newDataLayer);`}</script>
|
|
182
|
-
)}
|
|
183
|
-
|
|
184
|
-
{/* Analytics with UA- */}
|
|
185
|
-
{analyticsSrc && <script src={analyticsSrc}></script>}
|
|
186
|
-
|
|
187
|
-
{/* {analyticsCode} */}
|
|
188
|
-
{(analyticsScriptProps?.src || analyticsScriptCode) && (
|
|
189
|
-
<script {...analyticsScriptProps} data-griddo-id={fullUrl}>
|
|
190
|
-
{analyticsScriptCode}
|
|
191
|
-
</script>
|
|
192
|
-
)}
|
|
193
|
-
</>
|
|
194
|
-
);
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
export default data => {
|
|
198
|
-
const {
|
|
199
|
-
pageContext: {
|
|
200
|
-
page: content,
|
|
201
|
-
locale,
|
|
202
|
-
header,
|
|
203
|
-
footer,
|
|
204
|
-
siteMetadata,
|
|
205
|
-
theme,
|
|
206
|
-
cloudinaryName,
|
|
207
|
-
socials,
|
|
208
|
-
siteLangs,
|
|
209
|
-
BUILD_MODE,
|
|
210
|
-
page: { site: siteId, apiUrl, publicApiUrl, instance },
|
|
211
|
-
sitePages,
|
|
212
|
-
},
|
|
213
|
-
} = data;
|
|
214
|
-
|
|
215
|
-
const library = {
|
|
216
|
-
components,
|
|
217
|
-
templates,
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
const mappedTheme = theme || 'default-theme';
|
|
221
|
-
|
|
222
|
-
return (
|
|
223
|
-
<SiteProvider
|
|
224
|
-
theme={mappedTheme}
|
|
225
|
-
cloudinaryCloudName={cloudinaryName}
|
|
226
|
-
linkComponent={Link}
|
|
227
|
-
navigate={navigate}
|
|
228
|
-
location={data.location}
|
|
229
|
-
socials={socials}
|
|
230
|
-
siteLangs={siteLangs}
|
|
231
|
-
siteMetadata={siteMetadata}
|
|
232
|
-
renderer="gatsby"
|
|
233
|
-
buildMode={BUILD_MODE}
|
|
234
|
-
siteId={siteId}
|
|
235
|
-
apiUrl={apiUrl}
|
|
236
|
-
publicApiUrl={publicApiUrl}
|
|
237
|
-
instance={instance}
|
|
238
|
-
sitePages={sitePages}
|
|
239
|
-
>
|
|
240
|
-
{/*
|
|
241
|
-
Gatsby Head doesn't support anything outside of the <head> tag so we
|
|
242
|
-
need to use Helmet.
|
|
243
|
-
NOTE: I can´t realize why, but the html-lang tag only render in the hydration phase...
|
|
244
|
-
*/}
|
|
245
|
-
<Helmet>
|
|
246
|
-
<html lang={locale} />
|
|
247
|
-
</Helmet>
|
|
248
|
-
|
|
249
|
-
{/* Render every page */}
|
|
250
|
-
<RenderGriddoPage
|
|
251
|
-
content={content}
|
|
252
|
-
header={header}
|
|
253
|
-
footer={footer}
|
|
254
|
-
apiUrl={content.apiUrl}
|
|
255
|
-
library={library}
|
|
256
|
-
languageId={content.language}
|
|
257
|
-
pageLanguages={content.pageLanguages}
|
|
258
|
-
/>
|
|
259
|
-
</SiteProvider>
|
|
260
|
-
);
|
|
261
|
-
};
|
package/src/html.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
export default function HTML(props) {
|
|
4
|
-
return (
|
|
5
|
-
<html {...props.htmlAttributes}>
|
|
6
|
-
<head>
|
|
7
|
-
<meta charSet="utf-8" />
|
|
8
|
-
<meta httpEquiv="x-ua-compatible" content="ie=edge" />
|
|
9
|
-
<meta
|
|
10
|
-
name="viewport"
|
|
11
|
-
content="width=device-width, initial-scale=1, shrink-to-fit=no"
|
|
12
|
-
/>
|
|
13
|
-
{props.headComponents}
|
|
14
|
-
</head>
|
|
15
|
-
<body {...props.bodyAttributes}>
|
|
16
|
-
{props.preBodyComponents}
|
|
17
|
-
<noscript key="noscript" id="gatsby-noscript">
|
|
18
|
-
This app works best with JavaScript enabled.
|
|
19
|
-
</noscript>
|
|
20
|
-
<div
|
|
21
|
-
key={`body`}
|
|
22
|
-
id="___gatsby"
|
|
23
|
-
dangerouslySetInnerHTML={{ __html: props.body }}
|
|
24
|
-
/>
|
|
25
|
-
<div id="modal" />
|
|
26
|
-
{props.postBodyComponents}
|
|
27
|
-
</body>
|
|
28
|
-
</html>
|
|
29
|
-
);
|
|
30
|
-
}
|
package/src/images/readme.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Do not remove directory for Git purposes
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
const AuthService = require("../services/auth").default
|
|
3
|
-
const SettingsService = require("../services/settings").default
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// TODO: QUITAR
|
|
7
|
-
const resetRender = async() => {
|
|
8
|
-
await AuthService.login();
|
|
9
|
-
await SettingsService.resetRender();
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
resetRender();
|
package/src/services/auth.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
const axios = require('axios');
|
|
2
|
-
const helpers = require('../utils/helpers');
|
|
3
|
-
|
|
4
|
-
class AuthService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.user = process.env.botEmail;
|
|
7
|
-
this.password = process.env.botPassword;
|
|
8
|
-
this.baseUrl = process.env.API_URL;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
async login() {
|
|
12
|
-
try {
|
|
13
|
-
const response = await axios({
|
|
14
|
-
url: `${this.baseUrl}/login_check`,
|
|
15
|
-
method: 'post',
|
|
16
|
-
headers: {
|
|
17
|
-
'Content-Type': 'application/json',
|
|
18
|
-
},
|
|
19
|
-
data: {
|
|
20
|
-
username: this.user,
|
|
21
|
-
password: this.password,
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
helpers.log('success', 'LOGIN', response.status);
|
|
26
|
-
|
|
27
|
-
if (response.status === 200) {
|
|
28
|
-
const {
|
|
29
|
-
data: { token },
|
|
30
|
-
} = response;
|
|
31
|
-
this.headers = {
|
|
32
|
-
Authorization: 'bearer ' + token,
|
|
33
|
-
'Cache-Control': 'no-store',
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
} catch (e) {
|
|
37
|
-
helpers.log('error', 'FALLO EN CREDENCIALES');
|
|
38
|
-
console.error(`===========================\nFallo en credenciales. Autenticación no válida.\n===========================`);
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
exports.default = new AuthService();
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
const helpers = require('../utils/helpers');
|
|
2
|
-
const SitesService = require('./sites').default;
|
|
3
|
-
|
|
4
|
-
class DistributorService {
|
|
5
|
-
static getBody(data) {
|
|
6
|
-
const {
|
|
7
|
-
order,
|
|
8
|
-
source,
|
|
9
|
-
quantity,
|
|
10
|
-
mode,
|
|
11
|
-
fixed,
|
|
12
|
-
filter,
|
|
13
|
-
fullRelations = false,
|
|
14
|
-
allLanguages = false,
|
|
15
|
-
} = data;
|
|
16
|
-
|
|
17
|
-
return mode === 'auto'
|
|
18
|
-
? {
|
|
19
|
-
mode,
|
|
20
|
-
order,
|
|
21
|
-
source,
|
|
22
|
-
quantity,
|
|
23
|
-
filter,
|
|
24
|
-
fullRelations,
|
|
25
|
-
allLanguages,
|
|
26
|
-
}
|
|
27
|
-
: {
|
|
28
|
-
mode,
|
|
29
|
-
fixed,
|
|
30
|
-
fullRelations,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
static async fetchData({ page, component, cached }) {
|
|
35
|
-
const { data } = component;
|
|
36
|
-
if (!data) {
|
|
37
|
-
console.log(
|
|
38
|
-
`======= ERROR: Página ${page.id} tiene un hasDistributorData pero no un elemento data con la configuración del distribuidor en el mismo nivel.`
|
|
39
|
-
);
|
|
40
|
-
return [];
|
|
41
|
-
}
|
|
42
|
-
const body = this.getBody(data);
|
|
43
|
-
const response = await SitesService.getDistributorData(page, body, cached);
|
|
44
|
-
return response;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
static async getDistributorData(page, cached = false) {
|
|
48
|
-
try {
|
|
49
|
-
const { template } = page;
|
|
50
|
-
|
|
51
|
-
const checkDistributors = async (template, level = 1) => {
|
|
52
|
-
if (!template || typeof template !== 'object') return;
|
|
53
|
-
if (!JSON.stringify(template).includes('"hasDistributorData":true'))
|
|
54
|
-
return;
|
|
55
|
-
for (let key in template) {
|
|
56
|
-
if (key === 'queriedItems') continue;
|
|
57
|
-
const component = template[key];
|
|
58
|
-
if (!component || typeof component !== 'object') continue;
|
|
59
|
-
if (component.hasDistributorData) {
|
|
60
|
-
component.queriedItems = await this.fetchData({
|
|
61
|
-
page,
|
|
62
|
-
component,
|
|
63
|
-
cached,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
await checkDistributors(component, level + 1);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const getDistributors = async template => {
|
|
72
|
-
await checkDistributors([template]); // ==> En array para que también revise la propia template como objeto.
|
|
73
|
-
return template;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const response = await getDistributors(template);
|
|
77
|
-
return response;
|
|
78
|
-
} catch (e) {
|
|
79
|
-
helpers.log('error', `ERROR EN GET DISTRIBUTOR ${e}`);
|
|
80
|
-
return e.response;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
exports.default = DistributorService;
|
package/src/services/domains.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const api = require('./../api');
|
|
2
|
-
|
|
3
|
-
const baseURL = process.env.API_URL;
|
|
4
|
-
const ENDPOINTS = {
|
|
5
|
-
GET_ALL: `${baseURL}/domains`,
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
class DomainsService {
|
|
9
|
-
static async getAll() {
|
|
10
|
-
const { GET_ALL } = ENDPOINTS;
|
|
11
|
-
const response = await api.get(GET_ALL);
|
|
12
|
-
return response;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
exports.default = DomainsService;
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
class NavigationService {
|
|
2
|
-
constructor() {
|
|
3
|
-
this._navigations = [];
|
|
4
|
-
this._defaultHeaders = {};
|
|
5
|
-
this._defaultFooters = {};
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
set navigations(navigations) {
|
|
9
|
-
this._navigations = navigations;
|
|
10
|
-
this._defaultFooters = this.getDefaultFooters();
|
|
11
|
-
this._defaultHeaders = this.getDefaultHeaders();
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
get navigations() {
|
|
15
|
-
return this._navigations;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
getDefaultFooters() {
|
|
19
|
-
const safeFooters = [...this.navigations.footers];
|
|
20
|
-
const defaultFooters = safeFooters.filter(footer => !!footer.setAsDefault);
|
|
21
|
-
const defaultFootersByLang = defaultFooters.reduce((prev, footer) => {
|
|
22
|
-
const { language } = footer;
|
|
23
|
-
return { ...prev, [language]: footer };
|
|
24
|
-
}, {});
|
|
25
|
-
return defaultFootersByLang;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
getDefaultHeaders() {
|
|
29
|
-
const safeHeaders = [...this.navigations.headers];
|
|
30
|
-
const defaultHeaders = safeHeaders.filter(header => !!header.setAsDefault);
|
|
31
|
-
const defaultHeadersByLang = defaultHeaders.reduce((prev, header) => {
|
|
32
|
-
const { language } = header;
|
|
33
|
-
return { ...prev, [language]: header };
|
|
34
|
-
}, {});
|
|
35
|
-
return defaultHeadersByLang;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
getRightLanguage(list, id, language) {
|
|
39
|
-
if (!list || !id) return null;
|
|
40
|
-
const rightLanguageItem = list.find(
|
|
41
|
-
item =>
|
|
42
|
-
item.language === language &&
|
|
43
|
-
item.navigationLanguages?.find(version => version.navigationId === id)
|
|
44
|
-
);
|
|
45
|
-
const result = rightLanguageItem || list.find(item => item.id === id);
|
|
46
|
-
return result ? { ...result } : null;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
getPageHeader(id, language) {
|
|
50
|
-
return this.getRightLanguage(this.navigations.headers, id, language);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
getPageFooter(id, language) {
|
|
54
|
-
return this.getRightLanguage(this.navigations.footers, id, language);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
getPageNavigations(page) {
|
|
58
|
-
const {
|
|
59
|
-
header: pageHeader,
|
|
60
|
-
footer: pageFooter,
|
|
61
|
-
language,
|
|
62
|
-
template: { templateType },
|
|
63
|
-
templateConfig: { defaultHeader, defaultFooter, templates },
|
|
64
|
-
} = page;
|
|
65
|
-
|
|
66
|
-
// Los navigations serían el que tenga la página,
|
|
67
|
-
// si no el que tenga definido para esa template
|
|
68
|
-
// si no el que tenga definido para ese paquete de datos
|
|
69
|
-
const getFineNavigation = values => {
|
|
70
|
-
const fineNavigation = values.find(item => typeof item === 'number');
|
|
71
|
-
return typeof fineNavigation === 'number' ? fineNavigation : null;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const headerID = getFineNavigation([
|
|
75
|
-
pageHeader,
|
|
76
|
-
templates?.[templateType]?.defaultHeader,
|
|
77
|
-
defaultHeader,
|
|
78
|
-
]);
|
|
79
|
-
const footerID = getFineNavigation([
|
|
80
|
-
pageFooter,
|
|
81
|
-
templates?.[templateType]?.defaultFooter,
|
|
82
|
-
defaultFooter,
|
|
83
|
-
]);
|
|
84
|
-
|
|
85
|
-
// Seleccionar navigations
|
|
86
|
-
const header = headerID
|
|
87
|
-
? this.getPageHeader(headerID, language)
|
|
88
|
-
: headerID === 0
|
|
89
|
-
? null
|
|
90
|
-
: this._defaultHeaders[language];
|
|
91
|
-
const footer = footerID
|
|
92
|
-
? this.getPageFooter(footerID, language)
|
|
93
|
-
: footerID === 0
|
|
94
|
-
? null
|
|
95
|
-
: this._defaultFooters[language];
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
header,
|
|
99
|
-
footer,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
exports.default = NavigationService;
|
package/src/services/robots.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const api = require('../api');
|
|
4
|
-
const helpers = require('../utils/helpers');
|
|
5
|
-
|
|
6
|
-
class RobotsService {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.robots = [];
|
|
9
|
-
this.baseURL = process.env.API_URL;
|
|
10
|
-
this.settings = {};
|
|
11
|
-
this.ENDPOINT = `${this.baseURL}/domains/robots`;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
async loadRobots() {
|
|
15
|
-
try {
|
|
16
|
-
const apiRobots = await api.get(this.ENDPOINT);
|
|
17
|
-
this.robots = apiRobots.filter(r => !!r.path).map(({ path, content }) => ({
|
|
18
|
-
path,
|
|
19
|
-
content: content || 'User-agent: *\n\r\n\rAllow: /'
|
|
20
|
-
})) || [];
|
|
21
|
-
} catch (e) {
|
|
22
|
-
helpers.log('error', `${this.constructor.name}: ${e.message}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async writeFiles(basePath = '') {
|
|
27
|
-
for (const robot of this.robots) {
|
|
28
|
-
const basePathLocation = path.join(basePath, robot.path);
|
|
29
|
-
const fileLocation = path.join(basePathLocation, 'robots.txt');
|
|
30
|
-
if (fs.existsSync(basePathLocation)) {
|
|
31
|
-
fs.writeFileSync(fileLocation, robot.content);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
exports.default = new RobotsService();
|
package/src/services/settings.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
const api = require("../api")
|
|
2
|
-
class SettingsService {
|
|
3
|
-
|
|
4
|
-
constructor() {
|
|
5
|
-
this.baseURL = process.env.API_URL
|
|
6
|
-
this.settings = {};
|
|
7
|
-
this.ENDPOINTS = {
|
|
8
|
-
GET_ALL: `${this.baseURL}/settings`,
|
|
9
|
-
RESET_RENDER: `${this.baseURL}/debug/reset-render`
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
async getAll() {
|
|
14
|
-
const { GET_ALL } = this.ENDPOINTS
|
|
15
|
-
const response = await api.get(GET_ALL);
|
|
16
|
-
this.settings = response;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async resetRender() {
|
|
20
|
-
const{ RESET_RENDER } = this.ENDPOINTS;
|
|
21
|
-
const response = await api.post(RESET_RENDER);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
exports.default = new SettingsService();
|