@griddo/ax 1.67.8 → 1.68.0

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 (124) hide show
  1. package/config/jest/componentsMock.js +1528 -27
  2. package/package.json +2 -2
  3. package/src/__mocks__/reducers/app.tsx +10 -0
  4. package/src/__mocks__/reducers/sites.tsx +10 -0
  5. package/src/__tests__/{AnalyticsField.test.tsx → components/Fields/AnalyticsField/AnalyticsField.test.tsx} +5 -5
  6. package/src/__tests__/{PageAnalytics.test.tsx → components/Fields/AnalyticsField/PageAnalytics/PageAnalytics.test.tsx} +2 -2
  7. package/src/__tests__/{StructuredDataAnalytics.test.tsx → components/Fields/AnalyticsField/StructuredDataAnalytics/StructuredDataAnalytics.test.tsx} +2 -2
  8. package/src/__tests__/{ArrayFieldGroup.test.tsx → components/Fields/ArrayFieldGroup/ArrayFieldGroup.test.tsx} +2 -2
  9. package/src/__tests__/{AsyncCheckGroup.test.tsx → components/Fields/AsyncCheckGroup/AsyncCheckGroup.test.tsx} +2 -2
  10. package/src/__tests__/{AsyncSelect.test.tsx → components/Fields/AsyncSelect/AsyncSelect.test.tsx} +2 -2
  11. package/src/__tests__/{CheckField.test.tsx → components/Fields/CheckField/CheckField.test.tsx} +2 -2
  12. package/src/__tests__/{CheckGroup.test.tsx → components/Fields/CheckGroup/CheckGroup.test.tsx} +2 -2
  13. package/src/__tests__/components/Fields/ColorPicker/ColorPicker.test.tsx +195 -0
  14. package/src/__tests__/components/Fields/ComponentArray/ComponentArray.test.tsx +184 -0
  15. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/MixableComponentArray.test.tsx +315 -0
  16. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/PasteModuleButton.test.tsx +95 -0
  17. package/src/__tests__/components/Fields/ComponentArray/SameComponentArray/SameComponentArray.test.tsx +225 -0
  18. package/src/__tests__/{FieldGroup.test.tsx → components/Fields/FieldGroup/FieldGroup.test.tsx} +2 -2
  19. package/src/__tests__/components/Fields/FieldsDivider/FieldsDivider.test.tsx +24 -0
  20. package/src/__tests__/components/Fields/FileField/FileField.test.tsx +135 -0
  21. package/src/__tests__/{HeadingField.test.tsx → components/Fields/HeadingField/HeadingField.test.tsx} +2 -2
  22. package/src/__tests__/components/Fields/HiddenField/HiddenField.test.tsx +76 -0
  23. package/src/__tests__/components/Fields/MultiCheckSelect/MultiCheckSelect.test.tsx +70 -0
  24. package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +67 -0
  25. package/src/__tests__/components/Fields/NumberField/NumberField.test.tsx +109 -0
  26. package/src/__tests__/components/Fields/RadioField/RadioField.test.tsx +106 -0
  27. package/src/__tests__/components/Fields/RichText/RichText.test.tsx +52 -0
  28. package/src/__tests__/components/Fields/Select/Select.test.tsx +75 -0
  29. package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +82 -0
  30. package/src/__tests__/{TagField.test.tsx → components/Fields/TagField/TagField.test.tsx} +2 -2
  31. package/src/__tests__/{TextArea.test.tsx → components/Fields/TextArea/TextArea.test.tsx} +2 -2
  32. package/src/__tests__/{TextField.test.tsx → components/Fields/TextField/TextField.test.tsx} +2 -2
  33. package/src/__tests__/components/Fields/ToggleField/ToggleField.test.tsx +100 -0
  34. package/src/__tests__/{UniqueCheck.test.tsx → components/Fields/UniqueCheck/UniqueCheck.test.tsx} +2 -2
  35. package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +446 -0
  36. package/src/__tests__/components/Fields/UrlField/mockedAxios.ts +2214 -0
  37. package/src/__tests__/components/Fields/VisualUniqueSelection/ImageSelection/ImageSelection.test.tsx +99 -0
  38. package/src/__tests__/components/Fields/VisualUniqueSelection/ScrollableSelection/ScrollableSelection.test.tsx +176 -0
  39. package/src/__tests__/components/Fields/VisualUniqueSelection/VisualUniqueSelection.test.tsx +78 -0
  40. package/src/components/ActionMenu/index.tsx +1 -0
  41. package/src/components/Browser/index.tsx +39 -47
  42. package/src/components/Browser/style.tsx +15 -15
  43. package/src/components/BrowserContent/index.tsx +78 -0
  44. package/src/components/ConfigPanel/Form/ConnectedField/NavConnectedField/index.tsx +3 -5
  45. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/index.tsx +2 -6
  46. package/src/components/ConfigPanel/Header/index.tsx +28 -11
  47. package/src/components/ConfigPanel/index.tsx +2 -2
  48. package/src/components/ErrorCenter/index.tsx +11 -4
  49. package/src/components/Fields/ArrayFieldGroup/index.tsx +4 -2
  50. package/src/components/Fields/ArrayFieldGroup/style.tsx +7 -0
  51. package/src/components/Fields/AsyncCheckGroup/index.tsx +1 -1
  52. package/src/components/Fields/CheckField/index.tsx +1 -1
  53. package/src/components/Fields/ColorPicker/Picker/index.tsx +9 -3
  54. package/src/components/Fields/ColorPicker/index.tsx +4 -9
  55. package/src/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/index.tsx +2 -1
  56. package/src/components/Fields/ComponentArray/MixableComponentArray/index.tsx +27 -22
  57. package/src/components/Fields/ComponentArray/MixableComponentArray/style.tsx +3 -38
  58. package/src/components/Fields/ComponentArray/SameComponentArray/index.tsx +3 -2
  59. package/src/components/Fields/ComponentArray/SameComponentArray/style.tsx +1 -28
  60. package/src/components/Fields/ComponentArray/helpers.tsx +1 -1
  61. package/src/components/Fields/ComponentContainer/index.tsx +3 -1
  62. package/src/components/Fields/FileField/FileDragAndDrop/index.tsx +1 -1
  63. package/src/components/Fields/FileField/FileDragAndDrop/style.tsx +2 -3
  64. package/src/components/Fields/FileField/index.tsx +6 -6
  65. package/src/components/Fields/HiddenField/index.tsx +3 -3
  66. package/src/components/Fields/MultiCheckSelect/index.tsx +8 -27
  67. package/src/components/Fields/NoteField/index.tsx +3 -3
  68. package/src/components/Fields/NumberField/index.tsx +6 -3
  69. package/src/components/Fields/RadioField/index.tsx +10 -2
  70. package/src/components/Fields/ReferenceField/index.tsx +8 -1
  71. package/src/components/Fields/ReferenceField/style.tsx +5 -0
  72. package/src/components/Fields/RichText/index.tsx +1 -1
  73. package/src/components/Fields/SliderField/index.tsx +11 -7
  74. package/src/components/Fields/ToggleField/index.tsx +12 -3
  75. package/src/components/Fields/UrlField/PageFinder/SelectionListItem/index.tsx +1 -1
  76. package/src/components/Fields/UrlField/index.tsx +6 -4
  77. package/src/components/Fields/UrlField/style.tsx +4 -2
  78. package/src/components/Fields/VisualOption/index.tsx +10 -2
  79. package/src/components/Fields/VisualUniqueSelection/ImageSelection/index.tsx +2 -2
  80. package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/index.tsx +4 -3
  81. package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/style.tsx +1 -1
  82. package/src/components/Fields/VisualUniqueSelection/index.tsx +3 -3
  83. package/src/components/FieldsBehavior/index.tsx +4 -4
  84. package/src/components/FieldsBehavior/style.tsx +5 -12
  85. package/src/components/FloatingMenu/index.tsx +8 -4
  86. package/src/components/Loader/index.tsx +12 -8
  87. package/src/components/MainWrapper/AppBar/index.tsx +1 -0
  88. package/src/components/MainWrapper/index.tsx +1 -0
  89. package/src/components/Modal/index.tsx +3 -2
  90. package/src/components/Modal/style.tsx +2 -1
  91. package/src/components/Toast/index.tsx +1 -1
  92. package/src/components/Tooltip/index.tsx +1 -1
  93. package/src/components/index.tsx +2 -0
  94. package/src/containers/App/actions.tsx +3 -7
  95. package/src/containers/PageEditor/actions.tsx +36 -5
  96. package/src/forms/editor.tsx +35 -1
  97. package/src/forms/fields.tsx +6 -2
  98. package/src/forms/index.tsx +2 -0
  99. package/src/forms/validators.tsx +29 -8
  100. package/src/guards/error/index.tsx +1 -1
  101. package/src/helpers/containerEvaluations.tsx +32 -4
  102. package/src/helpers/index.tsx +2 -0
  103. package/src/helpers/structuredData.tsx +2 -2
  104. package/src/hooks/forms.tsx +1 -28
  105. package/src/hooks/index.tsx +1 -2
  106. package/src/modules/Content/atoms.tsx +1 -0
  107. package/src/modules/FramePreview/index.tsx +70 -36
  108. package/src/modules/FramePreview/style.tsx +3 -0
  109. package/src/modules/GlobalEditor/PageBrowser/index.tsx +2 -7
  110. package/src/modules/GlobalEditor/index.tsx +8 -6
  111. package/src/modules/GlobalEditor/style.tsx +1 -1
  112. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/DefaultsBrowser/index.tsx +0 -4
  113. package/src/modules/Navigation/Defaults/DefaultsEditor/index.tsx +3 -2
  114. package/src/modules/PageEditor/PageBrowser/index.tsx +1 -4
  115. package/src/modules/PageEditor/index.tsx +6 -6
  116. package/src/modules/PublicPreview/index.tsx +17 -34
  117. package/src/modules/PublicPreview/style.tsx +0 -2
  118. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/TemplateBrowser/index.tsx +0 -4
  119. package/src/modules/Sites/index.tsx +1 -1
  120. package/src/modules/StructuredData/Form/ConnectedField/index.tsx +1 -1
  121. package/src/modules/StructuredData/Form/index.tsx +3 -1
  122. package/src/modules/StructuredData/StructuredDataList/index.tsx +1 -0
  123. package/src/schemas/pages/GlobalPage.tsx +1 -0
  124. package/src/types/index.tsx +1 -0
