mirror of
https://github.com/Kingsrook/qqq-frontend-material-dashboard.git
synced 2025-07-18 05:10:45 +00:00
Submit date-times in UTC. delete date-times from what gets submitted if it isn't changed (to try to avoid second-truncation); moved frontendLocalZoneDateTimeStringToUTCStringForBackend from FilterUtils to ValueUtils
This commit is contained in:
@ -378,6 +378,32 @@ function EntityForm(props: Props): JSX.Element
|
|||||||
actions.setSubmitting(true);
|
actions.setSubmitting(true);
|
||||||
await (async () =>
|
await (async () =>
|
||||||
{
|
{
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// (1) convert date-time fields from user's time-zone into UTC //
|
||||||
|
// (2) if there's an initial value which matches the value (e.g., from the form), then remove that field //
|
||||||
|
// from the set of values that we'll submit to the backend. This is to deal with the fact that our //
|
||||||
|
// date-times in the UI (e.g., the form field) only go to the minute - so they kinda always end up //
|
||||||
|
// changing from, say, 12:15:30 to just 12:15:00... this seems to get around that, for cases when the //
|
||||||
|
// user didn't change the value in the field (but if the user did change the value, then we will submit it) //
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
for(let fieldName of tableMetaData.fields.keys())
|
||||||
|
{
|
||||||
|
const fieldMetaData = tableMetaData.fields.get(fieldName);
|
||||||
|
if(fieldMetaData.type === QFieldType.DATE_TIME && values[fieldName])
|
||||||
|
{
|
||||||
|
console.log(`DateTime ${fieldName}: Initial value: [${initialValues[fieldName]}] -> [${values[fieldName]}]`)
|
||||||
|
if (initialValues[fieldName] == values[fieldName])
|
||||||
|
{
|
||||||
|
console.log(" - Is the same, so, deleting from the post");
|
||||||
|
delete (values[fieldName]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
values[fieldName] = ValueUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(values[fieldName]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (props.id !== null)
|
if (props.id !== null)
|
||||||
{
|
{
|
||||||
await qController
|
await qController
|
||||||
|
@ -80,11 +80,11 @@ function makeBackendValuesFromFrontendValues(frontendDefaultValues: StartAndEndD
|
|||||||
const backendTimeValues: StartAndEndDate = {};
|
const backendTimeValues: StartAndEndDate = {};
|
||||||
if(frontendDefaultValues && frontendDefaultValues.startDate)
|
if(frontendDefaultValues && frontendDefaultValues.startDate)
|
||||||
{
|
{
|
||||||
backendTimeValues.startDate = FilterUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(frontendDefaultValues.startDate);
|
backendTimeValues.startDate = ValueUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(frontendDefaultValues.startDate);
|
||||||
}
|
}
|
||||||
if(frontendDefaultValues && frontendDefaultValues.endDate)
|
if(frontendDefaultValues && frontendDefaultValues.endDate)
|
||||||
{
|
{
|
||||||
backendTimeValues.endDate = FilterUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(frontendDefaultValues.endDate);
|
backendTimeValues.endDate = ValueUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(frontendDefaultValues.endDate);
|
||||||
}
|
}
|
||||||
return (backendTimeValues);
|
return (backendTimeValues);
|
||||||
}
|
}
|
||||||
@ -129,7 +129,7 @@ function DropdownMenu({name, defaultValue, label, dropdownOptions, onChangeCallb
|
|||||||
const dateChanged = (fieldName: "startDate" | "endDate", event: any) =>
|
const dateChanged = (fieldName: "startDate" | "endDate", event: any) =>
|
||||||
{
|
{
|
||||||
customTimeValuesFrontend[fieldName] = event.target.value;
|
customTimeValuesFrontend[fieldName] = event.target.value;
|
||||||
customTimeValuesBackend[fieldName] = FilterUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(event.target.value);
|
customTimeValuesBackend[fieldName] = ValueUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(event.target.value);
|
||||||
|
|
||||||
clearTimeout(debounceTimeout);
|
clearTimeout(debounceTimeout);
|
||||||
const newDebounceTimeout = setTimeout(() =>
|
const newDebounceTimeout = setTimeout(() =>
|
||||||
|
@ -270,19 +270,6 @@ class FilterUtils
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
private static zeroPad = (n: number): string =>
|
|
||||||
{
|
|
||||||
if (n < 10)
|
|
||||||
{
|
|
||||||
return ("0" + n);
|
|
||||||
}
|
|
||||||
return (`${n}`);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
** Helper method - take a list of values, which may be possible values, and
|
** Helper method - take a list of values, which may be possible values, and
|
||||||
** either return the original list, or a new list that is just the ids of the
|
** either return the original list, or a new list that is just the ids of the
|
||||||
@ -314,7 +301,7 @@ class FilterUtils
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
let toPush = this.frontendLocalZoneDateTimeStringToUTCStringForBackend(param[i]);
|
let toPush = ValueUtils.frontendLocalZoneDateTimeStringToUTCStringForBackend(param[i]);
|
||||||
rs.push(toPush);
|
rs.push(toPush);
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
@ -333,21 +320,6 @@ class FilterUtils
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
** Take a string date (w/o a timezone) like that our calendar widgets make,
|
|
||||||
** and convert it to UTC, e.g., for submitting to the backend.
|
|
||||||
*******************************************************************************/
|
|
||||||
public static frontendLocalZoneDateTimeStringToUTCStringForBackend(param: string)
|
|
||||||
{
|
|
||||||
let localDate = new Date(param);
|
|
||||||
let month = (1 + localDate.getUTCMonth());
|
|
||||||
let zp = FilterUtils.zeroPad;
|
|
||||||
let toPush = localDate.getUTCFullYear() + "-" + zp(month) + "-" + zp(localDate.getUTCDate()) + "T" + zp(localDate.getUTCHours()) + ":" + zp(localDate.getUTCMinutes()) + ":" + zp(localDate.getUTCSeconds()) + "Z";
|
|
||||||
console.log(`Input date was ${localDate}. Sending to backend as ${toPush}`);
|
|
||||||
return toPush;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
** Convert a filter field's value from the style that qqq uses, to the style that
|
** Convert a filter field's value from the style that qqq uses, to the style that
|
||||||
** the grid uses.
|
** the grid uses.
|
||||||
|
@ -373,6 +373,33 @@ class ValueUtils
|
|||||||
return (value);
|
return (value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
private static zeroPad = (n: number): string =>
|
||||||
|
{
|
||||||
|
if (n < 10)
|
||||||
|
{
|
||||||
|
return ("0" + n);
|
||||||
|
}
|
||||||
|
return (`${n}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Take a string date (w/o a timezone) like that our calendar widgets make,
|
||||||
|
** and convert it to UTC, e.g., for submitting to the backend.
|
||||||
|
*******************************************************************************/
|
||||||
|
public static frontendLocalZoneDateTimeStringToUTCStringForBackend(param: string)
|
||||||
|
{
|
||||||
|
let localDate = new Date(param);
|
||||||
|
let month = (1 + localDate.getUTCMonth());
|
||||||
|
let zp = ValueUtils.zeroPad;
|
||||||
|
let toPush = localDate.getUTCFullYear() + "-" + zp(month) + "-" + zp(localDate.getUTCDate()) + "T" + zp(localDate.getUTCHours()) + ":" + zp(localDate.getUTCMinutes()) + ":" + zp(localDate.getUTCSeconds()) + "Z";
|
||||||
|
console.log(`Input date was ${localDate}. Sending to backend as ${toPush}`);
|
||||||
|
return toPush;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Reference in New Issue
Block a user