Skip to content

Commit

Permalink
Merge pull request #1186 from CalebSLane/develop
Browse files Browse the repository at this point in the history
Front end menu fix and audit trail for program samples
  • Loading branch information
CalebSLane authored Jul 17, 2024
2 parents f4aaccd + 26b4056 commit d67a5d0
Show file tree
Hide file tree
Showing 31 changed files with 1,152 additions and 439 deletions.
31 changes: 13 additions & 18 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
##
# Build Stage
#
FROM maven:3-jdk-11 as build
FROM maven:3-jdk-11 AS build

RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \
--mount=target=/var/cache/apt,type=cache,sharing=locked \
Expand All @@ -10,24 +10,17 @@ RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \
&& apt-get -y --no-install-recommends install \
git apache2-utils nodejs npm

##
# Copy Source Code
#
ADD ./pom.xml /build/pom.xml
ADD ./tools /build/tools
ADD ./src /build/src
ADD ./dataexport /build/dataexport

WORKDIR /build

# OE Default Password
ARG DEFAULT_PW="adminADMIN!"
ADD ./install/createDefaultPassword.sh /build/install/createDefaultPassword.sh
COPY ./install/createDefaultPassword.sh /build/install/createDefaultPassword.sh
WORKDIR /build
RUN ./install/createDefaultPassword.sh -c -p ${DEFAULT_PW}

##
# Build DataExport
#
COPY ./dataexport /build/dataexport
WORKDIR /build/dataexport/dataexport-core
RUN --mount=type=cache,target=/root/.m2,sharing=locked \
mvn dependency:go-offline
Expand All @@ -41,10 +34,12 @@ RUN --mount=type=cache,target=/root/.m2,sharing=locked \

WORKDIR /build

COPY ./pom.xml /build/pom.xml
RUN --mount=type=cache,target=/root/.m2,sharing=locked \
mvn dependency:go-offline

ARG SKIP_SPOTLESS="false"
COPY ./src /build/src
RUN --mount=type=cache,target=/root/.m2,sharing=locked \
mvn clean install -DskipTests -Dspotless.check.skip=${SKIP_SPOTLESS}

Expand All @@ -53,15 +48,15 @@ RUN --mount=type=cache,target=/root/.m2,sharing=locked \
#
FROM tomcat:8.5-jdk11

ADD install/createDefaultPassword.sh ./
COPY install/createDefaultPassword.sh ./


