From ba2b98e049fffe2f5c719a9fae8b13158e38f0c0 Mon Sep 17 00:00:00 2001 From: Tony Taylor Date: Tue, 24 Oct 2023 17:43:04 -0500 Subject: [PATCH 1/3] VACMS-13639: Fixes content lock operation on Reusable Q&A Content Type (#15790) * Changes Q_A entity form display widget to 'Paragraphs Legacy' for 'Related Information' field --- ...ore.entity_form_display.node.q_a.default.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/config/sync/core.entity_form_display.node.q_a.default.yml b/config/sync/core.entity_form_display.node.q_a.default.yml index 453595c646..59fdc4d767 100644 --- a/config/sync/core.entity_form_display.node.q_a.default.yml +++ b/config/sync/core.entity_form_display.node.q_a.default.yml @@ -254,25 +254,20 @@ content: field_widget_replace: 0 open: 0 field_widget_display_settings: { } + additional_fields: + options: null third_party_settings: { } field_related_information: - type: paragraphs + type: entity_reference_paragraphs weight: 7 region: content settings: title: 'Link teaser' title_plural: 'Link teasers' edit_mode: open - closed_mode: summary - autocollapse: none - closed_mode_threshold: 0 add_mode: dropdown form_display_mode: default default_paragraph_type: link_teaser - features: - add_above: '0' - collapse_edit_all: collapse_edit_all - duplicate: '0' third_party_settings: { } field_standalone_page: type: boolean_checkbox @@ -316,9 +311,15 @@ content: maxlength: 70 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: { } + translation: + weight: 10 + region: content + settings: { } + third_party_settings: { } url_redirects: weight: 6 region: content From 16d504d7811cae75f0f55a2c5fa1f658a66b3d37 Mon Sep 17 00:00:00 2001 From: Kit Lykos <140734297+KitLykos@users.noreply.github.com> Date: Tue, 24 Oct 2023 20:24:57 -0400 Subject: [PATCH 2/3] VACMS-15240 Stand up running next-build server per tugboat instance (#15429) * Stubbing out next server config * Updating config values to be spaces * Updating to add splash page * changing line endings * Scripts for next build * Fixed permissions issues * Attempting file permission fix * trying one more permission thing * Change permissions. * Removed tab character * Removed the actual white space that was the issue * Added yarn start to next build * Adjusting scripts for next start * Resolving issues from review * Resolving more review stuff * adding rest of the path to next-start * Adjusting scope for output * update perms * add apache proxy settings for next-build node server * add 503 error page for next-* * 503 j2 to html --------- Co-authored-by: Kit Nunnally Co-authored-by: Nathan Douglas Co-authored-by: Tanner Heffner --- .gitignore | 3 ++ .next/403-error-document.j2.html | 51 +++++++++++++++++++++++++++++++ .next/503-error-document.j2.html | 51 +++++++++++++++++++++++++++++++ .next/README.md | 1 + .next/artur-pokusin-unsplash.jpg | Bin 0 -> 55213 bytes .tugboat/config.yml | 15 +++++++-- .tugboat/vhost-next.conf | 48 +++++++++++++++++++++++++++++ composer.json | 20 +++++++++++- scripts/next-build.sh | 11 +++++++ scripts/next-install.sh | 33 ++++++++++++++++++++ scripts/next-start.sh | 10 ++++++ tugboat.yml | 6 ++++ 12 files changed, 246 insertions(+), 3 deletions(-) create mode 100644 .next/403-error-document.j2.html create mode 100644 .next/503-error-document.j2.html create mode 100644 .next/README.md create mode 100644 .next/artur-pokusin-unsplash.jpg create mode 100644 .tugboat/vhost-next.conf create mode 100755 scripts/next-build.sh create mode 100755 scripts/next-install.sh create mode 100755 scripts/next-start.sh diff --git a/.gitignore b/.gitignore index c872fba6bd..39f475fda7 100644 --- a/.gitignore +++ b/.gitignore @@ -102,6 +102,9 @@ datadog-setup.php # web # @TODO: Installer paths is not working. Leaving symlink for now. +# Ignore Next (next-build) +next + # Temporary .deb packages *.deb diff --git a/.next/403-error-document.j2.html b/.next/403-error-document.j2.html new file mode 100644 index 0000000000..f84d334804 --- /dev/null +++ b/.next/403-error-document.j2.html @@ -0,0 +1,51 @@ + + + + + Next-build Preview not built yet + + + + + + + + +

Next-build not ready yet

+
+

The next-build server is not built & running yet.

+

Check the status of the composer va:next:start command in the logs to learn more.

+
+ + + + diff --git a/.next/503-error-document.j2.html b/.next/503-error-document.j2.html new file mode 100644 index 0000000000..8631aa2f72 --- /dev/null +++ b/.next/503-error-document.j2.html @@ -0,0 +1,51 @@ + + + + + Next-build Preview Server 503 Error + + + + + + + + +

Next-build server 503 response

+
+

There was a 503 error returned from the next-build server when it asked for this route.

+

Check the status of the composer va:next:start command in the logs to learn more.

+
+ + + + diff --git a/.next/README.md b/.next/README.md new file mode 100644 index 0000000000..5e3ac6dae9 --- /dev/null +++ b/.next/README.md @@ -0,0 +1 @@ +See /.tugboat/vhost-next.conf. diff --git a/.next/artur-pokusin-unsplash.jpg b/.next/artur-pokusin-unsplash.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af38e8abffa5025d0cc67309e372a73056704026 GIT binary patch literal 55213 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 A8UO$Q literal 0 HcmV?d00001 diff --git a/.tugboat/config.yml b/.tugboat/config.yml index 86dda9eb1a..c4a7c97f68 100644 --- a/.tugboat/config.yml +++ b/.tugboat/config.yml @@ -8,6 +8,7 @@ services: - cms - web - storybook + - next # Set this as the default service. This does a few things # 1. Clones the git repository into the service container @@ -49,7 +50,7 @@ services: # Install opcache, and Apache modules - docker-php-ext-install opcache - - a2enmod headers rewrite vhost_alias + - a2enmod headers rewrite vhost_alias proxy proxy_http # Install datadog agent for application tracing and profiling. - DD_API_KEY=" " DD_INSTALL_ONLY=true DD_SITE="ddog-gov.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)" @@ -62,6 +63,9 @@ services: # Setup storybook-*. vhost to serve static website. - cp "${TUGBOAT_ROOT}"/.tugboat/vhost-storybook.conf /etc/apache2/sites-enabled/ + # Setup next-*. vhost to serve static website. + - cp "${TUGBOAT_ROOT}"/.tugboat/vhost-next.conf /etc/apache2/sites-enabled/ + # Configure KeepAliveTimeout in apache2.conf. This is set 5 seconds longer than the internal tools ALB. # The internal tools ALB idle timeout is set to longer than a typical GQL query takes. - sed -e 's/KeepAliveTimeout 5/KeepAliveTimeout 185/' -i /etc/apache2/apache2.conf @@ -184,11 +188,14 @@ services: # This command is shared by the clone and build stages, make sure to update both stages. - j2 "${TUGBOAT_ROOT}/.web/403-error-document.j2.html" -o "${TUGBOAT_ROOT}/.web/403-error-document.html" - j2 "${TUGBOAT_ROOT}/.storybook/403-error-document.j2.html" -o "${TUGBOAT_ROOT}/.storybook/403-error-document.html" + - j2 "${TUGBOAT_ROOT}/.next/403-error-document.j2.html" -o "${TUGBOAT_ROOT}/.next/403-error-document.html" + - j2 "${TUGBOAT_ROOT}/.next/503-error-document.j2.html" -o "${TUGBOAT_ROOT}/.next/503-error-document.html" - composer install - bash -lc 'nvm install' - bash -lc 'npm install' - bash -lc 'composer va:theme:compile' - bash -lc 'composer va:web:install' + - bash -lc 'composer va:next:install' # https://www.drush.org/latest/deploycommand/ (updatedb, cache:rebuild, config:import, deploy:hook) - drush deploy @@ -212,6 +219,8 @@ services: # This command is shared by the clone and build stages, make sure to update both stages. - j2 "${TUGBOAT_ROOT}/.web/403-error-document.j2.html" -o "${TUGBOAT_ROOT}/.web/403-error-document.html" - j2 "${TUGBOAT_ROOT}/.storybook/403-error-document.j2.html" -o "${TUGBOAT_ROOT}/.storybook/403-error-document.html" + - j2 "${TUGBOAT_ROOT}/.next/403-error-document.j2.html" -o "${TUGBOAT_ROOT}/.next/403-error-document.html" + - j2 "${TUGBOAT_ROOT}/.next/503-error-document.j2.html" -o "${TUGBOAT_ROOT}/.next/503-error-document.html" online: # We only want tests running on PRs, not branches like the base preview build of main. @@ -224,8 +233,10 @@ services: - find -L "${DOCROOT}/vendor/va-gov/content-build/node_modules/.bin" -type f -exec chmod +x {} \+ - find "${DOCROOT}/vendor/va-gov/content-build/script" -type f -exec chmod +x {} \+ - # Build storybook and the frontend in parallel + # Build storybook and the frontends in parallel - bash -lc 'time task --taskfile=tugboat.yml' + # Build next build server + - bash -lc 'composer va:next:start' memcache: image: tugboatqa/memcached:1.6 diff --git a/.tugboat/vhost-next.conf b/.tugboat/vhost-next.conf new file mode 100644 index 0000000000..d7fa248234 --- /dev/null +++ b/.tugboat/vhost-next.conf @@ -0,0 +1,48 @@ +# If testing changes to this file on the tugboatqa/php:7.1-apache image (current), +# use `apache2ctl -S` to check for syntax issues then `killall apache2` to get changes to take. +# Or "Stop" then "Start" the preview as that will restart apache2 too. Worth noting that +# `service apache2 reload|restart` doesn't work on this image as `runit` is used. +# Also `sv restart apache` acts like it works but it doesn't and doesn't bubble up any errors. + + + + ServerName next-wildcard + # Route preview URLs with prefix of `next-` to folder where the generated site output is symlinked. + # e.g. https://next-msecydk1vl7ncmpkgh8vevjhzq25vacv.ci.cms.va.gov/ + ServerAlias next-* + VirtualDocumentRoot /var/lib/tugboat/docroot/next/.next + + Alias "/.next" "/var/lib/tugboat/.next" + ErrorDocument 403 /.next/403-error-document.html + ErrorDocument 503 /.next/503-error-document.html + + + Options FollowSymLinks + Require all granted + + + + Require all granted + + + ProxyPreserveHost on + # Ignore redirecting error doc directory + ProxyPass /.next/ ! + # Redirect requests to the running node server from next-build + ProxyPass / http://localhost:3000/ + ProxyPassReverse / http://localhost:3000/ + + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel debug + + # On Tugboat these are symlinks to /dev/null by default. + # `rm /var/log/apache2/*.log` and they will be generated. + # Then `tail -f /var/log/apache2/*` will work. + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + SetEnvIf X-Forwarded-Proto "^https" HTTPS=on + diff --git a/composer.json b/composer.json index 6e6c5fd538..119fa3113b 100644 --- a/composer.json +++ b/composer.json @@ -571,7 +571,10 @@ "va:theme:watch": "Watch VA.gov Claro theme source and compile as needed.", "va:web:build": "Perform a content build.", "va:web:install": "Prepare the content-build project.", - "va:web:prepare-dotenv": "Prepare the ./web/.env file." + "va:web:prepare-dotenv": "Prepare the ./web/.env file.", + "va:next:install": "Prepare the next-build project", + "va:next:build": "Build the next-build server for preview", + "va:next:start": "Start the next-build server for preview" }, "scripts": { "pre-install-cmd": [ @@ -817,6 +820,21 @@ "# Prepare the ./web/.env file.", "! ./scripts/should-run-directly.sh || ./scripts/web-prepare-dotenv.sh", "./scripts/should-run-directly.sh || ddev composer va:web:prepare-dotenv --" + ], + "va:next:install": [ + "# Prepare the next build project", + "! ./scripts/should-run-directly.sh || ./scripts/next-install.sh", + "./scripts/should-run-directly.sh || ddev composer va:next:install --" + ], + "va:next:build": [ + "# Prepare the next build server", + "! ./scripts/should-run-directly.sh || ./scripts/next-build.sh", + "./scripts/should-run-directly.sh || ddev composer va:next:build --" + ], + "va:next:start": [ + "# Start the next build server", + "! ./scripts/should-run-directly.sh || ./scripts/next-start.sh", + "./scripts/should-run-directly.sh || ddev composer va:next:start --" ] } } diff --git a/scripts/next-build.sh b/scripts/next-build.sh new file mode 100755 index 0000000000..ff134cf6fe --- /dev/null +++ b/scripts/next-build.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +#preview + +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" +source ~/.bashrc + +cd next + +APP_ENV=tugboat yarn build:preview \ No newline at end of file diff --git a/scripts/next-install.sh b/scripts/next-install.sh new file mode 100755 index 0000000000..e7063b52c2 --- /dev/null +++ b/scripts/next-install.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" +source ~/.bashrc + +# Installs the content-build dependencies. + +if [ ! -d next ]; then + git clone --single-branch --depth 1 https://github.com/department-of-veterans-affairs/next-build.git next +else + echo "Repo next-build already cloned." +fi + +cd next +#repo_root="$(git rev-parse --show-toplevel)" +#pushd "${repo_root}" > /dev/null + +nvm install 18.17.0 +nvm use 18.17.0 +corepack enable +corepack prepare yarn@stable --activate +echo "Node $(node -v)" +echo "NPM $(npm -v)" +echo "Yarn $(yarn -v)" + +#not sure how popd works +#pushd "./next" +yarn install +#popd + +#popd > /dev/null diff --git a/scripts/next-start.sh b/scripts/next-start.sh new file mode 100755 index 0000000000..65544641da --- /dev/null +++ b/scripts/next-start.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" +source ~/.bashrc + +cd next + +APP_ENV=tugboat yarn start diff --git a/tugboat.yml b/tugboat.yml index d8203432b5..9e85728187 100644 --- a/tugboat.yml +++ b/tugboat.yml @@ -13,10 +13,16 @@ tasks: cmds: - drush va-gov:content-release:request-frontend-build + build-next: + desc: build next.js preview server + cmds: + - composer va:next:build + build: deps: - build-storybook - build-frontend + - build-next default: cmds: From d38a023e4478d7f05e17a8ea63eeb29988fbd823 Mon Sep 17 00:00:00 2001 From: Christian Burk Date: Wed, 25 Oct 2023 09:30:27 -0500 Subject: [PATCH 3/3] VACMS-15649: Adds taxonomy term fields for VBA services (#15682) * VACMS-15649: Adds taxonomy term fields for VBA services * VACMS-15649: Adds revision_log_message back * VACMS-15649: Adds service delivery options taxonomy --- ...m.health_care_service_taxonomy.default.yml | 44 ++++++++++++- ...m.health_care_service_taxonomy.default.yml | 40 +++++++++++- ...service_taxonomy.vamc_facility_service.yml | 8 +++ ..._service_taxonomy.vba_facility_service.yml | 8 +++ ...re_service_taxonomy.vet_center_service.yml | 8 +++ ...onomy.field_facility_service_descripti.yml | 24 +++++++ ...taxonomy.field_facility_service_header.yml | 24 +++++++ ...onomy.field_regional_service_descripti.yml | 24 +++++++ ...taxonomy.field_regional_service_header.yml | 24 +++++++ ..._term.field_facility_service_descripti.yml | 21 +++++++ ...omy_term.field_facility_service_header.yml | 21 +++++++ ..._term.field_regional_service_descripti.yml | 21 +++++++ ...omy_term.field_regional_service_header.yml | 21 +++++++ ...taxonomy_term.service_delivery_options.yml | 11 ++++ ...my.vocabulary.service_delivery_options.yml | 8 +++ .../js/displayServiceDescriptions.es6.js | 62 +++++++++++++++++++ .../js/displayServiceDescriptions.js | 36 +++++++++++ .../EventSubscriber/FacilitiesSubscriber.php | 9 +++ 18 files changed, 410 insertions(+), 4 deletions(-) create mode 100644 config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti.yml create mode 100644 config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header.yml create mode 100644 config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti.yml create mode 100644 config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header.yml create mode 100644 config/sync/field.storage.taxonomy_term.field_facility_service_descripti.yml create mode 100644 config/sync/field.storage.taxonomy_term.field_facility_service_header.yml create mode 100644 config/sync/field.storage.taxonomy_term.field_regional_service_descripti.yml create mode 100644 config/sync/field.storage.taxonomy_term.field_regional_service_header.yml create mode 100644 config/sync/language.content_settings.taxonomy_term.service_delivery_options.yml create mode 100644 config/sync/taxonomy.vocabulary.service_delivery_options.yml diff --git a/config/sync/core.entity_form_display.taxonomy_term.health_care_service_taxonomy.default.yml b/config/sync/core.entity_form_display.taxonomy_term.health_care_service_taxonomy.default.yml index 7971d714bf..1f19d6e09d 100644 --- a/config/sync/core.entity_form_display.taxonomy_term.health_care_service_taxonomy.default.yml +++ b/config/sync/core.entity_form_display.taxonomy_term.health_care_service_taxonomy.default.yml @@ -6,9 +6,13 @@ dependencies: - field.field.taxonomy_term.health_care_service_taxonomy.field_also_known_as - field.field.taxonomy_term.health_care_service_taxonomy.field_commonly_treated_condition - field.field.taxonomy_term.health_care_service_taxonomy.field_enforce_unique_combo_servi + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_health_service_api_id - field.field.taxonomy_term.health_care_service_taxonomy.field_online_self_service - field.field.taxonomy_term.health_care_service_taxonomy.field_owner + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_service_type_of_care - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vamc_facilities - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vba_facilities @@ -99,6 +103,10 @@ third_party_settings: - field_vba_friendly_name - field_vba_com_conditions - field_vba_service_descrip + - field_regional_service_header + - field_regional_service_descripti + - field_facility_service_header + - field_facility_service_descripti - field_online_self_service - field_vba_service_regions label: VBA @@ -165,6 +173,22 @@ content: settings: size: 1 third_party_settings: { } + field_facility_service_descripti: + type: string_textfield + weight: 15 + region: content + settings: + size: 60 + placeholder: '' + third_party_settings: { } + field_facility_service_header: + type: string_textfield + weight: 14 + region: content + settings: + size: 60 + placeholder: '' + third_party_settings: { } field_health_service_api_id: type: string_textfield weight: 2 @@ -175,12 +199,28 @@ content: third_party_settings: { } field_online_self_service: type: link_default - weight: 12 + weight: 16 region: content settings: placeholder_url: '' placeholder_title: '' third_party_settings: { } + field_regional_service_descripti: + type: string_textfield + weight: 13 + region: content + settings: + size: 60 + placeholder: '' + third_party_settings: { } + field_regional_service_header: + type: string_textfield + weight: 12 + region: content + settings: + size: 60 + placeholder: '' + third_party_settings: { } field_service_type_of_care: type: options_select weight: 15 @@ -249,7 +289,7 @@ content: third_party_settings: { } field_vba_service_regions: type: entity_reference_autocomplete - weight: 13 + weight: 17 region: content settings: match_operator: CONTAINS diff --git a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.default.yml b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.default.yml index 4ea68b3ba6..b68b4be3a0 100644 --- a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.default.yml +++ b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.default.yml @@ -6,9 +6,13 @@ dependencies: - field.field.taxonomy_term.health_care_service_taxonomy.field_also_known_as - field.field.taxonomy_term.health_care_service_taxonomy.field_commonly_treated_condition - field.field.taxonomy_term.health_care_service_taxonomy.field_enforce_unique_combo_servi + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_health_service_api_id - field.field.taxonomy_term.health_care_service_taxonomy.field_online_self_service - field.field.taxonomy_term.health_care_service_taxonomy.field_owner + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_service_type_of_care - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vamc_facilities - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vba_facilities @@ -77,6 +81,22 @@ content: third_party_settings: { } weight: 13 region: content + field_facility_service_descripti: + type: string + label: above + settings: + link_to_entity: false + third_party_settings: { } + weight: 24 + region: content + field_facility_service_header: + type: string + label: above + settings: + link_to_entity: false + third_party_settings: { } + weight: 23 + region: content field_health_service_api_id: type: string label: above @@ -95,6 +115,22 @@ content: rel: '' target: '' third_party_settings: { } + weight: 25 + region: content + field_regional_service_descripti: + type: string + label: above + settings: + link_to_entity: false + third_party_settings: { } + weight: 22 + region: content + field_regional_service_header: + type: string + label: above + settings: + link_to_entity: false + third_party_settings: { } weight: 21 region: content field_service_type_of_care: @@ -149,7 +185,7 @@ content: format_custom_false: '' format_custom_true: '' third_party_settings: { } - weight: 23 + weight: 27 region: content field_vba_com_conditions: type: string @@ -180,7 +216,7 @@ content: settings: link: true third_party_settings: { } - weight: 22 + weight: 26 region: content field_vba_type_of_care: type: list_default diff --git a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vamc_facility_service.yml b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vamc_facility_service.yml index 8c76b009e5..45ff64af5c 100644 --- a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vamc_facility_service.yml +++ b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vamc_facility_service.yml @@ -7,9 +7,13 @@ dependencies: - field.field.taxonomy_term.health_care_service_taxonomy.field_also_known_as - field.field.taxonomy_term.health_care_service_taxonomy.field_commonly_treated_condition - field.field.taxonomy_term.health_care_service_taxonomy.field_enforce_unique_combo_servi + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_health_service_api_id - field.field.taxonomy_term.health_care_service_taxonomy.field_online_self_service - field.field.taxonomy_term.health_care_service_taxonomy.field_owner + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_service_type_of_care - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vamc_facilities - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vba_facilities @@ -78,9 +82,13 @@ hidden: field_also_known_as: true field_commonly_treated_condition: true field_enforce_unique_combo_servi: true + field_facility_service_descripti: true + field_facility_service_header: true field_health_service_api_id: true field_online_self_service: true field_owner: true + field_regional_service_descripti: true + field_regional_service_header: true field_service_type_of_care: true field_show_for_vamc_facilities: true field_show_for_vba_facilities: true diff --git a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vba_facility_service.yml b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vba_facility_service.yml index fdd9ca0424..375a907822 100644 --- a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vba_facility_service.yml +++ b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vba_facility_service.yml @@ -7,9 +7,13 @@ dependencies: - field.field.taxonomy_term.health_care_service_taxonomy.field_also_known_as - field.field.taxonomy_term.health_care_service_taxonomy.field_commonly_treated_condition - field.field.taxonomy_term.health_care_service_taxonomy.field_enforce_unique_combo_servi + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_health_service_api_id - field.field.taxonomy_term.health_care_service_taxonomy.field_online_self_service - field.field.taxonomy_term.health_care_service_taxonomy.field_owner + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_service_type_of_care - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vamc_facilities - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vba_facilities @@ -75,9 +79,13 @@ hidden: field_also_known_as: true field_commonly_treated_condition: true field_enforce_unique_combo_servi: true + field_facility_service_descripti: true + field_facility_service_header: true field_health_service_api_id: true field_online_self_service: true field_owner: true + field_regional_service_descripti: true + field_regional_service_header: true field_service_type_of_care: true field_show_for_vamc_facilities: true field_show_for_vba_facilities: true diff --git a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vet_center_service.yml b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vet_center_service.yml index c385015b76..ffb258753e 100644 --- a/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vet_center_service.yml +++ b/config/sync/core.entity_view_display.taxonomy_term.health_care_service_taxonomy.vet_center_service.yml @@ -7,9 +7,13 @@ dependencies: - field.field.taxonomy_term.health_care_service_taxonomy.field_also_known_as - field.field.taxonomy_term.health_care_service_taxonomy.field_commonly_treated_condition - field.field.taxonomy_term.health_care_service_taxonomy.field_enforce_unique_combo_servi + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_health_service_api_id - field.field.taxonomy_term.health_care_service_taxonomy.field_online_self_service - field.field.taxonomy_term.health_care_service_taxonomy.field_owner + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti + - field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header - field.field.taxonomy_term.health_care_service_taxonomy.field_service_type_of_care - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vamc_facilities - field.field.taxonomy_term.health_care_service_taxonomy.field_show_for_vba_facilities @@ -77,9 +81,13 @@ hidden: field_also_known_as: true field_commonly_treated_condition: true field_enforce_unique_combo_servi: true + field_facility_service_descripti: true + field_facility_service_header: true field_health_service_api_id: true field_online_self_service: true field_owner: true + field_regional_service_descripti: true + field_regional_service_header: true field_service_type_of_care: true field_show_for_vamc_facilities: true field_show_for_vba_facilities: true diff --git a/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti.yml b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti.yml new file mode 100644 index 0000000000..e337b5b47c --- /dev/null +++ b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti.yml @@ -0,0 +1,24 @@ +uuid: 4d8bf339-fe4c-440a-adcb-294d21f3b234 +langcode: en +status: true +dependencies: + config: + - field.storage.taxonomy_term.field_facility_service_descripti + - taxonomy.vocabulary.health_care_service_taxonomy + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false +id: taxonomy_term.health_care_service_taxonomy.field_facility_service_descripti +field_name: field_facility_service_descripti +entity_type: taxonomy_term +bundle: health_care_service_taxonomy +label: 'Facility service description' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: string diff --git a/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header.yml b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header.yml new file mode 100644 index 0000000000..5b988b758e --- /dev/null +++ b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_facility_service_header.yml @@ -0,0 +1,24 @@ +uuid: 0621ef26-5e83-4619-9ec8-9d904524daf5 +langcode: en +status: true +dependencies: + config: + - field.storage.taxonomy_term.field_facility_service_header + - taxonomy.vocabulary.health_care_service_taxonomy + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false +id: taxonomy_term.health_care_service_taxonomy.field_facility_service_header +field_name: field_facility_service_header +entity_type: taxonomy_term +bundle: health_care_service_taxonomy +label: 'Facility service header' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: string diff --git a/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti.yml b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti.yml new file mode 100644 index 0000000000..9c280dface --- /dev/null +++ b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti.yml @@ -0,0 +1,24 @@ +uuid: 4bcbbc89-3484-4924-bcc5-fe9579bfd3ce +langcode: en +status: true +dependencies: + config: + - field.storage.taxonomy_term.field_regional_service_descripti + - taxonomy.vocabulary.health_care_service_taxonomy + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false +id: taxonomy_term.health_care_service_taxonomy.field_regional_service_descripti +field_name: field_regional_service_descripti +entity_type: taxonomy_term +bundle: health_care_service_taxonomy +label: 'Regional service description' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: string diff --git a/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header.yml b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header.yml new file mode 100644 index 0000000000..f78a6e04e9 --- /dev/null +++ b/config/sync/field.field.taxonomy_term.health_care_service_taxonomy.field_regional_service_header.yml @@ -0,0 +1,24 @@ +uuid: 0c6de90d-3960-407c-ab9a-8266320925ef +langcode: en +status: true +dependencies: + config: + - field.storage.taxonomy_term.field_regional_service_header + - taxonomy.vocabulary.health_care_service_taxonomy + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false +id: taxonomy_term.health_care_service_taxonomy.field_regional_service_header +field_name: field_regional_service_header +entity_type: taxonomy_term +bundle: health_care_service_taxonomy +label: 'Regional service header' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: string diff --git a/config/sync/field.storage.taxonomy_term.field_facility_service_descripti.yml b/config/sync/field.storage.taxonomy_term.field_facility_service_descripti.yml new file mode 100644 index 0000000000..eeae202f10 --- /dev/null +++ b/config/sync/field.storage.taxonomy_term.field_facility_service_descripti.yml @@ -0,0 +1,21 @@ +uuid: da41c0a6-f37e-4141-8dce-009c44544559 +langcode: en +status: true +dependencies: + module: + - taxonomy +id: taxonomy_term.field_facility_service_descripti +field_name: field_facility_service_descripti +entity_type: taxonomy_term +type: string +settings: + max_length: 255 + case_sensitive: false + is_ascii: false +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.taxonomy_term.field_facility_service_header.yml b/config/sync/field.storage.taxonomy_term.field_facility_service_header.yml new file mode 100644 index 0000000000..1f68f0d781 --- /dev/null +++ b/config/sync/field.storage.taxonomy_term.field_facility_service_header.yml @@ -0,0 +1,21 @@ +uuid: cfa50495-7f90-4ecb-818d-1c137df35fe9 +langcode: en +status: true +dependencies: + module: + - taxonomy +id: taxonomy_term.field_facility_service_header +field_name: field_facility_service_header +entity_type: taxonomy_term +type: string +settings: + max_length: 255 + case_sensitive: false + is_ascii: false +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.taxonomy_term.field_regional_service_descripti.yml b/config/sync/field.storage.taxonomy_term.field_regional_service_descripti.yml new file mode 100644 index 0000000000..0d98c78135 --- /dev/null +++ b/config/sync/field.storage.taxonomy_term.field_regional_service_descripti.yml @@ -0,0 +1,21 @@ +uuid: f3e3694e-df97-4493-93e8-81e6a34493c0 +langcode: en +status: true +dependencies: + module: + - taxonomy +id: taxonomy_term.field_regional_service_descripti +field_name: field_regional_service_descripti +entity_type: taxonomy_term +type: string +settings: + max_length: 255 + case_sensitive: false + is_ascii: false +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.taxonomy_term.field_regional_service_header.yml b/config/sync/field.storage.taxonomy_term.field_regional_service_header.yml new file mode 100644 index 0000000000..d038409adc --- /dev/null +++ b/config/sync/field.storage.taxonomy_term.field_regional_service_header.yml @@ -0,0 +1,21 @@ +uuid: 6a2939f6-917f-4e6b-a675-4e7fd8a826f1 +langcode: en +status: true +dependencies: + module: + - taxonomy +id: taxonomy_term.field_regional_service_header +field_name: field_regional_service_header +entity_type: taxonomy_term +type: string +settings: + max_length: 255 + case_sensitive: false + is_ascii: false +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/language.content_settings.taxonomy_term.service_delivery_options.yml b/config/sync/language.content_settings.taxonomy_term.service_delivery_options.yml new file mode 100644 index 0000000000..8fe8350847 --- /dev/null +++ b/config/sync/language.content_settings.taxonomy_term.service_delivery_options.yml @@ -0,0 +1,11 @@ +uuid: ac0269fe-3d1d-4e17-940d-45e0f047a0ae +langcode: en +status: true +dependencies: + config: + - taxonomy.vocabulary.service_delivery_options +id: taxonomy_term.service_delivery_options +target_entity_type_id: taxonomy_term +target_bundle: service_delivery_options +default_langcode: site_default +language_alterable: false diff --git a/config/sync/taxonomy.vocabulary.service_delivery_options.yml b/config/sync/taxonomy.vocabulary.service_delivery_options.yml new file mode 100644 index 0000000000..4c7af1399d --- /dev/null +++ b/config/sync/taxonomy.vocabulary.service_delivery_options.yml @@ -0,0 +1,8 @@ +uuid: f938c303-a996-4d5e-ab9e-964c8be514df +langcode: en +status: true +dependencies: { } +name: 'VA Service delivery options' +vid: service_delivery_options +description: 'Single source of truth for service delivery options (e.g. in-person appointments, virtual hotline)' +weight: 0 diff --git a/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.es6.js b/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.es6.js index 71c0ba37a3..653200794f 100644 --- a/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.es6.js +++ b/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.es6.js @@ -142,6 +142,68 @@ p4.prepend(s4); } } + // VBA terms have nationalized regional data. + if ( + drupalSettings.availableHealthServices[service.value] !== undefined && + drupalSettings.availableHealthServices[service.value] + .vba_regional_service_header !== "" + ) { + const p5 = context.createElement("p"); + const s5 = context.createElement("strong"); + p5.textContent = drupalSettings.availableHealthServices[ + service.value + ].vba_regional_service_header.replace(/ /g, " "); + s5.textContent = "Regional service header: "; + div.classList.remove("no-content"); + div.appendChild(p5); + p5.prepend(s5); + } + if ( + drupalSettings.availableHealthServices[service.value] !== undefined && + drupalSettings.availableHealthServices[service.value] + .vba_regional_service_description !== "" + ) { + const p6 = context.createElement("p"); + const s6 = context.createElement("strong"); + p6.textContent = drupalSettings.availableHealthServices[ + service.value + ].vba_regional_service_description.replace(/ /g, " "); + s6.textContent = "Regional service description: "; + div.classList.remove("no-content"); + div.appendChild(p6); + p6.prepend(s6); + } + // VBA terms have nationalized facility data. + if ( + drupalSettings.availableHealthServices[service.value] !== undefined && + drupalSettings.availableHealthServices[service.value] + .vba_facility_service_header !== "" + ) { + const p7 = context.createElement("p"); + const s7 = context.createElement("strong"); + p7.textContent = drupalSettings.availableHealthServices[ + service.value + ].vba_facility_service_header.replace(/ /g, " "); + s7.textContent = "Facility service header: "; + div.classList.remove("no-content"); + div.appendChild(p7); + p7.prepend(s7); + } + if ( + drupalSettings.availableHealthServices[service.value] !== undefined && + drupalSettings.availableHealthServices[service.value] + .vba_facility_service_description !== "" + ) { + const p8 = context.createElement("p"); + const s8 = context.createElement("strong"); + p8.textContent = drupalSettings.availableHealthServices[ + service.value + ].vba_facility_service_description.replace(/ /g, " "); + s8.textContent = "Facility service description: "; + div.classList.remove("no-content"); + div.appendChild(p8); + p8.prepend(s8); + } // Plug in the term text below the select. service.after(div); // If we have contents, add a label above. diff --git a/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.js b/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.js index a3f1a7210b..dd1bb170c3 100644 --- a/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.js +++ b/docroot/modules/custom/va_gov_facilities/js/displayServiceDescriptions.js @@ -78,6 +78,42 @@ p4.prepend(s4); } } + if (drupalSettings.availableHealthServices[service.value] !== undefined && drupalSettings.availableHealthServices[service.value].vba_regional_service_header !== "") { + var p5 = context.createElement("p"); + var s5 = context.createElement("strong"); + p5.textContent = drupalSettings.availableHealthServices[service.value].vba_regional_service_header.replace(/ /g, " "); + s5.textContent = "Regional service header: "; + div.classList.remove("no-content"); + div.appendChild(p5); + p5.prepend(s5); + } + if (drupalSettings.availableHealthServices[service.value] !== undefined && drupalSettings.availableHealthServices[service.value].vba_regional_service_description !== "") { + var p6 = context.createElement("p"); + var s6 = context.createElement("strong"); + p6.textContent = drupalSettings.availableHealthServices[service.value].vba_regional_service_description.replace(/ /g, " "); + s6.textContent = "Regional service description: "; + div.classList.remove("no-content"); + div.appendChild(p6); + p6.prepend(s6); + } + if (drupalSettings.availableHealthServices[service.value] !== undefined && drupalSettings.availableHealthServices[service.value].vba_facility_service_header !== "") { + var p7 = context.createElement("p"); + var s7 = context.createElement("strong"); + p7.textContent = drupalSettings.availableHealthServices[service.value].vba_facility_service_header.replace(/ /g, " "); + s7.textContent = "Facility service header: "; + div.classList.remove("no-content"); + div.appendChild(p7); + p7.prepend(s7); + } + if (drupalSettings.availableHealthServices[service.value] !== undefined && drupalSettings.availableHealthServices[service.value].vba_facility_service_description !== "") { + var p8 = context.createElement("p"); + var s8 = context.createElement("strong"); + p8.textContent = drupalSettings.availableHealthServices[service.value].vba_facility_service_description.replace(/ /g, " "); + s8.textContent = "Facility service description: "; + div.classList.remove("no-content"); + div.appendChild(p8); + p8.prepend(s8); + } service.after(div); if (div.textContent.length > 0) { var p = context.createElement("p"); diff --git a/docroot/modules/custom/va_gov_facilities/src/EventSubscriber/FacilitiesSubscriber.php b/docroot/modules/custom/va_gov_facilities/src/EventSubscriber/FacilitiesSubscriber.php index 73b0b7aac2..c2f58d0a6a 100644 --- a/docroot/modules/custom/va_gov_facilities/src/EventSubscriber/FacilitiesSubscriber.php +++ b/docroot/modules/custom/va_gov_facilities/src/EventSubscriber/FacilitiesSubscriber.php @@ -480,6 +480,15 @@ public function buildHealthServicesDescriptionArrayAddToSettings(FormIdAlterEven 'tricare_description' => trim(strip_tags($tricare_description)), 'vc_vocabulary_service_description_label' => $vocabulary_definition['field_vet_center_service_descrip']->getLabel(), 'vc_vocabulary_description_help_text' => $vocabulary_definition['field_vet_center_service_descrip']->getDescription(), + // VBA has nationalized content we want to show from the vocabulary. + 'vba_regional_service_header' => $service_term->hasField('field_regional_service_header') + ? trim($service_term->get('field_regional_service_header')->getString()) : '', + 'vba_regional_service_description' => $service_term->hasField('field_regional_service_descripti') + ? trim($service_term->get('field_regional_service_descripti')->getString()) : '', + 'vba_facility_service_header' => $service_term->hasField('field_facility_service_header') + ? trim($service_term->get('field_facility_service_header')->getString()) : '', + 'vba_facility_service_description' => $service_term->hasField('field_facility_service_descripti') + ? trim($service_term->get('field_facility_service_descripti')->getString()) : '', ]; } $form['#attached']['drupalSettings']['availableHealthServices'] = $descriptions;