diff --git a/README.md b/README.md index 002afc979bc..7f2c3e926bd 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=coronasafe_care_fe&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=coronasafe_care_fe) ![Code scanning - action](https://github.com/coronasafe/care_fe/workflows/Code%20scanning%20-%20action/badge.svg) ![OSSAR](https://github.com/coronasafe/care_fe/workflows/OSSAR/badge.svg) -[![Cypress Tests](https://github.com/coronasafe/care_fe/actions/workflows/cypress.yaml/badge.svg)](https://github.com/coronasafe/care_fe/actions/workflows/cypress.yaml) +[![Cypress Tests](https://img.shields.io/endpoint?url=https://cloud.cypress.io/badge/simple/wf7d2m/develop&style=flat&logo=cypress)](https://cloud.cypress.io/projects/wf7d2m/runs) ![Staging Release](https://github.com/coronasafe/care_fe/workflows/CARE%20Develop%20Registry/badge.svg) ![Production Release](https://github.com/coronasafe/care_fe/workflows/Production%20Release/badge.svg) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/200482ab117e4b5397ff3f5ae5719aa2)](https://www.codacy.com/gh/coronasafe/care_fe?utm_source=github.com&utm_medium=referral&utm_content=coronasafe/care_fe&utm_campaign=Badge_Grade) @@ -50,7 +50,7 @@ Once the development server has started, open [localhost:4000](http://localhost: Authenticate to staging API with any of the following credentials ```yaml -- username: devdistrictadmin +- username: dev-districtadmin password: Coronasafe@123 role: District Admin diff --git a/cypress/e2e/facility_spec/facility.cy.ts b/cypress/e2e/facility_spec/facility.cy.ts deleted file mode 100644 index da06c65ed53..00000000000 --- a/cypress/e2e/facility_spec/facility.cy.ts +++ /dev/null @@ -1,82 +0,0 @@ -// FacilityCreation -import { cy, describe, before, beforeEach, it, afterEach } from "local-cypress"; -import FacilityPage from "../../pageobject/Facility/FacilityCreation"; -import LoginPage from "../../pageobject/Login/LoginPage"; - -describe("Facility Creation", () => { - let facilityUrl: string; - const facilityPage = new FacilityPage(); - const loginPage = new LoginPage(); - - before(() => { - loginPage.loginAsDisctrictAdmin(); - cy.saveLocalStorage(); - }); - - beforeEach(() => { - cy.viewport(1280, 720); - cy.restoreLocalStorage(); - cy.awaitUrl("/facility"); - }); - - it("Create a new facility", () => { - facilityPage.visitCreateFacilityPage(); - facilityPage.fillFacilityName("cypress facility"); - facilityPage.fillPincode("682001"); - facilityPage.selectState("Kerala"); - facilityPage.selectDistrict("Ernakulam"); - facilityPage.selectLocalBody("Aluva"); - facilityPage.selectWard("4"); - facilityPage.fillAddress("Cypress Address"); - facilityPage.fillPhoneNumber("9898469865"); - facilityPage.submitForm(); - - facilityPage.selectBedType("Oxygen beds"); - facilityPage.fillTotalCapacity("10"); - facilityPage.fillCurrentlyOccupied("5"); - facilityPage.saveAndExitBedCapacityForm(); - - facilityPage.selectAreaOfSpecialization("General Medicine"); - facilityPage.fillDoctorCount("5"); - facilityPage.saveAndExitDoctorForm(); - facilityPage.verifyfacilitynewurl(); - cy.url().then((newUrl) => { - facilityUrl = newUrl; - }); - }); - - it("Update the existing facility", () => { - facilityPage.visitUpdateFacilityPage(facilityUrl); - facilityPage.clickManageFacilityDropdown(); - facilityPage.clickUpdateFacilityOption(); - facilityPage.clickUpdateFacilityType("Request Approving Center"); - facilityPage.fillFacilityName("cypress facility updated"); - facilityPage.fillAddress("Cypress Facility Updated Address"); - facilityPage.fillOxygenCapacity("100"); - facilityPage.fillExpectedOxygenRequirement("80"); - facilityPage.selectLocation("Kochi, Kerala"); - facilityPage.submitForm(); - - cy.url().should("not.include", "/update"); - }); - - it("Configure the existing facility", () => { - facilityPage.visitUpdateFacilityPage(facilityUrl); - facilityPage.clickManageFacilityDropdown(); - facilityPage.clickConfigureFacilityOption(); - facilityPage.fillMiddleWareAddress("dev_middleware.coronasafe.live"); - facilityPage.clickupdateMiddleWare(); - facilityPage.verifySuccessNotification("Facility updated successfully"); - }); - - it("Delete a facility", () => { - facilityPage.visitUpdateFacilityPage(facilityUrl); - facilityPage.clickManageFacilityDropdown(); - facilityPage.clickDeleteFacilityOption(); - facilityPage.confirmDeleteFacility(); - }); - - afterEach(() => { - cy.saveLocalStorage(); - }); -}); diff --git a/cypress/e2e/facility_spec/facility_creation.cy.ts b/cypress/e2e/facility_spec/facility_creation.cy.ts new file mode 100644 index 00000000000..cc2d1b7f921 --- /dev/null +++ b/cypress/e2e/facility_spec/facility_creation.cy.ts @@ -0,0 +1,304 @@ +// FacilityCreation +import { cy, describe, before, beforeEach, it, afterEach } from "local-cypress"; +import FacilityPage from "../../pageobject/Facility/FacilityCreation"; +import LoginPage from "../../pageobject/Login/LoginPage"; +import FacilityHome from "../../pageobject/Facility/FacilityHome"; +import ManageUserPage from "../../pageobject/Users/ManageUserPage"; +import { UserCreationPage } from "../../pageobject/Users/UserCreation"; + +describe("Facility Creation", () => { + let facilityUrl1: string; + const facilityPage = new FacilityPage(); + const loginPage = new LoginPage(); + const facilityHome = new FacilityHome(); + const manageUserPage = new ManageUserPage(); + const userCreationPage = new UserCreationPage(); + const facilityFeature = [ + "CT Scan", + "X-Ray", + "Maternity Care", + "Neonatal Care", + "Operation Theater", + "Blood Bank", + ]; + const bedCapacity = "10"; + const bedOccupancy = "5"; + const oxygenCapacity = "100"; + const oxygenExpected = "80"; + const totalCapacity = "20"; + const totalOccupancy = "10"; + const doctorCapacity = "5"; + const totalDoctor = "10"; + const facilityName = "cypress facility"; + const facilityName2 = "Dummy Facility 1"; + const facilityAddress = "cypress address"; + const facilityUpdateAddress = "cypress updated address"; + const facilityNumber = "9898469865"; + const triageDate = "02122023"; + const initialTriageValue = "60"; + const modifiedTriageValue = "50"; + const facilityErrorMessage = [ + "Required", + "Invalid Pincode", + "Required", + "Required", + "Required", + "Required", + "Required", + "Required", + "Invalid Phone Number", + ]; + const bedErrorMessage = [ + "Field is required", + "Total capacity cannot be 0", + "Field is required", + ]; + const doctorErrorMessage = ["Field is required", "Field is required"]; + const triageErrorMessage = ["Field is required"]; + + before(() => { + loginPage.loginAsDisctrictAdmin(); + cy.saveLocalStorage(); + }); + + beforeEach(() => { + cy.viewport(1280, 720); + cy.restoreLocalStorage(); + cy.awaitUrl("/facility"); + }); + + it("Verify Facility Triage Function", () => { + // mandatory field error throw + manageUserPage.typeFacilitySearch(facilityName2); + facilityPage.verifyFacilityBadgeContent(facilityName2); + manageUserPage.assertFacilityInCard(facilityName2); + facilityHome.verifyURLContains(facilityName2); + facilityPage.visitAlreadyCreatedFacility(); + facilityPage.scrollToFacilityTriage(); + facilityPage.clickAddFacilityTriage(); + manageUserPage.clickSubmit(); + userCreationPage.verifyErrorMessages(triageErrorMessage); + // create a entry and verify reflection + facilityPage.fillEntryDate(triageDate); + facilityPage.fillTriageEntryFields( + initialTriageValue, + initialTriageValue, + initialTriageValue, + initialTriageValue, + initialTriageValue + ); + manageUserPage.clickSubmit(); + // edit the entry and verify reflection + facilityPage.scrollToFacilityTriage(); + facilityPage.verifyTriageTableContains(initialTriageValue); + facilityPage.clickEditButton(); + facilityPage.fillTriageEntryFields( + modifiedTriageValue, + modifiedTriageValue, + modifiedTriageValue, + modifiedTriageValue, + modifiedTriageValue + ); + manageUserPage.clickSubmit(); + facilityPage.scrollToFacilityTriage(); + facilityPage.verifyTriageTableContains(modifiedTriageValue); + // validate error of filling data on same date already data exist and verify reflection + facilityPage.scrollToFacilityTriage(); + facilityPage.clickAddFacilityTriage(); + facilityPage.fillEntryDate(triageDate); + facilityPage.clickButtonsMultipleTimes("button#submit"); + }); + + it("Create a new facility with multiple bed and doctor capacity", () => { + // create facility with multiple capacity and verify form error message for facility form + facilityPage.visitCreateFacilityPage(); + facilityPage.submitForm(); + userCreationPage.verifyErrorMessages(facilityErrorMessage); + facilityPage.fillFacilityName(facilityName); + facilityPage.clickfacilityfeatureoption(); + facilityFeature.forEach((featureText) => { + cy.get("[role='option']").contains(featureText).click(); + }); + facilityPage.fillPincode("682001"); + facilityPage.selectLocalBody("Aluva"); + facilityPage.selectWard("4"); + facilityPage.fillAddress(facilityAddress); + facilityPage.fillPhoneNumber(facilityNumber); + facilityPage.fillOxygenCapacity(oxygenCapacity); + facilityPage.fillExpectedOxygenRequirement(oxygenExpected); + facilityPage.fillBTypeCylinderCapacity(oxygenCapacity); + facilityPage.fillExpectedBTypeCylinderRequirement(oxygenExpected); + facilityPage.fillCTypeCylinderCapacity(oxygenCapacity); + facilityPage.fillExpectedCTypeCylinderRequirement(oxygenExpected); + facilityPage.fillDTypeCylinderCapacity(oxygenCapacity); + facilityPage.fillExpectedDTypeCylinderRequirement(oxygenExpected); + facilityPage.selectLocation("Kochi, Kerala"); + facilityPage.submitForm(); + // create multiple bed capacity and verify card reflection + facilityPage.selectBedType("Oxygen beds"); + facilityPage.fillTotalCapacity(bedCapacity); + facilityPage.fillCurrentlyOccupied(bedOccupancy); + facilityPage.clickbedcapcityaddmore(); + facilityPage.selectBedType("Ordinary Bed"); + facilityPage.fillTotalCapacity(bedCapacity); + facilityPage.fillCurrentlyOccupied(bedOccupancy); + facilityPage.clickbedcapcityaddmore(); + facilityPage.getTotalBedCapacity().contains(totalCapacity); + facilityPage.getTotalBedCapacity().contains(totalOccupancy); + facilityPage.clickcancelbutton(); + // create multiple bed capacity and verify card reflection + facilityPage.selectAreaOfSpecialization("General Medicine"); + facilityPage.fillDoctorCount(doctorCapacity); + facilityPage.clickdoctorcapacityaddmore(); + facilityPage.selectAreaOfSpecialization("Pulmonology"); + facilityPage.fillDoctorCount(doctorCapacity); + facilityPage.clickdoctorcapacityaddmore(); + facilityPage.getTotalDoctorCapacity().contains(doctorCapacity); + facilityPage.clickcancelbutton(); + facilityPage.verifyfacilitynewurl(); + // verify the facility card + facilityPage.getFacilityName().contains(facilityName).should("be.visible"); + facilityPage + .getAddressDetailsView() + .contains(facilityAddress) + .should("be.visible"); + facilityPage + .getPhoneNumberView() + .contains(facilityNumber) + .should("be.visible"); + facilityPage + .getFacilityAvailableFeatures() + .invoke("text") + .then((text) => { + facilityFeature.forEach((feature) => { + expect(text).to.contain(feature); + }); + }); + facilityPage.getFacilityOxygenInfo().scrollIntoView(); + facilityPage + .getFacilityOxygenInfo() + .contains(oxygenCapacity) + .should("be.visible"); + facilityPage.getFacilityTotalBedCapacity().scrollIntoView(); + facilityPage.getFacilityTotalBedCapacity().contains(totalCapacity); + facilityPage.getFacilityTotalBedCapacity().contains(totalOccupancy); + facilityPage.getFacilityTotalDoctorCapacity().scrollIntoView(); + facilityPage.getFacilityTotalDoctorCapacity().contains(totalDoctor); + }); + + it("Create a new facility with single bed and doctor capacity", () => { + facilityPage.visitCreateFacilityPage(); + facilityPage.fillFacilityName(facilityName); + facilityPage.fillPincode("682001"); + facilityPage.selectLocalBody("Aluva"); + facilityPage.selectWard("4"); + facilityPage.fillAddress(facilityAddress); + facilityPage.fillPhoneNumber(facilityNumber); + facilityPage.submitForm(); + // add the bed capacity + facilityPage.selectBedType("Oxygen beds"); + facilityPage.fillTotalCapacity(oxygenCapacity); + facilityPage.fillCurrentlyOccupied(oxygenExpected); + facilityPage.saveAndExitBedCapacityForm(); + // add the doctor capacity + facilityPage.selectAreaOfSpecialization("General Medicine"); + facilityPage.fillDoctorCount(doctorCapacity); + facilityPage.saveAndExitDoctorForm(); + facilityPage.verifyfacilitynewurl(); + // verify the created facility details + facilityPage.getFacilityName().contains(facilityName).should("be.visible"); + facilityPage + .getAddressDetailsView() + .contains(facilityAddress) + .should("be.visible"); + facilityPage + .getPhoneNumberView() + .contains(facilityNumber) + .should("be.visible"); + // verify the facility homepage + cy.visit("/facility"); + manageUserPage.typeFacilitySearch(facilityName); + facilityPage.verifyFacilityBadgeContent(facilityName); + manageUserPage.assertFacilityInCard(facilityName); + facilityHome.verifyURLContains(facilityName); + }); + + it("Create a new facility with no bed and doctor capacity", () => { + facilityPage.visitCreateFacilityPage(); + facilityPage.fillFacilityName(facilityName); + facilityPage.fillPincode("682001"); + facilityPage.selectLocalBody("Aluva"); + facilityPage.selectWard("4"); + facilityPage.fillAddress(facilityAddress); + facilityPage.fillPhoneNumber(facilityNumber); + facilityPage.submitForm(); + // add no bed capacity and verify form error message + facilityPage.isVisibleselectBedType(); + facilityPage.saveAndExitBedCapacityForm(); + userCreationPage.verifyErrorMessages(bedErrorMessage); + facilityPage.clickcancelbutton(); + // add no doctor capacity and verify form error message + facilityPage.isVisibleAreaOfSpecialization(); + facilityPage.clickdoctorcapacityaddmore(); + userCreationPage.verifyErrorMessages(doctorErrorMessage); + facilityPage.clickcancelbutton(); + cy.url().then((newUrl) => { + facilityUrl1 = newUrl; + }); + // verify the created facility details + facilityPage.getFacilityName().contains(facilityName).should("be.visible"); + facilityPage + .getAddressDetailsView() + .contains(facilityAddress) + .should("be.visible"); + facilityPage + .getPhoneNumberView() + .contains(facilityNumber) + .should("be.visible"); + }); + + it("Update the existing facility", () => { + // update a existing dummy data facility + facilityPage.visitUpdateFacilityPage(facilityUrl1); + facilityPage.clickManageFacilityDropdown(); + facilityPage.clickUpdateFacilityOption(); + facilityPage.clickUpdateFacilityType("Govt Hospital"); + facilityPage.fillAddress(facilityUpdateAddress); + facilityPage.fillOxygenCapacity(oxygenCapacity); + facilityPage.fillExpectedOxygenRequirement(oxygenExpected); + facilityPage.selectLocation("Kochi, Kerala"); + facilityPage.submitForm(); + cy.url().should("not.include", "/update"); + // verify the updated data + facilityPage.getFacilityOxygenInfo().scrollIntoView(); + facilityPage + .getFacilityOxygenInfo() + .contains(oxygenCapacity) + .should("be.visible"); + facilityPage.getAddressDetailsView().scrollIntoView(); + facilityPage + .getAddressDetailsView() + .contains(facilityUpdateAddress) + .should("be.visible"); + }); + + it("Configure the existing facility", () => { + facilityPage.visitUpdateFacilityPage(facilityUrl1); + facilityPage.clickManageFacilityDropdown(); + facilityPage.clickConfigureFacilityOption(); + facilityPage.fillMiddleWareAddress("dev_middleware.coronasafe.live"); + facilityPage.clickupdateMiddleWare(); + facilityPage.verifySuccessNotification("Facility updated successfully"); + }); + + it("Delete a facility", () => { + facilityPage.visitUpdateFacilityPage(facilityUrl1); + facilityPage.clickManageFacilityDropdown(); + facilityPage.clickDeleteFacilityOption(); + facilityPage.confirmDeleteFacility(); + }); + + afterEach(() => { + cy.saveLocalStorage(); + }); +}); diff --git a/cypress/pageobject/Facility/FacilityCreation.ts b/cypress/pageobject/Facility/FacilityCreation.ts index 8c20b808c98..c13f5beac8e 100644 --- a/cypress/pageobject/Facility/FacilityCreation.ts +++ b/cypress/pageobject/Facility/FacilityCreation.ts @@ -70,6 +70,10 @@ class FacilityPage { cy.get("[role='option']").contains(bedType).click(); } + isVisibleselectBedType() { + cy.get("div#bed-type button").should("be.visible"); + } + fillTotalCapacity(capacity: string) { cy.get("input#total-capacity").click().type(capacity); } @@ -87,6 +91,10 @@ class FacilityPage { cy.get("[role='option']").contains(area).click(); } + isVisibleAreaOfSpecialization() { + cy.get("div#area-of-specialization button").should("be.visible"); + } + fillDoctorCount(count: string) { cy.get("input#count").click().type(count); } @@ -99,6 +107,33 @@ class FacilityPage { cy.get("#expected_oxygen_requirement").click().clear().type(requirement); } + fillBTypeCylinderCapacity(capacity: string) { + cy.get("#type_b_cylinders").click().clear().type(capacity); + } + + fillExpectedBTypeCylinderRequirement(requirement: string) { + cy.get("#expected_type_b_cylinders").focus().clear(); + cy.get("#expected_type_b_cylinders").focus().type(requirement); + } + + fillCTypeCylinderCapacity(capacity: string) { + cy.get("#type_c_cylinders").click().clear().type(capacity); + } + + fillExpectedCTypeCylinderRequirement(requirement: string) { + cy.get("#expected_type_c_cylinders").focus().clear(); + cy.get("#expected_type_c_cylinders").focus().type(requirement); + } + + fillDTypeCylinderCapacity(capacity: string) { + cy.get("#type_d_cylinders").click().clear().type(capacity); + } + + fillExpectedDTypeCylinderRequirement(requirement: string) { + cy.get("#expected_type_d_cylinders").focus().clear(); + cy.get("#expected_type_d_cylinders").focus().type(requirement); + } + saveAndExitDoctorForm() { cy.intercept("GET", "**/api/v1/facility/**").as("createFacilities"); cy.get("button#save-and-exit").click(); @@ -138,6 +173,42 @@ class FacilityPage { cy.get("#inventory-management").click(); } + getTotalBedCapacity() { + return cy.get("#total-bed-capacity"); + } + + getFacilityTotalBedCapacity() { + return cy.get("#facility-bed-capacity-details"); + } + + getFacilityTotalDoctorCapacity() { + return cy.get("#facility-doctor-capacity-details"); + } + + getTotalDoctorCapacity() { + return cy.get("#total-doctor-capacity"); + } + + getFacilityName() { + return cy.get("#facility-name"); + } + + getAddressDetailsView() { + return cy.get("#address-details-view"); + } + + getPhoneNumberView() { + return cy.get("#phone-number-view"); + } + + getFacilityAvailableFeatures() { + return cy.get("#facility-available-features"); + } + + getFacilityOxygenInfo() { + return cy.get("#facility-oxygen-info"); + } + clickResourceRequestOption() { cy.get("#resource-request").contains("Resource Request").click(); } @@ -146,6 +217,69 @@ class FacilityPage { cy.get("#delete-facility").contains("Delete Facility").click(); } + scrollToFacilityTriage() { + cy.get("#add-facility-triage").scrollIntoView(); + } + + fillTriageEntryFields( + visited, + homeQuarantine, + isolation, + referred, + confirmedPositive + ) { + cy.get("#num_patients_visited").clear().click().type(visited); + cy.get("#num_patients_home_quarantine") + .clear() + .click() + .type(homeQuarantine); + cy.get("#num_patients_isolation").clear().click().type(isolation); + cy.get("#num_patient_referred").clear().click().type(referred); + cy.get("#num_patient_confirmed_positive") + .clear() + .click() + .type(confirmedPositive); + } + + fillEntryDate(date) { + cy.get("#entry_date").click(); + cy.get("#date-input").click().type(date); + } + + clickEditButton() { + cy.get("#edit-button").click(); + } + + clickButtonsMultipleTimes(selector) { + cy.get(selector).each(($button) => { + cy.wrap($button).click(); + }); + } + + verifyTriageTableContains(value) { + cy.get("#triage-table").contains(value); + } + + clickAddFacilityTriage() { + cy.get("#add-facility-triage").click(); + } + + clickfacilityfeatureoption() { + cy.get("#features").click(); + } + + clickbedcapcityaddmore() { + cy.get("#bed-capacity-save").click(); + } + + clickdoctorcapacityaddmore() { + cy.get("#doctor-save").click(); + } + + clickcancelbutton() { + cy.get("#cancel").click(); + } + verifyfacilitynewurl() { cy.url().should("match", /facility\/[a-z\d-]+/); } diff --git a/public/External-Results-Template.csv b/public/External-Results-Template.csv new file mode 100644 index 00000000000..3ab2afc65ba --- /dev/null +++ b/public/External-Results-Template.csv @@ -0,0 +1,3 @@ +District,srf id,name,age,age in,gender,mobile number,address,ward,local body,local body type,source,Sample Collection Date,result date,test type,lab name,sample type,patient status,Is Repeat,patient category,result +Ernakulam,00/EKM/0000,Bodhi CSN,24,years,m,8888888888,"CSN HQ +Kochi, Kerala ",7,Poothrikka,grama panchayath,Secondary contact aparna,2020-10-14,2020-10-14,Antigen,Karothukuzhi Laboratory,Ag-SD_Biosensor_Standard_Q_COVID-19_Ag_detection_kit,Asymptomatic,NO,Cat 17: All individuals who wish to get themselves tested,Negative \ No newline at end of file diff --git a/public/config.json b/public/config.json index 444362cfb20..74e509fee59 100644 --- a/public/config.json +++ b/public/config.json @@ -21,6 +21,6 @@ "kasp_string": "KASP", "kasp_full_string": "Karunya Arogya Suraksha Padhathi", "sample_format_asset_import": "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=11JaEhNHdyCHth4YQs_44YaRlP77Rrqe81VSEfg1glko&exportFormat=xlsx", - "sample_format_external_result_import": "https://docs.google.com/spreadsheets/d/17VfgryA6OYSYgtQZeXU9mp7kNvLySeEawvnLBO_1nuE/export?format=csv&id=17VfgryA6OYSYgtQZeXU9mp7kNvLySeEawvnLBO_1nuE", + "sample_format_external_result_import": "/External-Results-Template.csv", "enable_abdm": true } \ No newline at end of file diff --git a/src/CAREUI/display/RecordMeta.tsx b/src/CAREUI/display/RecordMeta.tsx index 944ddf27c8f..818553d9207 100644 --- a/src/CAREUI/display/RecordMeta.tsx +++ b/src/CAREUI/display/RecordMeta.tsx @@ -11,6 +11,7 @@ interface Props { time?: string; prefix?: ReactNode; className?: string; + inlineClassName?: string; user?: { first_name: string; last_name: string; @@ -23,7 +24,14 @@ interface Props { * A generic component to display relative time along with a tooltip and a user * if provided. */ -const RecordMeta = ({ time, user, prefix, className, inlineUser }: Props) => { +const RecordMeta = ({ + time, + user, + prefix, + className, + inlineClassName, + inlineUser, +}: Props) => { const isOnline = user && isUserOnline(user); let child = ( @@ -47,11 +55,11 @@ const RecordMeta = ({ time, user, prefix, className, inlineUser }: Props) => { if (prefix || user) { child = ( -