Add category draft state

This commit is contained in:
2026-03-12 01:02:23 +04:00
parent a20f0a2092
commit 7005efbc7b
2 changed files with 45 additions and 27 deletions

View File

@@ -371,6 +371,10 @@ function App() {
const [editingUtilityBillId, setEditingUtilityBillId] = createSignal<string | null>(null) const [editingUtilityBillId, setEditingUtilityBillId] = createSignal<string | null>(null)
const [editingMemberId, setEditingMemberId] = createSignal<string | null>(null) const [editingMemberId, setEditingMemberId] = createSignal<string | null>(null)
const [editingCategorySlug, setEditingCategorySlug] = createSignal<string | null>(null) const [editingCategorySlug, setEditingCategorySlug] = createSignal<string | null>(null)
const [editingCategoryDraft, setEditingCategoryDraft] = createSignal<{
name: string
isActive: boolean
} | null>(null)
const [billingSettingsOpen, setBillingSettingsOpen] = createSignal(false) const [billingSettingsOpen, setBillingSettingsOpen] = createSignal(false)
const [cycleRentOpen, setCycleRentOpen] = createSignal(false) const [cycleRentOpen, setCycleRentOpen] = createSignal(false)
const [addingUtilityBillOpen, setAddingUtilityBillOpen] = createSignal(false) const [addingUtilityBillOpen, setAddingUtilityBillOpen] = createSignal(false)
@@ -2237,8 +2241,30 @@ function App() {
currency: value currency: value
})) }))
} }
onOpenCategoryEditor={setEditingCategorySlug} onOpenCategoryEditor={(slug) => {
onCloseCategoryEditor={() => setEditingCategorySlug(null)} setEditingCategorySlug(slug)
if (slug === '__new__') {
setNewCategoryName('')
setEditingCategoryDraft(null)
return
}
const category =
adminSettings()?.categories.find((item) => item.slug === slug) ?? null
setEditingCategoryDraft(
category
? {
name: category.name,
isActive: category.isActive
}
: null
)
}}
onCloseCategoryEditor={() => {
setEditingCategorySlug(null)
setEditingCategoryDraft(null)
setNewCategoryName('')
}}
onNewCategoryNameChange={setNewCategoryName} onNewCategoryNameChange={setNewCategoryName}
onSaveNewCategory={() => onSaveNewCategory={() =>
handleSaveUtilityCategory({ handleSaveUtilityCategory({
@@ -2255,42 +2281,29 @@ function App() {
return handleSaveUtilityCategory({ return handleSaveUtilityCategory({
slug: category.slug, slug: category.slug,
name: category.name, name: editingCategoryDraft()?.name ?? category.name,
sortOrder: category.sortOrder, sortOrder: category.sortOrder,
isActive: category.isActive isActive: editingCategoryDraft()?.isActive ?? category.isActive
}) })
}} }}
editingCategoryDraft={editingCategoryDraft()}
onEditingCategoryNameChange={(value) => onEditingCategoryNameChange={(value) =>
setAdminSettings((current) => setEditingCategoryDraft((current) =>
current && editingCategory() current
? { ? {
...current, ...current,
categories: current.categories.map((item) =>
item.slug === editingCategory()!.slug
? {
...item,
name: value name: value
} }
: item
)
}
: current : current
) )
} }
onEditingCategoryActiveChange={(value) => onEditingCategoryActiveChange={(value) =>
setAdminSettings((current) => setEditingCategoryDraft((current) =>
current && editingCategory() current
? { ? {
...current, ...current,
categories: current.categories.map((item) =>
item.slug === editingCategory()!.slug
? {
...item,
isActive: value isActive: value
} }
: item
)
}
: current : current
) )
} }

View File

@@ -69,6 +69,10 @@ type Props = {
utilityBillDrafts: Record<string, UtilityBillDraft> utilityBillDrafts: Record<string, UtilityBillDraft>
editingCategorySlug: string | null editingCategorySlug: string | null
editingCategory: MiniAppAdminSettingsPayload['categories'][number] | null editingCategory: MiniAppAdminSettingsPayload['categories'][number] | null
editingCategoryDraft: {
name: string
isActive: boolean
} | null
editingMember: MiniAppAdminSettingsPayload['members'][number] | null editingMember: MiniAppAdminSettingsPayload['members'][number] | null
memberDisplayNameDrafts: Record<string, string> memberDisplayNameDrafts: Record<string, string>
memberStatusDrafts: Record<string, 'active' | 'away' | 'left'> memberStatusDrafts: Record<string, 'active' | 'away' | 'left'>
@@ -779,14 +783,15 @@ export function HouseScreen(props: Props) {
) : ( ) : (
(() => { (() => {
const category = props.editingCategory const category = props.editingCategory
if (!category) { const draft = props.editingCategoryDraft
if (!category || !draft) {
return null return null
} }
return ( return (
<div class="editor-grid"> <div class="editor-grid">
<Field label={props.copy.utilityCategoryName ?? ''} wide> <Field label={props.copy.utilityCategoryName ?? ''} wide>
<input <input
value={category.name} value={draft.name}
onInput={(event) => onInput={(event) =>
props.onEditingCategoryNameChange(event.currentTarget.value) props.onEditingCategoryNameChange(event.currentTarget.value)
} }
@@ -794,7 +799,7 @@ export function HouseScreen(props: Props) {
</Field> </Field>
<Field label={props.copy.utilityCategoryActive ?? ''}> <Field label={props.copy.utilityCategoryActive ?? ''}>
<select <select
value={category.isActive ? 'true' : 'false'} value={draft.isActive ? 'true' : 'false'}
onChange={(event) => onChange={(event) =>
props.onEditingCategoryActiveChange(event.currentTarget.value === 'true') props.onEditingCategoryActiveChange(event.currentTarget.value === 'true')
} }