mirror of
https://github.com/nowcommunity/nowdatabase.git
synced 2026-10-12 19:13:52 +03:00
Clear time unit dirty state before save navigation
This commit is contained in:
@@ -139,6 +139,7 @@ export type DetailContextType<T> = {
|
||||
setFieldsWithErrors: SetFieldsWithErrorsType
|
||||
isDirty: boolean
|
||||
resetEditData: () => void
|
||||
markEditDataClean?: (editData?: unknown) => void
|
||||
}
|
||||
|
||||
export type SetEditDataType<T> = (editData: EditDataType<T>) => void
|
||||
@@ -191,6 +192,14 @@ export const DetailContextProvider = <T extends object>({
|
||||
setEditData(cloneDeep(initialEditData))
|
||||
setIsDirty(false)
|
||||
}
|
||||
|
||||
const markEditDataClean = (nextEditData?: unknown) => {
|
||||
const cleanEditData = cloneDeep((nextEditData as EditDataType<T> | undefined) ?? editData)
|
||||
setInitialEditData(cleanEditData)
|
||||
setEditData(cloneDeep(cleanEditData))
|
||||
setIsDirty(false)
|
||||
}
|
||||
|
||||
return (
|
||||
<DetailContext.Provider
|
||||
value={{
|
||||
@@ -199,6 +208,7 @@ export const DetailContextProvider = <T extends object>({
|
||||
setEditData: handleSetEditData,
|
||||
isDirty,
|
||||
resetEditData,
|
||||
markEditDataClean,
|
||||
validator: (editData: unknown, fieldName: keyof EditDataType<T>) =>
|
||||
contextState.validator(editData as EditDataType<T>, fieldName),
|
||||
}}
|
||||
|
||||
@@ -118,7 +118,11 @@ export const DetailView = <T extends object>({
|
||||
}: {
|
||||
tabs: TabType[]
|
||||
data: T
|
||||
onWrite?: (editData: EditDataType<T>, setEditData: (editData: EditDataType<T>) => void) => Promise<void>
|
||||
onWrite?: (
|
||||
editData: EditDataType<T>,
|
||||
setEditData: (editData: EditDataType<T>) => void,
|
||||
markEditDataClean?: (editData?: EditDataType<T>) => void
|
||||
) => Promise<void>
|
||||
validator: (editData: EditDataType<T>, field: keyof EditDataType<T>) => ValidationObject
|
||||
isNew?: boolean
|
||||
isUserPage?: boolean
|
||||
|
||||
@@ -23,13 +23,27 @@ export const WriteButton = <T,>({
|
||||
hasStagingMode = false,
|
||||
disabled = false,
|
||||
}: {
|
||||
onWrite: (editData: EditDataType<T>, setEditData: (editData: EditDataType<T>) => void) => Promise<void>
|
||||
onWrite: (
|
||||
editData: EditDataType<T>,
|
||||
setEditData: (editData: EditDataType<T>) => void,
|
||||
markEditDataClean?: (editData?: EditDataType<T>) => void
|
||||
) => Promise<void>
|
||||
taxonomy?: boolean
|
||||
hasStagingMode?: boolean
|
||||
disabled?: boolean
|
||||
}) => {
|
||||
const { data, editData, setEditData, mode, setMode, validator, fieldsWithErrors, setFieldsWithErrors, isDirty } =
|
||||
useDetailContext<T>()
|
||||
const {
|
||||
data,
|
||||
editData,
|
||||
setEditData,
|
||||
mode,
|
||||
setMode,
|
||||
validator,
|
||||
fieldsWithErrors,
|
||||
setFieldsWithErrors,
|
||||
isDirty,
|
||||
markEditDataClean,
|
||||
} = useDetailContext<T>()
|
||||
const user = useUser()
|
||||
const [loading, setLoading] = useState(false)
|
||||
const { notify } = useNotify()
|
||||
@@ -173,7 +187,7 @@ export const WriteButton = <T,>({
|
||||
}
|
||||
}
|
||||
|
||||
await onWrite((speciesEditData as EditDataType<T>) ?? editData, setEditData)
|
||||
await onWrite((speciesEditData as EditDataType<T>) ?? editData, setEditData, markEditDataClean)
|
||||
setMode('read')
|
||||
}
|
||||
|
||||
@@ -193,7 +207,7 @@ export const WriteButton = <T,>({
|
||||
}
|
||||
|
||||
setLoading(true)
|
||||
await onWrite(editData, setEditData)
|
||||
await onWrite(editData, setEditData, markEditDataClean)
|
||||
setLoading(false)
|
||||
setMode('read')
|
||||
}
|
||||
|
||||
@@ -53,11 +53,16 @@ export const TimeUnitDetails = ({
|
||||
|
||||
const onWrite = async (
|
||||
editData: EditDataType<TimeUnitDetailsType>,
|
||||
setEditData: (editData: EditDataType<TimeUnitDetailsType>) => void
|
||||
setEditData: (editData: EditDataType<TimeUnitDetailsType>) => void,
|
||||
markEditDataClean?: (editData?: EditDataType<TimeUnitDetailsType>) => void
|
||||
) => {
|
||||
try {
|
||||
const normalizedEditData = normalizeRank(editData)
|
||||
const { tu_name } = await editTimeUnitRequest(normalizedEditData).unwrap()
|
||||
markEditDataClean?.({
|
||||
...normalizedEditData,
|
||||
tu_name,
|
||||
})
|
||||
unsavedChanges?.setDirty(false)
|
||||
setTimeout(() => navigate(`/time-unit/${tu_name}`), 15)
|
||||
notify('Edited item successfully.')
|
||||
|
||||
Reference in New Issue
Block a user