Skip to content
New issue

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

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

Already on GitHub? # to your account

(feat) O3-4078 - Ward App - Simplify patient card configurations #1339

Merged
merged 16 commits into from
Oct 15, 2024

Conversation

chibongho
Copy link
Contributor

@chibongho chibongho commented Oct 10, 2024

Requirements

  • This PR has a title that briefly describes the work done including the ticket number. If there is a ticket, make sure your PR title includes a conventional commit label. See existing PR titles for inspiration.
  • My work conforms to the OpenMRS 3.0 Styleguide and design documentation.
  • My work includes tests or is validated by existing tests.

Summary

See O3-4078 and relevant slack thread.

This refactoring touches a lot of files (sorry), but there is almost no functional change besides how we configure the patient cards.

  • The ward app now only has 1 extension. It is the ward view (containing the metrics header and the beds) at the top level. Right now, we implemented a "default ward" and a "maternal ward", and which ward type we want can be configured by location.
    • Consequently, what used to be extension rows in the patient card (like mother-child-row), are now elements, hence a lot of renaming and moving around their configurations.
  • DefaultWardView and MaternalWardView both define their own data fetching and card rendering. What elements appear in those cards are hard-coded (thus not configurable). If another implementation wants a different looking ward, they will need to make their own WardView. (Currently, they can only make that within the esm ward app).
    • This should be fine in the short term. Longer term, we should have a way for different implementations to create their own esm defining their ward view using the elements / components defined in this esm.
  • Elements in those respective cards can be individually configurable. Each element has an unique id hard-coded in the DefaultWardView or MaternalWardView, and the element configuration requires specifying the id. This means whoever is configuring the elements will need to know what id's are hard-coded into the WardView they want to use.

Most relevant files to review:

  • config-schema.tsx
  • default-ward-view.component.tsx and corresponding default-ward-specific components (DefaultWardBeds, DefaultWardUnassignedPatients, DefaultWardPendingPatients)
  • maternal-ward-view.component.tsx and corresponding maternal-ward-specific components (MaternalWardBeds, MaternalWardUnassignedPatients, MaternalWardPendingPatients)

With this change, the configuration for maternal wards in MCOE is simpler:

"patientCardElements": {
      "obs": [
        {
          "id": "gravida",
          "conceptUuid": "3cee82de-26fe-102b-80cb-0017a47871b2",
          "onlyWithinCurrentVisit": true,
          "orderBy": "descending",
          "limit": 1
        },
        {
          "id": "admission-reason",
          "conceptUuid": "86a2cf11-1ea5-4b8a-9e4b-08f4cdbe1346",
          "onlyWithinCurrentVisit": true,
          "orderBy": "descending",
          "label": "REASON",
          "limit": 1
        }
      ],
      "patientIdentifier": [
        {
          "id": "patient-identifier",
          "identifierTypeUuid": "c09a1d24-7162-11eb-8aa6-0242ac110002",
          "label": ""
        }    
      ],
      "patientAddress": [
        {
          "id": "patient-address",
          "fields": [
            "countyDistrict"
          ]
        }
      ],
      "coloredObsTags": [
        {
          "id": "pregnancy-complications",
          "conceptUuid": "447f14be-4f34-4cba-9f80-8e091e23c6e3",
          "summaryLabel": "Pregnancy Complication(s)",
          "tags": [
            {
              "color": "red",
              "appliedToConceptSets": ["447f14be-4f34-4cba-9f80-8e091e23c6e3"]
            }
          ]
        }
      ],
      "admissionRequestNote": [
        {
          "id": "admission-request-note",
          "conceptUuid": "3cd9d956-26fe-102b-80cb-0017a47871b2"
        }
      ],
      "pendingItems": [
        {
          "id": "pending-items",
          "orders": {
            "orderTypes": [
              {
                "label": "Labs", 
                "uuid": "52a447d3-a64a-11e3-9aeb-50e549534c5e"
              }
            ]
          },
          "showPendingItems": true
        }
      ]
    },
    "wards": [
      {
        "id": "maternal-ward"
      }
    ]

Screenshots

image
image

Related Issue

Other

