fix(ui): продолжать частичное сохранение пользователя без дублей
This commit is contained in:
1 parent
02ca48ef9c
commit
4896d8ef6f
9 files changed
+286
-113
No files matched your search
@@ -141,12 +141,16 @@ interface UserSheetProps {
|
||||
isLive: boolean
|
||||
backendUrl: string
|
||||
saving?: boolean
|
||||
saveError?: string | null
|
||||
saveBlocked?: boolean
|
||||
saveResume?: boolean
|
||||
onCheckCatalogs?: () => void
|
||||
onSave: (form: AppUserForm) => void
|
||||
onClose: () => void
|
||||
}
|
||||
|
||||
function UserSheet({
|
||||
open, user, users, servers, isLive, backendUrl, saving, onSave, onClose,
|
||||
open, user, users, servers, isLive, backendUrl, saving, saveError, saveBlocked, saveResume, onCheckCatalogs, onSave, onClose,
|
||||
}: UserSheetProps) {
|
||||
const isCreate = user === null
|
||||
const [sheetStep, setSheetStep] = useState(1)
|
||||
@@ -158,17 +162,6 @@ function UserSheet({
|
||||
const [expandedWg, setExpandedWg] = useState<string | null>(null)
|
||||
const [newComment, setNewComment] = useState("")
|
||||
|
||||
useEffect(() => {
|
||||
if (!open) return
|
||||
setForm(user ? toForm(user) : emptyForm(servers))
|
||||
setSheetStep(1)
|
||||
setErrors({})
|
||||
setCatalogServerId(servers[0]?.id ?? "")
|
||||
setSelectedPicks([])
|
||||
setExpandedWg(null)
|
||||
setNewComment("")
|
||||
}, [open, user, servers])
|
||||
|
||||
useEffect(() => {
|
||||
if (!open || !catalogServerId) {
|
||||
setCatalog([])
|
||||
@@ -298,7 +291,7 @@ function UserSheet({
|
||||
const selectedPickKeys = useMemo(() => new Set(selectedPicks.map(pickKey)), [selectedPicks])
|
||||
|
||||
return (
|
||||
<Sheet open={open} onOpenChange={(v) => { if (!v) onClose() }}>
|
||||
<Sheet open={open} onOpenChange={(v) => { if (!v && !saving) onClose() }}>
|
||||
<SheetContent side="right" className="w-full sm:max-w-lg flex flex-col gap-0 p-0">
|
||||
<SheetHeader className="px-6 pt-6 pb-4 border-b shrink-0">
|
||||
<SheetTitle>{isCreate ? "Новый пользователь" : "Редактировать пользователя"}</SheetTitle>
|
||||
@@ -307,6 +300,8 @@ function UserSheet({
|
||||
</SheetDescription>
|
||||
</SheetHeader>
|
||||
|
||||
{saveError && <div role="alert" aria-label="Сохранение пользователя" className="px-6 py-3 text-sm text-destructive">{saveError}{saveBlocked && <Button type="button" variant="outline" disabled={saving} onClick={onCheckCatalogs}>Проверить список пользователей</Button>}</div>}
|
||||
<fieldset disabled={saving} className="flex-1 min-h-0 flex flex-col">
|
||||
<Stepper value={sheetStep} onValueChange={setSheetStep} className="flex-1 flex flex-col min-h-0 px-6 py-5">
|
||||
<StepperNav className="mb-5">
|
||||
<StepperItem step={1}>
|
||||
@@ -670,18 +665,19 @@ function UserSheet({
|
||||
</Stepper>
|
||||
|
||||
<SheetFooter className="px-6 py-4 border-t shrink-0 flex-row gap-2">
|
||||
<SheetClose render={<Button variant="outline" />}>Отмена</SheetClose>
|
||||
<SheetClose render={<Button type="button" variant="outline" disabled={saving} />}>Отмена</SheetClose>
|
||||
{sheetStep > 1 && (
|
||||
<Button variant="outline" onClick={() => setSheetStep((s) => s - 1)}>Назад</Button>
|
||||
)}
|
||||
{sheetStep < 4 ? (
|
||||
<Button className="ml-auto" onClick={() => setSheetStep((s) => s + 1)}>Далее</Button>
|
||||
) : (
|
||||
<Button className="ml-auto" disabled={saving} onClick={submit}>
|
||||
{isCreate ? "Создать" : "Сохранить"}
|
||||
<Button className="ml-auto" disabled={saving || saveBlocked} aria-busy={saving} onClick={submit}>
|
||||
{saveResume ? "Продолжить сохранение" : isCreate ? "Создать" : "Сохранить"}
|
||||
</Button>
|
||||
)}
|
||||
</SheetFooter>
|
||||
</fieldset>
|
||||
</SheetContent>
|
||||
</Sheet>
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user