@@ -127,7 +127,7 @@ const GlobalEditor = (props: IProps) => {
127
127
  const publishPage = async () => {
128
128
  const { updatePageStatus, savePage, pageID, validatePage } = props;
129
129
 
130
- const validated = await validatePage(true, browserRef);
130
+ const validated = await validatePage(true);
131
131
 
132
132
  if (validated) {
133
133
  const publishPage = {
@@ -147,7 +147,7 @@ const GlobalEditor = (props: IProps) => {
147
147
  const publishChanges = async () => {
148
148
  const { savePage, validatePage } = props;
149
149
 
150
- const validated = await validatePage(true, browserRef);
150
+ const validated = await validatePage(true);
151
151
 
152
152
  if (validated) {
153
153
  const publishPage = {
@@ -176,13 +176,13 @@ const GlobalEditor = (props: IProps) => {
176
176
 
177
177
  const reviewPage = () => {
178
178
  const { validatePage } = props;
179
- validatePage(undefined, browserRef);
179
+ validatePage(undefined);
180
180
  };
181
181
 
182
182
  const handlePublishDraft = async () => {
183
183
  const { savePage, validatePage } = props;
184
184
 
185
- const validated = await validatePage(true, browserRef);
185
+ const validated = await validatePage(true);
186
186
 
187
187
  if (validated) {
188
188
  const isSaved = await savePage(false, null, true);
@@ -307,6 +307,8 @@ const GlobalEditor = (props: IProps) => {
307
307
  setTab(tab);
308
308
  };
309
309
 
310
+ const goToPackage = () => setHistoryPush("/sites/settings/content-types", false);
311
+
310
312
  const modalText = (
311
313
  <>
312
314
  Some content <strong>is not saved</strong> on this page.
@@ -425,7 +427,7 @@ const GlobalEditor = (props: IProps) => {
425
427
  currentPageID={pageID}
426
428
  fullWidth={true}
427
429
  errors={errors}
428
- errorActions={{ goToError }}
430
+ errorActions={{ goToError, goToPackage }}
429
431
  inversed={true}
430
432
  isFromEditor={true}
431
433
  pageStatusActions={pageStatusActions}
@@ -583,7 +585,7 @@ interface IPageEditorDispatchProps {
583
585
  getPage(pageID?: number, global?: boolean): Promise<void>;
584
586
  savePage(createDraft: boolean, publishPage?: any, publishDraft?: boolean): Promise<boolean>;
585
587
  deletePage(params?: ISavePageParams): Promise<boolean>;
586
- validatePage(publish?: boolean, browserRef?: any): Promise<boolean>;
588
+ validatePage(publish?: boolean): Promise<boolean>;
587
589
  updatePageStatus(id: number[], status: string): Promise<boolean>;
588
590
  setHistoryPush(path: string, isEditor: boolean): void;
589
591
  setLanguage?(lang: { locale: string; id: number | null }): void;
@@ -11,7 +11,7 @@ const NotificationWrapper = styled.div`
11
11
  top: ${(p) => `calc(${p.theme.spacing.s} * 4)`};
12
12
  left: 0;
13
13
  right: 0;
14
- z-index: 2;
14
+ z-index: 3;
15
15
  `;
16
16
 
17
17
  const ModalContent = styled.div`
@@ -10,7 +10,6 @@ const DefaultsBrowser = (props: IProps) => {
10
10
  socials,
11
11
  cloudinaryName,
12
12
  content,
13
- selectedEditorID,
14
13
  setSelectedContent,
15
14
  currentSiteInfo: { theme, id: siteID },
16
15
  siteLangs,
@@ -23,7 +22,6 @@ const DefaultsBrowser = (props: IProps) => {
23
22
  isPage={false}
24
23
  socials={socials}
25
24
  content={updatedContent}
26
- selectedEditorID={selectedEditorID}
27
25
  setSelectedContent={setSelectedContent}
28
26
  url={content.slug}
29
27
  theme={theme}
@@ -37,7 +35,6 @@ const DefaultsBrowser = (props: IProps) => {
37
35
  interface IEditorStateProps {
38
36
  // TODO: Define content Type
39
37
  content: any;
40
- selectedEditorID: number;
41
38
  currentSiteInfo: any;
42
39
  socials: ISocialState;
43
40
  cloudinaryName: string | null;
@@ -52,7 +49,6 @@ type IProps = IEditorStateProps & IPageBrowserDispatchProps;
52
49
 
53
50
  const mapStateToProps = (state: IRootState): IEditorStateProps => ({
54
51
  content: { ...state.navigation.editorContent },
55
- selectedEditorID: state.navigation.selectedEditorID as number,
56
52
  currentSiteInfo: state.sites.currentSiteInfo,
57
53
  socials: state.social,
58
54
  cloudinaryName: state.app.globalSettings.cloudinaryName,
@@ -37,7 +37,8 @@ const DefaultsEditor = (props: IProps) => {
37
37
  const { isOpen, toggleModal } = useModal();
38
38
  const { isDirty, setIsDirty, resetDirty } = useIsDirty(editorContent, isNewTranslation);
39
39
  const currentDefaultNav = currentDefaultsContent.find((item: any) => item.setAsDefault);
40
- const isNew = !editorContent?.id || null;
40
+ const isNew = !editorContent?.id;
41
+
41
42
  const isSetAsDefault = editorContent && editorContent.setAsDefault;
42
43
 
43
44
  useEffect(() => {
@@ -85,7 +86,7 @@ const DefaultsEditor = (props: IProps) => {
85
86
  const saveButtonAction = () => {
86
87
  const isCurrentDefault = currentDefaultNav && currentDefaultNav.id === editorContent.id;
87
88
  const isNewDefault = isNew || !isCurrentDefault;
88
- isSetAsDefault && isNewDefault ? toggleModal() : save();
89
+ isSetAsDefault && isNewDefault && !isNewTranslation ? toggleModal() : save();
89
90
  };
90
91
 
91
92
  const rightButtonProps = {
@@ -14,7 +14,6 @@ const PageBrowser = (props: IProps) => {
14
14
  header,
15
15
  footer,
16
16
  },
17
- selectedEditorID,
18
17
  setSelectedContent,
19
18
  currentSiteInfo: { theme, id: siteID },
20
19
  siteLangs,
@@ -36,7 +35,6 @@ const PageBrowser = (props: IProps) => {
36
35
  header={header}
37
36
  footer={footer}
38
37
  socials={socials}
39
- selectedEditorID={selectedEditorID}
40
38
  setSelectedContent={setSelectedContent}
41
39
  url={url}
42
40
  theme={theme}
@@ -45,6 +43,7 @@ const PageBrowser = (props: IProps) => {
45
43
  disabled={disabled}
46
44
  siteID={siteID}
47
45
  isPreview={isPreview}
46
+ showIframe={true}
48
47
  browserRef={browserRef}
49
48
  />
50
49
  );
@@ -53,7 +52,6 @@ const PageBrowser = (props: IProps) => {
53
52
  interface IEditorStateProps {
54
53
  // TODO: Define content Type
55
54
  content: any;
56
- selectedEditorID: number;
57
55
  currentSiteInfo: any;
58
56
  socials: ISocialState;
59
57
  cloudinaryName: string | null;
@@ -74,7 +72,6 @@ type IProps = IEditorStateProps & IPageBrowserDispatchProps;
74
72
 
75
73
  const mapStateToProps = (state: IRootState): IEditorStateProps => ({
76
74
  content: { ...state.pageEditor.editorContent },
77
- selectedEditorID: state.pageEditor.selectedEditorID as number,
78
75
  currentSiteInfo: state.sites.currentSiteInfo,
79
76
  socials: state.social,
80
77
  cloudinaryName: state.app.globalSettings.cloudinaryName,
@@ -131,7 +131,7 @@ const PageEditor = (props: IProps) => {
131
131
  const publishPage = async () => {
132
132
  const { updatePageStatus, savePage, pageID, validatePage } = props;
133
133
 
134
- const validated = await validatePage(true, browserRef);
134
+ const validated = await validatePage(true);
135
135
 
136
136
  if (validated) {
137
137
  const publishPage = {
@@ -151,7 +151,7 @@ const PageEditor = (props: IProps) => {
151
151
  const publishChanges = async () => {
152
152
  const { savePage, validatePage } = props;
153
153
 
154
- const validated = await validatePage(true, browserRef);
154
+ const validated = await validatePage(true);
155
155
 
156
156
  if (validated) {
157
157
  const publishPage = {
@@ -180,13 +180,13 @@ const PageEditor = (props: IProps) => {
180
180
 
181
181
  const reviewPage = () => {
182
182
  const { validatePage } = props;
183
- validatePage(false, browserRef);
183
+ validatePage(false);
184
184
  };
185
185
 
186
186
  const handlePublishDraft = async () => {
187
187
  const { savePage, validatePage } = props;
188
188
 
189
- const validated = await validatePage(true, browserRef);
189
+ const validated = await validatePage(true);
190
190
 
191
191
  if (validated) {
192
192
  const isSaved = await savePage(false, null, true);
@@ -482,7 +482,7 @@ const PageEditor = (props: IProps) => {
482
482
  currentPageID={pageID}
483
483
  fullWidth={true}
484
484
  errors={errors}
485
- errorActions={{ goToError }}
485
+ errorActions={{ goToError, goToPackage: handleClickNotification }}
486
486
  isFromEditor={true}
487
487
  tabs={tabsPreview}
488
488
  >
@@ -650,7 +650,7 @@ interface IPageEditorDispatchProps {
650
650
  getPage(pageID?: number): Promise<void>;
651
651
  savePage(createDraft: boolean, publishPage?: any, publishDraft?: boolean): Promise<boolean>;
652
652
  deletePage(params?: ISavePageParams): Promise<boolean>;
653
- validatePage(publish?: boolean, browserRef?: any): Promise<boolean>;
653
+ validatePage(publish?: boolean): Promise<boolean>;
654
654
  updatePageStatus(id: number[], status: string): Promise<boolean>;
655
655
  setHistoryPush(path: string, isEditor: boolean): void;
656
656
  setLanguage?(lang: { locale: string; id: number | null }): void;
@@ -1,12 +1,9 @@
1
1
  import React, { useEffect, useState } from "react";
2
2
  import { useParams } from "react-router-dom";
3
3
 
4
- import * as components from "components";
5
- import { SiteProvider } from "components";
6
- import { Preview } from "@griddo/core";
7
4
  import { pages } from "@ax/api";
8
5
  import { getDefaultTheme, isReqOk } from "@ax/helpers";
9
- import { Loading } from "@ax/components";
6
+ import { BrowserContent, Loading } from "@ax/components";
10
7
 
11
8
  import * as S from "./style";
12
9
 
@@ -41,43 +38,29 @@ const PublicPreview = () => {
41
38
  // eslint-disable-next-line react-hooks/exhaustive-deps
42
39
  }, []);
43
40
 
44
- const API_URL = process.env.REACT_APP_API_ENDPOINT;
45
- const PUBLIC_API_URL = process.env.REACT_APP_PUBLIC_API_ENDPOINT;
46
-
47
41
  const globalTheme = getDefaultTheme();
48
42
  const theme = state && state.site ? state.siteInfo.theme : globalTheme;
49
43
  const socials = state && state.site ? state.siteInfo.socials : [];
50
44
  const langs = state && state.site ? state.siteInfo.siteLanguages : [];
51
45
 
52
- if (isLoading) return <Loading />;
46
+ if (isLoading || !state) return <Loading />;
53
47
 
54
48
  return (
55
- <SiteProvider
56
- cloudinaryCloudName={state && state.cloudinaryName}
57
- theme={theme}
58
- socials={socials}
59
- siteLangs={langs}
60
- selectEditorID={0}
61
- renderer="editor"
62
- apiUrl={API_URL}
63
- publicApiUrl={PUBLIC_API_URL}
64
- siteId={state && state.site}
65
- >
66
- <S.Wrapper ref={(ref: any) => ((window as any).browserRef = ref)}>
67
- {state && (
68
- <Preview
69
- isPage={true}
70
- apiUrl={API_URL}
71
- library={components}
72
- content={state}
73
- header={state && state.headerContent}
74
- footer={state && state.footerContent}
75
- languageId={state && state.language}
76
- pageLanguages={state && state.pageLanguages}
77
- />
78
- )}
79
- </S.Wrapper>
80
- </SiteProvider>
49
+ <S.Wrapper ref={(ref: any) => ((window as any).browserRef = ref)}>
50
+ <BrowserContent
51
+ cloudinaryName={state && state.cloudinaryName}
52
+ theme={theme}
53
+ socials={socials}
54
+ siteLangs={langs}
55
+ siteID={state && state.site}
56
+ isPage={true}
57
+ content={state}
58
+ header={state && state.headerContent}
59
+ footer={state && state.footerContent}
60
+ languageID={state && state.language}
61
+ pageLanguages={state && state.pageLanguages}
62
+ />
63
+ </S.Wrapper>
81
64
  );
82
65
  };
83
66
 
@@ -5,11 +5,9 @@ const Wrapper = styled.div`
5
5
  scroll-behavior: smooth;
6
6
  height: 100%;
7
7
  position: relative;
8
-
9
8
  .headroom {
10
9
  position: relative !important;
11
10
  }
12
-
13
11
  body.preview:not(&) {
14
12
  min-width: 0 !important;
15
13
  }
@@ -9,7 +9,6 @@ const TemplateBrowser = (props: IProps) => {
9
9
  socials,
10
10
  cloudinaryName,
11
11
  content: { editorContent, header, footer },
12
- selectedEditorID,
13
12
  currentSiteInfo: { theme, id: siteID },
14
13
  siteLangs,
15
14
  } = props;
@@ -21,7 +20,6 @@ const TemplateBrowser = (props: IProps) => {
21
20
  isPage={true}
22
21
  socials={socials}
23
22
  content={updatedContent}
24
- selectedEditorID={selectedEditorID}
25
23
  url=""
26
24
  theme={theme}
27
25
  cloudinaryName={cloudinaryName}
@@ -35,7 +33,6 @@ const TemplateBrowser = (props: IProps) => {
35
33
 
36
34
  interface IProps {
37
35
  content: any;
38
- selectedEditorID: number;
39
36
  currentSiteInfo: any;
40
37
  socials: ISocialState;
41
38
  cloudinaryName: string | null;
@@ -44,7 +41,6 @@ interface IProps {
44
41
 
45
42
  const mapStateToProps = (state: IRootState): IProps => ({
46
43
  content: { ...state.pageEditor.editorContent },
47
- selectedEditorID: state.navigation.selectedEditorID as number,
48
44
  currentSiteInfo: state.sites.currentSiteInfo,
49
45
  socials: state.social,
50
46
  cloudinaryName: state.app.globalSettings.cloudinaryName,
@@ -49,7 +49,7 @@ const Sites = (props: IProps): JSX.Element => {
49
49
  // eslint-disable-next-line react-hooks/exhaustive-deps
50
50
  }, [token]);
51
51
 
52
- return isLoading ? <Loading /> : <SitesList sites={sites} />;
52
+ return isLoading && sites.length === 0 ? <Loading /> : <SitesList sites={sites} />;
53
53
  };
54
54
 
55
55
  const mapStateToProps = (state: IRootState) => ({
@@ -22,7 +22,7 @@ const ConnectedField = (props: IProps) => {
22
22
  let innerFields: JSX.Element[] = [];
23
23
 
24
24
  if (isConditional || isArrayGroup) {
25
- innerFields = getStructuredDataInnerFields(field.fields, form.content, updateFormValue, theme);
25
+ innerFields = getStructuredDataInnerFields(field.fields, form.content, updateFormValue, theme, errors);
26
26
  }
27
27
 
28
28
  const fieldProps = {
@@ -118,10 +118,12 @@ const Form = (props: IProps) => {
118
118
  return form.draft ? "Save" : "Save & publish";
119
119
  };
120
120
 
121
+ const handleSaveAndPublish = () => (isNewStructuredData || form.draft ? handleSave(false) : handleSave(true));
122
+
121
123
  const rightButtonProps = {
122
124
  label: isSaving ? "Saving" : getSaveLabel(),
123
125
  disabled: isSaving || isDisabled,
124
- action: handleSave,
126
+ action: handleSaveAndPublish,
125
127
  };
126
128
 
127
129
  const inversed = !currentSite;
@@ -174,6 +174,7 @@ const StructuredDataList = (props: IProps): JSX.Element => {
174
174
  include_draft: true,
175
175
  query: searchQuery,
176
176
  format: "list",
177
+ relatedFields: true,
177
178
  };
178
179
 
179
180
  return params;
@@ -11,6 +11,7 @@ export default {
11
11
  title: "Title",
12
12
  type: "TextField",
13
13
  key: "title",
14
+ mandatory: true,
14
15
  },
15
16
  {
16
17
  title: "Template",
@@ -580,6 +580,7 @@ export interface IErrorItem {
580
580
  key: string;
581
581
  tab: string;
582
582
  template: boolean;
583
+ hasDeactivatedPackage?: boolean;
583
584
  }
584
585
 
585
586
  export interface IStructuredDataFilter {