mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-12-25 11:51:07 +00:00
* Upgrade typescript to 4.9.5 * Fix compile issue and put back files in tsconfig.strict.json * Update test snapshots * Fix jest tests by upgrading jest and other related packages. * Attempt to fix playwright test * Revert "Attempt to fix playwright test" This reverts commit8293f34c9c. * 2nd attempt to fix example test * fix waitFor in playwright * Remove unused describe section * Attempt to fix e2e test * Revert "Attempt to fix e2e test" This reverts commit9745bcd2ef. * Upgrade playwright to latest * Revert "Upgrade playwright to latest" This reverts commite2ea1d0189. * Error test on e2e * Revert "Error test on e2e" This reverts commit124e3764f7. * Try to select dropdown item by xpath selector * Revert "Try to select dropdown item by xpath selector" This reverts commit8eb42a64e2. * Attempt to wait until page is fully loaded * Revert "Attempt to wait until page is fully loaded" This reverts commitbb43fcea6e. * Use playwright selectOption to select dropdown option * Revert "Use playwright selectOption to select dropdown option" This reverts commitdaa8cd0930. * Select dropdown option with playwright api instead of manual click * c7ab4c7ecf7b05f32a85568bce1a667ad8c62703Revert "Select dropdown option with playwright api instead of manual click" This reverts commitc7ab4c7ecf. * Wait for 5s after dropdown click * Revert "Wait for 5s after dropdown click" This reverts commit847e9ad33f. * Try forcing click * Revert "Try forcing click" This reverts commit29b9fa1bda. * Force click on the dropdown and set viewport size bigger. * Force click on the dropdown and set viewport size bigger. * try force clicking option * Skip container test on webkit * Add branded browsers to e2e tests --------- Co-authored-by: Ashley Stanton-Nurse <ashleyst@microsoft.com>
129 lines
3.4 KiB
TypeScript
129 lines
3.4 KiB
TypeScript
import { AppState, ContentRef, selectors } from "@nteract/core";
|
|
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
|
|
import React from "react";
|
|
import { connect } from "react-redux";
|
|
import styled from "styled-components";
|
|
import { StyleConstants } from "../../../Common/StyleConstants";
|
|
|
|
interface Props {
|
|
lastSaved?: Date | null;
|
|
kernelSpecDisplayName: string;
|
|
kernelStatus: string;
|
|
}
|
|
|
|
const NOT_CONNECTED = "not connected";
|
|
|
|
export const LeftStatus = styled.div`
|
|
float: left;
|
|
display: block;
|
|
padding-left: 10px;
|
|
`;
|
|
export const RightStatus = styled.div`
|
|
float: right;
|
|
padding-right: 10px;
|
|
display: block;
|
|
`;
|
|
|
|
export const Bar = styled.div`
|
|
padding: 8px 0px 2px;
|
|
border-top: 1px solid ${StyleConstants.BaseMedium};
|
|
border-left: 1px solid ${StyleConstants.BaseMedium};
|
|
width: 100%;
|
|
height: 100%;
|
|
font-size: 12px;
|
|
line-height: 0.5em;
|
|
background: var(--status-bar);
|
|
z-index: 99;
|
|
@media print {
|
|
display: none;
|
|
}
|
|
`;
|
|
|
|
const BarContainer = styled.div`
|
|
padding-left: 4px;
|
|
`;
|
|
|
|
export class StatusBar extends React.Component<Props> {
|
|
shouldComponentUpdate(nextProps: Props): boolean {
|
|
if (this.props.lastSaved !== nextProps.lastSaved || this.props.kernelStatus !== nextProps.kernelStatus) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
render() {
|
|
const name = this.props.kernelSpecDisplayName || "Loading...";
|
|
|
|
return (
|
|
<BarContainer>
|
|
<Bar data-test="notebookStatusBar">
|
|
<RightStatus>
|
|
{this.props.lastSaved ? (
|
|
<p data-test="saveStatus"> Last saved {distanceInWordsToNow(this.props.lastSaved)} </p>
|
|
) : (
|
|
<p> Not saved yet </p>
|
|
)}
|
|
</RightStatus>
|
|
<LeftStatus>
|
|
<p data-test="kernelStatus">
|
|
{name} | {this.props.kernelStatus}
|
|
</p>
|
|
</LeftStatus>
|
|
</Bar>
|
|
</BarContainer>
|
|
);
|
|
}
|
|
}
|
|
|
|
interface InitialProps {
|
|
contentRef: ContentRef;
|
|
}
|
|
|
|
const makeMapStateToProps = (_initialState: AppState, initialProps: InitialProps): ((state: AppState) => Props) => {
|
|
const { contentRef } = initialProps;
|
|
|
|
const mapStateToProps = (state: AppState) => {
|
|
const content = selectors.content(state, { contentRef });
|
|
|
|
if (!content || content.type !== "notebook") {
|
|
return {
|
|
kernelStatus: NOT_CONNECTED,
|
|
kernelSpecDisplayName: "no kernel",
|
|
lastSaved: undefined,
|
|
};
|
|
}
|
|
|
|
const kernelRef = content.model.kernelRef;
|
|
let kernel;
|
|
if (kernelRef) {
|
|
kernel = selectors.kernel(state, { kernelRef });
|
|
}
|
|
|
|
const lastSaved = content && content.lastSaved ? content.lastSaved : undefined;
|
|
|
|
const kernelStatus = kernel?.status || NOT_CONNECTED;
|
|
|
|
// TODO: We need kernels associated to the kernelspec they came from
|
|
// so we can pluck off the display_name and provide it here
|
|
let kernelSpecDisplayName = " ";
|
|
if (kernelStatus === NOT_CONNECTED) {
|
|
kernelSpecDisplayName = "no kernel";
|
|
} else if (kernel?.kernelSpecName) {
|
|
kernelSpecDisplayName = kernel.kernelSpecName;
|
|
} else if (content && content.type === "notebook") {
|
|
// TODO Fix typing here
|
|
kernelSpecDisplayName = selectors.notebook.displayName(content.model as never) || " ";
|
|
}
|
|
|
|
return {
|
|
kernelSpecDisplayName,
|
|
kernelStatus,
|
|
lastSaved,
|
|
};
|
|
};
|
|
|
|
return mapStateToProps;
|
|
};
|
|
|
|
export default connect(makeMapStateToProps)(StatusBar);
|