fix(admin-ui): backlog sweep — 7 review items
This commit is contained in:
@@ -385,9 +385,18 @@ function DictionaryDetail() {
|
||||
const rawRecordQuery = useRecordRaw(name, editingKey)
|
||||
|
||||
const handleSubmit = (req: CreateRecordRequest) => {
|
||||
// Fill validFrom at submit (review #5): defaultValues в RHF берётся
|
||||
// ТОЛЬКО при mount. Если user открыл modal в 12:00 и submit в 12:05 —
|
||||
// `validFrom` в req это значение из 12:00. Backend check `validFrom >
|
||||
// existingFrom` может fail если existing запись свежее. Submit-time
|
||||
// refresh гарантирует что validFrom не устарел между mount и submit.
|
||||
const submitReq: CreateRecordRequest = {
|
||||
...req,
|
||||
validFrom: req.validFrom && req.validFrom.length > 0 ? req.validFrom : nowIsoLocal(),
|
||||
}
|
||||
if (edit.kind === 'create') {
|
||||
createMut.mutate(
|
||||
{ payload: req, idempotencyKey: recordIdempotencyKey },
|
||||
{ payload: submitReq, idempotencyKey: recordIdempotencyKey },
|
||||
{
|
||||
onSuccess: () => {
|
||||
setEdit({ kind: 'closed' })
|
||||
@@ -401,7 +410,7 @@ function DictionaryDetail() {
|
||||
updateMut.mutate(
|
||||
{
|
||||
businessKey: edit.record.businessKey,
|
||||
payload: req,
|
||||
payload: submitReq,
|
||||
idempotencyKey: recordIdempotencyKey,
|
||||
},
|
||||
{
|
||||
@@ -436,6 +445,10 @@ function DictionaryDetail() {
|
||||
(code === 'x_references_blocked_by_dependents' ||
|
||||
code === 'x_references_cascade_required')
|
||||
) {
|
||||
// Reset closeMut.error до открытия cascade dialog'а — иначе stale
|
||||
// 409 mesg может проскочить в открытом cascade UI пока user
|
||||
// ещё не сделал retry (review #18).
|
||||
closeMut.reset()
|
||||
setEdit({ kind: 'closed' })
|
||||
setCloseReason('')
|
||||
setCascadeKey(targetKey)
|
||||
@@ -914,11 +927,11 @@ function DictionaryDetail() {
|
||||
businessKey: rawRecordQuery.data.businessKey,
|
||||
data: rawRecordQuery.data.data,
|
||||
// Edit в bitemporal model = «создаём новую версию с этого момента,
|
||||
// старая закрывается». Дефолтим validFrom = now (а не historical
|
||||
// validFrom существующей записи): иначе юзер выберет момент
|
||||
// ДО любой версии и backend не найдёт что закрывать.
|
||||
// старая закрывается». validFrom оставляем пустым — handleSubmit
|
||||
// подставит nowIsoLocal() at submit-time (review #5: иначе stale
|
||||
// если user долго держит modal открытым).
|
||||
// validTo пустой = бессрочно (или до следующей правки).
|
||||
validFrom: nowIsoLocal(),
|
||||
validFrom: '',
|
||||
validTo: '',
|
||||
}}
|
||||
onSubmit={handleSubmit}
|
||||
|
||||
Reference in New Issue
Block a user