PromucFlow_constructor/app/client/src/pages/AdminSettings/RestartBanner.tsx
Ilia d6f249b42d
chore: add blank line eslint rule (#36369)
## Description
Added ESLint rule to force blank lines between statements. 


Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!CAUTION]
> 🔴 🔴 🔴 Some tests have failed.
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/10924926728>
> Commit: 34f57714a1575ee04e94e03cbcaf95e57a96c86c
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10924926728&attempt=1&selectiontype=test&testsstatus=failed&specsstatus=fail"
target="_blank">Cypress dashboard</a>.
> Tags: @tag.All
> Spec: 
> The following are new failures, please fix them before merging the PR:
<ol>
> <li>cypress/e2e/Regression/ClientSide/Anvil/AnvilModal_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCheckboxGroupWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCurrencyInputWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilIconButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInlineButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInputWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilParagraphWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilPhoneInputWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilStatsWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchGroupWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilTableWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilToolbarButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilZoneSectionWidgetSnapshot_spec.ts</ol>
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master"
target="_blank">List of identified flaky tests</a>.
> <hr>Wed, 18 Sep 2024 16:33:36 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No

---------

Co-authored-by: Valera Melnikov <valera@appsmith.com>
2024-09-18 19:35:28 +03:00

148 lines
3.4 KiB
TypeScript

import React from "react";
import { hexToRgba } from "@appsmith/ads-old";
import { Button, Icon, Spinner, Text } from "@appsmith/ads";
import {
getIsRestartFailed,
getRestartingState,
} from "selectors/settingsSelectors";
import { useSelector } from "react-redux";
import styled from "styled-components";
import {
createMessage,
RETRY_BUTTON,
RESTART_BANNER_BODY,
RESTART_BANNER_HEADER,
RESTART_ERROR_BODY,
RESTART_ERROR_HEADER,
} from "ee/constants/messages";
import { Colors } from "constants/Colors";
import { retryServerRestart } from "ee/actions/settingsAction";
import { useDispatch } from "react-redux";
const RestartBannerWrapper = styled.div`
position: fixed;
bottom: 0;
left: 0;
right: 0;
top: 0;
z-index: 20;
overflow: auto;
`;
const OverlayBackdrop = styled.div`
position: fixed;
bottom: 0;
left: 0;
right: 0;
top: 0;
/* TODO: replaced hexToRgba (Albin) */
background-color: ${hexToRgba(Colors.COD_GRAY, 0.7)};
overflow: auto;
pointer-events: none;
user-select: none;
z-index: 20;
`;
const RestartContainer = styled.div`
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: ${(props) => props.theme.settings.footerHeight}px;
z-index: 20;
padding: 0px ${(props) => props.theme.spaces[11]}px 0px 276px;
background: var(--ads-v2-color-bg);
display: flex;
justify-content: space-between;
align-items: center;
pointer-events: all;
user-select: text;
`;
const RestartMessageWrapper = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
pointer-events: none;
`;
const HeaderContents = styled.div`
display: flex;
align-items: center;
padding-bottom: ${(props) => props.theme.spaces[3]}px;
gap: 8px;
`;
const Heading = styled(Text)``;
const AppIconWrapper = styled.div`
background: var(--ads-v2-color-bg-error);
border-radius: 50%;
padding: 4px;
margin-right: 12px;
svg {
width: 18px;
height: 18px;
path {
fill: var(--ads-v2-color-fg-on-error);
}
}
`;
function Header() {
const isRestartFailed = useSelector(getIsRestartFailed);
return (
<HeaderContents>
{isRestartFailed ? (
<AppIconWrapper>
<Icon name="server-line" />
</AppIconWrapper>
) : (
<Spinner
iconProps={{ color: "var(--ads-v2-color-bg-brand)" }}
size="lg"
/>
)}
<Heading kind="heading-m" renderAs="p">
{isRestartFailed
? createMessage(RESTART_ERROR_HEADER)
: createMessage(RESTART_BANNER_HEADER)}
</Heading>
</HeaderContents>
);
}
export default function RestartBanner() {
const isRestartFailed = useSelector(getIsRestartFailed);
const isRestarting = useSelector(getRestartingState);
const dispatch = useDispatch();
return isRestarting ? (
<RestartBannerWrapper className="t--admin-settings-restart-notice">
<OverlayBackdrop />
<RestartContainer>
<RestartMessageWrapper>
<Header />
<Text renderAs="p">
{isRestartFailed
? createMessage(RESTART_ERROR_BODY)
: createMessage(RESTART_BANNER_BODY)}
</Text>
</RestartMessageWrapper>
{isRestartFailed && (
<Button
data-testid="btn-refresh"
onClick={() => dispatch(retryServerRestart())}
size="md"
>
{createMessage(RETRY_BUTTON)}
</Button>
)}
</RestartContainer>
</RestartBannerWrapper>
) : null;
}