design-comuni-plone-theme 11.29.2 → 12.0.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 (227) hide show
  1. package/.github/workflows/main.yml +16 -16
  2. package/.github/workflows/npm.yml +1 -1
  3. package/.github/workflows/withnewsletter.yml +47 -0
  4. package/.release-it.json +1 -0
  5. package/.yarn/cache/@babel-helper-module-imports-npm-7.24.3-edb733448b-c23492189b.zip +0 -0
  6. package/.yarn/cache/@babel-types-npm-7.24.0-a0508cb308-4b574a37d4.zip +0 -0
  7. package/.yarn/cache/babel-plugin-lodash-npm-3.3.4-c7161075b6-044a4261e6.zip +0 -0
  8. package/.yarn/cache/braces-npm-3.0.3-582c14023c-b95aa0b3bd.zip +0 -0
  9. package/.yarn/cache/fill-range-npm-7.1.1-bf491486db-b4abfbca38.zip +0 -0
  10. package/.yarn/cache/micromatch-npm-4.0.8-c9570e4aca-79920eb634.zip +0 -0
  11. package/.yarn/cache/require-package-name-npm-2.0.1-ac9a206b63-00f4e9e467.zip +0 -0
  12. package/.yarn/install-state.gz +0 -0
  13. package/CHANGELOG.md +1728 -1659
  14. package/RELEASE.md +6 -0
  15. package/locales/de/LC_MESSAGES/volto.po +86 -19
  16. package/locales/en/LC_MESSAGES/volto.po +86 -19
  17. package/locales/es/LC_MESSAGES/volto.po +86 -19
  18. package/locales/fr/LC_MESSAGES/volto.po +86 -19
  19. package/locales/it/LC_MESSAGES/volto.po +87 -20
  20. package/locales/volto.pot +87 -20
  21. package/package.json +3 -1
  22. package/publiccode.yml +2 -2
  23. package/src/components/Collapse.jsx +1 -0
  24. package/src/components/ItaliaTheme/AppExtras/SiteSettingsExtras.jsx +0 -6
  25. package/src/components/ItaliaTheme/Blocks/Accordion/Block/EditBlock.jsx +29 -24
  26. package/src/components/ItaliaTheme/Blocks/Accordion/Block/ViewBlock.jsx +4 -12
  27. package/src/components/ItaliaTheme/Blocks/Accordion/Edit.jsx +118 -42
  28. package/src/components/ItaliaTheme/Blocks/Accordion/View.jsx +4 -18
  29. package/src/components/ItaliaTheme/Blocks/Alert/Edit.jsx +60 -113
  30. package/src/components/ItaliaTheme/Blocks/Alert/Sidebar.jsx +1 -0
  31. package/src/components/ItaliaTheme/Blocks/Alert/View.jsx +5 -14
  32. package/src/components/ItaliaTheme/Blocks/ArgumentsInEvidence/Block.jsx +16 -11
  33. package/src/components/ItaliaTheme/Blocks/ArgumentsInEvidence/Body.jsx +2 -1
  34. package/src/components/ItaliaTheme/Blocks/ArgumentsInEvidence/Edit.jsx +39 -1
  35. package/src/components/ItaliaTheme/Blocks/CTABlock/Block.jsx +35 -95
  36. package/src/components/ItaliaTheme/Blocks/Callout/Edit.jsx +108 -0
  37. package/src/components/ItaliaTheme/Blocks/Callout/Sidebar.jsx +173 -0
  38. package/src/components/ItaliaTheme/Blocks/Callout/View.jsx +45 -0
  39. package/src/components/ItaliaTheme/Blocks/ContactsBlock/Block/EditBlock.jsx +86 -63
  40. package/src/components/ItaliaTheme/Blocks/ContactsBlock/Block/ViewBlock.jsx +19 -39
  41. package/src/components/ItaliaTheme/Blocks/ContactsBlock/Edit.jsx +101 -22
  42. package/src/components/ItaliaTheme/Blocks/ContactsBlock/View.jsx +13 -21
  43. package/src/components/ItaliaTheme/Blocks/CountDown/Edit.jsx +21 -25
  44. package/src/components/ItaliaTheme/Blocks/CountDown/View.jsx +6 -15
  45. package/src/components/ItaliaTheme/Blocks/IconBlocks/Block/EditBlock.jsx +52 -22
  46. package/src/components/ItaliaTheme/Blocks/IconBlocks/Block/ViewBlock.jsx +9 -29
  47. package/src/components/ItaliaTheme/Blocks/IconBlocks/Edit.jsx +108 -21
  48. package/src/components/ItaliaTheme/Blocks/IconBlocks/Sidebar.jsx +1 -9
  49. package/src/components/ItaliaTheme/Blocks/IconBlocks/View.jsx +6 -14
  50. package/src/components/ItaliaTheme/Blocks/Listing/CardWithSlideUpTextTemplate.jsx +0 -1
  51. package/src/components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock.jsx +45 -15
  52. package/src/components/ItaliaTheme/Blocks/NumbersBlock/Block/ViewBlock.jsx +2 -18
  53. package/src/components/ItaliaTheme/Blocks/NumbersBlock/Edit.jsx +98 -11
  54. package/src/components/ItaliaTheme/Blocks/NumbersBlock/View.jsx +2 -7
  55. package/src/components/ItaliaTheme/Blocks/TextCard/CardWithImage/Block.jsx +35 -67
  56. package/src/components/ItaliaTheme/Blocks/TextCard/CardWithImage/Edit.jsx +2 -8
  57. package/src/components/ItaliaTheme/Blocks/TextCard/SimpleCard/BodyWrapper.jsx +2 -1
  58. package/src/components/ItaliaTheme/Blocks/TextCard/SimpleCard/Edit.jsx +98 -84
  59. package/src/components/ItaliaTheme/Blocks/TextCard/SimpleCard/View.jsx +20 -3
  60. package/src/components/ItaliaTheme/Blocks/UOSearch/Sidebar.jsx +11 -11
  61. package/src/components/ItaliaTheme/Blocks/__tests__/Accordion.test.jsx +11 -28
  62. package/src/components/ItaliaTheme/Blocks/__tests__/Alert.test.jsx +10 -14
  63. package/src/components/ItaliaTheme/Blocks/__tests__/ArgumentsInEvidence.test.jsx +20 -28
  64. package/src/components/ItaliaTheme/Blocks/__tests__/CTABlock.test.jsx +14 -29
  65. package/src/components/ItaliaTheme/Blocks/__tests__/CardWithImage.test.jsx +11 -28
  66. package/src/components/ItaliaTheme/Blocks/__tests__/ContactsBlock.test.jsx +75 -140
  67. package/src/components/ItaliaTheme/Blocks/__tests__/Countdown.test.jsx +20 -28
  68. package/src/components/ItaliaTheme/Blocks/__tests__/IconBlocks.test.jsx +22 -56
  69. package/src/components/ItaliaTheme/Blocks/__tests__/NumbersBlock.test.jsx +14 -43
  70. package/src/components/ItaliaTheme/Blocks/__tests__/SimpleCard.test.jsx +14 -30
  71. package/src/components/ItaliaTheme/BrandText/BrandText.jsx +8 -14
  72. package/src/components/ItaliaTheme/BrandTextFooter/BrandTextFooter.jsx +31 -2
  73. package/src/components/ItaliaTheme/Footer/FooterInfos.jsx +21 -8
  74. package/src/components/ItaliaTheme/Footer/FooterNavigation.jsx +3 -3
  75. package/src/components/ItaliaTheme/Header/HeaderSlim/HeaderSlim.jsx +0 -7
  76. package/src/components/ItaliaTheme/Icons/Icon.jsx +0 -1
  77. package/src/components/ItaliaTheme/MegaMenu/MegaMenu.jsx +5 -1
  78. package/src/components/ItaliaTheme/View/BandoView/BandoApprofondimenti.jsx +1 -2
  79. package/src/components/ItaliaTheme/View/CartellaModulisticaView/DocRow.jsx +14 -5
  80. package/src/components/ItaliaTheme/View/Commons/Attachment.jsx +19 -3
  81. package/src/components/ItaliaTheme/View/Commons/Attachments.jsx +0 -1
  82. package/src/components/ItaliaTheme/View/Commons/DownloadFileFormat.jsx +11 -7
  83. package/src/components/ItaliaTheme/View/Commons/Gallery.jsx +1 -0
  84. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeaderEventDates.jsx +0 -1
  85. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeaderLinkServizio.jsx +6 -2
  86. package/src/components/ItaliaTheme/View/Commons/RichTextRender.jsx +8 -6
  87. package/src/components/ItaliaTheme/View/Commons/__tests__/RichText.test.jsx +14 -17
  88. package/src/components/ItaliaTheme/View/EventoView/EventoContattiOrganizzatoreEsterno.jsx +1 -1
  89. package/src/components/ItaliaTheme/View/EventoView/EventoUlterioriInformazioni.jsx +0 -4
  90. package/src/components/ItaliaTheme/View/ServizioView/ServizioAccedi.jsx +10 -7
  91. package/src/components/ItaliaTheme/View/ServizioView/ServizioMetatag.jsx +4 -3
  92. package/src/components/ItaliaTheme/View/__disabled_tests__/IncaricoView.test__disabled.jsx +24 -30
  93. package/src/components/ItaliaTheme/View/__tests__/CartellaModulisticaView.test.jsx +12 -1
  94. package/src/components/ItaliaTheme/View/__tests__/PageView.test.jsx +24 -2
  95. package/src/components/ItaliaTheme/View/__tests__/PersonaView.test.jsx +96 -92
  96. package/src/components/ItaliaTheme/View/__tests__/ServizioAChiSiRivolge.test.jsx +240 -286
  97. package/src/components/ItaliaTheme/View/__tests__/ServizioAccedi.test.jsx +240 -286
  98. package/src/components/ItaliaTheme/View/__tests__/ServizioCasiParticolari.test.jsx +240 -286
  99. package/src/components/ItaliaTheme/View/__tests__/ServizioComeFare.test.jsx +240 -286
  100. package/src/components/ItaliaTheme/View/__tests__/ServizioCondizioni.test.jsx +240 -286
  101. package/src/components/ItaliaTheme/View/__tests__/ServizioContatti.test.jsx +240 -286
  102. package/src/components/ItaliaTheme/View/__tests__/ServizioCosE.test.jsx +240 -286
  103. package/src/components/ItaliaTheme/View/__tests__/ServizioCosaServe.test.jsx +240 -286
  104. package/src/components/ItaliaTheme/View/__tests__/ServizioCosaSiOttiene.test.jsx +240 -286
  105. package/src/components/ItaliaTheme/View/__tests__/ServizioCostiVincoli.test.jsx +240 -286
  106. package/src/components/ItaliaTheme/View/__tests__/ServizioMetadati.test.jsx +240 -286
  107. package/src/components/ItaliaTheme/View/__tests__/ServizioModulistica.test.jsx +240 -286
  108. package/src/components/ItaliaTheme/View/__tests__/ServizioProcedure.test.jsx +240 -286
  109. package/src/components/ItaliaTheme/View/__tests__/ServizioSitiEsterni.test.jsx +240 -286
  110. package/src/components/ItaliaTheme/View/__tests__/ServizioTempiScadenze.test.jsx +240 -286
  111. package/src/components/ItaliaTheme/View/__tests__/ServizioUlterioriInformazioni.test.jsx +240 -286
  112. package/src/components/ItaliaTheme/View/__tests__/ServizioView.test.jsx +470 -560
  113. package/src/components/ItaliaTheme/View/__tests__/TrasparenzaView.test.jsx +12 -1
  114. package/src/components/ItaliaTheme/index.js +0 -1
  115. package/src/components/ItaliaTheme/manage/Widgets/ColorListWidget.jsx +11 -2
  116. package/src/components/ItaliaTheme/manage/Widgets/HtmlSlateWidget.jsx +156 -0
  117. package/src/components/ItaliaTheme/manage/Widgets/RichTextWidget.jsx +88 -0
  118. package/src/components/ItaliaTheme/manage/Widgets/SimpleTextEditorWidget.jsx +158 -0
  119. package/src/components/ItaliaTheme/manage/Widgets/TextEditorWidget.jsx +167 -270
  120. package/src/config/Blocks/ListingOptions/index.js +0 -1
  121. package/src/config/Blocks/ListingOptions/utils.js +0 -7
  122. package/src/config/Blocks/blocks.js +29 -8
  123. package/src/config/Blocks/listingVariations.js +1 -1
  124. package/src/config/Slate/Alignment/AlignMenu.jsx +169 -0
  125. package/src/config/Slate/Alignment/index.js +42 -0
  126. package/src/config/Slate/Blockquote/BlockquoteMenu.jsx +151 -0
  127. package/src/config/Slate/Blockquote/index.js +19 -0
  128. package/src/config/Slate/Headings/HeadingsMenu.jsx +139 -0
  129. package/src/config/Slate/Headings/headingsMenu.scss +44 -0
  130. package/src/config/Slate/Headings/index.js +62 -0
  131. package/src/config/Slate/Link/deserializer.js +25 -0
  132. package/src/config/Slate/Link/index.js +126 -0
  133. package/src/config/Slate/Link/renderer.jsx +99 -0
  134. package/src/config/Slate/LinkButton/index.js +47 -0
  135. package/src/config/Slate/TextLarger/index.js +51 -0
  136. package/src/config/Slate/Underline/index.js +10 -0
  137. package/src/config/Slate/config.js +43 -0
  138. package/src/config/Slate/deserializers.js +66 -0
  139. package/src/config/Slate/dropdownStyle.scss +14 -0
  140. package/src/config/Slate/dropdownUtils.js +422 -0
  141. package/src/config/Slate/extensions/breakList.js +91 -0
  142. package/src/config/Slate/handlers.js +243 -0
  143. package/src/config/Slate/utils.js +73 -0
  144. package/src/config/Widgets/widgets.js +1 -2
  145. package/src/config/italiaConfig.js +5 -53
  146. package/src/customizations/volto/components/manage/AnchorPlugin/components/LinkButton/AddLinkForm.jsx +361 -0
  147. package/src/customizations/volto/components/manage/Blocks/HeroImageLeft/Edit.jsx +75 -200
  148. package/src/customizations/volto/components/manage/Blocks/Video/Body.jsx +0 -1
  149. package/src/customizations/volto/components/manage/Blocks/Video/Edit.jsx +1 -1
  150. package/src/customizations/volto/components/manage/Form/BlocksToolbar.jsx +1 -1
  151. package/src/customizations/volto/components/manage/UniversalLink/UniversalLink.jsx +76 -18
  152. package/src/customizations/volto/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +4 -0
  153. package/src/customizations/volto-form-block/components/Field.jsx +45 -22
  154. package/src/helpers/EnhanceLink.js +44 -0
  155. package/src/helpers/FormValidation/FormValidationHelpers.js +3 -0
  156. package/src/helpers/blocks.js +80 -0
  157. package/src/helpers/files.js +13 -13
  158. package/src/helpers/index.js +4 -3
  159. package/src/helpers/richTextHelper.js +10 -0
  160. package/src/icons/Group.svg +1 -0
  161. package/src/icons/blocco-icone.svg +0 -3
  162. package/src/icons/blockquote-card-dark.svg +1 -0
  163. package/src/icons/blockquote-card.svg +1 -0
  164. package/src/icons/blockquote-simple.svg +1 -0
  165. package/src/icons/text-larger.svg +1 -0
  166. package/src/theme/ItaliaTheme/Blocks/_accordion.scss +2 -22
  167. package/src/theme/ItaliaTheme/Blocks/_alert.scss +51 -4
  168. package/src/theme/ItaliaTheme/Blocks/_bandiInEvidenceTemplate.scss +1 -0
  169. package/src/theme/ItaliaTheme/Blocks/_callout.scss +32 -0
  170. package/src/theme/ItaliaTheme/Blocks/_contacts.scss +17 -51
  171. package/src/theme/ItaliaTheme/Blocks/_countdown.scss +10 -1
  172. package/src/theme/ItaliaTheme/Blocks/_ctaBlock.scss +7 -23
  173. package/src/theme/ItaliaTheme/Blocks/_gridBlock.scss +1 -1
  174. package/src/theme/ItaliaTheme/Blocks/_hero.scss +1 -8
  175. package/src/theme/ItaliaTheme/Blocks/_iconBlocks.scss +6 -77
  176. package/src/theme/ItaliaTheme/Blocks/_imageCardTextBlock.scss +3 -2
  177. package/src/theme/ItaliaTheme/Blocks/_numbers.scss +6 -20
  178. package/src/theme/ItaliaTheme/Blocks/_simpleCardTextBlock.scss +8 -2
  179. package/src/theme/ItaliaTheme/Blocks/_subblocks-edit.scss +3 -1
  180. package/src/theme/ItaliaTheme/Blocks/_tableOfContents.scss +1 -0
  181. package/src/theme/ItaliaTheme/Components/_megamenu.scss +0 -4
  182. package/src/theme/ItaliaTheme/Components/_mobileMenu.scss +12 -16
  183. package/src/theme/ItaliaTheme/Print/_page.scss +1 -1
  184. package/src/theme/ItaliaTheme/Subsites/ItaliaTheme/Blocks/_contacts.scss +3 -0
  185. package/src/theme/ItaliaTheme/Subsites/ItaliaTheme/Blocks/_cta.scss +1 -0
  186. package/src/theme/ItaliaTheme/Subsites/ItaliaTheme/Blocks/_searchSections.scss +1 -0
  187. package/src/theme/ItaliaTheme/Subsites/bootstrap-italia/custom/_headercenter.scss +1 -0
  188. package/src/theme/ItaliaTheme/Views/_cartellaModulistica.scss +11 -2
  189. package/src/theme/ItaliaTheme/Views/_servizio.scss +2 -2
  190. package/src/theme/ItaliaTheme/Views/_slider.scss +3 -0
  191. package/src/theme/ItaliaTheme/Widgets/_iconWidget.scss +4 -0
  192. package/src/theme/ItaliaTheme/_common.scss +1 -0
  193. package/src/theme/ItaliaTheme/_home.scss +0 -4
  194. package/src/theme/ItaliaTheme/_main.scss +78 -84
  195. package/src/theme/_cms-ui.scss +63 -160
  196. package/src/theme/_mixins.scss +13 -0
  197. package/src/theme/bootstrap-override/_bootstrap-italia-site.scss +1 -0
  198. package/src/theme/bootstrap-override/bootstrap-italia/_footer.scss +1 -1
  199. package/src/theme/bootstrap-override/bootstrap-italia/_forms.scss +7 -0
  200. package/src/theme/bootstrap-override/bootstrap-italia/_headercenter.scss +8 -3
  201. package/src/theme/extras/_forms.scss +2 -14
  202. package/src/theme/site.scss +1 -1
  203. package/test-setup-config.js +58 -0
  204. package/.yarn/cache/braces-npm-3.0.2-782240b28a-e2a8e769a8.zip +0 -0
  205. package/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-cc283f4e65.zip +0 -0
  206. package/.yarn/cache/micromatch-npm-4.0.5-cfab5d7669-02a17b671c.zip +0 -0
  207. package/src/components/ItaliaTheme/Blocks/TextCard/SimpleCard/Block.jsx +0 -151
  208. package/src/components/ItaliaTheme/RemoveBodyClass/RemoveBodyClass.jsx +0 -84
  209. package/src/config/RichTextEditor/LinkEntity.jsx +0 -27
  210. package/src/config/RichTextEditor/Plugins/AnchorPlugin/components/Link/index.jsx +0 -44
  211. package/src/config/RichTextEditor/Plugins/AnchorPlugin/components/LinkButton/AddLinkForm.jsx +0 -349
  212. package/src/config/RichTextEditor/Plugins/AnchorPlugin/components/LinkButton/index.js +0 -150
  213. package/src/config/RichTextEditor/Plugins/AnchorPlugin/index.js +0 -88
  214. package/src/config/RichTextEditor/ToolbarButtons/AlignButton.jsx +0 -61
  215. package/src/config/RichTextEditor/ToolbarButtons/ButtonsButton.jsx +0 -14
  216. package/src/config/RichTextEditor/ToolbarButtons/CalloutsButton.jsx +0 -38
  217. package/src/config/RichTextEditor/ToolbarButtons/DraftJsDropdownButton.jsx +0 -106
  218. package/src/config/RichTextEditor/ToolbarButtons/HeadingsButton.jsx +0 -57
  219. package/src/config/RichTextEditor/ToolbarButtons/TextSizeButton.jsx +0 -65
  220. package/src/config/RichTextEditor/ToolbarButtons/UnderlineButton.jsx +0 -14
  221. package/src/config/RichTextEditor/config.js +0 -253
  222. package/src/config/volto-gdpr-privacy-defaultPanelConfig.js +0 -292
  223. package/src/customizations/volto/components/manage/Blocks/ToC/View.jsx +0 -134
  224. package/src/customizations/volto/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +0 -99
  225. package/src/customizations/volto/config/RichTextEditor/Plugins.jsx +0 -63
  226. package/src/helpers/redraftHelper.js +0 -9
  227. package/src/theme/ItaliaTheme/Components/_logo.scss +0 -10
