Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor and fix bugs in Recent Activity and Upcoming Closing Dates tables. #2687

Merged
merged 1 commit into from
Mar 6, 2024

Conversation

sanason
Copy link
Contributor

@sanason sanason commented Feb 28, 2024

Ticket #949

Description

This PR fixes a few problems with the Dashboard tab and its associated pages.

Pagination controls

The pagination controls on both the /RecentActivity and /UpcomingClosingDates pages were weird looking:

  • They were not horizontally aligned with the table.
  • They had a strange button-looking but non-button box with some mysterious numbers displayed inside it.

These issues were fixed. Now the pagination controls look like the ones on the "Browse Grants" page. Also, I added the page number to the URL for /RecentActivity and /UpcomingClosingDates, so that clicking on a grant and then clicking "Back" takes the user to the most recently viewed page of results.

Strange looking rows in Recent Activity

The Recent Activity table displayed the occasional strange looking row, consisting of just a grant name and a date. These occurred because there was no display code to handle certain types of activities. This was fixed.

Date display format in Upcoming Closing Dates

Throughout the app, dates are formatted with the en-US locale (exp., 11/6/2023), except in the Upcoming Closing Dates table, where they are specially formatted to have exactly six digits (exp., 11/06/23). This may have been done on purpose (to make alignment pretty in the table?) but I decided to eliminate this inconsistency.

Refactoring

  1. I extracted an ActivityTable component to be used in both the Dashboard left-hand column and the /RecentActivity page.
  2. I extracted a ClosingDatesTable component to be used in both the Dashboard right-hand column and the /UpcomingClosingDates page.
  3. I extracted a utility function for determining whether a closing date is within the one of the "very soon" thresholds that we alert users about. This function is used in both the Grants Table and in the Closing Dates Table.

Screenshots / Demo Video

Current Recent Activity page:
Screenshot 2024-03-05 at 12 38 04 PM

New Recent Activity page:
Screenshot 2024-03-05 at 12 44 53 PM

Current Upcoming Closing Dates page:
Screenshot 2024-03-05 at 12 42 11 PM

New Upcoming Closing Dates page:
Screenshot 2024-03-05 at 12 47 28 PM

Testing

No special instructions to run. Start up the app and click around:

  • Click on the Dashboard tab
  • From the Dashboard tab, click "See All Activity"
  • From the Dashboard tab, click "See All Upcoming"
  • Page through "Recent Activity", click on a grant to go to the Grant Details page, click the back button, check that you go back to the correct page

Automated and Unit Tests

  • Added Unit tests

Manual tests for Reviewer

  • Added steps to test feature/functionality manually

Checklist

  • Provided ticket and description
  • Provided screenshots/demo
  • Provided testing information
  • Provided adequate test coverage for all new code
  • Added PR reviewers

@github-actions github-actions bot added bug Something isn't working javascript Pull requests that update Javascript code labels Feb 28, 2024
Copy link

github-actions bot commented Feb 28, 2024

QA Summary

QA Check Result
🌐 Client Tests
🔗 Server Tests
🤝 E2E Tests
📏 ESLint
🧹 TFLint

Test Coverage

