@vonaffenfels/contentful-teasermanager 1.2.18 → 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.
Files changed (36) hide show
  1. package/.babelrc +19 -19
  2. package/.nvmrc +1 -1
  3. package/dist/TestStory.js +94 -0
  4. package/dist/TestStory2.js +94 -0
  5. package/dist/TestStory3.js +94 -0
  6. package/dist/index.html +11 -11
  7. package/dist/index.js +99233 -44287
  8. package/package.json +3 -3
  9. package/postcss.config.js +6 -6
  10. package/src/components/Contentful/ConfigScreen.js +154 -154
  11. package/src/components/Contentful/Dialog/LogicEditor.js +533 -533
  12. package/src/components/Contentful/Dialog/NewestArticles.js +198 -198
  13. package/src/components/Contentful/Dialog.js +87 -87
  14. package/src/components/Contentful/EntryEditor.js +196 -196
  15. package/src/components/Contentful/Page.js +9 -9
  16. package/src/components/NoAccess.js +12 -12
  17. package/src/components/Teasermanager/Timeline.js +179 -179
  18. package/src/components/Teasermanager/Timeline.module.css +89 -89
  19. package/src/components/Teasermanager.js +269 -269
  20. package/src/components/Teasermanager.module.css +137 -137
  21. package/src/dev.js +5 -5
  22. package/src/hooks/useDebounce.js +20 -20
  23. package/src/hooks/useOnScreen.js +23 -23
  24. package/src/icons/remove.svg +7 -7
  25. package/src/index.html +11 -11
  26. package/src/index.js +51 -51
  27. package/src/lib/contentfulClient.js +12 -12
  28. package/src/lib/runLoaders.js +46 -46
  29. package/src/queryFromLogic.js +33 -33
  30. package/src/scss/index.scss +11 -11
  31. package/tailwind.config.js +5 -5
  32. package/webpack.config.dev.js +25 -25
  33. package/webpack.config.js +174 -174
  34. package/dist/_base_slate-editor_src_dev_testComponents_TestStory2_js.js +0 -94
  35. package/dist/_base_slate-editor_src_dev_testComponents_TestStory3_js.js +0 -94
  36. package/dist/_base_slate-editor_src_dev_testComponents_TestStory_js.js +0 -94
@@ -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
  };