mirror of
https://github.com/whekin/household-bot.git
synced 2026-03-31 21:04:03 +00:00
Add category draft state
This commit is contained in:
@@ -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,41 +2281,28 @@ 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) =>
|
name: value
|
||||||
item.slug === editingCategory()!.slug
|
|
||||||
? {
|
|
||||||
...item,
|
|
||||||
name: value
|
|
||||||
}
|
|
||||||
: item
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
: current
|
: current
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
onEditingCategoryActiveChange={(value) =>
|
onEditingCategoryActiveChange={(value) =>
|
||||||
setAdminSettings((current) =>
|
setEditingCategoryDraft((current) =>
|
||||||
current && editingCategory()
|
current
|
||||||
? {
|
? {
|
||||||
...current,
|
...current,
|
||||||
categories: current.categories.map((item) =>
|
isActive: value
|
||||||
item.slug === editingCategory()!.slug
|
|
||||||
? {
|
|
||||||
...item,
|
|
||||||
isActive: value
|
|
||||||
}
|
|
||||||
: item
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
: current
|
: current
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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')
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user