import React from 'react'; import { RESTRICTED_ASCENDANT_ATTRIBUTE } from '@tolgee/core'; import { styled } from '@mui/material/styles'; import IconButton from '@mui/material/IconButton'; import Button from '@mui/material/Button'; import OpenInNew from '@mui/icons-material/OpenInNew'; import { TextHelper } from '@tolgee/core'; import { TranslationFields } from './TranslationFields'; import { LanguageSelect } from './LanguageSelect'; import { LoadingButton } from '../common/LoadingButton'; import { ScreenshotGallery } from './ScreenshotGallery/ScreenshotGallery'; import { ScFieldTitle } from '../common/FieldTitle'; import { useDialogContext, useDialogDispatch, } from './TranslationDialogContextProvider'; const ScContainer = styled('div')` font-family: Rubik, Roboto, Arial; padding: 20px; box-sizing: border-box; max-width: 100%; width: 700px; display: flex; flex-direction: column; `; const ScHeading = styled('div')` display: flex; align-items: center; gap: 5px; `; const ScHeadingTitle = styled('div')` display: flex; margin: 0px; font-size: 19px; `; const ScHeadingRight = styled('div')` display: flex; justify-content: flex-end; align-items: center; flex-grow: 1; `; const ScKey = styled('p')` margin: 0px; `; const ScKeyHint = styled('span')` color: grey; `; const ScFieldsWrapper = styled('div')` margin-top: 20px; `; const ScGalleryWrapper = styled('div')` margin-top: 10px; `; const ScControls = styled('div')` display: flex; justify-content: flex-end; margin-top: 20px; min-height: 36px; `; const ScRestriction = styled('div')` margin-top: 8px; color: ${({ theme }) => theme.palette.text.secondary}; `; const ScError = styled('div')` color: red; `; export const KeyForm = () => { const dispatch = useDialogDispatch(); const linkToPlatform = useDialogContext((c) => c.linkToPlatform); const useBrowserWindow = useDialogContext((c) => c.useBrowserWindow); const dependencies = useDialogContext((c) => c.dependencies); const input = useDialogContext((c) => c.input); const translations = useDialogContext((c) => c.translations); const formDisabled = useDialogContext((c) => c.formDisabled); const loading = useDialogContext((c) => c.loading); const error = useDialogContext((c) => c.error); const saving = useDialogContext((c) => c.saving); const success = useDialogContext((c) => c.success); const screenshotsView = dependencies.coreService.isAuthorizedTo('screenshots.view'); const setUseBrowserWindow = (value: boolean) => { dispatch({ type: 'SET_USE_BROWSER_WINDOW', payload: value }); }; const onClose = () => { dispatch({ type: 'ON_CLOSE' }); }; const onSave = () => { dispatch({ type: 'ON_SAVE' }); }; return ( Quick translation {!useBrowserWindow && ( setUseBrowserWindow(true)} color="inherit" size="small" > )} Key {input && TextHelper.removeEscapes(input)} {translations?.keyId === undefined && " (key doesn't exist yet)"} {screenshotsView && ( )} {formDisabled && !loading && ( {`Modification is restricted due to missing ${ translations?.keyId !== undefined ? 'translations.edit' : 'keys.edit' } scope in current api key settings.`} )} {error && {error}} {success ? 'Saved! ✓' : translations?.keyId === undefined ? 'Create' : 'Update'} ); };