import { useState } from 'react'; import { IconButton, Box, Button, styled, useTheme, Link, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, } from '@mui/material'; import { OpenInNew } from '@mui/icons-material'; 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, useDialogActions } from './dialogContext'; import { NsSelect } from './NsSelect'; import { DEVTOOLS_Z_INDEX, TOLGEE_RESTRICT_ATTRIBUTE } from '../../constants'; import { Tags } from './Tags/Tags'; import { PluralFormCheckbox } from './PluralFormCheckbox'; import { CharLimitCheckbox } from './CharLimitCheckbox'; import { ErrorAlert } from './ErrorAlert'; import { HttpError } from '../client/HttpError'; import { Tooltip } from '../common/Tooltip'; import { FilterTagMissingInfo } from './Tags/FilterTagMissingInfo'; 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 ScTitle = styled(ScFieldTitle)` justify-content: start; gap: 4px; align-items: center; `; const ScValue = styled('p')` margin: 0px; `; const ScHint = styled('span')` color: grey; `; const ScLinkIcon = styled(Link)` display: grid; font-size: 16px; margin: 0px 0px; `; const ScFieldsWrapper = styled('div')` margin-top: 10px; `; const ScTagsWrapper = styled('div')` margin-top: 5px; `; const ScGalleryWrapper = styled('div')` margin-top: 10px; `; const ScControls = styled('div')` display: flex; justify-content: flex-end; margin-top: 20px; min-height: 36px; `; export const KeyForm = () => { const theme = useTheme(); const { setUseBrowserWindow, onClose, onSave, setSelectedNs } = useDialogActions(); const pluralsSupported = useDialogContext((c) => c.pluralsSupported); const linkToPlatform = useDialogContext((c) => c.linkToPlatform); const useBrowserWindow = useDialogContext((c) => c.useBrowserWindow); const input = useDialogContext((c) => c.input); const keyData = useDialogContext((c) => c.keyData); const formDisabled = useDialogContext((c) => c.formDisabled); const readOnly = useDialogContext((c) => c.readOnly); const loading = useDialogContext((c) => c.loading); const error = useDialogContext((c) => c.error); const submitError = useDialogContext((c) => c.submitError); const saving = useDialogContext((c) => c.saving); const success = useDialogContext((c) => c.success); const keyExists = useDialogContext((c) => c.keyExists); const fallbackNamespaces = useDialogContext((c) => c.fallbackNamespaces); const selectedNs = useDialogContext((c) => c.selectedNs); const permissions = useDialogContext((c) => c.permissions); const filterTagMissing = useDialogContext((c) => c.filterTagMissing); const isOverCharLimit = useDialogContext((c) => c.isOverCharLimit); const branch = useDialogContext((c) => c.uiProps.branch); const [showCharLimitConfirmation, setShowCharLimitConfirmation] = useState(false); const screenshotsView = permissions.canViewScreenshots; const viewPluralCheckbox = permissions.canEditPlural && pluralsSupported; const ready = !loading && !error; const generalError = error || submitError; const isExistingKey = keyData?.keyId !== undefined; const handleSaveClick = () => { if (isOverCharLimit && isExistingKey) { setShowCharLimitConfirmation(true); } else { onSave(); } }; const handleConfirmSave = () => { setShowCharLimitConfirmation(false); onSave(); }; return ( Quick translation {!useBrowserWindow && ( setUseBrowserWindow(true)} color="inherit" size="small" > )} {!loading && } {branch && ( <> Branch {branch} )} Key {linkToPlatform && ( )} {input} {!keyExists && ready && " (key doesn't exist yet)"} {ready && ( Tags {filterTagMissing && } )} {ready && ( {viewPluralCheckbox && } {permissions.canEditCharLimit && } )} {!error && ( )} {screenshotsView && ready && ( )} {formDisabled && ready && ( )} {generalError && } {success ? 'Saved! ✓' : keyData?.keyId === undefined ? 'Create' : 'Update'} {showCharLimitConfirmation && ( setShowCharLimitConfirmation(false)} > Translation length is exceeded Character limit for translation is exceeded. Are you sure you want to save it? )} ); };