
* Update to new design theme (#1631) * Update macaw to 0.3.0 (#1623) * Update macaw to 0.3 * Use proper pagination component * Fix type errors * Remove leftover import * Remove variant and color from confirm button * Remove alias * Update macaw * Fix button type * Random fixes (#1633) * Improve layout components * Use colored svgs * Minor fixes * Fix autocomplete loaders * Fix padding * Fix button variant * Remove codegen file * Fixes after bumping macaw to 0.3 part 2 (#1638) * Fix various visual bugs * Fix type errors * Bump macaw * Random fixes part 3 (#1647) * wip * Fix mismatched paddings * Fix actions container padding * Put story in the right directory * Fix shipping zone picker * Fix minor visual bugs * Remove unused imports * Move styles to separate file * Random fixes part 4 (#1641) * Fix various visual bugs * Fix type errors * Fix last table item padding * Add outline on hover * Fix spaces * Fix spaces * Remove dead code * Fix elevation * Remove dead code * Fix shadows * Add outline to expand button * Fix spacing * Fix spacings * Fix selectable tables hover * Use proper delete icon * Fix ConfirmButtonTransitionState imports * Update src/apps/components/CustomApps/CustomApps.tsx Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> * Rework error page (#1670) * Remake error page * Fix types * Update error id styles * Fix types * Login page rework (#1703) * Rework login page * Remove outline * Fix logo and footer placement * Sort imports * Random fixes part 5 (#1669) * Fix text color in dark mode * Update password reset pages (#1714) * Update password reset pages * Update src/auth/components/ResetPasswordPage/ResetPasswordPage.tsx Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix collection page * Update dark mode logo * Bring back "create app" button * Fix spacings * Fix selects * Fix login e2e test * Fix not found page displaying * Update selector * Add missing package * Let dropdown overflow through card * Fix scroll * Fix scroll * Fix overflow on grid element * Fix e2e tests * Fix data-test-id * Update snapshots * Update messages * Update macaw * Update snapshots * Use stable macaw version Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Update to new design theme (#1631) * Update macaw to 0.3.0 (#1623) * Update macaw to 0.3 * Use proper pagination component * Fix type errors * Remove leftover import * Remove variant and color from confirm button * Remove alias * Update macaw * Fix button type * Random fixes (#1633) * Improve layout components * Use colored svgs * Minor fixes * Fix autocomplete loaders * Fix padding * Fix button variant * Remove codegen file * Fixes after bumping macaw to 0.3 part 2 (#1638) * Fix various visual bugs * Fix type errors * Bump macaw * Random fixes part 3 (#1647) * wip * Fix mismatched paddings * Fix actions container padding * Put story in the right directory * Fix shipping zone picker * Fix minor visual bugs * Remove unused imports * Move styles to separate file * Random fixes part 4 (#1641) * Fix various visual bugs * Fix type errors * Fix last table item padding * Add outline on hover * Fix spaces * Fix spaces * Remove dead code * Fix elevation * Remove dead code * Fix shadows * Add outline to expand button * Fix spacing * Fix spacings * Fix selectable tables hover * Use proper delete icon * Fix ConfirmButtonTransitionState imports * Update src/apps/components/CustomApps/CustomApps.tsx Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> * Rework error page (#1670) * Remake error page * Fix types * Update error id styles * Fix types * Login page rework (#1703) * Rework login page * Remove outline * Fix logo and footer placement * Sort imports * Random fixes part 5 (#1669) * Fix text color in dark mode * Update password reset pages (#1714) * Update password reset pages * Update src/auth/components/ResetPasswordPage/ResetPasswordPage.tsx Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix collection page * Update dark mode logo * Bring back "create app" button * Fix spacings * Fix selects * Fix login e2e test * Fix not found page displaying * Update selector * Add missing package * Let dropdown overflow through card * Fix scroll * Fix scroll * Fix overflow on grid element * Fix e2e tests * Fix data-test-id * Update snapshots * Update messages * Update macaw * Update snapshots * Use stable macaw version Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com> * Fix visual bugs and artifacts * Fix dropdown menus being clipped (#1762) * wip * Fix clipped select menus * Remove unused import * Fix spacing * Fix tests * Fix select content appearing under dialogs (#1777) * Fix type errors * Fix bulk delete button placement * Fix filter arrow buttons * Fix messages * Remove backling from pages list * Move status above events * Update messages and snapshots Co-authored-by: Wojciech Mista <wojciech.mista@saleor.io> Co-authored-by: Jakub Majorek <majorek.jakub@gmail.com>
207 lines
7.1 KiB
TypeScript
207 lines
7.1 KiB
TypeScript
import ShippingZonesCard from "@saleor/channels/components/ShippingZonesCard/ShippingZonesCard";
|
|
import CardSpacer from "@saleor/components/CardSpacer";
|
|
import Form from "@saleor/components/Form";
|
|
import Grid from "@saleor/components/Grid";
|
|
import Savebar from "@saleor/components/Savebar";
|
|
import { SingleAutocompleteChoiceType } from "@saleor/components/SingleAutocompleteSelectField";
|
|
import { ChannelErrorFragment } from "@saleor/fragments/types/ChannelErrorFragment";
|
|
import { CountryFragment } from "@saleor/fragments/types/CountryFragment";
|
|
import { SearchData } from "@saleor/hooks/makeTopLevelSearch";
|
|
import { getParsedSearchData } from "@saleor/hooks/makeTopLevelSearch/utils";
|
|
import useStateFromProps from "@saleor/hooks/useStateFromProps";
|
|
import { ConfirmButtonTransitionState } from "@saleor/macaw-ui";
|
|
import {
|
|
getById,
|
|
getByUnmatchingId
|
|
} from "@saleor/orders/components/OrderReturnPage/utils";
|
|
import { SearchShippingZones_search_edges_node } from "@saleor/searches/types/SearchShippingZones";
|
|
import { FetchMoreProps } from "@saleor/types";
|
|
import { CountryCode } from "@saleor/types/globalTypes";
|
|
import createSingleAutocompleteSelectHandler from "@saleor/utils/handlers/singleAutocompleteSelectChangeHandler";
|
|
import { mapCountriesToChoices } from "@saleor/utils/maps";
|
|
import React, { useState } from "react";
|
|
|
|
import { ChannelForm, FormData } from "../../components/ChannelForm";
|
|
import { ChannelStatus } from "../../components/ChannelStatus/ChannelStatus";
|
|
import { Channel_channel } from "../../types/Channel";
|
|
import { ChannelShippingZones } from "./types";
|
|
import { getUpdatedIdsWithNewId, getUpdatedIdsWithoutNewId } from "./utils";
|
|
|
|
export interface ChannelDetailsPageProps {
|
|
channel?: Channel_channel;
|
|
currencyCodes?: SingleAutocompleteChoiceType[];
|
|
disabled: boolean;
|
|
disabledStatus?: boolean;
|
|
errors: ChannelErrorFragment[];
|
|
saveButtonBarState: ConfirmButtonTransitionState;
|
|
searchShippingZonesData?: SearchData;
|
|
fetchMoreShippingZones: FetchMoreProps;
|
|
channelShippingZones?: ChannelShippingZones;
|
|
countries: CountryFragment[];
|
|
onBack?: () => void;
|
|
onDelete?: () => void;
|
|
onSubmit: (data: FormData) => void;
|
|
updateChannelStatus?: () => void;
|
|
searchShippingZones: (query: string) => void;
|
|
}
|
|
|
|
export const ChannelDetailsPage: React.FC<ChannelDetailsPageProps> = ({
|
|
channel,
|
|
currencyCodes,
|
|
disabled,
|
|
disabledStatus,
|
|
onSubmit,
|
|
errors,
|
|
onBack,
|
|
onDelete,
|
|
saveButtonBarState,
|
|
updateChannelStatus,
|
|
searchShippingZones,
|
|
searchShippingZonesData,
|
|
fetchMoreShippingZones,
|
|
countries,
|
|
channelShippingZones = []
|
|
}) => {
|
|
const [selectedCurrencyCode, setSelectedCurrencyCode] = useState("");
|
|
const [
|
|
selectedCountryDisplayName,
|
|
setSelectedCountryDisplayName
|
|
] = useStateFromProps(channel?.defaultCountry.country || "");
|
|
|
|
const [shippingZonesToDisplay, setShippingZonesToDisplay] = useStateFromProps<
|
|
ChannelShippingZones
|
|
>(channelShippingZones);
|
|
|
|
const countryChoices = mapCountriesToChoices(countries || []);
|
|
|
|
const { defaultCountry, ...formData } = channel || {};
|
|
const initialData: FormData = {
|
|
currencyCode: "",
|
|
name: "",
|
|
slug: "",
|
|
shippingZonesIdsToAdd: [],
|
|
shippingZonesIdsToRemove: [],
|
|
defaultCountry: (defaultCountry?.code || "") as CountryCode,
|
|
...formData
|
|
};
|
|
|
|
const getFilteredShippingZonesChoices = (): SearchShippingZones_search_edges_node[] =>
|
|
getParsedSearchData({ data: searchShippingZonesData }).filter(
|
|
({ id: searchedZoneId }) =>
|
|
!shippingZonesToDisplay.some(({ id }) => id === searchedZoneId)
|
|
);
|
|
|
|
return (
|
|
<Form onSubmit={onSubmit} initial={initialData}>
|
|
{({ change, data, hasChanged, submit, set }) => {
|
|
const handleCurrencyCodeSelect = createSingleAutocompleteSelectHandler(
|
|
change,
|
|
setSelectedCurrencyCode,
|
|
currencyCodes
|
|
);
|
|
const handleDefaultCountrySelect = createSingleAutocompleteSelectHandler(
|
|
change,
|
|
setSelectedCountryDisplayName,
|
|
countryChoices
|
|
);
|
|
|
|
const addShippingZone = (zoneId: string) => {
|
|
set({
|
|
...data,
|
|
shippingZonesIdsToRemove: getUpdatedIdsWithoutNewId(
|
|
data.shippingZonesIdsToRemove,
|
|
zoneId
|
|
),
|
|
shippingZonesIdsToAdd: getUpdatedIdsWithNewId(
|
|
data.shippingZonesIdsToAdd,
|
|
zoneId
|
|
)
|
|
});
|
|
|
|
setShippingZonesToDisplay([
|
|
...shippingZonesToDisplay,
|
|
getParsedSearchData({ data: searchShippingZonesData }).find(
|
|
getById(zoneId)
|
|
)
|
|
]);
|
|
};
|
|
|
|
const removeShippingZone = (zoneId: string) => {
|
|
set({
|
|
...data,
|
|
shippingZonesIdsToAdd: getUpdatedIdsWithoutNewId(
|
|
data.shippingZonesIdsToAdd,
|
|
zoneId
|
|
),
|
|
shippingZonesIdsToRemove: getUpdatedIdsWithNewId(
|
|
data.shippingZonesIdsToRemove,
|
|
zoneId
|
|
)
|
|
});
|
|
|
|
setShippingZonesToDisplay(
|
|
shippingZonesToDisplay.filter(getByUnmatchingId(zoneId))
|
|
);
|
|
};
|
|
|
|
const formDisabled =
|
|
!data.name ||
|
|
!data.slug ||
|
|
!data.currencyCode ||
|
|
!data.defaultCountry ||
|
|
!(data.name.trim().length > 0);
|
|
|
|
return (
|
|
<>
|
|
<Grid>
|
|
<div>
|
|
<ChannelForm
|
|
data={data}
|
|
disabled={disabled}
|
|
currencyCodes={currencyCodes}
|
|
countries={countryChoices}
|
|
selectedCurrencyCode={selectedCurrencyCode}
|
|
selectedCountryDisplayName={selectedCountryDisplayName}
|
|
onChange={change}
|
|
onCurrencyCodeChange={handleCurrencyCodeSelect}
|
|
onDefaultCountryChange={handleDefaultCountrySelect}
|
|
errors={errors}
|
|
/>
|
|
</div>
|
|
<div>
|
|
{!!updateChannelStatus && (
|
|
<>
|
|
<ChannelStatus
|
|
isActive={channel?.isActive}
|
|
disabled={disabledStatus}
|
|
updateChannelStatus={updateChannelStatus}
|
|
/>
|
|
<CardSpacer />
|
|
</>
|
|
)}
|
|
<ShippingZonesCard
|
|
shippingZonesChoices={getFilteredShippingZonesChoices()}
|
|
shippingZones={shippingZonesToDisplay}
|
|
addShippingZone={addShippingZone}
|
|
removeShippingZone={removeShippingZone}
|
|
searchShippingZones={searchShippingZones}
|
|
fetchMoreShippingZones={fetchMoreShippingZones}
|
|
/>
|
|
</div>
|
|
</Grid>
|
|
<Savebar
|
|
onCancel={onBack}
|
|
onSubmit={submit}
|
|
onDelete={onDelete}
|
|
state={saveButtonBarState}
|
|
disabled={disabled || formDisabled || !onSubmit || !hasChanged}
|
|
/>
|
|
</>
|
|
);
|
|
}}
|
|
</Form>
|
|
);
|
|
};
|
|
|
|
ChannelDetailsPage.displayName = "ChannelDetailsPage";
|
|
export default ChannelDetailsPage;
|