@vonaffenfels/contentful-teasermanager 1.2.17 → 1.2.19

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.
@@ -1,196 +1,196 @@
1
- import React, {
2
- useEffect, useState,
3
- } from 'react';
4
- import {Teasermanager} from "../Teasermanager";
5
- import {NoAccess} from "../NoAccess";
6
-
7
- const Entry = ({sdk}) => {
8
- const contentField = sdk.parameters.instance.contentField;
9
- const [locale, setLocale] = useState(sdk.locales.default);
10
- const [portal, setPortal] = useState();
11
- const portalField = sdk?.entry?.fields?.portal;
12
- const enabled = !sdk?.parameters?.installation?.usersWithAccess?.[portal] || sdk?.parameters?.installation?.usersWithAccess?.[portal]?.includes(sdk?.user?.email);
13
-
14
- portalField?.onValueChanged(() => {
15
- if (portalField.getValue() !== portal) {
16
- setPortal(portalField.getValue());
17
- }
18
- });
19
-
20
- useEffect(() => {
21
- const detachHandler = sdk.editor.onLocaleSettingsChanged((loc) => {
22
- setLocale(loc?.focused || sdk.locales.default);
23
- });
24
-
25
- return () => {
26
- detachHandler();
27
- };
28
- }, []);
29
-
30
- const onSlotClick = (slotId, currentDate) => {
31
- return sdk.dialogs.openCurrentApp({
32
- title: "Artikel wählen",
33
- width: "fullWidth",
34
- position: "top",
35
- allowHeightOverflow: true,
36
- minHeight: "500px",
37
- shouldCloseOnOverlayClick: true,
38
- shouldCloseOnEscapePress: true,
39
- parameters: {
40
- portal,
41
- date: currentDate,
42
- slotId: slotId,
43
- entryId: sdk.entry.getSys().id,
44
- },
45
- }).then(async ({
46
- entry,
47
- isLogicResponse,
48
- } = {}) => {
49
- if (!entry || isLogicResponse) {
50
- return;
51
- }
52
-
53
- console.log(`Selected entry ${entry.sys.id} for page ${sdk.entry.getSys().id} with portal ${portal} for slot ${slotId} and date ${currentDate}`);
54
-
55
- const {apiRoot} = sdk.parameters.instance;
56
- try {
57
- const response = await fetch(`${apiRoot}/api/saveStateForSlot`, {
58
- method: "POST",
59
- body: JSON.stringify({
60
- "project": portal,
61
- "slot": slotId,
62
- "page": sdk.entry.getSys().id,
63
- "entry": entry.sys.id,
64
- "date": currentDate,
65
- }),
66
- });
67
- return entry;
68
- } catch (e) {
69
- console.error(e);
70
- alert("Fehler beim speichern!");
71
- }
72
- });
73
- };
74
-
75
- const onSlotClickLogic = (slotId, currentDate) => {
76
- const entryId = sdk.entry.getSys().id;
77
- return sdk.dialogs.openCurrentApp({
78
- title: "Positionslogik bearbeiten",
79
- width: "fullWidth",
80
- position: "top",
81
- allowHeightOverflow: true,
82
- minHeight: "500px",
83
- shouldCloseOnOverlayClick: true,
84
- shouldCloseOnEscapePress: true,
85
- parameters: {
86
- portal,
87
- slotId: slotId,
88
- entryId: entryId,
89
- isLogicEditor: true,
90
- date: currentDate,
91
- },
92
- }).then(async ({
93
- data: {
94
- timepoints,
95
- tags,
96
- } = {},
97
- isArticleResponse,
98
- } = {}) => {
99
- if (!timepoints || !tags || isArticleResponse) {
100
- return;
101
- }
102
-
103
- console.log(`Selected timepoints ${timepoints.map(v => `${v} Uhr`).join(", ")} and tags ${tags.map(v => `${v.label} (${v.id})`).join(", ")} for page ${entryId} with portal ${portal} for slot ${slotId}`);
104
-
105
- const {apiRoot} = sdk.parameters.instance;
106
- try {
107
- await fetch(`${apiRoot}/api/saveLogicForSlot`, {
108
- method: "POST",
109
- body: JSON.stringify({
110
- "project": portal,
111
- "slot": slotId,
112
- "page": entryId,
113
- "timepoints": timepoints,
114
- "tags": tags,
115
- }),
116
- });
117
- } catch (e) {
118
- console.error(e);
119
- alert("Fehler beim speichern!");
120
- }
121
- });
122
- };
123
-
124
- const removeSlotData = async (slotId, currentDate) => {
125
- console.log(`Removing slot data for page ${sdk.entry.getSys().id} with portal ${portal} for slot ${slotId} and date ${currentDate}`);
126
-
127
- try {
128
- const apiRoot = sdk.parameters.instance.apiRoot;
129
- await fetch(`${apiRoot}/api/saveStateForSlot`, {
130
- method: "POST",
131
- body: JSON.stringify({
132
- "project": portal,
133
- "slot": slotId,
134
- "page": sdk.entry.getSys().id,
135
- "entry": "RESET",
136
- "date": currentDate,
137
- }),
138
- });
139
- } catch (e) {
140
- console.error(e);
141
- alert("Fehler beim speichern!");
142
- }
143
- };
144
-
145
- const loadSlotStateForPage = async (date) => {
146
- try {
147
- const apiRoot = sdk.parameters.instance.apiRoot;
148
- const teasermanagerUrl = `${apiRoot}/api/findStateForPage?project=${portal}&page=${sdk.entry.getSys().id}&date=${date.toISOString()}`;
149
- const response = await fetch(teasermanagerUrl).then(res => res.json());
150
-
151
- if (response?.message) {
152
- console.error(response.message);
153
- }
154
-
155
- return response || {
156
- data: {},
157
- logicData: {},
158
- };
159
- } catch (e) {
160
- console.error(e);
161
- }
162
- };
163
-
164
- const loadTimelineStateForPage = async (fromDate, toDate) => {
165
- try {
166
- const apiRoot = sdk.parameters.instance.apiRoot;
167
- const teasermanagerUrl = `${apiRoot}/api/getTimelineStateForPage?project=${portal}&page=${sdk.entry.getSys().id}&fromDate=${fromDate}&toDate=${toDate}`;
168
- const response = await fetch(teasermanagerUrl).then(res => res.json());
169
-
170
- if (response?.message) {
171
- console.error(response.message);
172
- }
173
-
174
- return response?.data || {};
175
- } catch (e) {
176
- console.error(e);
177
- }
178
- };
179
-
180
- if (!enabled) {
181
- return <NoAccess sdk={sdk} portal={portal}/>;
182
- }
183
-
184
- return <Teasermanager
185
- entryId={sdk.entry.getSys().id}
186
- locale={locale}
187
- contentFieldName={contentField}
188
- loadSlotStateForPage={loadSlotStateForPage}
189
- removeSlotData={removeSlotData}
190
- loadTimelineStateForPage={loadTimelineStateForPage}
191
- onSlotClick={onSlotClick}
192
- onSlotClickLogic={onSlotClickLogic}
193
- />;
194
- };
195
-
196
- export default Entry;
1
+ import React, {
2
+ useEffect, useState,
3
+ } from 'react';
4
+ import {Teasermanager} from "../Teasermanager";
5
+ import {NoAccess} from "../NoAccess";
6
+
7
+ const Entry = ({sdk}) => {
8
+ const contentField = sdk.parameters.instance.contentField;
9
+ const [locale, setLocale] = useState(sdk.locales.default);
10
+ const [portal, setPortal] = useState();
11
+ const portalField = sdk?.entry?.fields?.portal;
12
+ const enabled = !sdk?.parameters?.installation?.usersWithAccess?.[portal] || sdk?.parameters?.installation?.usersWithAccess?.[portal]?.includes(sdk?.user?.email);
13
+
14
+ portalField?.onValueChanged(() => {
15
+ if (portalField.getValue() !== portal) {
16
+ setPortal(portalField.getValue());
17
+ }
18
+ });
19
+
20
+ useEffect(() => {
21
+ const detachHandler = sdk.editor.onLocaleSettingsChanged((loc) => {
22
+ setLocale(loc?.focused || sdk.locales.default);
23
+ });
24
+
25
+ return () => {
26
+ detachHandler();
27
+ };
28
+ }, []);
29
+
30
+ const onSlotClick = (slotId, currentDate) => {
31
+ return sdk.dialogs.openCurrentApp({
32
+ title: "Artikel wählen",
33
+ width: "fullWidth",
34
+ position: "top",
35
+ allowHeightOverflow: true,
36
+ minHeight: "500px",
37
+ shouldCloseOnOverlayClick: true,
38
+ shouldCloseOnEscapePress: true,
39
+ parameters: {
40
+ portal,
41
+ date: currentDate,
42
+ slotId: slotId,
43
+ entryId: sdk.entry.getSys().id,
44
+ },
45
+ }).then(async ({
46
+ entry,
47
+ isLogicResponse,
48
+ } = {}) => {
49
+ if (!entry || isLogicResponse) {
50
+ return;
51
+ }
52
+
53
+ console.log(`Selected entry ${entry.sys.id} for page ${sdk.entry.getSys().id} with portal ${portal} for slot ${slotId} and date ${currentDate}`);
54
+
55
+ const {apiRoot} = sdk.parameters.instance;
56
+ try {
57
+ const response = await fetch(`${apiRoot}/api/saveStateForSlot`, {
58
+ method: "POST",
59
+ body: JSON.stringify({
60
+ "project": portal,
61
+ "slot": slotId,
62
+ "page": sdk.entry.getSys().id,
63
+ "entry": entry.sys.id,
64
+ "date": currentDate,
65
+ }),
66
+ });
67
+ return entry;
68
+ } catch (e) {
69
+ console.error(e);
70
+ alert("Fehler beim speichern!");
71
+ }
72
+ });
73
+ };
74
+
75
+ const onSlotClickLogic = (slotId, currentDate) => {
76
+ const entryId = sdk.entry.getSys().id;
77
+ return sdk.dialogs.openCurrentApp({
78
+ title: "Positionslogik bearbeiten",
79
+ width: "fullWidth",
80
+ position: "top",
81
+ allowHeightOverflow: true,
82
+ minHeight: "500px",
83
+ shouldCloseOnOverlayClick: true,
84
+ shouldCloseOnEscapePress: true,
85
+ parameters: {
86
+ portal,
87
+ slotId: slotId,
88
+ entryId: entryId,
89
+ isLogicEditor: true,
90
+ date: currentDate,
91
+ },
92
+ }).then(async ({
93
+ data: {
94
+ timepoints,
95
+ tags,
96
+ } = {},
97
+ isArticleResponse,
98
+ } = {}) => {
99
+ if (!timepoints || !tags || isArticleResponse) {
100
+ return;
101
+ }
102
+
103
+ console.log(`Selected timepoints ${timepoints.map(v => `${v} Uhr`).join(", ")} and tags ${tags.map(v => `${v.label} (${v.id})`).join(", ")} for page ${entryId} with portal ${portal} for slot ${slotId}`);
104
+
105
+ const {apiRoot} = sdk.parameters.instance;
106
+ try {
107
+ await fetch(`${apiRoot}/api/saveLogicForSlot`, {
108
+ method: "POST",
109
+ body: JSON.stringify({
110
+ "project": portal,
111
+ "slot": slotId,
112
+ "page": entryId,
113
+ "timepoints": timepoints,
114
+ "tags": tags,
115
+ }),
116
+ });
117
+ } catch (e) {
118
+ console.error(e);
119
+ alert("Fehler beim speichern!");
120
+ }
121
+ });
122
+ };
123
+
124
+ const removeSlotData = async (slotId, currentDate) => {
125
+ console.log(`Removing slot data for page ${sdk.entry.getSys().id} with portal ${portal} for slot ${slotId} and date ${currentDate}`);
126
+
127
+ try {
128
+ const apiRoot = sdk.parameters.instance.apiRoot;
129
+ await fetch(`${apiRoot}/api/saveStateForSlot`, {
130
+ method: "POST",
131
+ body: JSON.stringify({
132
+ "project": portal,
133
+ "slot": slotId,
134
+ "page": sdk.entry.getSys().id,
135
+ "entry": "RESET",
136
+ "date": currentDate,
137
+ }),
138
+ });
139
+ } catch (e) {
140
+ console.error(e);
141
+ alert("Fehler beim speichern!");
142
+ }
143
+ };
144
+
145
+ const loadSlotStateForPage = async (date) => {
146
+ try {
147
+ const apiRoot = sdk.parameters.instance.apiRoot;
148
+ const teasermanagerUrl = `${apiRoot}/api/findStateForPage?project=${portal}&page=${sdk.entry.getSys().id}&date=${date.toISOString()}`;
149
+ const response = await fetch(teasermanagerUrl).then(res => res.json());
150
+
151
+ if (response?.message) {
152
+ console.error(response.message);
153
+ }
154
+
155
+ return response || {
156
+ data: {},
157
+ logicData: {},
158
+ };
159
+ } catch (e) {
160
+ console.error(e);
161
+ }
162
+ };
163
+
164
+ const loadTimelineStateForPage = async (fromDate, toDate) => {
165
+ try {
166
+ const apiRoot = sdk.parameters.instance.apiRoot;
167
+ const teasermanagerUrl = `${apiRoot}/api/getTimelineStateForPage?project=${portal}&page=${sdk.entry.getSys().id}&fromDate=${fromDate}&toDate=${toDate}`;
168
+ const response = await fetch(teasermanagerUrl).then(res => res.json());
169
+
170
+ if (response?.message) {
171
+ console.error(response.message);
172
+ }
173
+
174
+ return response?.data || {};
175
+ } catch (e) {
176
+ console.error(e);
177
+ }
178
+ };
179
+
180
+ if (!enabled) {
181
+ return <NoAccess sdk={sdk} portal={portal}/>;
182
+ }
183
+
184
+ return <Teasermanager
185
+ entryId={sdk.entry.getSys().id}
186
+ locale={locale}
187
+ contentFieldName={contentField}
188
+ loadSlotStateForPage={loadSlotStateForPage}
189
+ removeSlotData={removeSlotData}
190
+ loadTimelineStateForPage={loadTimelineStateForPage}
191
+ onSlotClick={onSlotClick}
192
+ onSlotClickLogic={onSlotClickLogic}
193
+ />;
194
+ };
195
+
196
+ export default Entry;
@@ -1,9 +1,9 @@
1
- import React from 'react';
2
- import {Teasermanager} from "../Teasermanager";
3
- import {NoAccess} from "../NoAccess";
4
-
5
- const Page = ({sdk}) => {
6
- return <Teasermanager entryId={"4RvZ6fcUtBIgw2Hw5YILPs"} />;
7
- };
8
-
9
- export default Page;
1
+ import React from 'react';
2
+ import {Teasermanager} from "../Teasermanager";
3
+ import {NoAccess} from "../NoAccess";
4
+
5
+ const Page = ({sdk}) => {
6
+ return <Teasermanager entryId={"4RvZ6fcUtBIgw2Hw5YILPs"} />;
7
+ };
8
+
9
+ export default Page;
@@ -1,13 +1,13 @@
1
- import {
2
- DisplayText, Flex, Paragraph,
3
- } from "@contentful/f36-components";
4
-
5
- export const NoAccess = ({sdk}) => {
6
- return <Flex flexDirection="column" alignItems="center" paddingTop="spacing2Xl">
7
- <DisplayText>
8
- Kein Zugriff
9
- </DisplayText>
10
- <Paragraph>Bitte wenden Sie sich an einen Administrator wenn sie Zugriff benötigen</Paragraph>
11
- <Paragraph>Angemeldeter Benutzer: {sdk?.user?.email}</Paragraph>
12
- </Flex>;
1
+ import {
2
+ DisplayText, Flex, Paragraph,
3
+ } from "@contentful/f36-components";
4
+
5
+ export const NoAccess = ({sdk}) => {
6
+ return <Flex flexDirection="column" alignItems="center" paddingTop="spacing2Xl">
7
+ <DisplayText>
8
+ Kein Zugriff
9
+ </DisplayText>
10
+ <Paragraph>Bitte wenden Sie sich an einen Administrator wenn sie Zugriff benötigen</Paragraph>
11
+ <Paragraph>Angemeldeter Benutzer: {sdk?.user?.email}</Paragraph>
12
+ </Flex>;
13
13
  };