@griddo/ax 10.6.4 → 10.6.5
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/package.json +3 -2
- package/src/__tests__/components/TableFilters/CustomizeFilters/CustomizeFilters.test.tsx +39 -35
- package/src/components/CategoryCell/style.tsx +1 -1
- package/src/components/TableFilters/CategoryFilter/index.tsx +2 -2
- package/src/components/TableFilters/CategoryFilter/style.tsx +1 -1
- package/src/components/TableFilters/CustomizeFilters/index.tsx +15 -12
- package/src/helpers/arrays.tsx +10 -1
- package/src/helpers/customColumns.tsx +45 -0
- package/src/helpers/index.tsx +6 -1
- package/src/modules/Content/BulkHeader/TableHeader/index.tsx +11 -27
- package/src/modules/Content/BulkHeader/TableHeader/style.tsx +4 -2
- package/src/modules/Content/BulkHeader/index.tsx +19 -14
- package/src/modules/Content/PageItem/index.tsx +4 -3
- package/src/modules/Content/PageItem/style.tsx +6 -3
- package/src/modules/Content/index.tsx +27 -24
- package/src/modules/Content/utils.tsx +36 -3
- package/src/modules/StructuredData/StructuredDataList/BulkHeader/TableHeader/index.tsx +11 -8
- package/src/modules/StructuredData/StructuredDataList/BulkHeader/TableHeader/style.tsx +8 -7
- package/src/modules/StructuredData/StructuredDataList/BulkHeader/index.tsx +27 -16
- package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/index.tsx +15 -7
- package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/style.tsx +3 -2
- package/src/modules/StructuredData/StructuredDataList/StructuredDataItem/index.tsx +27 -18
- package/src/modules/StructuredData/StructuredDataList/StructuredDataItem/style.tsx +15 -5
- package/src/modules/StructuredData/StructuredDataList/index.tsx +40 -40
- package/src/modules/StructuredData/StructuredDataList/utils.tsx +52 -1
- package/src/types/index.tsx +2 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@griddo/ax",
|
|
3
3
|
"description": "Griddo Author Experience",
|
|
4
|
-
"version": "10.6.
|
|
4
|
+
"version": "10.6.5",
|
|
5
5
|
"authors": [
|
|
6
6
|
"Álvaro Sánchez' <alvaro.sanches@secuoyas.com>",
|
|
7
7
|
"Carlos Torres <carlos.torres@secuoyas.com>",
|
|
@@ -112,6 +112,7 @@
|
|
|
112
112
|
"mini-css-extract-plugin": "0.11.3",
|
|
113
113
|
"optimize-css-assets-webpack-plugin": "^6.0.1",
|
|
114
114
|
"pkg-dir": "^5.0.0",
|
|
115
|
+
"pnp-webpack-plugin": "^1.7.0",
|
|
115
116
|
"polished": "3.4.1",
|
|
116
117
|
"postcss": "^8.4.5",
|
|
117
118
|
"postcss-flexbugs-fixes": "4.1.0",
|
|
@@ -232,5 +233,5 @@
|
|
|
232
233
|
"publishConfig": {
|
|
233
234
|
"access": "public"
|
|
234
235
|
},
|
|
235
|
-
"gitHead": "
|
|
236
|
+
"gitHead": "4a065853330bcae74912ddb0f0785af16b0e261a"
|
|
236
237
|
}
|
|
@@ -15,14 +15,15 @@ const defaultProps = mock<ICustomizeFiltersProps>();
|
|
|
15
15
|
|
|
16
16
|
describe("CustomizeFilters component rendering", () => {
|
|
17
17
|
it("should render customize filter", () => {
|
|
18
|
-
defaultProps.columns =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
defaultProps.columns = [
|
|
19
|
+
{ id: "live", title: "Live", show: true },
|
|
20
|
+
{ id: "profile", title: "Profile", show: true },
|
|
21
|
+
{ id: "site", title: "Site", show: true },
|
|
22
|
+
{ id: "status", title: "Status", show: true },
|
|
23
|
+
{ id: "translation", title: "Trans.", show: true },
|
|
24
|
+
];
|
|
25
25
|
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
26
|
+
defaultProps.limit = { value: 5, text: "five" };
|
|
26
27
|
defaultProps.setColumns = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
27
28
|
|
|
28
29
|
render(
|
|
@@ -38,14 +39,15 @@ describe("CustomizeFilters component rendering", () => {
|
|
|
38
39
|
|
|
39
40
|
describe("CustomizeFilters events", () => {
|
|
40
41
|
it("should render check group on click floating menu button", () => {
|
|
41
|
-
defaultProps.columns =
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
defaultProps.columns = [
|
|
43
|
+
{ id: "live", title: "Live", show: true },
|
|
44
|
+
{ id: "profile", title: "Profile", show: true },
|
|
45
|
+
{ id: "site", title: "Site", show: true },
|
|
46
|
+
{ id: "status", title: "Status", show: true },
|
|
47
|
+
{ id: "translation", title: "Trans.", show: true },
|
|
48
|
+
];
|
|
48
49
|
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
50
|
+
defaultProps.limit = { value: 5, text: "five" };
|
|
49
51
|
defaultProps.setColumns = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
50
52
|
|
|
51
53
|
render(
|
|
@@ -66,14 +68,15 @@ describe("CustomizeFilters events", () => {
|
|
|
66
68
|
});
|
|
67
69
|
|
|
68
70
|
it("should check option on click", () => {
|
|
69
|
-
defaultProps.columns =
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
defaultProps.columns = [
|
|
72
|
+
{ id: "live", title: "Live", show: true },
|
|
73
|
+
{ id: "profile", title: "Profile", show: true },
|
|
74
|
+
{ id: "site", title: "Site", show: true },
|
|
75
|
+
{ id: "status", title: "Status", show: true },
|
|
76
|
+
{ id: "translation", title: "Trans.", show: true },
|
|
77
|
+
];
|
|
76
78
|
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
79
|
+
defaultProps.limit = { value: 5, text: "five" };
|
|
77
80
|
defaultProps.setColumns = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
78
81
|
|
|
79
82
|
render(
|
|
@@ -96,14 +99,15 @@ describe("CustomizeFilters events", () => {
|
|
|
96
99
|
});
|
|
97
100
|
|
|
98
101
|
it("should call setColumns action on change", async () => {
|
|
99
|
-
defaultProps.columns =
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
defaultProps.columns = [
|
|
103
|
+
{ id: "live", title: "Live", show: true },
|
|
104
|
+
{ id: "profile", title: "Profile", show: true },
|
|
105
|
+
{ id: "site", title: "Site", show: true },
|
|
106
|
+
{ id: "status", title: "Status", show: true },
|
|
107
|
+
{ id: "translation", title: "Trans.", show: true },
|
|
108
|
+
];
|
|
106
109
|
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
110
|
+
defaultProps.limit = { value: 5, text: "five" };
|
|
107
111
|
const onChangeMock = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
108
112
|
defaultProps.setColumns = onChangeMock;
|
|
109
113
|
|
|
@@ -120,12 +124,12 @@ describe("CustomizeFilters events", () => {
|
|
|
120
124
|
const checkFieldInputs = screen.queryAllByTestId("check-field-input");
|
|
121
125
|
fireEvent.click(checkFieldInputs[0]);
|
|
122
126
|
expect(onChangeMock).toHaveBeenCalledTimes(1);
|
|
123
|
-
expect(onChangeMock).toBeCalledWith(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
expect(onChangeMock).toBeCalledWith([
|
|
128
|
+
{ id: "live", title: "Live", show: false },
|
|
129
|
+
{ id: "profile", title: "Profile", show: true },
|
|
130
|
+
{ id: "site", title: "Site", show: true },
|
|
131
|
+
{ id: "status", title: "Status", show: true },
|
|
132
|
+
{ id: "translation", title: "Trans.", show: true },
|
|
133
|
+
]);
|
|
130
134
|
});
|
|
131
135
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react";
|
|
2
2
|
|
|
3
3
|
import { CheckGroup, FloatingMenu, Icon, ListTitle } from "@ax/components";
|
|
4
|
-
import { areEquals, isReqOk } from "@ax/helpers";
|
|
4
|
+
import { areEquals, isReqOk, trimText } from "@ax/helpers";
|
|
5
5
|
import { checkgroups } from "@ax/api";
|
|
6
6
|
import { IFilterValue, IQueryValue } from "@ax/types";
|
|
7
7
|
|
|
@@ -74,7 +74,7 @@ const CategoryFilter = (props: ICategoryFilterProps): JSX.Element => {
|
|
|
74
74
|
|
|
75
75
|
const Header = () => (
|
|
76
76
|
<S.HeaderWrapper isActive={isActive}>
|
|
77
|
-
{structuredData.title}
|
|
77
|
+
{trimText(structuredData.title, 23)}
|
|
78
78
|
<S.IconsWrapper>
|
|
79
79
|
{isActive ? <Icon name="Filter" size="16" /> : <Icon name="DownArrow" size="16" />}
|
|
80
80
|
</S.IconsWrapper>
|
|
@@ -3,7 +3,7 @@ import styled from "styled-components";
|
|
|
3
3
|
import { Header } from "@ax/components/TableList/style";
|
|
4
4
|
|
|
5
5
|
const HeaderWrapper = styled((props) => <Header {...props} />)<{ isActive: boolean }>`
|
|
6
|
-
width:
|
|
6
|
+
width: 215px;
|
|
7
7
|
justify-content: center;
|
|
8
8
|
&:hover {
|
|
9
9
|
color: ${(p) => p.theme.color.interactive01};
|
|
@@ -5,19 +5,21 @@ import { IColumn } from "@ax/types";
|
|
|
5
5
|
import * as S from "./style";
|
|
6
6
|
|
|
7
7
|
const CustomizeFilters = (props: ICustomizeFiltersProps): JSX.Element => {
|
|
8
|
-
const { columns, setColumns, value } = props;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const { columns, setColumns, value, limit } = props;
|
|
9
|
+
|
|
10
|
+
const options = columns.map((col) => {
|
|
11
|
+
const disabled = value.length >= limit.value && !value.includes(col.id);
|
|
12
|
+
return { name: col.id, title: col.title, value: col.id, disabled };
|
|
12
13
|
});
|
|
13
14
|
|
|
14
15
|
const toggleColumn = (selection: any) => {
|
|
15
|
-
const updatedColumns =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
const updatedColumns: IColumn[] = [...columns];
|
|
17
|
+
columns.forEach((val) => {
|
|
18
|
+
const columIndex = updatedColumns.findIndex((col) => col.id === val.id);
|
|
19
|
+
if (selection.includes(val.id)) {
|
|
20
|
+
updatedColumns[columIndex].show = true;
|
|
19
21
|
} else {
|
|
20
|
-
updatedColumns[
|
|
22
|
+
updatedColumns[columIndex].show = false;
|
|
21
23
|
}
|
|
22
24
|
});
|
|
23
25
|
setColumns(updatedColumns);
|
|
@@ -33,7 +35,7 @@ const CustomizeFilters = (props: ICustomizeFiltersProps): JSX.Element => {
|
|
|
33
35
|
<S.Wrapper data-testid="customize-filters-wrapper">
|
|
34
36
|
<FloatingMenu Button={Button} position="right" closeOnSelect={false}>
|
|
35
37
|
<ListTitle>Customize filters</ListTitle>
|
|
36
|
-
<S.Note>You can select up to
|
|
38
|
+
<S.Note>You can select up to {limit.text} options</S.Note>
|
|
37
39
|
<S.ChecksWrapper>
|
|
38
40
|
<CheckGroup options={options} value={value} onChange={toggleColumn} />
|
|
39
41
|
</S.ChecksWrapper>
|
|
@@ -43,9 +45,10 @@ const CustomizeFilters = (props: ICustomizeFiltersProps): JSX.Element => {
|
|
|
43
45
|
};
|
|
44
46
|
|
|
45
47
|
export interface ICustomizeFiltersProps {
|
|
46
|
-
setColumns(newValue:
|
|
47
|
-
columns:
|
|
48
|
+
setColumns(newValue: IColumn[]): void;
|
|
49
|
+
columns: IColumn[];
|
|
48
50
|
value: string[];
|
|
51
|
+
limit: { value: number; text: string };
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
export default CustomizeFilters;
|
package/src/helpers/arrays.tsx
CHANGED
|
@@ -10,4 +10,13 @@ const moveArrayElement = (element: any, arr: any[], newIndex: number): Array<any
|
|
|
10
10
|
return arrCopy;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
const arrayInsert = (arr: any[], index: number, newItem: any) => [
|
|
14
|
+
// part of the array before the specified index
|
|
15
|
+
...arr.slice(0, index),
|
|
16
|
+
// inserted item
|
|
17
|
+
...newItem,
|
|
18
|
+
// part of the array after the specified index
|
|
19
|
+
...arr.slice(index),
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export { isEmptyArray, moveArrayElement, arrayInsert };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { IColumn } from "@ax/types";
|
|
2
|
+
|
|
3
|
+
const getMaxColumns = (width: number, isSimple: boolean): { value: number; text: string } => {
|
|
4
|
+
let maxColumns = 5;
|
|
5
|
+
if (width >= 1680) {
|
|
6
|
+
maxColumns = 6;
|
|
7
|
+
}
|
|
8
|
+
if (width > 1920) {
|
|
9
|
+
maxColumns = 7;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (isSimple) {
|
|
13
|
+
maxColumns = maxColumns - 1;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
switch (maxColumns) {
|
|
17
|
+
case 4:
|
|
18
|
+
return { value: 4, text: "four" };
|
|
19
|
+
case 6:
|
|
20
|
+
return { value: 6, text: "six" };
|
|
21
|
+
case 7:
|
|
22
|
+
return { value: 7, text: "seven" };
|
|
23
|
+
default:
|
|
24
|
+
return { value: 5, text: "five" };
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const updateColumns = (columnsState: IColumn[], maxColumns: number): IColumn[] => {
|
|
29
|
+
if (!columnsState) return [];
|
|
30
|
+
const activeColumns = columnsState.filter((col) => col.show).length;
|
|
31
|
+
let availableColumns = maxColumns - activeColumns;
|
|
32
|
+
|
|
33
|
+
return columnsState.map((col) => {
|
|
34
|
+
if (!col.show && availableColumns > 0) {
|
|
35
|
+
col.show = true;
|
|
36
|
+
availableColumns = availableColumns - 1;
|
|
37
|
+
}
|
|
38
|
+
if (col.show && !col.default && availableColumns < 0) {
|
|
39
|
+
col.show = false;
|
|
40
|
+
}
|
|
41
|
+
return col;
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export { getMaxColumns, updateColumns };
|
package/src/helpers/index.tsx
CHANGED
|
@@ -94,7 +94,7 @@ import {
|
|
|
94
94
|
|
|
95
95
|
import { imageResizeCropAndCompress, compressImage } from "./imageResize";
|
|
96
96
|
|
|
97
|
-
import { isEmptyArray, moveArrayElement } from "./arrays";
|
|
97
|
+
import { isEmptyArray, moveArrayElement, arrayInsert } from "./arrays";
|
|
98
98
|
|
|
99
99
|
import { getActivatedDataPacksIds, isModuleDisabled, getDeactivatedModules } from "./dataPacks";
|
|
100
100
|
|
|
@@ -113,6 +113,8 @@ import { parseTheme } from "./parseTheme";
|
|
|
113
113
|
|
|
114
114
|
import { getFileIcon } from "./files";
|
|
115
115
|
|
|
116
|
+
import { getMaxColumns, updateColumns } from "./customColumns";
|
|
117
|
+
|
|
116
118
|
export {
|
|
117
119
|
isComponentEmpty,
|
|
118
120
|
setAsContainedComponent,
|
|
@@ -204,4 +206,7 @@ export {
|
|
|
204
206
|
stripHtml,
|
|
205
207
|
encodeData,
|
|
206
208
|
getFileIcon,
|
|
209
|
+
arrayInsert,
|
|
210
|
+
getMaxColumns,
|
|
211
|
+
updateColumns,
|
|
207
212
|
};
|
|
@@ -6,12 +6,11 @@ import {
|
|
|
6
6
|
CustomizeFilters,
|
|
7
7
|
CategoryFilter,
|
|
8
8
|
NameFilter,
|
|
9
|
-
TypeFilter,
|
|
10
9
|
StatusFilter,
|
|
11
10
|
LiveFilter,
|
|
12
11
|
TranslationsFilter,
|
|
13
12
|
} from "@ax/components";
|
|
14
|
-
import { IColumn, IQueryValue } from "@ax/types";
|
|
13
|
+
import { IColumn, IQueryValue, ISchemaField } from "@ax/types";
|
|
15
14
|
|
|
16
15
|
import * as S from "./style";
|
|
17
16
|
|
|
@@ -31,14 +30,15 @@ const TableHeader = (props: IProps): JSX.Element => {
|
|
|
31
30
|
isGlobalPages,
|
|
32
31
|
filterValues,
|
|
33
32
|
siteID,
|
|
33
|
+
maxColumns,
|
|
34
34
|
} = props;
|
|
35
35
|
|
|
36
|
-
const activeColumns =
|
|
36
|
+
const activeColumns = columns.filter((col) => col.show).map((col) => col.id);
|
|
37
37
|
|
|
38
38
|
const CategoryColumns =
|
|
39
39
|
isGlobalPages &&
|
|
40
40
|
categoryColumns.map(
|
|
41
|
-
(col
|
|
41
|
+
(col) =>
|
|
42
42
|
activeColumns.includes(col.key) && (
|
|
43
43
|
<S.HeaderWrapper key={col.key}>
|
|
44
44
|
<CategoryFilter
|
|
@@ -51,24 +51,6 @@ const TableHeader = (props: IProps): JSX.Element => {
|
|
|
51
51
|
)
|
|
52
52
|
);
|
|
53
53
|
|
|
54
|
-
const typeFilters = [
|
|
55
|
-
{
|
|
56
|
-
name: "all",
|
|
57
|
-
value: "all",
|
|
58
|
-
title: "All content",
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: "unique",
|
|
62
|
-
value: "unique",
|
|
63
|
-
title: "Basic templates",
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: "structuredData",
|
|
67
|
-
value: "structuredData",
|
|
68
|
-
title: "Content types",
|
|
69
|
-
},
|
|
70
|
-
];
|
|
71
|
-
|
|
72
54
|
return (
|
|
73
55
|
<S.TableHeader isScrolling={isScrolling}>
|
|
74
56
|
<S.CheckHeader>
|
|
@@ -109,13 +91,14 @@ const TableHeader = (props: IProps): JSX.Element => {
|
|
|
109
91
|
<S.NameWrapper>
|
|
110
92
|
<NameFilter sortItems={sortItems} sortedState={sortedListStatus} />
|
|
111
93
|
</S.NameWrapper>
|
|
112
|
-
|
|
94
|
+
|
|
113
95
|
{activeColumns.includes("type") && <S.TypeHeader>Type</S.TypeHeader>}
|
|
114
96
|
{activeColumns.includes("live") && (
|
|
115
97
|
<S.HeaderWrapper>
|
|
116
98
|
<LiveFilter filterItems={filterItems} value={filterValues.liveStatus} />
|
|
117
99
|
</S.HeaderWrapper>
|
|
118
100
|
)}
|
|
101
|
+
{CategoryColumns}
|
|
119
102
|
{activeColumns.includes("status") && (
|
|
120
103
|
<S.HeaderWrapper>
|
|
121
104
|
<StatusFilter sortItems={sortItems} sortedState={sortedListStatus} />
|
|
@@ -132,7 +115,7 @@ const TableHeader = (props: IProps): JSX.Element => {
|
|
|
132
115
|
)}
|
|
133
116
|
<S.ActionsHeader>
|
|
134
117
|
<TableCounter totalItems={totalItems} />
|
|
135
|
-
<CustomizeFilters columns={columns} setColumns={setColumns} value={activeColumns} />
|
|
118
|
+
<CustomizeFilters columns={columns} setColumns={setColumns} value={activeColumns} limit={maxColumns} />
|
|
136
119
|
</S.ActionsHeader>
|
|
137
120
|
</S.TableHeader>
|
|
138
121
|
);
|
|
@@ -147,9 +130,10 @@ interface IProps {
|
|
|
147
130
|
sortItems: (orderPointer: IQueryValue[], isAscending: boolean) => void;
|
|
148
131
|
filterItems: (filterPointer: string, filtersSelected: IQueryValue[]) => void;
|
|
149
132
|
sortedListStatus: { isAscending: boolean; sortedByDate: boolean; sortedByTitle: boolean; sortedByURL: boolean };
|
|
150
|
-
categoryColumns:
|
|
151
|
-
columns:
|
|
152
|
-
setColumns: (columns:
|
|
133
|
+
categoryColumns: ISchemaField[];
|
|
134
|
+
columns: IColumn[];
|
|
135
|
+
setColumns: (columns: IColumn[]) => void;
|
|
136
|
+
maxColumns: { value: number; text: string };
|
|
153
137
|
isGlobalPages: boolean;
|
|
154
138
|
filterValues: any;
|
|
155
139
|
siteID: number;
|
|
@@ -52,13 +52,15 @@ const TypeHeader = styled(Header)`
|
|
|
52
52
|
`;
|
|
53
53
|
|
|
54
54
|
const GlobalMark = styled(Header)`
|
|
55
|
-
width: 24px;
|
|
56
55
|
flex: 0 0 24px;
|
|
56
|
+
padding-right: 0;
|
|
57
|
+
padding-left: 0;
|
|
57
58
|
`;
|
|
58
59
|
|
|
59
60
|
const ActionsHeader = styled(Header)`
|
|
60
|
-
|
|
61
|
+
flex: 0 0 85px;
|
|
61
62
|
padding-right: 0;
|
|
63
|
+
padding-left: 0;
|
|
62
64
|
justify-content: flex-end;
|
|
63
65
|
align-items: center;
|
|
64
66
|
`;
|
|
@@ -26,6 +26,7 @@ const BulkHeader = (props: IProps): JSX.Element => {
|
|
|
26
26
|
setColumns,
|
|
27
27
|
isGlobalPages,
|
|
28
28
|
siteID,
|
|
29
|
+
maxColumns,
|
|
29
30
|
} = props;
|
|
30
31
|
|
|
31
32
|
const isAllowedToDeletePage = usePermission("content.deletePages");
|
|
@@ -37,18 +38,20 @@ const BulkHeader = (props: IProps): JSX.Element => {
|
|
|
37
38
|
action: bulkDelete,
|
|
38
39
|
};
|
|
39
40
|
|
|
40
|
-
const actions = isAllowedToPublishPages
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
const actions = isAllowedToPublishPages
|
|
42
|
+
? [
|
|
43
|
+
{
|
|
44
|
+
icon: "upload-pending",
|
|
45
|
+
text: "publish",
|
|
46
|
+
action: bulkPublish,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
icon: "offline",
|
|
50
|
+
text: "unpublish",
|
|
51
|
+
action: bulkUnpublish,
|
|
52
|
+
},
|
|
53
|
+
]
|
|
54
|
+
: [];
|
|
52
55
|
|
|
53
56
|
const bulkActions = isEditable && isAllowedToDeletePage ? [deleteAction, ...actions] : actions;
|
|
54
57
|
|
|
@@ -76,6 +79,7 @@ const BulkHeader = (props: IProps): JSX.Element => {
|
|
|
76
79
|
setColumns={setColumns}
|
|
77
80
|
isGlobalPages={isGlobalPages}
|
|
78
81
|
siteID={siteID}
|
|
82
|
+
maxColumns={maxColumns}
|
|
79
83
|
/>
|
|
80
84
|
);
|
|
81
85
|
};
|
|
@@ -97,8 +101,9 @@ interface IProps {
|
|
|
97
101
|
isEditable?: boolean | null;
|
|
98
102
|
filterValues: any;
|
|
99
103
|
categoryColumns: any[];
|
|
100
|
-
columns:
|
|
101
|
-
setColumns: (columns:
|
|
104
|
+
columns: IColumn[];
|
|
105
|
+
setColumns: (columns: IColumn[]) => void;
|
|
106
|
+
maxColumns: { value: number; text: string };
|
|
102
107
|
isGlobalPages: boolean;
|
|
103
108
|
siteID: number;
|
|
104
109
|
}
|
|
@@ -101,7 +101,7 @@ const PageItem = (props: IPageItemProps): JSX.Element => {
|
|
|
101
101
|
const isCopyable = !currentTemplateDataPacks;
|
|
102
102
|
const isGlobal = origin === "GLOBAL";
|
|
103
103
|
const isTranslated = pageLanguages.length > 1;
|
|
104
|
-
const activeColumns =
|
|
104
|
+
const activeColumns = columns.filter((col) => col.show).map((col) => col.id);
|
|
105
105
|
const API_URL = process.env.REACT_APP_API_ENDPOINT;
|
|
106
106
|
const isPublished = liveStatus.status === pageStatus.PUBLISHED || liveStatus.status === pageStatus.UPLOAD_PENDING;
|
|
107
107
|
const isAllowedToDelete = (isPublished && isAllowedToDeletePublishedPage) || (!isPublished && isAllowedToDeletePage);
|
|
@@ -516,7 +516,7 @@ const PageItem = (props: IPageItemProps): JSX.Element => {
|
|
|
516
516
|
{!isHome && <S.Slug width={path.width}>{path.text}</S.Slug>}
|
|
517
517
|
</Tooltip>
|
|
518
518
|
</S.NameCell>
|
|
519
|
-
|
|
519
|
+
|
|
520
520
|
{activeColumns.includes("type") && (
|
|
521
521
|
<S.TypeCell role="cell" onClick={goToPage}>
|
|
522
522
|
{displayName}
|
|
@@ -529,6 +529,7 @@ const PageItem = (props: IPageItemProps): JSX.Element => {
|
|
|
529
529
|
</Tooltip>
|
|
530
530
|
</S.LiveCell>
|
|
531
531
|
)}
|
|
532
|
+
{CategoryColumns}
|
|
532
533
|
{activeColumns.includes("status") && (
|
|
533
534
|
<S.StatusCell role="cell" onClick={goToPage}>
|
|
534
535
|
{checkWorkflowStatus()}
|
|
@@ -682,7 +683,7 @@ interface IPageItemProps {
|
|
|
682
683
|
toggleToast(): void;
|
|
683
684
|
setRemovedPage(pageID: number): void;
|
|
684
685
|
categoryColumns: any[];
|
|
685
|
-
columns:
|
|
686
|
+
columns: IColumn[];
|
|
686
687
|
categoryColors: any;
|
|
687
688
|
addCategoryColors(cats: string[]): void;
|
|
688
689
|
dataPacks: IDataPack[];
|
|
@@ -75,8 +75,10 @@ const SeoCell = styled(Cell)`
|
|
|
75
75
|
`;
|
|
76
76
|
|
|
77
77
|
const GlobalCell = styled(Cell)`
|
|
78
|
-
width: 24px;
|
|
79
78
|
flex: 0 0 24px;
|
|
79
|
+
flex-shrink: 0;
|
|
80
|
+
padding-left: 0;
|
|
81
|
+
padding-right: 0;
|
|
80
82
|
`;
|
|
81
83
|
|
|
82
84
|
const Mark = styled.div`
|
|
@@ -109,14 +111,15 @@ const Wrapper = styled.div`
|
|
|
109
111
|
`;
|
|
110
112
|
|
|
111
113
|
const ActionsCell = styled(Cell)`
|
|
112
|
-
flex: 0 0
|
|
113
|
-
|
|
114
|
+
flex: 0 0 85px;
|
|
115
|
+
padding-left: 0;
|
|
114
116
|
`;
|
|
115
117
|
|
|
116
118
|
const StyledActionMenu = styled(ActionMenu)`
|
|
117
119
|
opacity: 0;
|
|
118
120
|
width: 32px;
|
|
119
121
|
display: flex;
|
|
122
|
+
margin-left: auto;
|
|
120
123
|
`;
|
|
121
124
|
|
|
122
125
|
const PageRow = styled(Row)<{ global?: boolean }>`
|