@griddo/ax 1.67.10 → 1.68.2

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 (121) 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/Toast/index.tsx +1 -1
  90. package/src/components/Tooltip/index.tsx +1 -1
  91. package/src/components/index.tsx +2 -0
  92. package/src/containers/App/actions.tsx +3 -7
  93. package/src/containers/PageEditor/actions.tsx +36 -5
  94. package/src/forms/editor.tsx +35 -1
  95. package/src/forms/fields.tsx +6 -2
  96. package/src/forms/index.tsx +2 -0
  97. package/src/forms/validators.tsx +29 -8
  98. package/src/guards/error/index.tsx +1 -1
  99. package/src/helpers/containerEvaluations.tsx +32 -4
  100. package/src/helpers/index.tsx +2 -0
  101. package/src/helpers/structuredData.tsx +2 -2
  102. package/src/hooks/forms.tsx +1 -28
  103. package/src/hooks/index.tsx +1 -2
  104. package/src/modules/FramePreview/index.tsx +70 -36
  105. package/src/modules/FramePreview/style.tsx +3 -0
  106. package/src/modules/GlobalEditor/PageBrowser/index.tsx +2 -7
  107. package/src/modules/GlobalEditor/index.tsx +8 -6
  108. package/src/modules/GlobalEditor/style.tsx +1 -1
  109. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/DefaultsBrowser/index.tsx +0 -4
  110. package/src/modules/Navigation/Defaults/DefaultsEditor/index.tsx +3 -2
  111. package/src/modules/PageEditor/PageBrowser/index.tsx +1 -4
  112. package/src/modules/PageEditor/index.tsx +6 -6
  113. package/src/modules/PublicPreview/index.tsx +17 -34
  114. package/src/modules/PublicPreview/style.tsx +0 -2
  115. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/TemplateBrowser/index.tsx +0 -4
  116. package/src/modules/Sites/index.tsx +1 -1
  117. package/src/modules/StructuredData/Form/ConnectedField/index.tsx +1 -1
  118. package/src/modules/StructuredData/Form/index.tsx +3 -1
  119. package/src/modules/StructuredData/StructuredDataList/index.tsx +1 -0
  120. package/src/schemas/pages/GlobalPage.tsx +1 -0
  121. package/src/types/index.tsx +1 -0
@@ -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 {