I introduced a bug with the baby row appearing twice within a mother's patient card sometimes (highlighted in screenshot). I will address that in this ticket.

Copy link
Contributor

github-actions bot commented Oct 10, 2024

Size Change: -119 kB (-1.8%)

Total Size: 6.46 MB

Filename Size Change
packages/esm-ward-app/dist/126.js 0 B -32.2 kB (removed) 🏆
packages/esm-ward-app/dist/161.js 0 B -35.5 kB (removed) 🏆
packages/esm-ward-app/dist/main.js 40.5 kB -28 kB (-40.85%) 🎉
ℹ️ View Unchanged
Filename Size Change
packages/esm-active-visits-app/dist/106.js 8.63 kB 0 B
packages/esm-active-visits-app/dist/130.js 393 kB 0 B
packages/esm-active-visits-app/dist/233.js 3.37 kB 0 B
packages/esm-active-visits-app/dist/271.js 800 B 0 B
packages/esm-active-visits-app/dist/316.js 42.9 kB 0 B
packages/esm-active-visits-app/dist/319.js 712 B 0 B
packages/esm-active-visits-app/dist/325.js 3.09 kB 0 B
packages/esm-active-visits-app/dist/443.js 6.98 kB 0 B
packages/esm-active-visits-app/dist/460.js 824 B 0 B
packages/esm-active-visits-app/dist/574.js 615 B 0 B
packages/esm-active-visits-app/dist/586.js 53.5 kB 0 B
packages/esm-active-visits-app/dist/6.js 26.2 kB 0 B
packages/esm-active-visits-app/dist/644.js 800 B 0 B
packages/esm-active-visits-app/dist/725.js 643 B 0 B
packages/esm-active-visits-app/dist/757.js 731 B 0 B
packages/esm-active-visits-app/dist/784.js 2.63 kB 0 B
packages/esm-active-visits-app/dist/788.js 628 B 0 B
packages/esm-active-visits-app/dist/807.js 959 B 0 B
packages/esm-active-visits-app/dist/814.js 3.04 kB 0 B
packages/esm-active-visits-app/dist/833.js 765 B 0 B
packages/esm-active-visits-app/dist/879.js 3.02 kB 0 B
packages/esm-active-visits-app/dist/967.js 611 B 0 B
packages/esm-active-visits-app/dist/main.js 81.9 kB 0 B
packages/esm-active-visits-app/dist/openmrs-esm-active-visits-app.js 3.32 kB 0 B
packages/esm-appointments-app/dist/130.js 393 kB 0 B
packages/esm-appointments-app/dist/171.js 223 B 0 B
packages/esm-appointments-app/dist/198.js 250 kB 0 B
packages/esm-appointments-app/dist/2.js 2.23 kB 0 B
packages/esm-appointments-app/dist/265.js 1.79 kB 0 B
packages/esm-appointments-app/dist/269.js 7.38 kB 0 B
packages/esm-appointments-app/dist/271.js 2.41 kB 0 B
packages/esm-appointments-app/dist/319.js 2.27 kB 0 B
packages/esm-appointments-app/dist/325.js 3.08 kB 0 B
packages/esm-appointments-app/dist/372.js 2.57 kB 0 B
packages/esm-appointments-app/dist/385.js 31.3 kB 0 B
packages/esm-appointments-app/dist/440.js 16.6 kB 0 B
packages/esm-appointments-app/dist/460.js 2.46 kB 0 B
packages/esm-appointments-app/dist/501.js 7.02 kB 0 B
packages/esm-appointments-app/dist/574.js 2.02 kB 0 B
packages/esm-appointments-app/dist/581.js 9.03 kB 0 B
packages/esm-appointments-app/dist/591.js 16.8 kB 0 B
packages/esm-appointments-app/dist/644.js 2.41 kB 0 B
packages/esm-appointments-app/dist/711.js 129 kB 0 B
packages/esm-appointments-app/dist/757.js 2.39 kB 0 B
packages/esm-appointments-app/dist/784.js 2.62 kB 0 B
packages/esm-appointments-app/dist/788.js 2.02 kB 0 B
packages/esm-appointments-app/dist/807.js 2.65 kB 0 B
packages/esm-appointments-app/dist/833.js 2.37 kB 0 B
packages/esm-appointments-app/dist/903.js 879 B 0 B
packages/esm-appointments-app/dist/main.js 396 kB 0 B
packages/esm-appointments-app/dist/openmrs-esm-appointments-app.js 3.56 kB 0 B
packages/esm-bed-management-app/dist/130.js 393 kB 0 B
packages/esm-bed-management-app/dist/148.js 1.22 kB 0 B
packages/esm-bed-management-app/dist/169.js 6.98 kB 0 B
packages/esm-bed-management-app/dist/271.js 671 B 0 B
packages/esm-bed-management-app/dist/319.js 786 B 0 B
packages/esm-bed-management-app/dist/325.js 3.09 kB 0 B
packages/esm-bed-management-app/dist/339.js 50.2 kB 0 B
packages/esm-bed-management-app/dist/455.js 26.5 kB 0 B
packages/esm-bed-management-app/dist/460.js 671 B 0 B
packages/esm-bed-management-app/dist/501.js 7.03 kB 0 B
packages/esm-bed-management-app/dist/542.js 395 B 0 B
packages/esm-bed-management-app/dist/574.js 672 B 0 B
packages/esm-bed-management-app/dist/591.js 16.8 kB 0 B
packages/esm-bed-management-app/dist/644.js 671 B 0 B
packages/esm-bed-management-app/dist/757.js 814 B 0 B
packages/esm-bed-management-app/dist/766.js 113 kB 0 B
packages/esm-bed-management-app/dist/784.js 2.63 kB 0 B
packages/esm-bed-management-app/dist/788.js 671 B 0 B
packages/esm-bed-management-app/dist/807.js 671 B 0 B
packages/esm-bed-management-app/dist/833.js 671 B 0 B
packages/esm-bed-management-app/dist/main.js 3.87 kB 0 B
packages/esm-bed-management-app/dist/openmrs-esm-bed-management-app.js 3.25 kB 0 B
packages/esm-patient-list-management-app/dist/130.js 393 kB 0 B
packages/esm-patient-list-management-app/dist/233.js 3.38 kB 0 B
packages/esm-patient-list-management-app/dist/271.js 1.57 kB 0 B
packages/esm-patient-list-management-app/dist/319.js 1.51 kB 0 B
packages/esm-patient-list-management-app/dist/325.js 3.09 kB 0 B
packages/esm-patient-list-management-app/dist/37.js 12.5 kB 0 B
packages/esm-patient-list-management-app/dist/443.js 6.98 kB 0 B
packages/esm-patient-list-management-app/dist/455.js 58.1 kB 0 B
packages/esm-patient-list-management-app/dist/460.js 1.71 kB 0 B
packages/esm-patient-list-management-app/dist/574.js 1.34 kB 0 B
packages/esm-patient-list-management-app/dist/591.js 16.9 kB 0 B
packages/esm-patient-list-management-app/dist/644.js 1.57 kB 0 B
packages/esm-patient-list-management-app/dist/658.js 102 kB 0 B
packages/esm-patient-list-management-app/dist/757.js 1.62 kB 0 B
packages/esm-patient-list-management-app/dist/784.js 2.63 kB 0 B
packages/esm-patient-list-management-app/dist/788.js 1.33 kB 0 B
packages/esm-patient-list-management-app/dist/807.js 1.84 kB 0 B
packages/esm-patient-list-management-app/dist/814.js 3.05 kB 0 B
packages/esm-patient-list-management-app/dist/833.js 1.59 kB 0 B
packages/esm-patient-list-management-app/dist/main.js 162 kB 0 B
packages/esm-patient-list-management-app/dist/openmrs-esm-patient-list-management-app.js 3.3 kB 0 B
packages/esm-patient-registration-app/dist/130.js 393 kB 0 B
packages/esm-patient-registration-app/dist/169.js 6.71 kB 0 B
packages/esm-patient-registration-app/dist/2.js 2.24 kB 0 B
packages/esm-patient-registration-app/dist/250.js 526 B 0 B
packages/esm-patient-registration-app/dist/271.js 2.48 kB 0 B
packages/esm-patient-registration-app/dist/319.js 2.38 kB 0 B
packages/esm-patient-registration-app/dist/325.js 3.09 kB 0 B
packages/esm-patient-registration-app/dist/371.js 547 B 0 B
packages/esm-patient-registration-app/dist/372.js 2.57 kB 0 B
packages/esm-patient-registration-app/dist/460.js 2.46 kB 0 B
packages/esm-patient-registration-app/dist/501.js 7.03 kB 0 B
packages/esm-patient-registration-app/dist/574.js 2.09 kB 0 B
packages/esm-patient-registration-app/dist/591.js 16.8 kB 0 B
packages/esm-patient-registration-app/dist/644.js 2.48 kB 0 B
packages/esm-patient-registration-app/dist/662.js 453 B 0 B
packages/esm-patient-registration-app/dist/700.js 69.8 kB 0 B
packages/esm-patient-registration-app/dist/757.js 2.51 kB 0 B
packages/esm-patient-registration-app/dist/784.js 2.63 kB 0 B
packages/esm-patient-registration-app/dist/788.js 2.09 kB 0 B
packages/esm-patient-registration-app/dist/807.js 2.71 kB 0 B
packages/esm-patient-registration-app/dist/833.js 2.36 kB 0 B
packages/esm-patient-registration-app/dist/879.js 3.03 kB 0 B
packages/esm-patient-registration-app/dist/998.js 67.2 kB 0 B
packages/esm-patient-registration-app/dist/main.js 137 kB 0 B
packages/esm-patient-registration-app/dist/openmrs-esm-patient-registration-app.js 3.34 kB 0 B
packages/esm-patient-search-app/dist/130.js 393 kB 0 B
packages/esm-patient-search-app/dist/233.js 3.37 kB 0 B
packages/esm-patient-search-app/dist/271.js 920 B 0 B
packages/esm-patient-search-app/dist/319.js 861 B 0 B
packages/esm-patient-search-app/dist/325.js 3.09 kB 0 B
packages/esm-patient-search-app/dist/335.js 25.1 kB 0 B
packages/esm-patient-search-app/dist/443.js 6.98 kB 0 B
packages/esm-patient-search-app/dist/460.js 939 B 0 B
packages/esm-patient-search-app/dist/574.js 742 B 0 B
packages/esm-patient-search-app/dist/591.js 16.8 kB 0 B
packages/esm-patient-search-app/dist/634.js 52 kB 0 B
packages/esm-patient-search-app/dist/644.js 920 B 0 B
packages/esm-patient-search-app/dist/757.js 888 B 0 B
packages/esm-patient-search-app/dist/784.js 2.63 kB 0 B
packages/esm-patient-search-app/dist/788.js 736 B 0 B
packages/esm-patient-search-app/dist/807.js 1.04 kB 0 B
packages/esm-patient-search-app/dist/814.js 3.05 kB 0 B
packages/esm-patient-search-app/dist/833.js 877 B 0 B
packages/esm-patient-search-app/dist/main.js 77.9 kB 0 B
packages/esm-patient-search-app/dist/openmrs-esm-patient-search-app.js 3.29 kB 0 B
packages/esm-service-queues-app/dist/130.js 393 kB 0 B
packages/esm-service-queues-app/dist/169.js 6.98 kB 0 B
packages/esm-service-queues-app/dist/199.js 1.36 kB 0 B
packages/esm-service-queues-app/dist/2.js 2.23 kB 0 B
packages/esm-service-queues-app/dist/236.js 5.84 kB 0 B
packages/esm-service-queues-app/dist/271.js 4.6 kB 0 B
packages/esm-service-queues-app/dist/282.js 8.97 kB 0 B
packages/esm-service-queues-app/dist/319.js 4.35 kB 0 B
packages/esm-service-queues-app/dist/325.js 3.09 kB 0 B
packages/esm-service-queues-app/dist/366.js 7.86 kB 0 B
packages/esm-service-queues-app/dist/372.js 2.57 kB 0 B
packages/esm-service-queues-app/dist/392.js 7.85 kB 0 B
packages/esm-service-queues-app/dist/460.js 4.82 kB 0 B
packages/esm-service-queues-app/dist/501.js 7.03 kB 0 B
packages/esm-service-queues-app/dist/574.js 3.88 kB 0 B
packages/esm-service-queues-app/dist/591.js 16.8 kB 0 B
packages/esm-service-queues-app/dist/6.js 1.75 kB 0 B
packages/esm-service-queues-app/dist/60.js 1.82 kB 0 B
packages/esm-service-queues-app/dist/604.js 6.96 kB 0 B
packages/esm-service-queues-app/dist/644.js 4.6 kB 0 B
packages/esm-service-queues-app/dist/665.js 160 kB 0 B
packages/esm-service-queues-app/dist/670.js 10.1 kB 0 B
packages/esm-service-queues-app/dist/727.js 8.1 kB 0 B
packages/esm-service-queues-app/dist/748.js 116 kB 0 B
packages/esm-service-queues-app/dist/752.js 1.62 kB 0 B
packages/esm-service-queues-app/dist/757.js 4.74 kB 0 B
packages/esm-service-queues-app/dist/760.js 7.13 kB 0 B
packages/esm-service-queues-app/dist/784.js 2.63 kB 0 B
packages/esm-service-queues-app/dist/788.js 3.89 kB 0 B
packages/esm-service-queues-app/dist/800.js 1.68 kB 0 B
packages/esm-service-queues-app/dist/807.js 5.17 kB 0 B
packages/esm-service-queues-app/dist/818.js 2.55 kB 0 B
packages/esm-service-queues-app/dist/828.js 1.39 kB 0 B
packages/esm-service-queues-app/dist/833.js 4.5 kB 0 B
packages/esm-service-queues-app/dist/911.js 7.76 kB 0 B
packages/esm-service-queues-app/dist/940.js 21.4 kB 0 B
packages/esm-service-queues-app/dist/main.js 276 kB 0 B
packages/esm-service-queues-app/dist/openmrs-esm-service-queues-app.js 3.31 kB 0 B
packages/esm-ward-app/dist/109.js 344 B 0 B
packages/esm-ward-app/dist/124.js 2.67 kB 0 B
packages/esm-ward-app/dist/125.js 5.5 kB -224 B (-3.91%)
packages/esm-ward-app/dist/130.js 393 kB 0 B
packages/esm-ward-app/dist/146.js 709 B 0 B
packages/esm-ward-app/dist/15.js 482 B 0 B
packages/esm-ward-app/dist/153.js 33.2 kB 0 B
packages/esm-ward-app/dist/169.js 6.97 kB 0 B
packages/esm-ward-app/dist/2.js 0 B -2.23 kB (removed) 🏆
packages/esm-ward-app/dist/269.js 0 B -829 B (removed) 🏆
packages/esm-ward-app/dist/304.js 5.69 kB 0 B
packages/esm-ward-app/dist/325.js 3.08 kB 0 B
packages/esm-ward-app/dist/348.js 349 B 0 B
packages/esm-ward-app/dist/372.js 2.56 kB -1 B (-0.04%)
packages/esm-ward-app/dist/466.js 0 B -393 B (removed) 🏆
packages/esm-ward-app/dist/471.js 6.87 kB 0 B
packages/esm-ward-app/dist/481.js 1.43 kB 0 B
packages/esm-ward-app/dist/500.js 0 B -5 kB (removed) 🏆
packages/esm-ward-app/dist/501.js 7.02 kB 0 B
packages/esm-ward-app/dist/53.js 11.4 kB +17 B (+0.15%)
packages/esm-ward-app/dist/557.js 0 B -486 B (removed) 🏆
packages/esm-ward-app/dist/559.js 393 B +67 B (+20.55%) 🚨
packages/esm-ward-app/dist/574.js 1.51 kB +40 B (+2.72%)
packages/esm-ward-app/dist/576.js 5.06 kB 0 B
packages/esm-ward-app/dist/577.js 17.9 kB -95 B (-0.53%)
packages/esm-ward-app/dist/591.js 16.8 kB 0 B
packages/esm-ward-app/dist/659.js 10 kB +29 B (+0.29%)
packages/esm-ward-app/dist/67.js 33.2 kB 0 B
packages/esm-ward-app/dist/701.js 0 B -3.49 kB (removed) 🏆
packages/esm-ward-app/dist/749.js 0 B -8.18 kB (removed) 🏆
packages/esm-ward-app/dist/767.js 648 B 0 B
packages/esm-ward-app/dist/784.js 2.62 kB 0 B
packages/esm-ward-app/dist/850.js 3.01 kB 0 B
packages/esm-ward-app/dist/908.js 0 B -1.97 kB (removed) 🏆
packages/esm-ward-app/dist/922.js 9.28 kB -88 B (-0.94%)
packages/esm-ward-app/dist/940.js 21.4 kB 0 B
packages/esm-ward-app/dist/969.js 202 B 0 B
packages/esm-ward-app/dist/openmrs-esm-ward-app.js 3.29 kB -3 B (-0.09%)

