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
|
setFieldsWithErrors: SetFieldsWithErrorsType
|
||||||
isDirty: boolean
|
isDirty: boolean
|
||||||
resetEditData: () => void
|
resetEditData: () => void
|
||||||
|
markEditDataClean?: (editData?: unknown) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export type SetEditDataType<T> = (editData: EditDataType<T>) => void
|
export type SetEditDataType<T> = (editData: EditDataType<T>) => void
|
||||||
@@ -191,6 +192,14 @@ export const DetailContextProvider = <T extends object>({
|
|||||||
setEditData(cloneDeep(initialEditData))
|
setEditData(cloneDeep(initialEditData))
|
||||||
setIsDirty(false)
|
setIsDirty(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const markEditDataClean = (nextEditData?: unknown) => {
|
||||||
|
const cleanEditData = cloneDeep((nextEditData as EditDataType<T> | undefined) ?? editData)
|
||||||
|
setInitialEditData(cleanEditData)
|
||||||
|
setEditData(cloneDeep(cleanEditData))
|
||||||
|
setIsDirty(false)
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DetailContext.Provider
|
<DetailContext.Provider
|
||||||
value={{
|
value={{
|
||||||
@@ -199,6 +208,7 @@ export const DetailContextProvider = <T extends object>({
|
|||||||
setEditData: handleSetEditData,
|
setEditData: handleSetEditData,
|
||||||
isDirty,
|
isDirty,
|
||||||
resetEditData,
|
resetEditData,
|
||||||
|
markEditDataClean,
|
||||||
validator: (editData: unknown, fieldName: keyof EditDataType<T>) =>
|
validator: (editData: unknown, fieldName: keyof EditDataType<T>) =>
|
||||||
contextState.validator(editData as EditDataType<T>, fieldName),
|
contextState.validator(editData as EditDataType<T>, fieldName),
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -118,7 +118,11 @@ export const DetailView = <T extends object>({
|
|||||||
}: {
|
}: {
|
||||||
tabs: TabType[]
|
tabs: TabType[]
|
||||||
data: T
|
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
|
validator: (editData: EditDataType<T>, field: keyof EditDataType<T>) => ValidationObject
|
||||||
isNew?: boolean
|
isNew?: boolean
|
||||||
isUserPage?: boolean
|
isUserPage?: boolean
|
||||||
|
|||||||
@@ -23,13 +23,27 @@ export const WriteButton = <T,>({
|
|||||||
hasStagingMode = false,
|
hasStagingMode = false,
|
||||||
disabled = 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
|
taxonomy?: boolean
|
||||||
hasStagingMode?: boolean
|
hasStagingMode?: boolean
|
||||||
disabled?: boolean
|
disabled?: boolean
|
||||||
}) => {
|
}) => {
|
||||||
const { data, editData, setEditData, mode, setMode, validator, fieldsWithErrors, setFieldsWithErrors, isDirty } =
|
const {
|
||||||
useDetailContext<T>()
|
data,
|
||||||
|
editData,
|
||||||
|
setEditData,
|
||||||
|
mode,
|
||||||
|
setMode,
|
||||||
|
validator,
|
||||||
|
fieldsWithErrors,
|
||||||
|
setFieldsWithErrors,
|
||||||
|
isDirty,
|
||||||
|
markEditDataClean,
|
||||||
|
} = useDetailContext<T>()
|
||||||
const user = useUser()
|
const user = useUser()
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const { notify } = useNotify()
|
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')
|
setMode('read')
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +207,7 @@ export const WriteButton = <T,>({
|
|||||||
}
|
}
|
||||||
|
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
await onWrite(editData, setEditData)
|
await onWrite(editData, setEditData, markEditDataClean)
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
setMode('read')
|
setMode('read')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,11 +53,16 @@ export const TimeUnitDetails = ({
|
|||||||
|
|
||||||
const onWrite = async (
|
const onWrite = async (
|
||||||
editData: EditDataType<TimeUnitDetailsType>,
|
editData: EditDataType<TimeUnitDetailsType>,
|
||||||
setEditData: (editData: EditDataType<TimeUnitDetailsType>) => void
|
setEditData: (editData: EditDataType<TimeUnitDetailsType>) => void,
|
||||||
|
markEditDataClean?: (editData?: EditDataType<TimeUnitDetailsType>) => void
|
||||||
) => {
|
) => {
|
||||||
try {
|
try {
|
||||||
const normalizedEditData = normalizeRank(editData)
|
const normalizedEditData = normalizeRank(editData)
|
||||||
const { tu_name } = await editTimeUnitRequest(normalizedEditData).unwrap()
|
const { tu_name } = await editTimeUnitRequest(normalizedEditData).unwrap()
|
||||||
|
markEditDataClean?.({
|
||||||
|
...normalizedEditData,
|
||||||
|
tu_name,
|
||||||
|
})
|
||||||
unsavedChanges?.setDirty(false)
|
unsavedChanges?.setDirty(false)
|
||||||
setTimeout(() => navigate(`/time-unit/${tu_name}`), 15)
|
setTimeout(() => navigate(`/time-unit/${tu_name}`), 15)
|
||||||
notify('Edited item successfully.')
|
notify('Edited item successfully.')
|
||||||
|
|||||||
Reference in New Issue
Block a user