Coverage report for `packages/client`
St File % Stmts % Branch % Funcs % Lines Uncovered Line #s
🔴 All files 16.22 14.28 20.97 16.48
🟡  ...nents/src/arpa_reporter/components 50.9 26.66 62.16 50.9
🔴   AlertBox.vue 0 0 0 0 20-21
🟡   DownloadButton.vue 50 50 50 50 39,56-59
🟢   DownloadFileButton.vue 100 100 100 100
🟢   DownloadTemplateBtn.vue 100 100 100 100
🟡   Navigation.vue 63.15 100 62.5 63.15 137-143,152-159
🔴   StandardForm.vue 34.78 20 55.55 34.78 86-90,97-119
🟢  arpa_reporter/helpers 84.61 79.48 87.5 84.61
🟢   form-helpers.js 84.21 79.48 85.71 84.21 7,16,25,81-83
🟢   short-uuid.js 100 100 100 100
🔴  arpa_reporter/store 4.85 0 2.17 5.1
🔴   index.js 4.85 0 2.17 5.1 13-16,34-263
🔴  ...rter/views/src/arpa_reporter/views 41.71 39.21 70.58 41.71
🟢   Agencies.vue 100 100 100 100
🔴   Home.vue 26.66 25 60 26.66 ...05-130,137-166
🔴   Upload.vue 48.21 50 78.94 48.21 ...39,345-346,356
🔴   Uploads.vue 43.18 38.88 66.66 43.18 ...65,181,232-256
🔴   User.vue 38.7 28.57 68.75 38.7 73-118
🔴  ...nents/Modals/src/components/Modals 4 2.17 10.52 4.01
🔴   AddOrganization.vue 7.69 0 25 7.69 136-171
🔴   AddTeam.vue 37.5 33.33 60 37.5 178,184-212
🔴   EditOrganization.vue 11.11 0 28.57 11.11 50-76
🔴   EditTeam.vue 2.5 0 16.66 2.5 151-260
🔴   GrantDetailsLegacy.vue 0 0 0 0 103-268
🔴   ImportTeams.vue 0 0 0 0 44-79
🔴   ProfileSettings.vue 0 0 0 0 49-128
🔴   SavedSearchPanel.vue 0 0 0 0 98-208
🔴   SearchPanel.vue 1.75 0 0 1.78 266-452
🔴  components/src/components 4.78 3.66 9.72 4.78
🔴   ActivityTable.vue 0 0 0 0 68-137
🔴   ClosingDatesTable.vue 0 0 0 0 52-84
🔴   GrantsTable.vue 3 0 0 3 136-512
🟡   Layout.vue 50 66.66 53.84 50 133-148
🔴   SearchFilter.vue 0 0 0 0 26-68
🔴   Uploader.vue 0 0 0 0 47-100
🔴   UserAvatar.vue 0 0 0 0 25-36
🔴  helpers 11.53 12.64 12.12 11.88
🟢   constants.js 100 100 100 100
🟢   dates.js 100 100 100 100
🔴   fetchApi.js 5.55 12.5 5.55 5.55 10-102
🔴   filters.js 4 0 0 4.54 19-51
🔴   form-helpers.js 0 0 0 0 5-82
🟢   gtag.js 100 100 100 100
🟢  helpers/featureFlags 100 100 100 100
🟢   index.js 100 100 100 100
🟢   utils.js 100 100 100 100
🔴  mixin 23.8 0 28.57 23.8
🔴   resizableTable.js 23.8 0 28.57 23.8 16-31,36-37,42
🔴  router 20 11.53 17.64 20
🔴   index.js 20 11.53 17.64 20 ...74-175,179-198
🟢  store 100 100 100 100
🟢   index.js 100 100 100 100
🔴  store/modules 6.29 0 4.97 6.59
🔴   agencies.js 10 100 8.33 10.52 13-70
🔴   alerts.js 20 100 20 20 10-24
🔴   dashboard.js 4.65 0 4.54 4.65 22-96
🔴   grants.js 2.79 0 1.05 2.94 59-353
🔴   keywords.js 14.28 0 9.09 16.66 13-33
🔴   organization.js 33.33 100 33.33 33.33 21-25
🔴   roles.js 33.33 100 20 40 13-22
🔴   tenants.js 20 100 14.28 22.22 13-32
🔴   users.js 4.76 0 4.76 4.87 17-100
🟡  views 50 100 0 50
🟡   NotFound.vue 50 100 0 50 2-4
🔴  views/src/views 14.89 0 26 14.89
🔴   ArpaAnnualPerformanceReporter.vue 0 0 0 0 81-134
🔴   Dashboard.vue 26.31 0 36.36 26.31 ...12-122,137-148
🔴   Login.vue 0 0 0 0 63-115
🔴   Organizations.vue 40 100 40 40 64,74-77,88-92
🟡   Teams.vue 50 100 50 50 108,119-126
Coverage report for `packages/server`
St File % Stmts % Branch % Funcs % Lines Uncovered Line #s
🟡 All files 55.55 46.84 50.06 55.91
🟢  src 82.35 33.33 60 82.35
🟢   configure.js 82.35 33.33 60 82.35 44,63-70,99-101
🟢  src/arpa_reporter 98.75 66.66 100 98.75
🟢   configure.js 97.36 40 100 97.36 36
🟢   environment.js 100 100 100 100
🟢   use-request.js 100 100 100 100
🔴  src/arpa_reporter/db 38.58 32.92 44.44 40.16
🔴   arpa-subrecipients.js 13.15 4.34 15.38 14.28 23-92
🔴   reporting-periods.js 37.2 46.87 40 38.09 46,77-156
🟢   settings.js 100 83.33 100 100 13
🟡   uploads.js 50 28.57 52.38 51.42 18-29,83,98-123,140-149
🔴  src/arpa_reporter/lib 29.09 23.85 29.68 29.41
🟢   arpa-ec-codes.js 100 100 100 100
🔴   audit-report.js 27.24 25.35 32.6 26.66 ...96-397,439-533,581-607
🟡   ensure-async-context.js 75 100 50 100
🔴   format.js 13.79 0 0 19.04 28-82
🟡   log.js 75 50 50 75 13,25
🟡   preconditions.js 66.66 33.33 100 66.66 3
🔴   spreadsheet.js 9.09 0 0 9.09 15-32
🟢   validation-error.js 85.71 100 50 85.71 16
🔴  src/arpa_reporter/routes 40.08 14.92 14.28 40.69
🔴   agencies.js 22.58 0 0 23.33 13-21,26-53
🟡   application_settings.js 75 100 0 75 10-11
🟡   audit-report.js 69.86 58.33 100 69.86 57-58,64-78,100-115
🟢   exports.js 81.42 83.33 100 81.42 61-75,98-99
🔴   reporting-periods.js 20 0 0 20.43 ...25-137,143-149,154-180
🔴   subrecipients.js 23.8 0 0 23.8 12-13,17-27,31-48,52-63
🔴   uploads.js 28.28 7.89 9.09 29.16 ...33-154,164-166,173-180
🔴   users.js 19.6 0 0 20 15-35,39-44,48-81
🔴  src/arpa_reporter/services 42.63 30.33 45.39 43.01
🔴   generate-arpa-report.js 36.86 2.79 50 37.24 ...-944,953-966,1040-1107
🔴   get-template.js 21.62 0 0 21.62 18-79
🟡   persist-upload.js 68.6 90 69.56 68.67 ...58-200,221-235,273-295
🔴   records.js 21.15 0 11.11 21.56 38-202,219-272
🔴   revalidate-uploads.js 37.5 100 0 37.5 5-14
🔴   validate-upload.js 37.93 49.41 32.14 38.83 ...10,329,351,369-657,672
🟢   validation-rules.js 98.18 90 90.9 100 157,173
🟡  src/db 75.41 72.27 69.94 75.51
🟢   connection.js 100 50 100 100 6
🟢   constants.js 100 100 100 100
🟢   helpers.js 83.33 100 50 83.33 21-22
🟢   index.js 83.18 78.61 82.87 83.17 ...05-1571,1753-1754,1761
🟢   saved_search_migration.js 92 88.23 71.42 93.61 5,69,134
🔴   tenant_creation.js 10.58 2.7 0 11.11 15-40,48-210,220
🔴  src/db/arpa_reporter_db_shims 23.68 0 0 23.68
🔴   agencies.js 22.22 100 0 22.22 11-51
🔴   users.js 25 0 0 25 12-62
🟡  src/lib 65.56 61.2 60.43 66.42
🟢   access-helpers.js 93.44 89.18 100 93.44 91-92,97-98
🟢   agencyImporter.js 90.38 88.46 100 90.19 26,29,35,93-94
🔴   batchProcessor.js 2.94 0 0 3.03 35-104
🟢   email.js 92.36 72.5 100 92.12 56,62,83-87,129,281-282
🔴   gost-aws.js 21.05 11.11 20 19.44 13-58,65-116
🟢   grants-ingest.js 83.33 97.5 90 83.33 ...28-131,138-140,155-159
🔴   grantsgov.js 6.25 6.52 0 6.97 12-220
🟡   logging.js 77.77 85.71 100 77.77 11,13
🟢   redirect_validation.js 100 100 100 100
🟢   userImporter.js 82.27 58.33 88.88 81.57 32,47,53,62,73-81,143-152
🔴  src/lib/annualReports 27.38 0 0 27.38
🔴   doc-builder.js 7.69 0 0 7.69 19-352
🟡   index.js 80 100 0 80 6
🟢   placeholderTextStrings.js 100 100 100 100
🔴   reportBuilder.js 17.24 0 0 17.24 21-33,50-62,86-103
🟢  src/lib/arpa_reporter_shims 100 100 100 100
🟢   email.js 100 100 100 100
🟢  src/lib/email 92.85 87.5 100 92.3
🟢   constants.js 100 100 100 100
🟢   email-nodemailer.js 88.23 83.33 100 86.66 33,56
🟢   service-email.js 100 100 100 100
🟢  src/lib/fieldConfigs 100 100 100 100
🟢   fundingActivityCategories.js 100 100 100 100
🔴  src/lib/grantscraper 11.86 0 0 12.96
🔴   index.js 11.86 0 0 12.96 11-92,98-122
🟡  src/routes 68.53 57.52 60.49 68.6
🔴   agencies.js 45.54 30 40 45.54 ...32-140,144-165,173-179
🔴   annualReports.js 47.05 100 0 47.05 15-27
🔴   dashboard.js 21.42 0 0 21.42 8-53
🟢   eligibilityCodes.js 100 100 100 100
🟢   grants.js 81.21 71.02 73.52 82.08 ...75-376,391-394,407-408
🟡   grantsSavedSearch.js 80 83.33 100 80 38-39,56-57,70-72,78
🟢   health.js 100 100 100 100
🟡   interestedCodes.js 71.42 100 0 71.42 7-8
🟢   keywords.js 86.95 50 100 86.95 26-27,34
🟡   refresh.js 71.42 100 0 71.42 7-8
🟡   roles.js 75 100 0 75 8-9
🟡   searchConfig.js 58.33 100 0 58.33 9-14
🟡   sessions.js 63.93 39.39 50 63.93 ...-73,79-80,84-85,98-104
🔴   tenants.js 39.13 0 0 39.13 11-12,16-27,32-35
🟢   users.js 80.41 74.19 85.71 80.41 ...17,134-136,160,169-177