@@ -0,0 +1,361 @@
1
+ /**
2
+ * Add link form.
3
+ * @module components/manage/AnchorPlugin/components/LinkButton/AddLinkForm
4
+ * Customizzato
5
+ * - Aggiunta gestione data-element
6
+ * - Aggiunte opzioni per la select del data-element
7
+ * - Modificate icone ed elementi per stilizzare il tooltip del link
8
+ * - passato l'item selezionato, oltre alla sua url, nella onchange
9
+ */
10
+
11
+ import React, { Component } from 'react';
12
+ import PropTypes from 'prop-types';
13
+ import { compose } from 'redux';
14
+
15
+ import cx from 'classnames';
16
+ import {
17
+ addAppURL,
18
+ isInternalURL,
19
+ flattenToAppURL,
20
+ URLUtils,
21
+ } from '@plone/volto/helpers';
22
+
23
+ import { doesNodeContainClick } from 'semantic-ui-react/dist/commonjs/lib';
24
+ import { Input, Form, Button } from 'semantic-ui-react';
25
+ import { defineMessages, injectIntl } from 'react-intl';
26
+
27
+ import clearSVG from '@plone/volto/icons/clear.svg';
28
+ import navTreeSVG from '@plone/volto/icons/nav.svg';
29
+ import aheadSVG from '@plone/volto/icons/ahead.svg';
30
+
31
+ import withObjectBrowser from '@plone/volto/components/manage/Sidebar/ObjectBrowser';
32
+ import { withRouter } from 'react-router';
33
+
34
+ import { Icon, SelectWidget } from '@plone/volto/components';
35
+
36
+ const messages = defineMessages({
37
+ placeholder: {
38
+ id: 'Enter URL or select an item',
39
+ defaultMessage: 'Enter URL or select an item',
40
+ },
41
+ placeholderLighthouse: {
42
+ id: 'Select a data-element ID',
43
+ defaultMessage: 'Seleziona un data-element ID', // TO DO: da sistemare quando si risolve il bug su i18n
44
+ },
45
+ });
46
+
47
+ /**
48
+ * Add link form class.
49
+ * @class AddLinkForm
50
+ * @extends Component
51
+ */
52
+ class AddLinkForm extends Component {
53
+ static propTypes = {
54
+ onChangeValue: PropTypes.func.isRequired,
55
+ onClear: PropTypes.func.isRequired,
56
+ onOverrideContent: PropTypes.func.isRequired,
57
+ theme: PropTypes.objectOf(PropTypes.any).isRequired,
58
+ openObjectBrowser: PropTypes.func.isRequired,
59
+ };
60
+
61
+ /**
62
+ * Constructor
63
+ * @method constructor
64
+ * @param {Object} props Component properties
65
+ * @constructs AddLinkForm
66
+ */
67
+ constructor(props) {
68
+ super(props);
69
+
70
+ this.state = {
71
+ dataElement: props.data.dataElement,
72
+ value: isInternalURL(props.data.url)
73
+ ? flattenToAppURL(props.data.url)
74
+ : props.data.url || '',
75
+ item: null,
76
+ isInvalid: false,
77
+ };
78
+ this.onRef = this.onRef.bind(this);
79
+ this.onChange = this.onChange.bind(this);
80
+ this.onKeyDown = this.onKeyDown.bind(this);
81
+ this.onSubmit = this.onSubmit.bind(this);
82
+
83
+ // Options to data-element select
84
+ this.selectOptions = [
85
+ ['appointment-booking', 'appointment-booking'],
86
+ ['service-booking-access', 'service-booking-access'],
87
+ ['faq', 'faq'],
88
+ ['report-inefficiency', 'report-inefficiency'],
89
+ ['accessibility-link', 'accessibility-link'],
90
+ ['privacy-policy-link', 'privacy-policy-link'],
91
+ ['legal-notes', 'legal-notes'],
92
+ ['pager-link', 'pager-link'],
93
+ ];
94
+ }
95
+
96
+ /**
97
+ * Component did mount
98
+ * @method componentDidMount
99
+ * @returns {undefined}
100
+ */
101
+ componentDidMount() {
102
+ setTimeout(() => {
103
+ if (this.input) {
104
+ return this.input.focus();
105
+ }
106
+ return null;
107
+ }, 50);
108
+ document.addEventListener('mousedown', this.handleClickOutside, false);
109
+ }
110
+
111
+ componentWillUnmount() {
112
+ document.removeEventListener('mousedown', this.handleClickOutside, false);
113
+ }
114
+
115
+ handleClickOutside = (e) => {
116
+ if (
117
+ this.linkFormContainer.current &&
118
+ doesNodeContainClick(this.linkFormContainer.current, e)
119
+ )
120
+ return;
121
+ if (this.linkFormContainer.current && this.props.isObjectBrowserOpen)
122
+ return;
123
+ this.onClose();
124
+ };
125
+
126
+ /**
127
+ * Ref handler
128
+ * @method onRef
129
+ * @param {Object} node Node
130
+ * @returns {undefined}
131
+ */
132
+ onRef(node) {
133
+ this.input = node;
134
+ }
135
+
136
+ linkFormContainer = React.createRef();
137
+
138
+ /**
139
+ * Change handler
140
+ * @method onChange
141
+ * @param {Object} value Value
142
+ * @returns {undefined}
143
+ */
144
+ onChange(value, clear, item) {
145
+ let nextState = { value, item };
146
+ if (!clear) {
147
+ if (
148
+ this.state.isInvalid &&
149
+ URLUtils.isUrl(URLUtils.normalizeUrl(value))
150
+ ) {
151
+ nextState.isInvalid = false;
152
+ }
153
+
154
+ if (isInternalURL(value)) {
155
+ nextState = { value: flattenToAppURL(value), item };
156
+ }
157
+ }
158
+ this.setState(nextState);
159
+
160
+ if (clear) this.clear();
161
+ }
162
+
163
+ /**
164
+ * Clear handler
165
+ * @method clear
166
+ * @param {Object} value Value
167
+ * @returns {undefined}
168
+ */
169
+ clear() {
170
+ const nextState = { value: '', item: null };
171
+ this.setState(nextState);
172
+
173
+ this.props.onClear();
174
+ }
175
+
176
+ /**
177
+ * Close handler
178
+ * @method onClose
179
+ * @returns {undefined}
180
+ */
181
+ onClose = () => this.props.onOverrideContent(undefined);
182
+
183
+ /**
184
+ * Keydown handler
185
+ * @method onKeyDown
186
+ * @param {Object} e Event object
187
+ * @returns {undefined}
188
+ */
189
+ onKeyDown(e) {
190
+ if (e.key === 'Enter') {
191
+ e.preventDefault();
192
+ e.stopPropagation();
193
+ this.onSubmit();
194
+ } else if (e.key === 'Escape') {
195
+ e.preventDefault();
196
+ this.onClose();
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Submit handler
202
+ * @method onSubmit
203
+ * @returns {undefined}
204
+ */
205
+ onSubmit() {
206
+ let { value: url, dataElement, item } = this.state;
207
+
208
+ const checkedURL = URLUtils.checkAndNormalizeUrl(url);
209
+ url = checkedURL.url;
210
+ if (!checkedURL.isValid) {
211
+ this.setState({ isInvalid: true });
212
+ return;
213
+ }
214
+
215
+ const editorStateUrl = isInternalURL(url) ? addAppURL(url) : url;
216
+
217
+ this.props.onChangeValue(editorStateUrl, dataElement, item);
218
+ this.onClose();
219
+ }
220
+
221
+ /**
222
+ * Render method.
223
+ * @method render
224
+ * @returns {string} Markup for the component.
225
+ */
226
+ render() {
227
+ const { value, isInvalid, dataElement } = this.state;
228
+ const className = isInvalid
229
+ ? cx(
230
+ 'ui input editor-link',
231
+ 'input-anchorlink-theme',
232
+ 'input-anchorlink-theme-Invalid',
233
+ )
234
+ : cx('ui input editor-link', 'input-anchorlink-theme');
235
+
236
+ return (
237
+ <div className="link-form-container" ref={this.linkFormContainer}>
238
+ <div
239
+ style={{ marginLeft: '5px', display: 'flex', alignItems: 'center' }}
240
+ >
241
+ <svg
242
+ xmlns="http://www.w3.org/2000/svg"
243
+ width="24"
244
+ height="24"
245
+ viewBox="0 0 36 36"
246
+ fill="#B8B2C8"
247
+ >
248
+ <g fillRule="evenodd">
249
+ <path d="M27.1318,7.333 C24.4028,4.604 19.9618,4.604 17.2328,7.333 L12.9898,11.576 C11.8428,12.723 11.1288,14.248 10.9778,15.871 C10.8228,17.541 11.2708,19.211 12.2378,20.576 C12.4818,20.919 12.7278,21.213 12.9888,21.475 C13.7848,22.271 14.7778,22.868 15.8608,23.202 C16.5498,23.415 17.2548,23.519 17.9518,23.518 C19.7808,23.518 21.5598,22.804 22.8888,21.475 L23.9498,20.414 L22.5358,19 L21.4748,20.061 C20.1648,21.371 18.2388,21.842 16.4498,21.291 C15.6668,21.049 14.9778,20.635 14.4038,20.061 C14.2218,19.879 14.0478,19.668 13.8698,19.418 C13.1778,18.443 12.8588,17.249 12.9688,16.056 C13.0768,14.896 13.5868,13.808 14.4038,12.99 L18.6468,8.747 C20.5958,6.798 23.7688,6.798 25.7178,8.747 C26.6568,9.687 27.1748,10.942 27.1748,12.283 C27.1748,13.623 26.6568,14.878 25.7178,15.818 L27.1318,17.232 C28.4488,15.915 29.1748,14.157 29.1748,12.283 C29.1748,10.408 28.4488,8.65 27.1318,7.333" />
250
+ <path d="M25.0107,16.5254 C24.2147,15.7294 23.2217,15.1324 22.1387,14.7984 C19.6417,14.0284 16.9477,14.6894 15.1107,16.5254 L14.0507,17.5864 L15.4647,19.0004 L16.5247,17.9394 C17.8357,16.6294 19.7587,16.1554 21.5497,16.7094 C22.3337,16.9514 23.0217,17.3644 23.5957,17.9394 C23.7777,18.1214 23.9527,18.3314 24.1307,18.5824 C24.8217,19.5564 25.1417,20.7514 25.0317,21.9444 C24.9237,23.1034 24.4137,24.1924 23.5957,25.0104 L19.3537,29.2534 C17.4047,31.2024 14.2317,31.2024 12.2817,29.2534 C11.3427,28.3134 10.8247,27.0574 10.8247,25.7174 C10.8247,24.3774 11.3427,23.1214 12.2817,22.1824 L10.8677,20.7684 C9.5507,22.0854 8.8247,23.8424 8.8247,25.7174 C8.8247,27.5924 9.5507,29.3504 10.8677,30.6674 C12.2327,32.0314 14.0257,32.7134 15.8177,32.7134 C17.6107,32.7134 19.4027,32.0314 20.7677,30.6674 L25.0107,26.4244 C26.1567,25.2774 26.8717,23.7524 27.0227,22.1294 C27.1777,20.4594 26.7297,18.7894 25.7617,17.4244 C25.5177,17.0814 25.2717,16.7874 25.0107,16.5254" />
251
+ </g>
252
+ </svg>
253
+ <Form.Field>
254
+ <div className="wrapper-fields">
255
+ {/* INPUT LINK */}
256
+ <div className="wrap-field">
257
+ <Input
258
+ className={className}
259
+ id={`field-link`}
260
+ name="link"
261
+ value={value || ''}
262
+ onChange={({ target }) => this.onChange(target.value)}
263
+ placeholder={this.props.intl.formatMessage(
264
+ messages.placeholder,
265
+ )}
266
+ onKeyDown={this.onKeyDown}
267
+ ref={this.onRef}
268
+ />
269
+ {value.length > 0 ? (
270
+ <Button.Group>
271
+ <Button
272
+ basic
273
+ className="cancel"
274
+ onClick={(e) => {
275
+ e.preventDefault();
276
+ e.stopPropagation();
277
+ this.clear();
278
+ }}
279
+ >
280
+ <Icon name={clearSVG} size="20px" />
281
+ </Button>
282
+ </Button.Group>
283
+ ) : (
284
+ <Button.Group>
285
+ <Button
286
+ basic
287
+ icon
288
+ onClick={(e) => {
289
+ e.preventDefault();
290
+ e.stopPropagation();
291
+
292
+ this.props.openObjectBrowser({
293
+ mode: 'link',
294
+ overlay: true,
295
+ onSelectItem: (url, item) => {
296
+ this.onChange(url, null, item);
297
+ this.onSubmit();
298
+ },
299
+ });
300
+ }}
301
+ >
302
+ <Icon
303
+ name={navTreeSVG}
304
+ size="22px"
305
+ pointer-events="none"
306
+ />
307
+ </Button>
308
+ </Button.Group>
309
+ )}
310
+ </div>
311
+
312
+ {/* DATA-ELEMENT SELECT */}
313
+ <div className="wrap-field">
314
+ <SelectWidget
315
+ id="data-element-select"
316
+ title="data-element"
317
+ placeholder={this.props.intl.formatMessage(
318
+ messages.placeholderLighthouse,
319
+ )}
320
+ isMulti={false}
321
+ value={dataElement}
322
+ onChange={(_, value) => {
323
+ this.setState({ dataElement: value });
324
+ }}
325
+ choices={this.selectOptions}
326
+ noValueOption={false}
327
+ wrapped={false}
328
+ />
329
+ </div>
330
+ </div>
331
+
332
+ {/* BUTTON SUBMIT */}
333
+ <div className="wrapper-submit">
334
+ <Button.Group>
335
+ <Button
336
+ basic
337
+ primary
338
+ disabled={!value.length > 0}
339
+ onClick={(e) => {
340
+ e.preventDefault();
341
+ e.stopPropagation();
342
+ this.onSubmit();
343
+ }}
344
+ onKeyDown={(e) => {
345
+ e.preventDefault();
346
+ e.stopPropagation();
347
+ this.onSubmit();
348
+ }}
349
+ >
350
+ <Icon name={aheadSVG} size="28px" />
351
+ </Button>
352
+ </Button.Group>
353
+ </div>
354
+ </Form.Field>
355
+ </div>
356
+ </div>
357
+ );
358
+ }
359
+ }
360
+
361
+ export default compose(injectIntl, withRouter, withObjectBrowser)(AddLinkForm);