saleor-dashboard/src/channels/pages/ChannelDetailsPage/ChannelDetailsPage.tsx
Marek Choiński 3f5cacb8a0
Saleor 1906 user should be able to delete a channel if there are no orders associated with it (#901)
* Update type of channelDetailsFragment

* Add hasOrder recognition

* Update types

* Add delete channel on details page

* Refactor fixtures

* Update locale

* Refactor

* Remove redundant assignment

* Move messages to defineMessages

* Simplify variables

* Create util getChannelsCurrencyChoices

* Add message

* Update locale

* Refactor to mapNodeToChoice
2021-01-12 15:44:11 +01:00

96 lines
3 KiB
TypeScript

import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton";
import Form from "@saleor/components/Form";
import Grid from "@saleor/components/Grid";
import SaveButtonBar from "@saleor/components/SaveButtonBar";
import { SingleAutocompleteChoiceType } from "@saleor/components/SingleAutocompleteSelectField";
import { ChannelErrorFragment } from "@saleor/fragments/types/ChannelErrorFragment";
import createSingleAutocompleteSelectHandler from "@saleor/utils/handlers/singleAutocompleteSelectChangeHandler";
import React from "react";
import { ChannelForm, FormData } from "../../components/ChannelForm";
import { ChannelStatus } from "../../components/ChannelStatus/ChannelStatus";
import { Channel_channel } from "../../types/Channel";
export interface ChannelDetailsPageProps {
channel?: Channel_channel;
currencyCodes?: SingleAutocompleteChoiceType[];
disabled: boolean;
disabledStatus?: boolean;
errors: ChannelErrorFragment[];
saveButtonBarState: ConfirmButtonTransitionState;
onBack?: () => void;
onDelete?: () => void;
onSubmit?: (data: FormData) => void;
updateChannelStatus?: () => void;
}
const initialData: FormData = {
currencyCode: "",
name: "",
slug: ""
};
export const ChannelDetailsPage: React.FC<ChannelDetailsPageProps> = ({
channel,
currencyCodes,
disabled,
disabledStatus,
errors,
onBack,
onSubmit,
onDelete,
saveButtonBarState,
updateChannelStatus
}) => {
const [selectedCurrencyCode, setSelectedCurrencyCode] = React.useState("");
return (
<Form onSubmit={onSubmit} initial={channel || initialData}>
{({ change, data, hasChanged, submit }) => {
const handleCurrencyCodeSelect = createSingleAutocompleteSelectHandler(
change,
setSelectedCurrencyCode,
currencyCodes
);
const formDisabled = !data.name || !data.slug || !data.currencyCode;
return (
<>
<Grid>
<div>
<ChannelForm
data={data}
disabled={disabled}
currencyCodes={currencyCodes}
selectedCurrencyCode={selectedCurrencyCode}
onChange={change}
onCurrencyCodeChange={handleCurrencyCodeSelect}
errors={errors}
/>
</div>
{!!updateChannelStatus && (
<div>
<ChannelStatus
isActive={channel?.isActive}
disabled={disabledStatus}
updateChannelStatus={updateChannelStatus}
/>
</div>
)}
</Grid>
<SaveButtonBar
onCancel={onBack}
onSave={submit}
onDelete={onDelete}
state={saveButtonBarState}
disabled={disabled || formDisabled || !onSubmit || !hasChanged}
/>
</>
);
}}
</Form>
);
};
ChannelDetailsPage.displayName = "ChannelDetailsPage";
export default ChannelDetailsPage;