Pusher: @sanason, Action: pull_request_target, Workflow: Continuous Integration

Copy link

github-actions bot commented Feb 28, 2024

Terraform Summary

Step Result
🖌 Terraform Format & Style
⚙️ Terraform Initialization
🤖 Terraform Validation
📖 Terraform Plan

Hint: If "Terraform Format & Style" failed, run terraform fmt -recursive from the terraform/ directory and commit the results.

Output

Validation Output
Success! The configuration is valid.


Plan Output
Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the
last "terraform apply" which may have affected this plan:

  # module.api.aws_ecs_task_definition.default[0] has changed
  ~ resource "aws_ecs_task_definition" "default" {
        id                       = "gost-staging-api"
+       tags                     = {}
        # (13 unchanged attributes hidden)

+       volume {
+           name = "data"

+           efs_volume_configuration {
+               file_system_id          = "fs-08f95063c1cdbe191"
+               root_directory          = "/"
+               transit_encryption      = "ENABLED"
+               transit_encryption_port = 0

+               authorization_config {
+                   access_point_id = "fsap-03bc0296928aade4f"
                }
            }
        }
-       volume {
-           name = "data" -> null

-           efs_volume_configuration {
-               file_system_id     = "fs-08f95063c1cdbe191" -> null
-               root_directory     = "/" -> null
-               transit_encryption = "ENABLED" -> null

-               authorization_config {
-                   access_point_id = "fsap-03bc0296928aade4f" -> null
                }
            }
        }

        # (1 unchanged block hidden)
    }

  # module.api.aws_iam_role.execution[0] has changed
  ~ resource "aws_iam_role" "execution" {
        id                    = "gost-staging-api-ECSTaskExecution-20230217010414321500000009"
        name                  = "gost-staging-api-ECSTaskExecution-20230217010414321500000009"
      ~ role_last_used        = [
          ~ {
              ~ last_used_date = "2024-03-06T19:13:48Z" -> "2024-03-06T20:21:37Z"
                # (1 unchanged element hidden)
            },
        ]
        tags                  = {}
        # (11 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # module.api.aws_iam_role.task[0] has changed
  ~ resource "aws_iam_role" "task" {
        id                    = "gost-staging-api-ECSTask-2023021701041477300000000a"
        name                  = "gost-staging-api-ECSTask-2023021701041477300000000a"
      ~ role_last_used        = [
          ~ {
              ~ last_used_date = "2024-03-06T19:20:11Z" -> "2024-03-06T20:21:31Z"
                # (1 unchanged element hidden)
            },
        ]
        tags                  = {}
        # (11 unchanged attributes hidden)

        # (6 unchanged blocks hidden)
    }


Unless you have made equivalent changes to your configuration, or ignored the
relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+   create
  ~ update in-place
-   destroy
+/- create replacement and then destroy

Terraform will perform the following actions:

  # module.api.aws_ecs_service.default[0] will be updated in-place
  ~ resource "aws_ecs_service" "default" {
        id                                 = "arn:aws:ecs:us-west-2:357150818708:service/gost-staging/gost-staging-api"
        name                               = "gost-staging-api"
        tags                               = {}
      ~ task_definition                    = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-api:164" -> (known after apply)
        # (15 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # module.api.aws_ecs_task_definition.default[0] must be replaced
+/- resource "aws_ecs_task_definition" "default" {
      ~ arn                      = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-api:164" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-api" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [ # forces replacement
              ~ {
                  ~ dockerLabels           = {
                      ~ "com.datadoghq.tags.version" = "381b8b03f8806c85b17a692c1ba39fd92dcaa014" -> "691a2db61ebf1f9138dbaed8ec4e5be5942373d4"
                        # (2 unchanged elements hidden)
                    }
                  ~ environment            = [
                        # (7 unchanged elements hidden)
                        {
                            name  = "DD_SERVICE"
                            value = "gost"
                        },
                      ~ {
                            name  = "DD_VERSION"
                          ~ value = "381b8b03f8806c85b17a692c1ba39fd92dcaa014" -> "691a2db61ebf1f9138dbaed8ec4e5be5942373d4"
                        },
                        {
                            name  = "ENABLE_GRANTS_DIGEST"
                            value = "false"
                        },
                        # (11 unchanged elements hidden)
                    ]
                  ~ image                  = "ghcr.io/usdigitalresponse/usdr-gost-api:381b8b03f8806c85b17a692c1ba39fd92dcaa014@sha256:0ce5c58b1098d858a48283fd9beea0af26ab54a3e276e19a019914858fce1eb6" -> "ghcr.io/usdigitalresponse/usdr-gost-api:691a2db61ebf1f9138dbaed8ec4e5be5942373d4@sha256:c0f8840c4238fb1f57dbaf30f22255e6b91368db8a11faefe919a46af16c5be6"
                    name                   = "api"
-                   systemControls         = [] -> null
-                   volumesFrom            = [] -> null
                    # (9 unchanged elements hidden)
                } # forces replacement,
              ~ {
                  ~ dockerLabels           = {
                      ~ "com.datadoghq.tags.version" = "381b8b03f8806c85b17a692c1ba39fd92dcaa014" -> "691a2db61ebf1f9138dbaed8ec4e5be5942373d4"
                        # (2 unchanged elements hidden)
                    }
                  ~ environment            = [
                        # (3 unchanged elements hidden)
                        {
                            name  = "DD_SERVICE"
                            value = "gost"
                        },
                      ~ {
                            name  = "DD_VERSION"
                          ~ value = "381b8b03f8806c85b17a692c1ba39fd92dcaa014" -> "691a2db61ebf1f9138dbaed8ec4e5be5942373d4"
                        },
                        {
                            name  = "ECS_FARGATE"
                            value = "true"
                        },
                    ]
-                   mountPoints            = [] -> null
                    name                   = "datadog"
-                   portMappings           = [] -> null
-                   systemControls         = [] -> null
-                   volumesFrom            = [] -> null
                    # (6 unchanged elements hidden)
                } # forces replacement,
            ]
        )
      ~ id                       = "gost-staging-api" -> (known after apply)
      ~ revision                 = 164 -> (known after apply)
-       tags                     = {} -> null
        # (9 unchanged attributes hidden)

-       volume {
-           name = "data" -> null

-           efs_volume_configuration {
-               file_system_id          = "fs-08f95063c1cdbe191" -> null
-               root_directory          = "/" -> null
-               transit_encryption      = "ENABLED" -> null
-               transit_encryption_port = 0 -> null

-               authorization_config {
-                   access_point_id = "fsap-03bc0296928aade4f" -> null
                }
            }
        }
+       volume {
+           name = "data"

+           efs_volume_configuration {
+               file_system_id     = "fs-08f95063c1cdbe191"
+               root_directory     = "/"
+               transit_encryption = "ENABLED"

+               authorization_config {
+                   access_point_id = "fsap-03bc0296928aade4f"
                }
            }
        }

        # (1 unchanged block hidden)
    }

  # module.arpa_audit_report.aws_ecs_service.default will be updated in-place
  ~ resource "aws_ecs_service" "default" {
        id                                 = "arn:aws:ecs:us-west-2:357150818708:service/gost-staging/gost-staging-arpa_audit_report"
        name                               = "gost-staging-arpa_audit_report"
        tags                               = {}
      ~ task_definition                    = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-arpa_audit_report:133" -> (known after apply)
        # (15 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # module.arpa_audit_report.aws_ecs_task_definition.consumer must be replaced
+/- resource "aws_ecs_task_definition" "consumer" {
      ~ arn                      = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-arpa_audit_report:133" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-arpa_audit_report" -> (known after apply)
      ~ container_definitions    = (sensitive value) # forces replacement
      ~ id                       = "gost-staging-arpa_audit_report" -> (known after apply)
-       ipc_mode                 = "" -> null
-       pid_mode                 = "" -> null
      ~ revision                 = 133 -> (known after apply)
-       tags                     = {} -> null
        # (9 unchanged attributes hidden)

-       volume {
-           name = "data" -> null

-           efs_volume_configuration {
-               file_system_id          = "fs-08f95063c1cdbe191" -> null
-               root_directory          = "/" -> null
-               transit_encryption      = "ENABLED" -> null
-               transit_encryption_port = 0 -> null

-               authorization_config {
-                   access_point_id = "fsap-03bc0296928aade4f" -> null
                }
            }
        }
+       volume {
+           name = "data"

+           efs_volume_configuration {
+               file_system_id     = "fs-08f95063c1cdbe191"
+               root_directory     = "/"
+               transit_encryption = "ENABLED"

+               authorization_config {
+                   access_point_id = "fsap-03bc0296928aade4f"
                }
            }
        }

        # (1 unchanged block hidden)
    }

  # module.arpa_treasury_report.aws_ecs_service.default will be updated in-place
  ~ resource "aws_ecs_service" "default" {
        id                                 = "arn:aws:ecs:us-west-2:357150818708:service/gost-staging/gost-staging-treasury_report"
        name                               = "gost-staging-treasury_report"
        tags                               = {}
      ~ task_definition                    = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-treasury_report:122" -> (known after apply)
        # (15 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # module.arpa_treasury_report.aws_ecs_task_definition.consumer must be replaced
+/- resource "aws_ecs_task_definition" "consumer" {
      ~ arn                      = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-treasury_report:122" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-treasury_report" -> (known after apply)
      ~ container_definitions    = (sensitive value) # forces replacement
      ~ id                       = "gost-staging-treasury_report" -> (known after apply)
-       ipc_mode                 = "" -> null
-       pid_mode                 = "" -> null
      ~ revision                 = 122 -> (known after apply)
-       tags                     = {} -> null
        # (9 unchanged attributes hidden)

-       volume {
-           name = "data" -> null

-           efs_volume_configuration {
-               file_system_id          = "fs-08f95063c1cdbe191" -> null
-               root_directory          = "/" -> null
-               transit_encryption      = "ENABLED" -> null
-               transit_encryption_port = 0 -> null

-               authorization_config {
-                   access_point_id = "fsap-03bc0296928aade4f" -> null
                }
            }
        }
+       volume {
+           name = "data"

+           efs_volume_configuration {
+               file_system_id     = "fs-08f95063c1cdbe191"
+               root_directory     = "/"
+               transit_encryption = "ENABLED"

+               authorization_config {
+                   access_point_id = "fsap-03bc0296928aade4f"
                }
            }
        }

        # (1 unchanged block hidden)
    }

  # module.consume_grants.aws_ecs_service.default will be updated in-place
  ~ resource "aws_ecs_service" "default" {
        id                                 = "arn:aws:ecs:us-west-2:357150818708:service/gost-staging/gost-staging-consume_grants"
        name                               = "gost-staging-consume_grants"
        tags                               = {}
      ~ task_definition                    = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-consume_grants:149" -> (known after apply)
        # (15 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # module.consume_grants.aws_ecs_task_definition.consume_grants must be replaced
+/- resource "aws_ecs_task_definition" "consume_grants" {
      ~ arn                      = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-consume_grants:149" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-west-2:357150818708:task-definition/gost-staging-consume_grants" -> (known after apply)
      ~ container_definitions    = (sensitive value) # forces replacement
      ~ id                       = "gost-staging-consume_grants" -> (known after apply)
-       ipc_mode                 = "" -> null
-       pid_mode                 = "" -> null
      ~ revision                 = 149 -> (known after apply)
-       tags                     = {} -> null
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.website.aws_s3_object.deploy-config[0] will be updated in-place
  ~ resource "aws_s3_object" "deploy-config" {
      ~ content                = <<-EOT
            window.APP_CONFIG = window.APP_CONFIG || {};
            window.APP_CONFIG.apiURLForGOST = 'https://api.staging.grants.usdr.dev/';
            window.apiURLForGOST = window.APP_CONFIG.apiURLForGOST; // Legacy
            
            window.APP_CONFIG.DD_RUM_ENABLED = true;
-           window.APP_CONFIG.DD_RUM_CONFIG = {"allowedTracingUrls":["https://api.staging.grants.usdr.dev"],"applicationId":"15db471e-2ccb-4d3c-a6bf-99b750d748f5","clientToken":"pub50834fcc1999d53e546519b1a0f03934","defaultPrivacyLevel":"mask","env":"staging","service":"gost","sessionReplaySampleRate":1,"sessionSampleRate":10,"site":"datadoghq.com","trackLongTasks":true,"trackResources":true,"trackUserInteractions":true,"version":"381b8b03f8806c85b17a692c1ba39fd92dcaa014"};
+           window.APP_CONFIG.DD_RUM_CONFIG = {"allowedTracingUrls":["https://api.staging.grants.usdr.dev"],"applicationId":"15db471e-2ccb-4d3c-a6bf-99b750d748f5","clientToken":"pub50834fcc1999d53e546519b1a0f03934","defaultPrivacyLevel":"mask","env":"staging","service":"gost","sessionReplaySampleRate":1,"sessionSampleRate":10,"site":"datadoghq.com","trackLongTasks":true,"trackResources":true,"trackUserInteractions":true,"version":"691a2db61ebf1f9138dbaed8ec4e5be5942373d4"};
            
            window.APP_CONFIG.GOOGLE_TAG_ID = 'G-D5DFR7BN0N';
            
            window.APP_CONFIG.featureFlags = {"myProfileEnabled":true,"newGrantsDetailPageEnabled":false,"newTerminologyEnabled":true};
            
            window.APP_CONFIG.overrideFeatureFlag = (flagName, overrideValue) => {
              const storageKey = 'featureFlags';
              let overrides = {};
              try {
                overrides = JSON.parse(window.sessionStorage.getItem(storageKey)) || {};
              } catch (e) {
                console.error(`Error parsing window.sessionStorage.${storageKey} as JSON:`, e);
                console.warn(`window.sessionStorage.${storageKey} will be replaced.`);
              }
              overrides[flagName] = overrideValue;
              window.sessionStorage.setItem(storageKey, JSON.stringify(overrides));
              console.log('New feature flag overrides in page session:',
                window.sessionStorage.getItem(storageKey));
            };
        EOT
      ~ etag                   = "29f8239adf8fb66d3126c76438000023" -> "db1c77273a8b7e994d4681adc49c8509"
        id                     = "/config/deploy-config.js"
        tags                   = {}
      ~ version_id             = "9ouo3NYM4BdO34Uz3p1b.VEOT1ERjkZP" -> (known after apply)
        # (10 unchanged attributes hidden)
    }

  # module.website.aws_s3_object.origin_dist_artifact["arpa_reporter/index.html"] will be updated in-place
  ~ resource "aws_s3_object" "origin_dist_artifact" {
      ~ etag                   = "7ac4a50b4d2f18d837ecbdbdcc32e758" -> "76e14d9ad3297110ae1d627c72ec1583"
        id                     = "dist/arpa_reporter/index.html"
      ~ source_hash            = "7ac4a50b4d2f18d837ecbdbdcc32e758" -> "76e14d9ad3297110ae1d627c72ec1583"
        tags                   = {}
      ~ version_id             = "xj9p2jdWXyyosNcydosVDDZ0bgGh9veq" -> (known after apply)
        # (11 unchanged attributes hidden)
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/265.512b2d7a.css"] will be destroyed
  # (because key ["css/265.512b2d7a.css"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/css" -> null
-       etag                   = "45e91c2c563852d4a8da73e6d054da29" -> null
-       force_destroy          = false -> null
-       id                     = "dist/css/265.512b2d7a.css" -> null
-       key                    = "dist/css/265.512b2d7a.css" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/265.512b2d7a.css" -> null
-       source_hash            = "45e91c2c563852d4a8da73e6d054da29" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "Mm3xDbAXtx9MriaNgLlGsDIEZ96ZyNld" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/300.fecb0d7b.css"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/css"
+       etag                   = "3838e444df53459b2c636990602e8416"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/css/300.fecb0d7b.css"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/300.fecb0d7b.css"
+       source_hash            = "3838e444df53459b2c636990602e8416"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/332.823258ed.css"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/css"
+       etag                   = "6140c31a5942ba122f75f27c1543a23a"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/css/332.823258ed.css"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/332.823258ed.css"
+       source_hash            = "6140c31a5942ba122f75f27c1543a23a"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/377.dec853f0.css"] will be destroyed
  # (because key ["css/377.dec853f0.css"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/css" -> null
-       etag                   = "0e6b3cef8e0a90cf49a663643b1b0414" -> null
-       force_destroy          = false -> null
-       id                     = "dist/css/377.dec853f0.css" -> null
-       key                    = "dist/css/377.dec853f0.css" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/377.dec853f0.css" -> null
-       source_hash            = "0e6b3cef8e0a90cf49a663643b1b0414" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "nXmnl4yuX4J2.QntchedbeW86N9Kz4fY" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/404.5dbff179.css"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/css"
+       etag                   = "24d2eb9260e5e87d78ef1b5d5ed79965"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/css/404.5dbff179.css"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/404.5dbff179.css"
+       source_hash            = "24d2eb9260e5e87d78ef1b5d5ed79965"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/528.714dbc12.css"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/css"
+       etag                   = "fcfe58cf46dfb3df6d2b1c3b2a129cf9"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/css/528.714dbc12.css"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/528.714dbc12.css"
+       source_hash            = "fcfe58cf46dfb3df6d2b1c3b2a129cf9"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/842.5dbff179.css"] will be destroyed
  # (because key ["css/842.5dbff179.css"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/css" -> null
-       etag                   = "24d2eb9260e5e87d78ef1b5d5ed79965" -> null
-       force_destroy          = false -> null
-       id                     = "dist/css/842.5dbff179.css" -> null
-       key                    = "dist/css/842.5dbff179.css" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/842.5dbff179.css" -> null
-       source_hash            = "24d2eb9260e5e87d78ef1b5d5ed79965" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "i4w07RN0Lbinr9jRX2nEWzNG8d_XamRq" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/914.823258ed.css"] will be destroyed
  # (because key ["css/914.823258ed.css"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/css" -> null
-       etag                   = "6140c31a5942ba122f75f27c1543a23a" -> null
-       force_destroy          = false -> null
-       id                     = "dist/css/914.823258ed.css" -> null
-       key                    = "dist/css/914.823258ed.css" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/914.823258ed.css" -> null
-       source_hash            = "6140c31a5942ba122f75f27c1543a23a" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "PVzALYFaUt3YH6PezWqpazAK3vPVIukT" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/925.912e6579.css"] will be destroyed
  # (because key ["css/925.912e6579.css"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/css" -> null
-       etag                   = "9a60e24bb55555d5b7eb044358de3a23" -> null
-       force_destroy          = false -> null
-       id                     = "dist/css/925.912e6579.css" -> null
-       key                    = "dist/css/925.912e6579.css" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/925.912e6579.css" -> null
-       source_hash            = "9a60e24bb55555d5b7eb044358de3a23" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "Cnl_x7UjyRtHO.sURefiJb.eXh1Pz9Eh" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["css/964.6230b33b.css"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/css"
+       etag                   = "6435f6074d73d008ba306e9a7a95c3a9"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/css/964.6230b33b.css"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/css/964.6230b33b.css"
+       source_hash            = "6435f6074d73d008ba306e9a7a95c3a9"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["index.html"] will be updated in-place
  ~ resource "aws_s3_object" "origin_dist_artifact" {
      ~ etag                   = "fd9e056481eeab35f74d3838a94ad456" -> "2bf775080de36d5a306f150de889d02b"
        id                     = "dist/index.html"
      ~ source_hash            = "fd9e056481eeab35f74d3838a94ad456" -> "2bf775080de36d5a306f150de889d02b"
        tags                   = {}
      ~ version_id             = "UmzcOsmyoYwJS_dY1tf_Wj8H_x9UoGH_" -> (known after apply)
        # (11 unchanged attributes hidden)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/207.a0148f46.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "50d10af43d673b40f28caec9f62d7cd8"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/207.a0148f46.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/207.a0148f46.js"
+       source_hash            = "50d10af43d673b40f28caec9f62d7cd8"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/207.a0148f46.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "2101aa462ebf86c61fc036dc897ec4a1"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/207.a0148f46.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/207.a0148f46.js.map"
+       source_hash            = "2101aa462ebf86c61fc036dc897ec4a1"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/265.1e8609da.js"] will be destroyed
  # (because key ["js/265.1e8609da.js"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/javascript" -> null
-       etag                   = "ce9c463a988978ed3c838bd4bb11aa21" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/265.1e8609da.js" -> null
-       key                    = "dist/js/265.1e8609da.js" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/265.1e8609da.js" -> null
-       source_hash            = "ce9c463a988978ed3c838bd4bb11aa21" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "8U0poKoHDElh2hWhwRrfCFnbHkp30oBO" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/265.1e8609da.js.map"] will be destroyed
  # (because key ["js/265.1e8609da.js.map"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "application/json" -> null
-       etag                   = "049d431a4ea3e5e6529ea0fa990528f1" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/265.1e8609da.js.map" -> null
-       key                    = "dist/js/265.1e8609da.js.map" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/265.1e8609da.js.map" -> null
-       source_hash            = "049d431a4ea3e5e6529ea0fa990528f1" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "DarsnJwqZ85VO2j2s.0RPAGkM_p6aX8q" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/300.42af411d.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "35f7fae6103b83a26241f4d0783c46d7"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/300.42af411d.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/300.42af411d.js"
+       source_hash            = "35f7fae6103b83a26241f4d0783c46d7"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/300.42af411d.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "8b9bab19815f9d4603e77ef764077c44"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/300.42af411d.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/300.42af411d.js.map"
+       source_hash            = "8b9bab19815f9d4603e77ef764077c44"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/319.01d8c946.js"] will be destroyed
  # (because key ["js/319.01d8c946.js"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/javascript" -> null
-       etag                   = "b4d50cb9e461607a34c8093ed990815b" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/319.01d8c946.js" -> null
-       key                    = "dist/js/319.01d8c946.js" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/319.01d8c946.js" -> null
-       source_hash            = "b4d50cb9e461607a34c8093ed990815b" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "J1qfeRdGEUFNlmutOC4jdHprCgNspz.m" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/319.01d8c946.js.map"] will be destroyed
  # (because key ["js/319.01d8c946.js.map"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "application/json" -> null
-       etag                   = "fc9cc5d4d465431cd3519cd2fb42d18d" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/319.01d8c946.js.map" -> null
-       key                    = "dist/js/319.01d8c946.js.map" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/319.01d8c946.js.map" -> null
-       source_hash            = "fc9cc5d4d465431cd3519cd2fb42d18d" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "xLBfkmUpWc3SUQ44WltroDw6Bf2CJPlk" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/319.ce8303b2.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "2cbc7362737abd2adc2253ef1ebf01d2"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/319.ce8303b2.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/319.ce8303b2.js"
+       source_hash            = "2cbc7362737abd2adc2253ef1ebf01d2"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/319.ce8303b2.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "7307bdda3b6cdfca339c556518bbef88"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/319.ce8303b2.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/319.ce8303b2.js.map"
+       source_hash            = "7307bdda3b6cdfca339c556518bbef88"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/332.78842ec1.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "fb92d7cee7f3969020d63fff5e49abbe"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/332.78842ec1.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/332.78842ec1.js"
+       source_hash            = "fb92d7cee7f3969020d63fff5e49abbe"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/332.78842ec1.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "f5bd06908c9b57fc44f54de432a59ed7"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/332.78842ec1.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/332.78842ec1.js.map"
+       source_hash            = "f5bd06908c9b57fc44f54de432a59ed7"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/377.4cb24ec8.js"] will be destroyed
  # (because key ["js/377.4cb24ec8.js"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/javascript" -> null
-       etag                   = "d3b2eef2fb7fd2fcd4bd318088a16f52" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/377.4cb24ec8.js" -> null
-       key                    = "dist/js/377.4cb24ec8.js" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/377.4cb24ec8.js" -> null
-       source_hash            = "d3b2eef2fb7fd2fcd4bd318088a16f52" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "zbYik8xp5dMIdz7fbFLho0qylygChxFj" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/377.4cb24ec8.js.map"] will be destroyed
  # (because key ["js/377.4cb24ec8.js.map"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "application/json" -> null
-       etag                   = "0a68423b42247304c16b262a695e1c39" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/377.4cb24ec8.js.map" -> null
-       key                    = "dist/js/377.4cb24ec8.js.map" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/377.4cb24ec8.js.map" -> null
-       source_hash            = "0a68423b42247304c16b262a695e1c39" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "52.trgXKEG6kE0HSu7eyDeXbTfBJsHTD" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/404.ac06a0aa.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "b3fe217d873ae1345d95513f51893dff"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/404.ac06a0aa.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/404.ac06a0aa.js"
+       source_hash            = "b3fe217d873ae1345d95513f51893dff"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/404.ac06a0aa.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "7d99d29c3d301694cd73cdfeed6bd01c"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/404.ac06a0aa.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/404.ac06a0aa.js.map"
+       source_hash            = "7d99d29c3d301694cd73cdfeed6bd01c"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/409.4cd49965.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "b7503f4e113a8cf5dd0d5624438fb728"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/409.4cd49965.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/409.4cd49965.js"
+       source_hash            = "b7503f4e113a8cf5dd0d5624438fb728"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/409.4cd49965.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "e5952dd15816155e4559ec16cea43381"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/409.4cd49965.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/409.4cd49965.js.map"
+       source_hash            = "e5952dd15816155e4559ec16cea43381"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/409.edf71f85.js"] will be destroyed
  # (because key ["js/409.edf71f85.js"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/javascript" -> null
-       etag                   = "31abe823831f6a8cf08ddc3ff2de8984" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/409.edf71f85.js" -> null
-       key                    = "dist/js/409.edf71f85.js" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/409.edf71f85.js" -> null
-       source_hash            = "31abe823831f6a8cf08ddc3ff2de8984" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "2ujFVWCc3IyMYm2U4C5QtDlfa4GPybVp" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/409.edf71f85.js.map"] will be destroyed
  # (because key ["js/409.edf71f85.js.map"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "application/json" -> null
-       etag                   = "a5101ccc162fc74f878bcff1c2cc4ae1" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/409.edf71f85.js.map" -> null
-       key                    = "dist/js/409.edf71f85.js.map" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/409.edf71f85.js.map" -> null
-       source_hash            = "a5101ccc162fc74f878bcff1c2cc4ae1" -> null
-       storage_class          = "STANDARD" -> null
-       tags                   = {} -> null
-       tags_all               = {
-           "env"        = "staging"
-           "management" = "terraform"
-           "owner"      = "grants"
-           "repo"       = "usdr-gost"
-           "service"    = "gost"
-           "usage"      = "workload"
        } -> null
-       version_id             = "ATidVxQTGb3D0DHvkQwt57CpwlPUi9LN" -> null
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/528.769d3b7a.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "9c9a304fb0e2437283efa5654bebf0b8"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/528.769d3b7a.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/528.769d3b7a.js"
+       source_hash            = "9c9a304fb0e2437283efa5654bebf0b8"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/528.769d3b7a.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "30f70af0a541a7754f41e96d1060864d"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/528.769d3b7a.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/528.769d3b7a.js.map"
+       source_hash            = "30f70af0a541a7754f41e96d1060864d"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/553.152fb012.js"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "text/javascript"
+       etag                   = "04d9931d8b0a5c819d948004764bf7e2"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/553.152fb012.js"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/553.152fb012.js"
+       source_hash            = "04d9931d8b0a5c819d948004764bf7e2"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/553.152fb012.js.map"] will be created
+   resource "aws_s3_object" "origin_dist_artifact" {
+       acl                    = "private"
+       bucket                 = "gost-staging-origin-357150818708-us-west-2-website"
+       bucket_key_enabled     = (known after apply)
+       content_type           = "application/json"
+       etag                   = "f3172c56593c5aacfc2d4e1e767157c2"
+       force_destroy          = false
+       id                     = (known after apply)
+       key                    = "dist/js/553.152fb012.js.map"
+       kms_key_id             = (known after apply)
+       server_side_encryption = "AES256"
+       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/553.152fb012.js.map"
+       source_hash            = "f3172c56593c5aacfc2d4e1e767157c2"
+       storage_class          = (known after apply)
+       tags_all               = {
+           "env"        = "staging"
+           "management" = "terraform"
+           "owner"      = "grants"
+           "repo"       = "usdr-gost"
+           "service"    = "gost"
+           "usage"      = "workload"
        }
+       version_id             = (known after apply)
    }

  # module.website.aws_s3_object.origin_dist_artifact["js/553.8c6b6bce.js"] will be destroyed
  # (because key ["js/553.8c6b6bce.js"] is not in for_each map)
-   resource "aws_s3_object" "origin_dist_artifact" {
-       acl                    = "private" -> null
-       bucket                 = "gost-staging-origin-357150818708-us-west-2-website" -> null
-       bucket_key_enabled     = false -> null
-       content_type           = "text/javascript" -> null
-       etag                   = "6a1a1dfafb4705cff64c1a6aa9ea7d59" -> null
-       force_destroy          = false -> null
-       id                     = "dist/js/553.8c6b6bce.js" -> null
-       key                    = "dist/js/553.8c6b6bce.js" -> null
-       metadata               = {} -> null
-       server_side_encryption = "AES256" -> null
-       source                 = "/home/runner/work/usdr-gost/usdr-gost/packages/client/dist/js/553.8c6b6bce.js" -> null
-       source_hash            = "6a1a1dfafb...*[Comment body truncated]*

@sanason sanason force-pushed the 949-recent-activity-fixes branch 2 times, most recently from 6540160 to ea25ba3 Compare February 28, 2024 23:06
@github-actions github-actions bot added the dependencies Pull requests that update a dependency file label Feb 28, 2024
@sanason sanason force-pushed the 949-recent-activity-fixes branch from ea25ba3 to 9fdcdf5 Compare February 29, 2024 01:35
@sanason sanason linked an issue Feb 29, 2024 that may be closed by this pull request
@sanason sanason force-pushed the 949-recent-activity-fixes branch from 9fdcdf5 to 0905fa1 Compare March 5, 2024 16:56
@sanason sanason changed the title Initial commit. Fix local date. Refactor and fix bugs in Recent Activity and Upcoming Closing Dates tables. Mar 5, 2024
@sanason sanason force-pushed the 949-recent-activity-fixes branch from 0905fa1 to 78ba2c9 Compare March 5, 2024 18:55
@sanason sanason marked this pull request as ready for review March 5, 2024 19:02
Copy link
Contributor

@as1729 as1729 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! the code is much more readable with these changes given that they are managed in separate files.

Pagination changes look good as well 👍

@sanason sanason force-pushed the 949-recent-activity-fixes branch from 78ba2c9 to 95d01c4 Compare March 5, 2024 19:39
@@ -112,55 +49,18 @@ export default {
...mapGetters({
grants: 'grants/grants',
grantsInterested: 'grants/grantsInterested',
totalInterestedGrants: 'dashboard/totalInterestedGrants',
totalInterestedGrants: 'grants/totalInterestedGrants',
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The total number of interested grants reported in the pagination control will now come from the total count that is returned from fetchGrantsInterested. Since that's also the call that retrieves the list of interested grants that we are displaying here, it seems to make sense to display the total returned from that call.

Previously, we were displaying the list of interested grants from fetchGrantsInterested but the total count of interested grants from fetchDashboard. Both endpoints count grants that the user's team is interested in - the difference between the endpoints is that fetchGrantsInterested also counts grants that the subteams of the user's team are interested in.

retVal = this.statuses.awarded;
} else if (grantsInterested.interested_name === 'Pending') {
retVal = this.statuses.applied;
} else if (grantsInterested.interested_name === 'Non-award') {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'Non-award' is a case that we weren't handling previously. It now looks like this:

Screenshot 2024-02-28 at 1 20 11 PM

For the icon, I just drew an X over the icon we use for "awarded". I could definitely use a better icon if anyone has a suggestion.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Grants table and the Upcoming Closing Dates table both have logic to determine whether a grant's close date is imminent. I extracted part of the date handling logic into a utility function so that it could be shared.

const rows = await db.getClosestGrants({ agency: req.session.selectedAgency, perPage, currentPage });
res.json(rows);
const { data, pagination } = await db.getClosestGrants({ agency: req.session.selectedAgency, perPage, currentPage });

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We display the names of interested agencies in the "Upcoming Closing Dates" table. Previously, we were retrieving these names by making a series of calls to /grants/:grantId/interested once the /grants/closestGrants call had returned. Now, we'll wrap all of that data fetching into the /grants/closestGrants call itself.

@@ -1066,6 +1066,7 @@ async function getClosestGrants({
.whereIn('grants_interested.agency_id', agencies.map((a) => a.id))
.andWhere('close_date', '>=', timestamp)
.andWhere('interested_codes.status_code', '!=', 'Rejected')
.groupBy('grants.title', 'grants.close_date', 'grants.grant_id')
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This "GROUP BY" has always needed to be here. Without it, a grant will be returned twice if both an agency and its sub-agency are interested in the grant.

@sanason sanason force-pushed the 949-recent-activity-fixes branch 2 times, most recently from e169414 to a9b6909 Compare March 6, 2024 18:00
@sanason sanason force-pushed the 949-recent-activity-fixes branch from a9b6909 to 691a2db Compare March 6, 2024 21:13
@sanason sanason requested a review from as1729 March 6, 2024 21:38
@sanason sanason merged commit 78ace70 into main Mar 6, 2024
19 checks passed
@sanason sanason deleted the 949-recent-activity-fixes branch March 6, 2024 22:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Recent activity should display scrolling list
2 participants