add loading spinner during creation udpate api call

This commit is contained in:
Abhinav 2022-01-06 10:11:33 +05:30
parent e37d08fbae
commit 3c4a0f7b6a
2 changed files with 31 additions and 4 deletions

View file

@ -13,8 +13,21 @@ const isSameDay = (first, second) =>
first.getMonth() === second.getMonth() && first.getMonth() === second.getMonth() &&
first.getDate() === second.getDate(); first.getDate() === second.getDate();
const EnteDateTimePicker = ({ isInEditMode, pickedTime, handleChange }) => ( interface Props {
loading?: boolean;
isInEditMode: boolean;
pickedTime: Date;
handleChange: (date: Date) => void;
}
const EnteDateTimePicker = ({
loading,
isInEditMode,
pickedTime,
handleChange,
}: Props) => (
<DatePicker <DatePicker
disabled={loading}
open={isInEditMode} open={isInEditMode}
selected={pickedTime} selected={pickedTime}
onChange={handleChange} onChange={handleChange}

View file

@ -90,6 +90,7 @@ function RenderCreationTime({
file: File; file: File;
scheduleUpdate: () => void; scheduleUpdate: () => void;
}) { }) {
const [loading, setLoading] = useState(false);
const originalCreationTime = new Date(file?.metadata.creationTime / 1000); const originalCreationTime = new Date(file?.metadata.creationTime / 1000);
const [isInEditMode, setIsInEditMode] = useState(false); const [isInEditMode, setIsInEditMode] = useState(false);
@ -100,6 +101,7 @@ function RenderCreationTime({
const saveEdits = async () => { const saveEdits = async () => {
try { try {
setLoading(true);
if (isInEditMode && file) { if (isInEditMode && file) {
const unixTimeInMicroSec = pickedTime.getTime() * 1000; const unixTimeInMicroSec = pickedTime.getTime() * 1000;
if (unixTimeInMicroSec === file?.metadata.creationTime) { if (unixTimeInMicroSec === file?.metadata.creationTime) {
@ -118,14 +120,16 @@ function RenderCreationTime({
} }
} catch (e) { } catch (e) {
logError(e, 'failed to update creationTime'); logError(e, 'failed to update creationTime');
} finally {
closeEditMode();
setLoading(false);
} }
closeEditMode();
}; };
const discardEdits = () => { const discardEdits = () => {
setPickedTime(originalCreationTime); setPickedTime(originalCreationTime);
closeEditMode(); closeEditMode();
}; };
const handleChange = (newDate) => { const handleChange = (newDate: Date) => {
if (newDate instanceof Date) { if (newDate instanceof Date) {
setPickedTime(newDate); setPickedTime(newDate);
} }
@ -137,6 +141,7 @@ function RenderCreationTime({
<Value width={isInEditMode ? '50%' : '60%'}> <Value width={isInEditMode ? '50%' : '60%'}>
{isInEditMode ? ( {isInEditMode ? (
<EnteDateTimePicker <EnteDateTimePicker
loading={loading}
isInEditMode={isInEditMode} isInEditMode={isInEditMode}
pickedTime={pickedTime} pickedTime={pickedTime}
handleChange={handleChange} handleChange={handleChange}
@ -155,7 +160,16 @@ function RenderCreationTime({
) : ( ) : (
<> <>
<IconButton onClick={saveEdits}> <IconButton onClick={saveEdits}>
<TickIcon /> {loading ? (
<EnteSpinner
style={{
width: '20px',
height: '20px',
}}
/>
) : (
<TickIcon />
)}
</IconButton> </IconButton>
<IconButton onClick={discardEdits}> <IconButton onClick={discardEdits}>
<CloseIcon /> <CloseIcon />