diff --git a/config/sync/core.entity_form_display.node.campaign_landing_page.default.yml b/config/sync/core.entity_form_display.node.campaign_landing_page.default.yml
index 3ea5747164..502fc55305 100644
--- a/config/sync/core.entity_form_display.node.campaign_landing_page.default.yml
+++ b/config/sync/core.entity_form_display.node.campaign_landing_page.default.yml
@@ -19,6 +19,7 @@ dependencies:
- field.field.node.campaign_landing_page.field_clp_resources_header
- field.field.node.campaign_landing_page.field_clp_resources_intro_text
- field.field.node.campaign_landing_page.field_clp_resources_panel
+ - field.field.node.campaign_landing_page.field_clp_reusable_q_a
- field.field.node.campaign_landing_page.field_clp_spotlight_cta
- field.field.node.campaign_landing_page.field_clp_spotlight_header
- field.field.node.campaign_landing_page.field_clp_spotlight_intro_text
@@ -261,6 +262,7 @@ third_party_settings:
children:
- field_clp_faq_panel
- field_clp_faq_paragraphs
+ - field_clp_reusable_q_a
- field_clp_faq_cta
label: FAQs
region: content
@@ -268,7 +270,7 @@ third_party_settings:
weight: 8
format_type: detailswithimage
format_settings:
- description: 'This optional segment allows you to add reusable question and answer content related to the campaign''s message.'
+ description: 'This optional segment allows you to add question and answer content related to the campaign''s message. Choose between creating a page-specific Q&A or adding a reusable Q&A. '
visual_guide_file_name: faqs-guide.svg
visual_guide_alt_text: 'Basic visual layout of the faqs page segment.'
required_fields: '1'
@@ -315,6 +317,8 @@ content:
field_widget_replace: 0
open: 0
field_widget_display_settings: { }
+ additional_fields:
+ options: null
third_party_settings:
limited_field_widgets:
limit_values: '2'
@@ -343,6 +347,7 @@ content:
maxlength: 70
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
@@ -367,10 +372,12 @@ content:
selection_mode: selection_append
field_widget_edit: 0
field_widget_replace: 0
+ additional_fields:
+ options: null
third_party_settings: { }
field_clp_faq_cta:
type: paragraphs
- weight: 40
+ weight: 42
region: content
settings:
title: Paragraph
@@ -389,14 +396,14 @@ content:
third_party_settings: { }
field_clp_faq_panel:
type: boolean_checkbox
- weight: 36
+ weight: 39
region: content
settings:
display_label: true
third_party_settings: { }
field_clp_faq_paragraphs:
type: paragraphs
- weight: 37
+ weight: 40
region: content
settings:
title: Paragraph
@@ -431,6 +438,7 @@ content:
collapsible: false
collapsed: false
revision: true
+ removed_reference: optional
allow_system_delete: false
third_party_settings:
entity_browser_entity_form:
@@ -465,6 +473,7 @@ content:
maxlength: 70
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
@@ -478,6 +487,7 @@ content:
maxlength: 350
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: "Maximum @maxlength characters, but 120 characters is recommended. @current_length characters, @remaining_count characters remaining\r\n"
third_party_settings: { }
@@ -488,6 +498,34 @@ content:
settings:
display_label: true
third_party_settings: { }
+ field_clp_reusable_q_a:
+ type: paragraphs
+ weight: 41
+ region: content
+ settings:
+ title: Paragraph
+ title_plural: Paragraphs
+ edit_mode: open
+ closed_mode: summary
+ autocollapse: none
+ closed_mode_threshold: 0
+ add_mode: button
+ form_display_mode: default
+ default_paragraph_type: _none
+ features:
+ add_above: '0'
+ collapse_edit_all: collapse_edit_all
+ duplicate: duplicate
+ third_party_settings:
+ paragraphs_features:
+ add_in_between: false
+ add_in_between_link_count: 3
+ delete_confirmation: false
+ show_drag_and_drop: true
+ limited_field_widgets:
+ limit_values: '0'
+ change_labels:
+ add_another: ''
field_clp_spotlight_cta:
type: paragraphs
weight: 16
@@ -517,6 +555,7 @@ content:
maxlength: 0
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: true
textcount_status_message: 'Maxlength: @maxlength
Used: @current_length
Remaining: @remaining_count'
third_party_settings: { }
@@ -530,6 +569,7 @@ content:
maxlength: 350
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
@@ -582,6 +622,7 @@ content:
maxlength: 70
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining.'
third_party_settings: { }
@@ -595,6 +636,7 @@ content:
maxlength: 350
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: 'Maximum @maxlength characters, but 120 characters is recommended.
@current_length characters,
@remaining_count characters remaining.'
third_party_settings: { }
@@ -635,6 +677,7 @@ content:
maxlength: 0
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
@@ -666,6 +709,7 @@ content:
maxlength: 0
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: 'Characters remaining: @remaining_count'
third_party_settings: { }
@@ -679,6 +723,7 @@ content:
maxlength: 300
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
@@ -698,6 +743,7 @@ content:
collapsible: false
collapsed: false
revision: true
+ removed_reference: optional
allow_system_delete: false
third_party_settings:
entity_browser_entity_form:
@@ -712,6 +758,7 @@ content:
maxlength: 350
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
@@ -726,6 +773,7 @@ content:
maxlength: 0
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
@@ -833,6 +881,7 @@ content:
maxlength: 70
counter_position: after
js_prevent_submit: true
+ count_only_mode: false
count_html_characters: false
textcount_status_message: '@remaining_count characters remaining'
third_party_settings: { }
diff --git a/config/sync/core.entity_view_display.node.campaign_landing_page.default.yml b/config/sync/core.entity_view_display.node.campaign_landing_page.default.yml
index 0c7a83f094..0dc2e5b421 100644
--- a/config/sync/core.entity_view_display.node.campaign_landing_page.default.yml
+++ b/config/sync/core.entity_view_display.node.campaign_landing_page.default.yml
@@ -17,6 +17,7 @@ dependencies:
- field.field.node.campaign_landing_page.field_clp_resources_header
- field.field.node.campaign_landing_page.field_clp_resources_intro_text
- field.field.node.campaign_landing_page.field_clp_resources_panel
+ - field.field.node.campaign_landing_page.field_clp_reusable_q_a
- field.field.node.campaign_landing_page.field_clp_spotlight_cta
- field.field.node.campaign_landing_page.field_clp_spotlight_header
- field.field.node.campaign_landing_page.field_clp_spotlight_intro_text
@@ -307,6 +308,15 @@ content:
third_party_settings: { }
weight: 16
region: content
+ field_clp_reusable_q_a:
+ type: entity_reference_revisions_entity_view
+ label: above
+ settings:
+ view_mode: default
+ link: ''
+ third_party_settings: { }
+ weight: 28
+ region: content
field_clp_spotlight_cta:
type: entity_reference_revisions_entity_view
label: above
diff --git a/config/sync/core.entity_view_display.node.campaign_landing_page.teaser.yml b/config/sync/core.entity_view_display.node.campaign_landing_page.teaser.yml
index 946e675741..b43aab7f65 100644
--- a/config/sync/core.entity_view_display.node.campaign_landing_page.teaser.yml
+++ b/config/sync/core.entity_view_display.node.campaign_landing_page.teaser.yml
@@ -18,6 +18,7 @@ dependencies:
- field.field.node.campaign_landing_page.field_clp_resources_header
- field.field.node.campaign_landing_page.field_clp_resources_intro_text
- field.field.node.campaign_landing_page.field_clp_resources_panel
+ - field.field.node.campaign_landing_page.field_clp_reusable_q_a
- field.field.node.campaign_landing_page.field_clp_spotlight_cta
- field.field.node.campaign_landing_page.field_clp_spotlight_header
- field.field.node.campaign_landing_page.field_clp_spotlight_intro_text
@@ -75,6 +76,7 @@ hidden:
field_clp_resources_header: true
field_clp_resources_intro_text: true
field_clp_resources_panel: true
+ field_clp_reusable_q_a: true
field_clp_spotlight_cta: true
field_clp_spotlight_header: true
field_clp_spotlight_intro_text: true
diff --git a/config/sync/entity_browser.browser.q_a_browser.yml b/config/sync/entity_browser.browser.q_a_browser.yml
index cd142eacd3..fd43b473c6 100644
--- a/config/sync/entity_browser.browser.q_a_browser.yml
+++ b/config/sync/entity_browser.browser.q_a_browser.yml
@@ -13,7 +13,7 @@ display: modal
display_configuration:
width: ''
height: ''
- link_text: 'Place Q&As'
+ link_text: 'Add Reusable Q&As'
auto_open: false
selection_display: no_display
selection_display_configuration: { }
diff --git a/config/sync/field.field.node.campaign_landing_page.field_clp_faq_paragraphs.yml b/config/sync/field.field.node.campaign_landing_page.field_clp_faq_paragraphs.yml
index 08c47c5246..78c2bb66a5 100644
--- a/config/sync/field.field.node.campaign_landing_page.field_clp_faq_paragraphs.yml
+++ b/config/sync/field.field.node.campaign_landing_page.field_clp_faq_paragraphs.yml
@@ -8,12 +8,16 @@ dependencies:
- paragraphs.paragraphs_type.q_a
module:
- entity_reference_revisions
+ - tmgmt_content
+third_party_settings:
+ tmgmt_content:
+ excluded: false
id: node.campaign_landing_page.field_clp_faq_paragraphs
field_name: field_clp_faq_paragraphs
entity_type: node
bundle: campaign_landing_page
-label: 'Add between 3 and 10 Q&As'
-description: ''
+label: 'Page-Specific Q&A'
+description: 'Add questions and answers that provide information specific to the page content.'
required: false
translatable: false
default_value: { }
@@ -37,9 +41,15 @@ settings:
audience_topics:
weight: 45
enabled: false
+ basic_accordion:
+ weight: 50
+ enabled: false
button:
weight: 46
enabled: false
+ centralized_content_descriptor:
+ weight: 52
+ enabled: false
checklist:
weight: 47
enabled: false
@@ -61,9 +71,15 @@ settings:
email_contact:
weight: 53
enabled: false
+ embedded_video:
+ weight: 60
+ enabled: false
expandable_text:
weight: 54
enabled: false
+ featured_content:
+ weight: 62
+ enabled: false
health_care_local_facility_servi:
weight: 55
enabled: false
@@ -82,6 +98,9 @@ settings:
lists_of_links:
weight: 58
enabled: false
+ magichead_group:
+ weight: 69
+ enabled: false
media:
weight: 61
enabled: false
@@ -133,9 +152,6 @@ settings:
staff_profile:
weight: 77
enabled: false
- starred_horizontal_rule:
- weight: 78
- enabled: false
step:
weight: 79
enabled: false
diff --git a/config/sync/field.field.node.campaign_landing_page.field_clp_reusable_q_a.yml b/config/sync/field.field.node.campaign_landing_page.field_clp_reusable_q_a.yml
new file mode 100644
index 0000000000..4a86a5d8f9
--- /dev/null
+++ b/config/sync/field.field.node.campaign_landing_page.field_clp_reusable_q_a.yml
@@ -0,0 +1,167 @@
+uuid: 22948d35-29e6-4cbe-bad7-c47bf260b4fa
+langcode: en
+status: true
+dependencies:
+ config:
+ - field.storage.node.field_clp_reusable_q_a
+ - node.type.campaign_landing_page
+ - paragraphs.paragraphs_type.q_a_group
+ module:
+ - entity_reference_revisions
+ - tmgmt_content
+third_party_settings:
+ tmgmt_content:
+ excluded: false
+id: node.campaign_landing_page.field_clp_reusable_q_a
+field_name: field_clp_reusable_q_a
+entity_type: node
+bundle: campaign_landing_page
+label: 'Reusable Q&A'
+description: 'Choose from questions and answers that are stored in the CMS and used on multiple pages.'
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ handler: 'default:paragraph'
+ handler_settings:
+ target_bundles:
+ q_a_group: q_a_group
+ negate: 0
+ target_bundles_drag_drop:
+ address:
+ weight: 46
+ enabled: false
+ alert:
+ weight: 47
+ enabled: false
+ alert_single:
+ weight: 48
+ enabled: false
+ audience_topics:
+ weight: 49
+ enabled: false
+ basic_accordion:
+ weight: 50
+ enabled: false
+ button:
+ weight: 51
+ enabled: false
+ centralized_content_descriptor:
+ weight: 52
+ enabled: false
+ checklist:
+ weight: 53
+ enabled: false
+ checklist_item:
+ weight: 54
+ enabled: false
+ collapsible_panel:
+ weight: 55
+ enabled: false
+ collapsible_panel_item:
+ weight: 56
+ enabled: false
+ contact_information:
+ weight: 57
+ enabled: false
+ downloadable_file:
+ weight: 58
+ enabled: false
+ email_contact:
+ weight: 59
+ enabled: false
+ embedded_video:
+ weight: 60
+ enabled: false
+ expandable_text:
+ weight: 61
+ enabled: false
+ featured_content:
+ weight: 62
+ enabled: false
+ health_care_local_facility_servi:
+ weight: 63
+ enabled: false
+ link_teaser:
+ weight: 64
+ enabled: false
+ link_teaser_with_image:
+ weight: 65
+ enabled: false
+ list_of_link_teasers:
+ weight: 68
+ enabled: false
+ list_of_links:
+ weight: 67
+ enabled: false
+ lists_of_links:
+ weight: 66
+ enabled: false
+ magichead_group:
+ weight: 69
+ enabled: false
+ media:
+ weight: 70
+ enabled: false
+ media_list_images:
+ weight: 71
+ enabled: false
+ media_list_videos:
+ weight: 72
+ enabled: false
+ non_reusable_alert:
+ weight: 73
+ enabled: false
+ number_callout:
+ weight: 74
+ enabled: false
+ phone_number:
+ weight: 75
+ enabled: false
+ process:
+ weight: 76
+ enabled: false
+ q_a:
+ weight: 77
+ enabled: false
+ q_a_group:
+ weight: 78
+ enabled: true
+ q_a_section:
+ weight: 79
+ enabled: false
+ react_widget:
+ weight: 80
+ enabled: false
+ rich_text_char_limit_1000:
+ weight: 81
+ enabled: false
+ service_location:
+ weight: 82
+ enabled: false
+ service_location_address:
+ weight: 83
+ enabled: false
+ situation_update:
+ weight: 84
+ enabled: false
+ spanish_translation_summary:
+ weight: 85
+ enabled: false
+ staff_profile:
+ weight: 86
+ enabled: false
+ step:
+ weight: 87
+ enabled: false
+ step_by_step:
+ weight: 88
+ enabled: false
+ table:
+ weight: 89
+ enabled: false
+ wysiwyg:
+ weight: 90
+ enabled: false
+field_type: entity_reference_revisions
diff --git a/config/sync/field.storage.node.field_clp_reusable_q_a.yml b/config/sync/field.storage.node.field_clp_reusable_q_a.yml
new file mode 100644
index 0000000000..0ee7bc04f5
--- /dev/null
+++ b/config/sync/field.storage.node.field_clp_reusable_q_a.yml
@@ -0,0 +1,21 @@
+uuid: e2e9bb11-42e6-4077-95de-edf70e5ae05d
+langcode: en
+status: true
+dependencies:
+ module:
+ - entity_reference_revisions
+ - node
+ - paragraphs
+id: node.field_clp_reusable_q_a
+field_name: field_clp_reusable_q_a
+entity_type: node
+type: entity_reference_revisions
+settings:
+ target_type: paragraph
+module: entity_reference_revisions
+locked: false
+cardinality: -1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/docroot/modules/custom/va_gov_backend/va_gov_backend.module b/docroot/modules/custom/va_gov_backend/va_gov_backend.module
index 4ad3d96f78..e98ed06060 100644
--- a/docroot/modules/custom/va_gov_backend/va_gov_backend.module
+++ b/docroot/modules/custom/va_gov_backend/va_gov_backend.module
@@ -24,8 +24,8 @@ use Drupal\Core\Url;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\FieldStorageConfigInterface;
use Drupal\file\Entity\File;
-use Drupal\paragraphs\Entity\Paragraph;
use Drupal\node\NodeInterface;
+use Drupal\paragraphs\Entity\Paragraph;
use Drupal\taxonomy\TermInterface;
use Drupal\user\Entity\Role;
use Drupal\user\RoleInterface;
@@ -253,6 +253,9 @@ function _va_gov_backend_get_clp_toggles() {
'required' => TRUE,
'show-indicator' => TRUE,
],
+ 'field_clp_reusable_q_a' => [
+ 'required' => FALSE,
+ ],
'field_clp_faq_cta' => [
'required' => FALSE,
],
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/basic_requirements.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_basic_requirements.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/basic_requirements.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_basic_requirements.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/connect_with_us.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_connect_with_us.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/connect_with_us.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_connect_with_us.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/downloadable_resources.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_downloadable_resources.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/downloadable_resources.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_downloadable_resources.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/events.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_events.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/events.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_events.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/faq.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_faq.feature
similarity index 93%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/faq.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_faq.feature
index b175dfbbf4..32a539314d 100644
--- a/tests/cypress/integration/features/content_type/campaign_landing_page/faq.feature
+++ b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_faq.feature
@@ -10,5 +10,5 @@ Feature: Content Type: Campaign Landing Page
And I click the "Add Page-Specific Q&A" button
Then I can fill in "Question" field with fake text
And I can fill in "Text" field with fake text
+ And I should see "Add Reusable Q&A"
And I should see "Add a link to more FAQs"
-# TODO: Test the call to action button
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/hero_banner.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_hero_banner.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/hero_banner.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_hero_banner.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/spotlight.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_spotlight.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/spotlight.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_spotlight.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/stories.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_stories.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/stories.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_stories.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/video.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_video.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/video.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_video.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/what_you_can_do.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_what_you_can_do.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/what_you_can_do.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_what_you_can_do.feature
diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/why_this_matters.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_why_this_matters.feature
similarity index 100%
rename from tests/cypress/integration/features/content_type/campaign_landing_page/why_this_matters.feature
rename to tests/cypress/integration/features/content_type/campaign_landing_page/clp_why_this_matters.feature