// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React, { useState, useCallback, useEffect } from 'react'; import { Dialog, DialogContent, DialogActions, Button, StyleRulesCallback, withStyles, WithStyles } from "@material-ui/core"; import { connect } from "react-redux"; import { RootState } from "store/store"; import bannerActions from "store/banner/banner-action"; import { ArvadosTheme } from 'common/custom-theme'; import servicesProvider from 'common/service-provider'; import { Dispatch } from 'redux'; type CssRules = 'dialogContent' | 'dialogContentIframe'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ dialogContent: { minWidth: '550px', minHeight: '500px', display: 'block' }, dialogContentIframe: { minWidth: '550px', minHeight: '500px' } }); interface BannerProps { isOpen: boolean; bannerUUID?: string; keepWebInlineServiceUrl: string; }; type BannerComponentProps = BannerProps & WithStyles & { openBanner: Function, closeBanner: Function, }; const mapStateToProps = (state: RootState): BannerProps => ({ isOpen: state.banner.isOpen, bannerUUID: state.auth.config.clusterConfig.Workbench.BannerUUID, keepWebInlineServiceUrl: state.auth.config.keepWebInlineServiceUrl, }); const mapDispatchToProps = (dispatch: Dispatch) => ({ openBanner: () => dispatch(bannerActions.openBanner()), closeBanner: () => dispatch(bannerActions.closeBanner()), }); export const BANNER_LOCAL_STORAGE_KEY = 'bannerFileData'; export const BannerComponent = (props: BannerComponentProps) => { const { isOpen, openBanner, closeBanner, bannerUUID, keepWebInlineServiceUrl } = props; const [bannerContents, setBannerContents] = useState(`

Loading ...

`) const onConfirm = useCallback(() => { closeBanner(); }, [closeBanner]) useEffect(() => { if (!!bannerUUID && bannerUUID !== "") { servicesProvider.getServices().collectionService.files(bannerUUID) .then(results => { const bannerFileData = results.find(({name}) => name === 'banner.html'); const result = localStorage.getItem(BANNER_LOCAL_STORAGE_KEY); if (result && result === JSON.stringify(bannerFileData) && !isOpen) { return; } if (bannerFileData) { servicesProvider.getServices() .collectionService.getFileContents(bannerFileData) .then(data => { setBannerContents(data); openBanner(); localStorage.setItem(BANNER_LOCAL_STORAGE_KEY, JSON.stringify(bannerFileData)); }); } }); } }, [bannerUUID, keepWebInlineServiceUrl, openBanner, isOpen]); return (
); } export const Banner = withStyles(styles)(connect(mapStateToProps, mapDispatchToProps)(BannerComponent));