fix(): Deleted default sales channel should be prevented (#10193)

FIXES CMRC-722

**What**
- It should not be allowed to delete a default sales channel
- The admin does not allow to delete a sales channel use as the default for the store
This commit is contained in:
Adrien de Peretti
2024-12-05 17:19:45 +01:00
committed by GitHub
parent 2b455b15a6
commit 559fc6587a
9 changed files with 510 additions and 1563 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -2334,6 +2334,9 @@
"update": "Sales channel updated successfully",
"delete": "Sales channel deleted successfully"
},
"tooltip": {
"cannotDeleteDefault": "Cannot delete default sales channel"
},
"products": {
"list": {
"noRecordsMessage": "There are no products in the sales channel."

View File

@@ -13,8 +13,12 @@ import { createColumnHelper } from "@tanstack/react-table"
import { useMemo } from "react"
import { useTranslation } from "react-i18next"
import { Link } from "react-router-dom"
import { ActionMenu } from "../../../../components/common/action-menu"
import {
ActionGroup,
ActionMenu,
} from "../../../../components/common/action-menu"
import { DataTable } from "../../../../components/table/data-table"
import { useStore } from "../../../../hooks/api"
import {
useDeleteSalesChannel,
useSalesChannels,
@@ -29,9 +33,12 @@ const PAGE_SIZE = 20
export const SalesChannelListTable = () => {
const { t } = useTranslation()
const { store } = useStore()
const { raw, searchParams } = useSalesChannelTableQuery({
pageSize: PAGE_SIZE,
})
const {
sales_channels,
count,
@@ -40,13 +47,22 @@ export const SalesChannelListTable = () => {
error,
} = useSalesChannels(searchParams, {
placeholderData: keepPreviousData,
})
}) as Omit<ReturnType<typeof useSalesChannels>, "sales_channels"> & {
sales_channels: (HttpTypes.AdminSalesChannel & { is_default?: boolean })[]
}
const columns = useColumns()
const filters = useSalesChannelTableFilters()
const sales_channels_data =
sales_channels?.map((sales_channel) => {
sales_channel.is_default =
store?.default_sales_channel_id === sales_channel.id
return sales_channel
}) ?? []
const { table } = useDataTable({
data: sales_channels ?? [],
data: sales_channels_data,
columns,
count,
enablePagination: true,
@@ -97,7 +113,7 @@ export const SalesChannelListTable = () => {
const SalesChannelActions = ({
salesChannel,
}: {
salesChannel: HttpTypes.AdminSalesChannel
salesChannel: HttpTypes.AdminSalesChannel & { is_default?: boolean }
}) => {
const { t } = useTranslation()
const prompt = usePrompt()
@@ -129,30 +145,30 @@ const SalesChannelActions = ({
})
}
return (
<ActionMenu
groups={[
const disabledTooltip = salesChannel.is_default
? t("salesChannels.tooltip.cannotDeleteDefault")
: undefined
const groups: ActionGroup[] = [
{
actions: [
{
actions: [
{
icon: <PencilSquare />,
label: t("actions.edit"),
to: `/settings/sales-channels/${salesChannel.id}/edit`,
},
],
icon: <PencilSquare />,
label: t("actions.edit"),
to: `/settings/sales-channels/${salesChannel.id}/edit`,
},
{
actions: [
{
icon: <Trash />,
label: t("actions.delete"),
onClick: handleDelete,
},
],
icon: <Trash />,
label: t("actions.delete"),
onClick: handleDelete,
disabled: salesChannel.is_default,
disabledTooltip,
},
]}
/>
)
],
},
]
return <ActionMenu groups={groups} />
}
const columnHelper = createColumnHelper<HttpTypes.AdminSalesChannel>()