import VerticalSpacer from "@dashboard/apps/components/VerticalSpacer"; import CardTitle from "@dashboard/components/CardTitle"; import Container from "@dashboard/components/Container"; import Grid from "@dashboard/components/Grid"; import Metadata from "@dashboard/components/Metadata"; import PageHeader from "@dashboard/components/PageHeader"; import Savebar from "@dashboard/components/Savebar"; import Skeleton from "@dashboard/components/Skeleton"; import { configurationMenuUrl } from "@dashboard/configuration"; import { TaxClassFragment } from "@dashboard/graphql"; import { useClientPagination } from "@dashboard/hooks/useClientPagination/useClientPagination"; import { SubmitPromise } from "@dashboard/hooks/useForm"; import useNavigator from "@dashboard/hooks/useNavigator"; import { getById } from "@dashboard/misc"; import { parseQuery } from "@dashboard/orders/components/OrderCustomerAddressesEditDialog/utils"; import TaxPageTitle from "@dashboard/taxes/components/TaxPageTitle"; import { taxesMessages } from "@dashboard/taxes/messages"; import { TaxClassesPageFormData } from "@dashboard/taxes/types"; import { useAutofocus } from "@dashboard/taxes/utils/useAutofocus"; import { isLastElement } from "@dashboard/taxes/utils/utils"; import { getFormErrors } from "@dashboard/utils/errors"; import getTaxesErrorMessage from "@dashboard/utils/errors/taxes"; import { Card, CardContent, Divider, InputAdornment, TextField, } from "@material-ui/core"; import { ConfirmButtonTransitionState, List, ListHeader, ListItem, ListItemCell, PageTab, PageTabs, SearchIcon, } from "@saleor/macaw-ui"; import React, { useEffect, useMemo, useState } from "react"; import { FormattedMessage, useIntl } from "react-intl"; import TaxInput from "../../components/TaxInput"; import { TaxPagination } from "../../components/TaxPagination"; import TaxClassesForm from "./form"; import { useStyles } from "./styles"; import TaxClassesMenu from "./TaxClassesMenu"; interface TaxClassesPageProps { taxClasses: TaxClassFragment[] | undefined; selectedTaxClassId: string; handleTabChange: (tab: string) => void; savebarState: ConfirmButtonTransitionState; disabled: boolean; onCreateNewButtonClick: () => void; onTaxClassDelete: (id: string) => SubmitPromise; onTaxClassCreate: (data: TaxClassesPageFormData) => SubmitPromise; onTaxClassUpdate: (data: TaxClassesPageFormData) => SubmitPromise; } export const TaxClassesPage: React.FC = props => { const { taxClasses, selectedTaxClassId, handleTabChange, savebarState, disabled, onCreateNewButtonClick, onTaxClassDelete, onTaxClassCreate, onTaxClassUpdate, } = props; const intl = useIntl(); const navigate = useNavigator(); const classes = useStyles(); const [query, setQuery] = useState(""); const { rowNumber, currentPage, paginate, restartPagination, changeCurrentPage, changeRowNumber, } = useClientPagination(); const currentTaxClass = useMemo( () => taxClasses?.find(getById(selectedTaxClassId)), [selectedTaxClassId, taxClasses], ); const nameInputRef = useAutofocus(currentTaxClass?.id === "new", [ currentTaxClass?.id, ]); useEffect(() => { restartPagination(); }, [query, restartPagination]); return ( {({ data, validationErrors, handlers, submit, change }) => { const filteredRates = data.updateTaxClassRates.filter( rate => rate.label.search(new RegExp(parseQuery(query), "i")) >= 0, ); const { data: paginatedRates, hasNextPage, hasPreviousPage, } = paginate(filteredRates); const formErrors = getFormErrors(["name"], validationErrors); return ( } /> {taxClasses?.length !== 0 && (
{currentTaxClass?.countries.length === 0 ? ( {intl.formatMessage( taxesMessages.countriesSection, )} ), }} /> ) : ( <> setQuery(e.target.value)} placeholder={intl.formatMessage( taxesMessages.searchTaxClasses, )} fullWidth InputProps={{ startAdornment: ( ), }} inputProps={{ className: classes.searchPadding }} /> {paginatedRates?.map( (countryRate, countryRateIndex) => ( {countryRate.label} handlers.handleRateChange( countryRate.id, e.target.value, ) } /> {!isLastElement( filteredRates, countryRateIndex, ) && } ), ) ?? ( <> )} )}
)}
navigate(configurationMenuUrl)} />
); }}
); }; export default TaxClassesPage;