-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAutosave.tsx
More file actions
75 lines (65 loc) · 2.65 KB
/
Autosave.tsx
File metadata and controls
75 lines (65 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import React, { useContext } from 'react';
import Icon from '../Icon';
import { TranslatorContext } from '../context/Translator';
import { createCssClassNames } from '@ibexa/ids-core/helpers/cssClassNames';
import { AutosaveProps } from './Autosave.types';
export const AUTOSAVE_STATUS = {
ERROR: 'error',
OFF: 'off',
ON: 'on',
SAVED: 'saved',
SAVING: 'saving',
} as const;
const Autosave = ({ isDarkMode = false, isEnabled = true, status = 'on', lastSavedTime }: AutosaveProps) => {
const Translator = useContext(TranslatorContext);
const classes = createCssClassNames({
'ids-autosave': true,
'ids-autosave--error': status === AUTOSAVE_STATUS.ERROR,
'ids-autosave--light': isDarkMode,
});
const tooltipMessage = 'content.autosave.turn_off.message';
const getIconName = () => {
if (!isEnabled) {
return 'autosave-off';
}
switch (status) {
case AUTOSAVE_STATUS.ON:
return 'autosave-on';
case AUTOSAVE_STATUS.SAVING:
return 'autosave-saving';
case AUTOSAVE_STATUS.SAVED:
return 'autosave-saved';
case AUTOSAVE_STATUS.ERROR:
return 'autosave-error';
default:
return 'autosave-off';
}
};
const getStatusMessage = () => {
const offMessage = Translator.trans(/*@Desc("Autosave is off, draft not created")*/ 'content_edit.autosave.status_off.message');
if (!isEnabled) {
return offMessage;
}
switch (status) {
case AUTOSAVE_STATUS.ON:
return Translator.trans(/*@Desc("Autosave is on, draft created")*/ 'content_edit.autosave.status_on.message');
case AUTOSAVE_STATUS.SAVING:
return Translator.trans(/*@Desc("Saving")*/ 'content_edit.autosave.status_saving.message');
case AUTOSAVE_STATUS.SAVED:
return Translator.trans(/*@Desc("Autosave is on, draft saved %time%")*/ 'content_edit.autosave.status_saved.message.full', {
time: lastSavedTime?.toString() ?? '',
});
case AUTOSAVE_STATUS.ERROR:
return Translator.trans(/*@Desc("Saving error")*/ 'content_edit.autosave.status_error.message');
default:
return offMessage;
}
};
return (
<div className={classes} title={isEnabled ? tooltipMessage : undefined}>
<Icon className="ids-icon" name={getIconName()} size="small" />
<div className="ids-autosave__status-message">{getStatusMessage()}</div>
</div>
);
};
export default Autosave;