compressed-size-action

Copy link
Member

@mogoodrich mogoodrich left a comment

Choose a reason for hiding this comment

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

Thanks for slogging through this, @chibongho ! Yeah, I didn't make it 100% through this, but generally looks good and I agreed with the strategy based on our discussion earlier this week about this.

identifierElementDefinitions: Array<IdentifierElementDefinition>;
addressElementDefinitions: Array<AddressElementDefinition>;
cardDefinitions: Array<WardPatientCardDefinition>;
patientCardElements: {
Copy link
Member

Choose a reason for hiding this comment

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

Potential rabbit-hole... I guess I was thinking that each WardView would have it's own config object? When we get to the point where a custom WardView can be defined outside the Ward App ESM, is there a way for the developers of new Ward Views to define new config parameters without adding to the Ward View config? (For discussion, let's not let this be a blocker for merging)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

For a custom WardView outside this ESM, it can have patient cards with a mixture of elements defined in this ESM and outside it. I think ideally we'd have the elements configurations be tied to whichever ESM it's defined in. We'll want to be careful as what useConfig() returns is dependent on which ESM / extension the component is in. I haven't done something like this before, but it feels doable.

obsElementDefinitions: {
patientCardElements: {
_description:
'Configuration of various patient card elements. Each configured element must have an unique id, defined in the ward React component being used.',
Copy link
Member

Choose a reason for hiding this comment

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

Fixing some small grammar:
Configuration of various patient card elements. Each configured element must have a unique id, defined in the ward React component being used.

Copy link
Member

Choose a reason for hiding this comment

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

If we could have a way to automatically generate the keys, it would significantly reduce the risk of human error.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

If we could have a way to automatically generate the keys, it would significantly reduce the risk of human error.

This might be difficult, with how the ward view can be an extension outside the ward app.

_type: Type.Array,
_description: `Defines patient identifier elements that can be included in the card header or footer. The default element 'patient-identifier' displays the preferred identifier.`,
_description: `Configures patient identifier to display. An unconfigured element displays the preferred identifier.`,
_default: [
Copy link
Member

Choose a reason for hiding this comment

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

looks like the _default should be an empty array, provided the default object passed is missing some keys i.e identifierTypeUuid

}

export interface PendingItemsDefinition {
export interface PendingItemsElementConfig {
Copy link
Member

Choose a reason for hiding this comment

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

I think you missed the id here.

id: string;
fields: Array<AddressField>;
}

export interface WardPatientCardDefinition {
export interface AdmissionRequestNoteElementConfig {
Copy link
Member

Choose a reason for hiding this comment

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

Same here, id was missed.

@usamaidrsk
Copy link
Member

Thanks @chibongho , I have a few comments.
All in all great work, and thanks for the tests!

@chibongho
Copy link
Contributor Author

Thanks @chibongho , I have a few comments. All in all great work, and thanks for the tests!

Thanks for the comments. I was getting a bit sloppy with the config documentations.

I'm going to merge this in. Post-hoc comments welcome.

@chibongho chibongho merged commit f0e6659 into main Oct 15, 2024
6 checks passed
@chibongho chibongho deleted the refactor-card branch October 15, 2024 14:44
@denniskigen denniskigen mentioned this pull request Dec 17, 2024
3 tasks
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants