Small UI fixes

This commit is contained in:
IRBorisov 2024-05-17 11:43:42 +03:00
parent 7664d9bda7
commit aecb0f70ed
4 changed files with 37 additions and 21 deletions

View File

@ -21,9 +21,7 @@ function ControlsOverlay({ constituenta, disabled, modified, processing, onRenam
<Overlay position='top-1 left-[4.3rem]' className='flex select-none'>
{!disabled || processing ? (
<MiniButton
title={
modified ? messages.unsaved : `Редактировать словоформы термина: ${constituenta?.term_forms.length ?? 0}`
}
title={modified ? messages.unsaved : `Редактировать словоформы термина`}
noHover
onClick={onEditTerm}
icon={<IconEdit size='1rem' className='icon-primary' />}

View File

@ -118,10 +118,10 @@ function FormConstituenta({
const data: ICstUpdateData = {
id: state.id,
alias: alias,
convention: convention,
term_raw: term,
definition_formal: expression,
definition_raw: textDefinition,
term_raw: term
convention: convention
};
cstUpdate(data, () => toast.success('Изменения сохранены'));
}

View File

@ -46,6 +46,7 @@ import {
} from '@/models/rsform';
import { generateAlias } from '@/models/rsformAPI';
import { EXTEOR_TRS_FILE } from '@/utils/constants';
import { promptUnsaved } from '@/utils/utils';
interface IRSEditContext {
schema?: IRSForm;
@ -379,18 +380,26 @@ export const RSEditState = ({
}, [activeCst]);
const substitute = useCallback(() => {
if (isModified && !promptUnsaved()) {
return;
}
setShowSubstitute(true);
}, []);
}, [isModified]);
const inlineSynthesis = useCallback(() => {
if (isModified && !promptUnsaved()) {
return;
}
setShowInlineSynthesis(true);
}, [isModified]);
const editTermForms = useCallback(() => {
if (!activeCst) {
return;
}
if (isModified) {
if (!window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?')) {
if (isModified && !promptUnsaved()) {
return;
}
}
setShowEditTerm(true);
}, [isModified, activeCst]);
@ -410,6 +419,9 @@ export const RSEditState = ({
if (!activeCst) {
return;
}
if (isModified && !promptUnsaved()) {
return;
}
const data: ICstTarget = {
target: activeCst.id
};
@ -419,28 +431,27 @@ export const RSEditState = ({
setSelected(cstList);
}
});
}, [activeCst, setSelected, model]);
}, [activeCst, setSelected, model, isModified]);
const promptTemplate = useCallback(() => {
setInsertCstID(activeCst?.id);
setShowTemplates(true);
}, [activeCst]);
const promptClone = useCallback(() => {
if (isModified) {
if (!window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?')) {
if (isModified && !promptUnsaved()) {
return;
}
setInsertCstID(activeCst?.id);
setShowTemplates(true);
}, [activeCst, isModified]);
const promptClone = useCallback(() => {
if (isModified && !promptUnsaved()) {
return;
}
setShowClone(true);
}, [isModified]);
const download = useCallback(() => {
if (isModified) {
if (!window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?')) {
if (isModified && !promptUnsaved()) {
return;
}
}
const fileName = (model.schema?.alias ?? 'Schema') + EXTEOR_TRS_FILE;
model.download((data: Blob) => {
try {
@ -515,7 +526,7 @@ export const RSEditState = ({
reindex,
reorder,
inlineSynthesis: () => setShowInlineSynthesis(true),
inlineSynthesis,
produceStructure,
substitute
}}

View File

@ -95,3 +95,10 @@ export function convertBase64ToBlob(base64String: string): Uint8Array {
}
return uint8Array;
}
/**
* Prompt user of confirming discarding changes before continue.
*/
export function promptUnsaved(): boolean {
return window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?');
}