#Clean out unneccessary files from tomcat (especially pre-existing applications)
RUN rm -rf /usr/local/tomcat/webapps/* \
/usr/local/tomcat/conf/Catalina/localhost/manager.xml

#Deploy the war into tomcat image and point root to it
ADD install/tomcat-resources/ROOT.war /usr/local/tomcat/webapps/ROOT.war
COPY install/tomcat-resources/ROOT.war /usr/local/tomcat/webapps/ROOT.war
COPY --from=build /build/target/OpenELIS-Global.war /usr/local/tomcat/webapps/OpenELIS-Global.war

#rewrite cataline.properties with our catalina.properties so it contains:
Expand All @@ -70,12 +65,12 @@ COPY --from=build /build/target/OpenELIS-Global.war /usr/local/tomcat/webapps/Op
# org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=false
# org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=false
# org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=false
ADD install/tomcat-resources/catalina.properties /usr/local/tomcat/conf/catalina.properties
ADD install/tomcat-resources/logging.properties /usr/local/tomcat/conf/logging.properties
COPY install/tomcat-resources/catalina.properties /usr/local/tomcat/conf/catalina.properties
COPY install/tomcat-resources/logging.properties /usr/local/tomcat/conf/logging.properties

#replace ServerInfo.properties with a less informative one
RUN mkdir -p /usr/local/tomcat/lib/org/apache/catalina/util
ADD install/tomcat-resources/ServerInfo.properties /usr/local/tomcat/lib/org/apache/catalina/util/ServerInfo.properties
COPY install/tomcat-resources/ServerInfo.properties /usr/local/tomcat/lib/org/apache/catalina/util/ServerInfo.properties

#restrict files
#GID AND UID must be kept the same as setupTomcat.sh (if using default certificate group)
Expand All @@ -98,11 +93,11 @@ RUN groupadd tomcat; \
chmod g-w,o-rwx $CATALINA_HOME/conf/tomcat-users.xml; \
chmod g-w,o-rwx $CATALINA_HOME/conf/web.xml

ADD install/openelis_healthcheck.sh /healthcheck.sh
COPY install/openelis_healthcheck.sh /healthcheck.sh
RUN chown tomcat_admin:tomcat /healthcheck.sh; \
chmod 770 /healthcheck.sh;

ADD install/docker-entrypoint.sh /docker-entrypoint.sh
COPY install/docker-entrypoint.sh /docker-entrypoint.sh
RUN chown tomcat_admin:tomcat /docker-entrypoint.sh; \
chmod 770 /docker-entrypoint.sh;

Expand Down
80 changes: 20 additions & 60 deletions frontend/cypress/pages/HomePage.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,8 @@ class HomePage {

goToOrderPage() {
this.openNavigationMenu();
cy.getElement(
":nth-child(1) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.getElement(
':nth-child(1) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(1) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_sample").click();
cy.get("#menu_sample_add").click();
return new OrderEntityPage();
}

Expand All @@ -35,98 +31,62 @@ class HomePage {

goToPatientEntry() {
this.openNavigationMenu();
cy.get(
":nth-child(2) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(2) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(1) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_patient").click();
cy.get("#menu_patient_add_or_edit").click();
return new PatientEntryPage();
}

goToModifyOrderPage() {
this.openNavigationMenu();
cy.getElement(
":nth-child(1) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(1) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(7) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_sample").click();
cy.get("#menu_sample_edit").click();
return new ModifyOrderPage();
}
goToWorkPlanPlanByTest() {
this.openNavigationMenu();
cy.get(
":nth-child(4) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(4) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(1) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_workplan").click();
cy.get("#menu_workplan_test").click();
return new WorkPlan();
}

goToWorkPlanPlanByPanel() {
this.openNavigationMenu();
cy.get(
":nth-child(4) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(4) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(2) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_workplan").click();
cy.get("#menu_workplan_panel").click();
return new WorkPlan();
}

goToWorkPlanPlanByUnit() {
this.openNavigationMenu();
cy.get(
":nth-child(4) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(4) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(3) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_workplan").click();
cy.get("#menu_workplan_bench").click();
return new WorkPlan();
}

goToWorkPlanPlanByPriority() {
this.openNavigationMenu();
cy.get(
":nth-child(4) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(4) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(4) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_workplan").click();
cy.get("#menu_workplan_priority").click();
return new WorkPlan();
}

goToReportNCE() {
this.openNavigationMenu();
cy.get(
":nth-child(3) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(3) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(1) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_nonconformity").click();
cy.get("#menu_non_conforming_report").click();
return new NonConform();
}

goToViewNCE() {
this.openNavigationMenu();
cy.get(
":nth-child(3) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(3) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(2) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_nonconformity").click();
cy.get("#menu_non_conforming_view").click();
return new NonConform();
}
goToCorrectiveActions() {
this.openNavigationMenu();
cy.get(
":nth-child(3) > .cds--side-nav__item > .cds--side-nav__submenu",
).click();
cy.get(
':nth-child(3) > .cds--side-nav__item > .cds--side-nav__menu > :nth-child(3) > .cds--side-nav__link > .cds--side-nav__link-text > [style="display: flex; width: 100%;"] > .custom-sidenav-button',
).click();
cy.get("#menu_nonconformity").click();
cy.get("#menu_non_conforming_corrective_actions").click();
return new NonConform();
}
}
Expand Down
17 changes: 17 additions & 0 deletions frontend/src/components/Style.css
Original file line number Diff line number Diff line change
Expand Up @@ -477,10 +477,23 @@ button {
width: 100%;
}

.custom-sidenav-button {
pointer-events: auto;
}

.custom-sidenav-button:hover {
background-color: var(--cds-background, #295785);
}

.cds--side-nav__link a {
pointer-events: auto;
text-decoration: none !important;
}

.cds--side-nav__link a:hover {
background-color: var(--cds-background, #295785);
}

.reduced-padding-nav-menu-item > a.cds--side-nav__link {
padding-left: 1rem !important;
}
Expand All @@ -489,6 +502,10 @@ button {
background-color: var(--cds-background-hover, #072655);
}

.cds--side-nav__link {
pointer-events: none
}

@media screen and (max-width: 792px) {
.banner h5 {
font-size: 1.8vw;
Expand Down
84 changes: 51 additions & 33 deletions frontend/src/components/layout/Header.js
Original file line number Diff line number Diff line change
Expand Up @@ -183,11 +183,7 @@ function OEHeader(props) {
if (level === 0 && menuItem.childMenus.length > 0) {
return (
<React.Fragment key={path}>
<span
onClick={(e) => {
setMenuItemExpanded(e, menuItem, path);
}}
>
<span id={menuItem.menu.elementId}>
<SideNavMenu
aria-label={intl.formatMessage({
id: menuItem.menu.displayKey,
Expand All @@ -197,6 +193,9 @@ function OEHeader(props) {
})}
key={"menu_" + index + "_" + level}
defaultExpanded={menuItem.expanded}
onClick={(e) => {
setMenuItemExpanded(e, menuItem, path);
}}
>
{menuItem.childMenus.map((childMenuItem, index) => {
return generateMenuItems(
Expand All @@ -214,6 +213,7 @@ function OEHeader(props) {
return (
<React.Fragment key={path}>
<SideNavMenuItem
id={menuItem.menu.elementId}
href={menuItem.menu.actionURL}
target={menuItem.menu.openInNewWindow ? "_blank" : ""}
>
Expand Down Expand Up @@ -277,26 +277,35 @@ function OEHeader(props) {
const renderSingleNavButton = (menuItem, index, level, path) => {
const marginValue = (level - 1) * 0.5 + "rem";
return (
<button
className={"custom-sidenav-button"}
style={{ marginLeft: marginValue }}
onClick={() => {
if (menuItem.menu.openInNewWindow) {
window.open(menuItem.menu.actionURL);
} else {
window.location.href = menuItem.menu.actionURL;
}
}}
<a
id={menuItem.menu.elementId}
href={menuItem.menu.actionURL}
target={menuItem.menu.openInNewWindow ? "_blank" : ""}
style={{ width: "100%" }}
rel="noreferrer"
>
{renderSideNavMenuItemLabel(menuItem, level)}
</button>
<button
className={"custom-sidenav-button"}
style={{ marginLeft: marginValue }}
onClick={() => {
if (menuItem.menu.openInNewWindow) {
window.open(menuItem.menu.actionURL);
} else {
window.location.href = menuItem.menu.actionURL;
}
}}
>
{renderSideNavMenuItemLabel(menuItem, level)}
</button>
</a>
);
};

const renderSingleDropdownButton = (menuItem, index, level, path) => {
const marginValue = (level - 1) * 0.5 + "rem";
return (
<button
id={menuItem.menu.displayKey + "_dropdown"}
className={"custom-sidenav-button"}
style={{ marginLeft: marginValue }}
onClick={(e) => {
Expand All @@ -313,25 +322,34 @@ function OEHeader(props) {
const marginValue = (level - 1) * 0.5 + "rem";
return (
<>
<button
className={
menuItem.menu.actionURL
? "custom-sidenav-button"
: "custom-sidenav-button-unclickable"
}
style={{ marginLeft: marginValue }}
onClick={() => {
if (menuItem.menu.openInNewWindow) {
window.open(menuItem.menu.actionURL);
} else {
window.location.href = menuItem.menu.actionURL;
}
}}
<a
id={menuItem.menu.elementId}
href={menuItem.menu.actionURL}
target={menuItem.menu.openInNewWindow ? "_blank" : ""}
style={{ width: "100%" }}
rel="noreferrer"
>
{renderSideNavMenuItemLabel(menuItem, level)}
</button>
<button
className={
menuItem.menu.actionURL
? "custom-sidenav-button"
: "custom-sidenav-button-unclickable"
}
style={{ marginLeft: marginValue }}
onClick={() => {
if (menuItem.menu.openInNewWindow) {
window.open(menuItem.menu.actionURL);
} else {
window.location.href = menuItem.menu.actionURL;
}
}}
>
{renderSideNavMenuItemLabel(menuItem, level)}
</button>
</a>
{menuItem.childMenus.length > 0 && (
<button
id={menuItem.menu.displayKey + "_dropdown"}
className="custom-sidenav-button"
onClick={(e) => {
onClickSideNavItem(e, menuItem, path);
Expand Down
Loading

0 comments on commit d67a5d0

Please sign in to comment.