@griddo/ax 1.59.11 → 1.60.3
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/config/webpackSchemas.config.js +7 -0
- package/package.json +3 -2
- package/src/GlobalStore.tsx +3 -0
- package/src/api/index.tsx +2 -0
- package/src/api/redirects.tsx +71 -0
- package/src/api/sites.tsx +11 -25
- package/src/components/Fields/TextArea/index.tsx +3 -1
- package/src/components/Fields/TextArea/style.tsx +11 -11
- package/src/components/FloatingPanel/style.tsx +7 -2
- package/src/components/TableFilters/SiteFilter/index.tsx +7 -6
- package/src/components/TableFilters/SiteFilter/style.tsx +2 -2
- package/src/containers/Redirects/actions.tsx +129 -0
- package/src/containers/Redirects/constants.tsx +18 -0
- package/src/containers/Redirects/index.tsx +4 -0
- package/src/containers/Redirects/interfaces.tsx +13 -0
- package/src/containers/Redirects/reducer.tsx +24 -0
- package/src/containers/Settings/DataPacks/constants.tsx +11 -11
- package/src/containers/Sites/actions.tsx +1 -25
- package/src/helpers/thumbnails.tsx +3 -3
- package/src/modules/Content/PageItem/index.tsx +5 -8
- package/src/modules/Content/index.tsx +25 -35
- package/src/modules/GlobalSettings/Robots/Item/index.tsx +1 -1
- package/src/modules/GlobalSettings/Robots/index.tsx +5 -2
- package/src/modules/GlobalSettings/index.tsx +6 -0
- package/src/modules/Redirects/BulkHeader/TableHeader/index.tsx +44 -0
- package/src/modules/Redirects/BulkHeader/TableHeader/style.tsx +31 -0
- package/src/modules/Redirects/BulkHeader/index.tsx +59 -0
- package/src/modules/Redirects/RedirectItem/index.tsx +139 -0
- package/src/modules/Redirects/RedirectItem/style.tsx +50 -0
- package/src/modules/Redirects/RedirectPanel/index.tsx +117 -0
- package/src/modules/Redirects/RedirectPanel/style.tsx +13 -0
- package/src/modules/Redirects/index.tsx +310 -0
- package/src/modules/Redirects/style.tsx +52 -0
- package/src/modules/Settings/SeoSettings/index.tsx +25 -0
- package/src/modules/StructuredData/StructuredDataList/BulkHeader/TableHeader/index.tsx +1 -1
- package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/index.tsx +3 -3
- package/src/modules/StructuredData/StructuredDataList/index.tsx +1 -0
- package/src/modules/StructuredData/StructuredDataList/utils.tsx +1 -1
- package/src/routes/multisite.tsx +6 -0
- package/src/routes/site.tsx +6 -0
- package/src/types/index.tsx +13 -0
|
@@ -27,6 +27,13 @@ const createConfig = ({ input, output }) => ({
|
|
|
27
27
|
},
|
|
28
28
|
},
|
|
29
29
|
},
|
|
30
|
+
|
|
31
|
+
// This is for ignoring images defined in the schemas in order to prevent
|
|
32
|
+
// API crashing (it hasn't webpack)
|
|
33
|
+
{
|
|
34
|
+
test: /\.(png|jpe?g|gif)$/i,
|
|
35
|
+
use: [{ loader: "ignore-loader" }],
|
|
36
|
+
},
|
|
30
37
|
],
|
|
31
38
|
},
|
|
32
39
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@griddo/ax",
|
|
3
3
|
"description": "Griddo Author Experience",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.60.3",
|
|
5
5
|
"authors": [
|
|
6
6
|
"Álvaro Sánchez' <alvaro.sanches@secuoyas.com>",
|
|
7
7
|
"Carlos Torres <carlos.torres@secuoyas.com>",
|
|
@@ -88,6 +88,7 @@
|
|
|
88
88
|
"fs-extra": "7.0.1",
|
|
89
89
|
"html-webpack-plugin": "4.5.0",
|
|
90
90
|
"identity-obj-proxy": "3.0.0",
|
|
91
|
+
"ignore-loader": "^0.1.2",
|
|
91
92
|
"is-wsl": "^1.1.0",
|
|
92
93
|
"jest": "24.9.0",
|
|
93
94
|
"jest-environment-jsdom-fourteen": "0.1.0",
|
|
@@ -241,5 +242,5 @@
|
|
|
241
242
|
"publishConfig": {
|
|
242
243
|
"access": "public"
|
|
243
244
|
},
|
|
244
|
-
"gitHead": "
|
|
245
|
+
"gitHead": "b2a9f7a0c26dc3b050299d1197efaf5a0566163e"
|
|
245
246
|
}
|
package/src/GlobalStore.tsx
CHANGED
|
@@ -17,6 +17,7 @@ import { socialReducer, socialInitialState } from "./containers/Settings/Social/
|
|
|
17
17
|
import { usersReducer, usersInitialState } from "./containers/Users/reducer";
|
|
18
18
|
import { galleryReducer, galleryInitialState } from "./containers/Gallery/reducer";
|
|
19
19
|
import { domainsReducer, domainsInitialState } from "./containers/Domains/reducer";
|
|
20
|
+
import { redirectsReducer, redirectsInitialState } from "./containers/Redirects/reducer";
|
|
20
21
|
|
|
21
22
|
import { IRootState } from "@ax/types";
|
|
22
23
|
|
|
@@ -47,6 +48,7 @@ export class GlobalStore {
|
|
|
47
48
|
users: usersReducer as Reducer<any, Action<any>>,
|
|
48
49
|
gallery: galleryReducer as Reducer<any, Action<any>>,
|
|
49
50
|
domains: domainsReducer as Reducer<any, Action<any>>,
|
|
51
|
+
redirects: redirectsReducer as Reducer<any, Action<any>>,
|
|
50
52
|
});
|
|
51
53
|
|
|
52
54
|
const rootReducer = (state: IRootState | undefined, action: any) => {
|
|
@@ -65,6 +67,7 @@ export class GlobalStore {
|
|
|
65
67
|
users: usersInitialState,
|
|
66
68
|
gallery: galleryInitialState,
|
|
67
69
|
domains: domainsInitialState,
|
|
70
|
+
redirects: redirectsInitialState,
|
|
68
71
|
};
|
|
69
72
|
}
|
|
70
73
|
|
package/src/api/index.tsx
CHANGED
|
@@ -14,6 +14,7 @@ import social from "./social";
|
|
|
14
14
|
import files from "./files";
|
|
15
15
|
import users from "./users";
|
|
16
16
|
import domains from "./domains";
|
|
17
|
+
import redirects from "./redirects";
|
|
17
18
|
|
|
18
19
|
export {
|
|
19
20
|
sites,
|
|
@@ -32,4 +33,5 @@ export {
|
|
|
32
33
|
files,
|
|
33
34
|
users,
|
|
34
35
|
domains,
|
|
36
|
+
redirects,
|
|
35
37
|
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { template } from "./config";
|
|
2
|
+
import { IServiceConfig, sendRequest } from "./utils";
|
|
3
|
+
|
|
4
|
+
const SERVICES: { [key: string]: IServiceConfig } = {
|
|
5
|
+
GET_REDIRECTS: {
|
|
6
|
+
...template,
|
|
7
|
+
endpoint: "/redirects",
|
|
8
|
+
method: "GET",
|
|
9
|
+
},
|
|
10
|
+
CREATE_REDIRECT: {
|
|
11
|
+
...template,
|
|
12
|
+
endpoint: "/redirect",
|
|
13
|
+
method: "POST",
|
|
14
|
+
},
|
|
15
|
+
UPDATE_REDIRECT: {
|
|
16
|
+
...template,
|
|
17
|
+
endpoint: "/redirect/",
|
|
18
|
+
method: "PUT",
|
|
19
|
+
},
|
|
20
|
+
DELETE_REDIRECT: {
|
|
21
|
+
...template,
|
|
22
|
+
endpoint: "/redirect/",
|
|
23
|
+
method: "DELETE",
|
|
24
|
+
},
|
|
25
|
+
DELETE_REDIRECT_BULK: {
|
|
26
|
+
...template,
|
|
27
|
+
endpoint: "/redirects/bulk",
|
|
28
|
+
method: "DELETE",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const getRedirects = async (params: any, filters?: string) => {
|
|
33
|
+
const { page, itemsPerPage, pagination } = params;
|
|
34
|
+
|
|
35
|
+
const { host, endpoint } = SERVICES.GET_REDIRECTS;
|
|
36
|
+
|
|
37
|
+
SERVICES.GET_REDIRECTS.dynamicUrl = `${host}${endpoint}?page=${page}&itemsPerPage=${itemsPerPage}&pagination=${pagination}${filters}`;
|
|
38
|
+
|
|
39
|
+
return sendRequest(SERVICES.GET_REDIRECTS);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const createRedirect = async (redirect: any, force?: boolean) => {
|
|
43
|
+
const { host, endpoint } = SERVICES.CREATE_REDIRECT;
|
|
44
|
+
|
|
45
|
+
const forceString = force ? "?force=1" : "";
|
|
46
|
+
SERVICES.CREATE_REDIRECT.dynamicUrl = `${host}${endpoint}${forceString}`;
|
|
47
|
+
|
|
48
|
+
return sendRequest(SERVICES.CREATE_REDIRECT, { ...redirect });
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const updateRedirect = async (redirect: any, redirectID: number) => {
|
|
52
|
+
const { host, endpoint } = SERVICES.UPDATE_REDIRECT;
|
|
53
|
+
|
|
54
|
+
SERVICES.UPDATE_REDIRECT.dynamicUrl = `${host}${endpoint}${redirectID}`;
|
|
55
|
+
|
|
56
|
+
return sendRequest(SERVICES.UPDATE_REDIRECT, { ...redirect });
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const deleteRedirect = async (redirectID: number) => {
|
|
60
|
+
const { host, endpoint } = SERVICES.DELETE_REDIRECT;
|
|
61
|
+
|
|
62
|
+
SERVICES.DELETE_REDIRECT.dynamicUrl = `${host}${endpoint}${redirectID}`;
|
|
63
|
+
|
|
64
|
+
return sendRequest(SERVICES.DELETE_REDIRECT);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const deleteRedirectsBulk = async (ids: number[]) => {
|
|
68
|
+
return sendRequest(SERVICES.DELETE_REDIRECT_BULK, { ids });
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export default { getRedirects, createRedirect, updateRedirect, deleteRedirect, deleteRedirectsBulk };
|
package/src/api/sites.tsx
CHANGED
|
@@ -39,11 +39,6 @@ const SERVICES: { [key: string]: IServiceConfig } = {
|
|
|
39
39
|
endpoint: ["/site/", "/pages/structured-data/"],
|
|
40
40
|
method: "GET",
|
|
41
41
|
},
|
|
42
|
-
GET_ORDERED_SITE_PAGES: {
|
|
43
|
-
...template,
|
|
44
|
-
endpoint: ["/site/", "/pages"],
|
|
45
|
-
method: "GET",
|
|
46
|
-
},
|
|
47
42
|
GET_SITE_IMAGES: {
|
|
48
43
|
...template,
|
|
49
44
|
endpoint: ["/site/", "/images"],
|
|
@@ -112,47 +107,38 @@ const getSiteInfo = async (siteID: number) => {
|
|
|
112
107
|
return sendRequest(SERVICES.GET_SITE_INFO);
|
|
113
108
|
};
|
|
114
109
|
|
|
115
|
-
const getOrderedSitePages = async (siteID: number | string, query: string) => {
|
|
116
|
-
const {
|
|
117
|
-
host,
|
|
118
|
-
endpoint: [prefix, suffix],
|
|
119
|
-
} = SERVICES.GET_ORDERED_SITE_PAGES;
|
|
120
|
-
|
|
121
|
-
SERVICES.GET_ORDERED_SITE_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}${query}`;
|
|
122
|
-
|
|
123
|
-
return sendRequest(SERVICES.GET_ORDERED_SITE_PAGES);
|
|
124
|
-
};
|
|
125
|
-
|
|
126
110
|
const getStructuredSitePages = async (params: IGetSitePagesParams, structuredData: string, filterQuery?: string) => {
|
|
127
111
|
const {
|
|
128
112
|
host,
|
|
129
113
|
endpoint: [prefix, suffix],
|
|
130
114
|
} = SERVICES.GET_SITE_STRUCTURED_PAGES;
|
|
131
115
|
|
|
132
|
-
const { siteID, deleted, page, itemsPerPage, query } = params;
|
|
116
|
+
const { siteID, deleted, page, itemsPerPage, query, format } = params;
|
|
133
117
|
|
|
134
118
|
const filters = filterQuery ? `${filterQuery}&` : "?";
|
|
135
119
|
|
|
136
120
|
SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}${structuredData}${filters}deleted=${deleted}&page=${page}&itemsPerPage=${itemsPerPage}`;
|
|
137
121
|
|
|
138
|
-
if (query && query.trim() !== "") {
|
|
139
|
-
|
|
140
|
-
}
|
|
122
|
+
if (query && query.trim() !== "") SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl = SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl + `&query=${query}`;
|
|
123
|
+
if (format) SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl = SERVICES.GET_SITE_STRUCTURED_PAGES.dynamicUrl + `&format=${format}`;
|
|
141
124
|
|
|
142
125
|
return sendRequest(SERVICES.GET_SITE_STRUCTURED_PAGES);
|
|
143
126
|
};
|
|
144
127
|
|
|
145
|
-
const getSitePages = async (params: IGetSitePagesParams) => {
|
|
128
|
+
const getSitePages = async (params: IGetSitePagesParams, filterQuery?: string): Promise<AxiosResponse> => {
|
|
146
129
|
const {
|
|
147
130
|
host,
|
|
148
131
|
endpoint: [prefix, suffix],
|
|
149
132
|
} = SERVICES.GET_SITE_PAGES;
|
|
150
133
|
|
|
151
|
-
const { siteID, deleted, page, itemsPerPage, query, filterStructuredData, lang } = params;
|
|
134
|
+
const { siteID, deleted, page, itemsPerPage, query, filterStructuredData, lang, format } = params;
|
|
135
|
+
|
|
136
|
+
const filters = filterQuery ? `${filterQuery}&` : "?";
|
|
152
137
|
|
|
153
|
-
SERVICES.GET_SITE_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}
|
|
138
|
+
SERVICES.GET_SITE_PAGES.dynamicUrl = `${host}${prefix}${siteID}${suffix}${filters}deleted=${deleted}&page=${page}&itemsPerPage=${itemsPerPage}`;
|
|
154
139
|
if (query && query.trim() !== "") SERVICES.GET_SITE_PAGES.dynamicUrl = SERVICES.GET_SITE_PAGES.dynamicUrl + `&query=${query}`;
|
|
155
140
|
if (filterStructuredData) SERVICES.GET_SITE_PAGES.dynamicUrl = SERVICES.GET_SITE_PAGES.dynamicUrl + `&filterStructuredData=${filterStructuredData}`;
|
|
141
|
+
if (format) SERVICES.GET_SITE_PAGES.dynamicUrl = SERVICES.GET_SITE_PAGES.dynamicUrl + `&format=${format}`;
|
|
156
142
|
|
|
157
143
|
const dataHeader = {
|
|
158
144
|
...(lang && { lang })
|
|
@@ -164,12 +150,13 @@ const getSitePages = async (params: IGetSitePagesParams) => {
|
|
|
164
150
|
const getGlobalPages = async (params: IGetGlobalPagesParams, filterQuery?: string): Promise<AxiosResponse> => {
|
|
165
151
|
const { host, endpoint } = SERVICES.GET_GLOBAL_PAGES;
|
|
166
152
|
|
|
167
|
-
const { deleted, page, itemsPerPage, query, filterStructuredData } = params;
|
|
153
|
+
const { deleted, page, itemsPerPage, query, filterStructuredData, format } = params;
|
|
168
154
|
|
|
169
155
|
SERVICES.GET_GLOBAL_PAGES.dynamicUrl = `${host}${endpoint}?deleted=${deleted}&page=${page}&itemsPerPage=${itemsPerPage}`;
|
|
170
156
|
if (query && query.trim() !== "") SERVICES.GET_GLOBAL_PAGES.dynamicUrl += `&query=${query}`;
|
|
171
157
|
if (filterStructuredData) SERVICES.GET_GLOBAL_PAGES.dynamicUrl += `&filterStructuredData=${filterStructuredData}`;
|
|
172
158
|
if (filterQuery) SERVICES.GET_GLOBAL_PAGES.dynamicUrl += filterQuery;
|
|
159
|
+
if (format) SERVICES.GET_GLOBAL_PAGES.dynamicUrl = SERVICES.GET_GLOBAL_PAGES.dynamicUrl + `&format=${format}`;
|
|
173
160
|
|
|
174
161
|
return sendRequest(SERVICES.GET_GLOBAL_PAGES);
|
|
175
162
|
};
|
|
@@ -317,7 +304,6 @@ export default {
|
|
|
317
304
|
getSiteInfo,
|
|
318
305
|
getSitePages,
|
|
319
306
|
getSitePagesLight,
|
|
320
|
-
getOrderedSitePages,
|
|
321
307
|
getStructuredSitePages,
|
|
322
308
|
getSiteImages,
|
|
323
309
|
deleteSite,
|
|
@@ -33,6 +33,8 @@ const TextArea = (props: ITextAreaProps): JSX.Element => {
|
|
|
33
33
|
handleValidation && handleValidation(e.target.value);
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
+
const errorString = error ? "true" : "false";
|
|
37
|
+
|
|
36
38
|
return (
|
|
37
39
|
<S.TextArea
|
|
38
40
|
name={name}
|
|
@@ -42,7 +44,7 @@ const TextArea = (props: ITextAreaProps): JSX.Element => {
|
|
|
42
44
|
onChange={handleOnChange}
|
|
43
45
|
onBlur={handleOnBlur}
|
|
44
46
|
placeholder={placeholder}
|
|
45
|
-
error={
|
|
47
|
+
error={errorString}
|
|
46
48
|
disabled={disabled}
|
|
47
49
|
/>
|
|
48
50
|
);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import styled from "styled-components";
|
|
2
2
|
import TextareaAutosize from "react-textarea-autosize";
|
|
3
3
|
|
|
4
|
-
export const TextArea = styled(TextareaAutosize)<{ error:
|
|
5
|
-
${p => p.theme.textStyle.fieldContent};
|
|
6
|
-
border: 1px solid ${p => (p.error === true ? p.theme.color.error : p.theme.color.uiLine)};
|
|
4
|
+
export const TextArea = styled(TextareaAutosize)<{ error: string }>`
|
|
5
|
+
${(p) => p.theme.textStyle.fieldContent};
|
|
6
|
+
border: 1px solid ${(p) => (p.error === "true" ? p.theme.color.error : p.theme.color.uiLine)};
|
|
7
7
|
border-radius: 4px;
|
|
8
|
-
background-color: ${p => p.theme.color.uiBackground02};
|
|
9
|
-
color: ${p => p.theme.color.textHighEmphasis};
|
|
10
|
-
padding: ${p => p.theme.spacing.s};
|
|
8
|
+
background-color: ${(p) => p.theme.color.uiBackground02};
|
|
9
|
+
color: ${(p) => p.theme.color.textHighEmphasis};
|
|
10
|
+
padding: ${(p) => p.theme.spacing.s};
|
|
11
11
|
height: auto;
|
|
12
|
-
margin-bottom: ${p => p.theme.spacing.xxs};
|
|
12
|
+
margin-bottom: ${(p) => p.theme.spacing.xxs};
|
|
13
13
|
width: 100%;
|
|
14
14
|
resize: none;
|
|
15
15
|
overflow: auto;
|
|
@@ -17,15 +17,15 @@ export const TextArea = styled(TextareaAutosize)<{ error: boolean | undefined }>
|
|
|
17
17
|
&:active,
|
|
18
18
|
&:focus {
|
|
19
19
|
outline: none;
|
|
20
|
-
border-color: ${(p) => (p.error === true ? p.theme.color.error : p.theme.color.interactive01)};
|
|
20
|
+
border-color: ${(p) => (p.error === "true" ? p.theme.color.error : p.theme.color.interactive01)};
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
&::placeholder {
|
|
24
|
-
color: ${p => p.theme.color.textLowEmphasis};
|
|
24
|
+
color: ${(p) => p.theme.color.textLowEmphasis};
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
&:disabled {
|
|
28
|
-
color: ${p => p.theme.color.interactiveDisabled};
|
|
29
|
-
border-color: ${p => p.theme.color.interactiveDisabled};
|
|
28
|
+
color: ${(p) => p.theme.color.interactiveDisabled};
|
|
29
|
+
border-color: ${(p) => p.theme.color.interactiveDisabled};
|
|
30
30
|
}
|
|
31
31
|
`;
|
|
@@ -13,11 +13,16 @@ export const Header = styled.div`
|
|
|
13
13
|
padding: 0 ${(p) => p.theme.spacing.m};
|
|
14
14
|
`;
|
|
15
15
|
|
|
16
|
-
export const Wrapper = styled.section<{
|
|
16
|
+
export const Wrapper = styled.section<{
|
|
17
|
+
right?: boolean;
|
|
18
|
+
isOpen: boolean;
|
|
19
|
+
isOpenedSecond: boolean | undefined;
|
|
20
|
+
secondary?: boolean;
|
|
21
|
+
}>`
|
|
17
22
|
position: fixed;
|
|
18
23
|
right: 0;
|
|
19
24
|
top: 0;
|
|
20
|
-
z-index:
|
|
25
|
+
z-index: 1200;
|
|
21
26
|
width: calc(${(p) => p.theme.spacing.xl} * 6);
|
|
22
27
|
height: 100vh;
|
|
23
28
|
background: ${(p) => p.theme.colors.uiBackground01};
|
|
@@ -8,7 +8,7 @@ import { IFilterValue } from "@ax/types";
|
|
|
8
8
|
import * as S from "./style";
|
|
9
9
|
|
|
10
10
|
const SiteFilter = (props: ISiteFilterProps): JSX.Element => {
|
|
11
|
-
const { filterItems, value } = props;
|
|
11
|
+
const { filterItems, value, pointer, center = true } = props;
|
|
12
12
|
|
|
13
13
|
const filters: IFilterValue[] = [
|
|
14
14
|
{
|
|
@@ -18,8 +18,8 @@ const SiteFilter = (props: ISiteFilterProps): JSX.Element => {
|
|
|
18
18
|
},
|
|
19
19
|
];
|
|
20
20
|
|
|
21
|
-
const storedValue = value.split(",");
|
|
22
|
-
const parsedValue = storedValue.map((value) => (isNumber(value) ? parseInt(value) : value));
|
|
21
|
+
const storedValue = value && value[pointer] ? value[pointer].split(",") : [];
|
|
22
|
+
const parsedValue = storedValue.map((value: any) => (isNumber(value) ? parseInt(value) : value));
|
|
23
23
|
const [initialState] = useState(parsedValue);
|
|
24
24
|
const selectAllOption = "all";
|
|
25
25
|
const [selectedValue, setSelectedValue] = useState([...initialState]);
|
|
@@ -58,14 +58,13 @@ const SiteFilter = (props: ISiteFilterProps): JSX.Element => {
|
|
|
58
58
|
}
|
|
59
59
|
setSelectedValue(selection);
|
|
60
60
|
const queryFilters = selection.join(",");
|
|
61
|
-
const pointer = "filterSites";
|
|
62
61
|
filterItems(pointer, queryFilters);
|
|
63
62
|
};
|
|
64
63
|
|
|
65
64
|
const isActive = !areEquals(selectedValue, initialState);
|
|
66
65
|
|
|
67
66
|
const Header = () => (
|
|
68
|
-
<S.Site isActive={isActive}>
|
|
67
|
+
<S.Site isActive={isActive} center={center}>
|
|
69
68
|
Site
|
|
70
69
|
<S.IconsWrapper>
|
|
71
70
|
<Icon name="Filter" size="16" />
|
|
@@ -85,7 +84,9 @@ const SiteFilter = (props: ISiteFilterProps): JSX.Element => {
|
|
|
85
84
|
|
|
86
85
|
interface ISiteFilterProps {
|
|
87
86
|
filterItems(pointer: string, filter: string): void;
|
|
88
|
-
value:
|
|
87
|
+
value: any;
|
|
88
|
+
pointer: string;
|
|
89
|
+
center?: boolean;
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
export default SiteFilter;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import styled from "styled-components";
|
|
2
2
|
import { Header } from "@ax/components/TableList/style";
|
|
3
3
|
|
|
4
|
-
const Site = styled(Header)<{ isActive: boolean }>`
|
|
4
|
+
const Site = styled(Header)<{ isActive: boolean; center: boolean }>`
|
|
5
5
|
width: 170px;
|
|
6
|
-
justify-content: center;
|
|
6
|
+
justify-content: ${(p) => (p.center ? "center" : "flex-start")};
|
|
7
7
|
&:hover {
|
|
8
8
|
color: ${(p) => p.theme.color.interactive01};
|
|
9
9
|
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { redirects } from "@ax/api";
|
|
2
|
+
import { appActions } from "@ax/containers/App";
|
|
3
|
+
import { handleRequest } from "@ax/helpers";
|
|
4
|
+
import { DEFAULT_PARAMS, ERROR_CODE, SET_REDIRECTS, SET_TOTAL_ITEMS } from "./constants";
|
|
5
|
+
import { ISetRedirects, ISetTotalItems } from "./interfaces";
|
|
6
|
+
|
|
7
|
+
function setRedirects(redirects: any[]): ISetRedirects {
|
|
8
|
+
return { type: SET_REDIRECTS, payload: { redirects } };
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function setTotalItems(totalItems: number): ISetTotalItems {
|
|
12
|
+
return { type: SET_TOTAL_ITEMS, payload: { totalItems } };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function getRedirects(params: any, filters?: string): (dispatch: any) => Promise<void> {
|
|
16
|
+
return async (dispatch) => {
|
|
17
|
+
try {
|
|
18
|
+
const callback = async () => redirects.getRedirects(params, filters);
|
|
19
|
+
|
|
20
|
+
const responseActions = {
|
|
21
|
+
handleSuccess: (response: any) => {
|
|
22
|
+
const { items, totalItems } = response;
|
|
23
|
+
dispatch(setRedirects(items));
|
|
24
|
+
dispatch(setTotalItems(totalItems));
|
|
25
|
+
},
|
|
26
|
+
handleError: (response: any) => appActions.handleError(response)(dispatch),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
await handleRequest(callback, responseActions, [appActions.setIsLoading])(dispatch);
|
|
30
|
+
} catch (e) {
|
|
31
|
+
console.log(e);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function addRedirect(
|
|
37
|
+
redirect: { from: string; to: string | number },
|
|
38
|
+
errorAction: () => void,
|
|
39
|
+
force?: boolean,
|
|
40
|
+
filter?: string
|
|
41
|
+
): (dispatch: any, getState: any) => Promise<void> {
|
|
42
|
+
return async (dispatch, getState) => {
|
|
43
|
+
try {
|
|
44
|
+
const {
|
|
45
|
+
sites: { currentSiteInfo },
|
|
46
|
+
} = getState();
|
|
47
|
+
|
|
48
|
+
const callback = async () => redirects.createRedirect(redirect, force);
|
|
49
|
+
|
|
50
|
+
const responseActions = {
|
|
51
|
+
handleSuccess: () => {
|
|
52
|
+
const params = { ...DEFAULT_PARAMS };
|
|
53
|
+
const siteFilterQuery = currentSiteInfo && currentSiteInfo.id ? `&sites=${currentSiteInfo.id}` : filter;
|
|
54
|
+
dispatch(getRedirects(params, siteFilterQuery));
|
|
55
|
+
},
|
|
56
|
+
handleError: (response: any) => {
|
|
57
|
+
const { status } = response;
|
|
58
|
+
|
|
59
|
+
status === ERROR_CODE.isBeingUsed ? errorAction() : appActions.handleError(response)(dispatch);
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
await handleRequest(callback, responseActions, [])(dispatch);
|
|
64
|
+
} catch (e) {
|
|
65
|
+
console.log(e);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function updateRedirect(
|
|
71
|
+
redirect: { from: string; to: string | number },
|
|
72
|
+
redirectID: number,
|
|
73
|
+
filter?: string
|
|
74
|
+
): (dispatch: any, getState: any) => Promise<void> {
|
|
75
|
+
return async (dispatch, getState) => {
|
|
76
|
+
try {
|
|
77
|
+
const {
|
|
78
|
+
sites: { currentSiteInfo },
|
|
79
|
+
} = getState();
|
|
80
|
+
|
|
81
|
+
const callback = async () => redirects.updateRedirect(redirect, redirectID);
|
|
82
|
+
|
|
83
|
+
const responseActions = {
|
|
84
|
+
handleSuccess: () => {
|
|
85
|
+
const params = { ...DEFAULT_PARAMS };
|
|
86
|
+
const siteFilterQuery = currentSiteInfo && currentSiteInfo.id ? `&sites=${currentSiteInfo.id}` : filter;
|
|
87
|
+
dispatch(getRedirects(params, siteFilterQuery));
|
|
88
|
+
},
|
|
89
|
+
handleError: (response: any) => appActions.handleError(response)(dispatch),
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
await handleRequest(callback, responseActions, [])(dispatch);
|
|
93
|
+
} catch (e) {
|
|
94
|
+
console.log(e);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function deleteRedirect(
|
|
100
|
+
redirectID: number | number[],
|
|
101
|
+
filter?: string
|
|
102
|
+
): (dispatch: any, getState: any) => Promise<boolean> {
|
|
103
|
+
return async (dispatch, getState) => {
|
|
104
|
+
try {
|
|
105
|
+
const {
|
|
106
|
+
sites: { currentSiteInfo },
|
|
107
|
+
} = getState();
|
|
108
|
+
|
|
109
|
+
const callback = async () =>
|
|
110
|
+
Array.isArray(redirectID) ? redirects.deleteRedirectsBulk(redirectID) : redirects.deleteRedirect(redirectID);
|
|
111
|
+
|
|
112
|
+
const responseActions = {
|
|
113
|
+
handleSuccess: () => {
|
|
114
|
+
const params = { ...DEFAULT_PARAMS };
|
|
115
|
+
const siteFilterQuery = currentSiteInfo && currentSiteInfo.id ? `&sites=${currentSiteInfo.id}` : filter;
|
|
116
|
+
dispatch(getRedirects(params, siteFilterQuery));
|
|
117
|
+
},
|
|
118
|
+
handleError: (response: any) => appActions.handleError(response)(dispatch),
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
return await handleRequest(callback, responseActions, [])(dispatch);
|
|
122
|
+
} catch (e) {
|
|
123
|
+
console.log(e);
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export { getRedirects, addRedirect, updateRedirect, deleteRedirect };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const NAME = "redirects";
|
|
2
|
+
|
|
3
|
+
const SET_REDIRECTS = `${NAME}/SET_REDIRECTS`;
|
|
4
|
+
const SET_TOTAL_ITEMS = `${NAME}/SET_TOTAL_ITEMS`;
|
|
5
|
+
|
|
6
|
+
const ITEMS_PER_PAGE = 50;
|
|
7
|
+
|
|
8
|
+
const DEFAULT_PARAMS = {
|
|
9
|
+
page: 1,
|
|
10
|
+
itemsPerPage: ITEMS_PER_PAGE,
|
|
11
|
+
pagination: true,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const ERROR_CODE = {
|
|
15
|
+
isBeingUsed: 409,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { NAME, SET_REDIRECTS, SET_TOTAL_ITEMS, ERROR_CODE, DEFAULT_PARAMS, ITEMS_PER_PAGE };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SET_REDIRECTS, SET_TOTAL_ITEMS } from "./constants";
|
|
2
|
+
|
|
3
|
+
export interface ISetRedirects {
|
|
4
|
+
type: typeof SET_REDIRECTS;
|
|
5
|
+
payload: { redirects: any[] };
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface ISetTotalItems {
|
|
9
|
+
type: typeof SET_TOTAL_ITEMS;
|
|
10
|
+
payload: { totalItems: number };
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type RedirectsActionsCreators = ISetRedirects;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SET_REDIRECTS, SET_TOTAL_ITEMS } from "./constants";
|
|
2
|
+
import { RedirectsActionsCreators } from "./interfaces";
|
|
3
|
+
|
|
4
|
+
export interface IRedirectsState {
|
|
5
|
+
redirects: any[];
|
|
6
|
+
totalItems: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const initialState = {
|
|
10
|
+
redirects: [],
|
|
11
|
+
totalItems: 0,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export function reducer(state = initialState, action: RedirectsActionsCreators): IRedirectsState {
|
|
15
|
+
switch (action.type) {
|
|
16
|
+
case SET_REDIRECTS:
|
|
17
|
+
case SET_TOTAL_ITEMS:
|
|
18
|
+
return { ...state, ...action.payload };
|
|
19
|
+
default:
|
|
20
|
+
return state;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { initialState as redirectsInitialState, reducer as redirectsReducer };
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
const NAME
|
|
1
|
+
const NAME = "dataPacks";
|
|
2
2
|
|
|
3
|
-
const SET_ACTIVATED
|
|
4
|
-
const SET_SELECTED
|
|
5
|
-
const SET_CONFIG_FORM_DATA
|
|
6
|
-
const SET_AVAILABLE
|
|
7
|
-
const SET_CATEGORIES
|
|
8
|
-
const SET_MODULES
|
|
9
|
-
const SET_TEMPLATES
|
|
3
|
+
const SET_ACTIVATED = `${NAME}/SET_ACTIVATED`;
|
|
4
|
+
const SET_SELECTED = `${NAME}/SET_SELECTED`;
|
|
5
|
+
const SET_CONFIG_FORM_DATA = `${NAME}/SET_CONFIG_FORM_DATA`;
|
|
6
|
+
const SET_AVAILABLE = `${NAME}/SET_AVAILABLE`;
|
|
7
|
+
const SET_CATEGORIES = `${NAME}/SET_CATEGORIES`;
|
|
8
|
+
const SET_MODULES = `${NAME}/SET_MODULES`;
|
|
9
|
+
const SET_TEMPLATES = `${NAME}/SET_TEMPLATES`;
|
|
10
10
|
|
|
11
11
|
// TODO ERROR DICTIONARY
|
|
12
12
|
const ERROR_CODE = {
|
|
13
|
-
isBeingUsed: 409
|
|
14
|
-
}
|
|
13
|
+
isBeingUsed: 409,
|
|
14
|
+
};
|
|
15
15
|
|
|
16
16
|
export {
|
|
17
17
|
SET_ACTIVATED,
|
|
@@ -21,5 +21,5 @@ export {
|
|
|
21
21
|
SET_CATEGORIES,
|
|
22
22
|
SET_MODULES,
|
|
23
23
|
SET_TEMPLATES,
|
|
24
|
-
ERROR_CODE
|
|
24
|
+
ERROR_CODE,
|
|
25
25
|
};
|
|
@@ -112,28 +112,6 @@ function saveSettings(form: ISettingsForm): (dispatch: Dispatch, getState: any)
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
function getOrderedSitePages(siteId: number | string, query: string): (dispatch: any) => Promise<void> {
|
|
116
|
-
return async (dispatch) => {
|
|
117
|
-
try {
|
|
118
|
-
dispatch(setIsLoading(true));
|
|
119
|
-
const response: any = await sites.getOrderedSitePages(siteId, query);
|
|
120
|
-
|
|
121
|
-
if (isReqOk(response.status)) {
|
|
122
|
-
const { items, totalItems } = response.data;
|
|
123
|
-
dispatch(setCurrentSitePages(items));
|
|
124
|
-
dispatch(setTotalItems(totalItems));
|
|
125
|
-
dispatch(setIsLoading(false));
|
|
126
|
-
} else {
|
|
127
|
-
console.log("Error en getOrderedSitePages"); // FIXME: capturar errores mejor
|
|
128
|
-
dispatch(setIsLoading(false));
|
|
129
|
-
}
|
|
130
|
-
} catch (e) {
|
|
131
|
-
console.log("error");
|
|
132
|
-
console.log(e); // FIXME: capturar errores
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
115
|
function getGlobalPages(params: IGetGlobalPagesParams, filterQuery: string): (dispatch: any) => Promise<void> {
|
|
138
116
|
return async (dispatch) => {
|
|
139
117
|
try {
|
|
@@ -269,7 +247,7 @@ function getSitePages(
|
|
|
269
247
|
dispatch(setIsLoading(true));
|
|
270
248
|
const response: any = structuredData
|
|
271
249
|
? await sites.getStructuredSitePages(params, structuredData, filterQuery)
|
|
272
|
-
: await sites.getSitePages(params);
|
|
250
|
+
: await sites.getSitePages(params, filterQuery);
|
|
273
251
|
|
|
274
252
|
if (isReqOk(response.status)) {
|
|
275
253
|
const { items, totalItems } = response.data;
|
|
@@ -455,14 +433,12 @@ function removePageFromSite(
|
|
|
455
433
|
}
|
|
456
434
|
|
|
457
435
|
export {
|
|
458
|
-
// setSites,
|
|
459
436
|
setCurrentSiteInfo,
|
|
460
437
|
setCurrentSitePages,
|
|
461
438
|
setFilter,
|
|
462
439
|
setTotalItems,
|
|
463
440
|
setCurrentSiteLanguages,
|
|
464
441
|
getSites,
|
|
465
|
-
getOrderedSitePages,
|
|
466
442
|
setSiteInfo,
|
|
467
443
|
getFilteredContent,
|
|
468
444
|
getSitePages,
|