/* * Copyright [2021] [wisemapping] * * Licensed under WiseMapping Public License, Version 1.0 (the "License"). * It is basically the Apache License, Version 2.0 (the "License") plus the * "powered by wisemapping" text requirement on every single page; * you may not use this file except in compliance with the License. * You may obtain a copy of the license at * * http://www.wisemapping.org/license * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import React, { useEffect, useState } from 'react'; import MaterialToolbar from '@mui/material/Toolbar'; import MaterialAppBar from '@mui/material/AppBar'; import { ToolbarMenuItem } from '../toolbar'; import ActionConfig from '../../classes/action/action-config'; import Editor from '../../classes/model/editor'; import Capability from '../../classes/action/capability'; import Tooltip from '@mui/material/Tooltip'; import UndoOutlinedIcon from '@mui/icons-material/UndoOutlined'; import RedoOutlinedIcon from '@mui/icons-material/RedoOutlined'; import RestoreOutlinedIcon from '@mui/icons-material/RestoreOutlined'; import SaveOutlinedIcon from '@mui/icons-material/SaveOutlined'; import PrintOutlinedIcon from '@mui/icons-material/PrintOutlined'; import FileDownloadOutlinedIcon from '@mui/icons-material/FileDownloadOutlined'; import StarRateRoundedIcon from '@mui/icons-material/StarRateRounded'; import CloudUploadOutlinedIcon from '@mui/icons-material/CloudUploadOutlined'; import HelpOutlineOutlinedIcon from '@mui/icons-material/InfoOutlined'; import ArrowBackIosNewOutlinedIcon from '@mui/icons-material/ArrowBackIosNewOutlined'; import Typography from '@mui/material/Typography'; import UndoAndRedo from '../action-widget/button/undo-and-redo'; import Button from '@mui/material/Button'; import LogoTextBlackSvg from '../../../images/logo-text-black.svg'; import IconButton from '@mui/material/IconButton'; import { ToolbarActionType } from '../toolbar/ToolbarActionType'; import MapInfo from '../../classes/model/map-info'; import { useIntl } from 'react-intl'; interface AppBarProps { model: Editor; mapInfo: MapInfo; capability: Capability; onAction?: (type: ToolbarActionType) => void; accountConfig?; } const appBarDivisor = { render: () => , }; const keyTooltip = (msg: string, key: string): string => { const isMac = window.navigator.platform.toUpperCase().indexOf('MAC') >= 0; return `${msg} (${isMac ? '⌘' : 'Ctrl'} + ${key})`; }; const AppBar = ({ model, mapInfo, capability, onAction, accountConfig }: AppBarProps) => { const [isStarred, setStarred] = useState(undefined); const intl = useIntl(); const handleStarredOnClick = () => { const newStatus = !isStarred; mapInfo.updateStarred(newStatus).then(() => setStarred(newStatus)); }; useEffect(() => { mapInfo .isStarred() .then((value) => setStarred(value)) .catch((e) => { console.error(`Unexpected error loading starred status-> ${e}`); }); }, []); const config: ActionConfig[] = [ { icon: , tooltip: intl.formatMessage({ id: 'appbar.back-to-map-list', defaultMessage: 'Back to maps list', }), onClick: () => history.back(), }, { render: () => , }, { render: () => ( {mapInfo.getTitle()} ), }, null, { render: () => ( , tooltip: keyTooltip( intl.formatMessage({ id: 'appbar.tooltip-undo', defaultMessage: 'Undo' }), 'Z', ), onClick: () => designer.undo(), }} disabledCondition={(event) => event.undoSteps > 0} model={model} /> ), visible: !capability.isHidden('undo-changes'), disabled: () => !model?.isMapLoadded(), }, { render: () => ( , tooltip: keyTooltip( intl.formatMessage({ id: 'appbar.tooltip-redo', defaultMessage: 'Redo' }), 'Shift + Z', ), onClick: () => designer.redo(), }} disabledCondition={(event) => event.redoSteps > 0} model={model} /> ), visible: !capability.isHidden('redo-changes'), disabled: () => !model?.isMapLoadded(), }, null, { icon: , onClick: () => { model.save(true); }, tooltip: keyTooltip( intl.formatMessage({ id: 'appbar.tooltip-save', defaultMessage: 'Save' }), 'S', ), visible: !capability.isHidden('save'), disabled: () => !model?.isMapLoadded(), }, { icon: , onClick: () => onAction('history'), tooltip: intl.formatMessage({ id: 'appbar.tooltip-history', defaultMessage: 'Changes History', }), visible: !capability.isHidden('history'), }, appBarDivisor, { render: () => ( ), visible: !capability.isHidden('starred'), disabled: () => isStarred !== undefined, }, { icon: , onClick: () => onAction('export'), tooltip: intl.formatMessage({ id: 'appbar.tooltip-export', defaultMessage: 'Export' }), visible: !capability.isHidden('export'), }, { icon: , onClick: () => onAction('print'), tooltip: intl.formatMessage({ id: 'appbar.tooltip-print', defaultMessage: 'Print' }), visible: !capability.isHidden('print'), }, { icon: , onClick: () => onAction('info'), tooltip: intl.formatMessage({ id: 'appbar.tooltip-info', defaultMessage: 'Information' }), visible: !capability.isHidden('info'), }, { icon: , onClick: () => onAction('publish'), tooltip: intl.formatMessage({ id: 'appbar.tooltip-publish', defaultMessage: 'Publish' }), visible: !capability.isHidden('publish'), }, { render: () => ( ), visible: !capability.isHidden('share'), }, { render: () => accountConfig, visible: !capability.isHidden('account'), }, { render: () => ( ), visible: !capability.isHidden('sign-up'), }, ]; return ( {config.map((c, i) => { return ; })} ); }; export default AppBar;