Enhancements to pagination navigation (#2063)
* Update macaw to include Paginator changes * Add link support to TablePagination component * Rewrite usePaginator to use context and links instead of onClick * Refactor ProductList to use new usePaginator hook * Add decorator for PaginatorContext in ProductList stories * Refactor AppList to use new usePaginator hook * Refactor AttributeList to use new usePaginator hook * Add missing pagination props for local pagination to AttributeValues * Refactor CategoryList to use new usePaginator hook * Refactor CategoryDetails to use useLocalPaginator and context * Refactor CollectionList to use new usePaginator hook * Refactor CollectionProducts to use new usePaginator hook * Refactor CustomerList to use new usePaginator hook * Refactor VoucherDetailsPage to use PaginationContext * Refactor SaleDetails to use PaginatorContext * Refactor SaleList to use new usePaginator hook * Refactor VoucherList to use new usePaginator hook * Fix type error in paginatorContextValues fixture * Refactor GitfCardList to use new usePaginator hook * Remove unused imports * Refactor MenuList to use new usePaginator hook * Refactor OrderDraftList to use new usePaginator hook * Refactor OrderListPage to use new usePaginator hook * Refactor PageList to use new usePaginator hook * Refactor PageTypeList to use new usePaginator hook * Refactor PermissionGroupList to use new usePaginator hook * Refactor PluginsList to use new usePaginator hook * Refactor ProductTypeList to use new usePaginator hook * Refactor ShippingMethodProducts to use PaginationContext * Refactor ShippingZonesList to use new usePaginator hook * Refactor StaffList to use new usePaginator hook * Fix TS errors * Update TranslationEntities and TranslationFields to use new usePaginator * Refactor WarehouseList to use new usePaginator hook * Fix errors in stories that didn't use PaginationContextDecorator * Mention changes in changelog * Update to latest macaw version, update snapshots
This commit is contained in:
parent
47ec01dd7c
commit
1a19289e43
110 changed files with 9146 additions and 5793 deletions
|
@ -6,6 +6,8 @@ All notable, unreleased changes to this project will be documented in this file.
|
||||||
- Added links instead of imperative navigation with onClick - #1969 by @taniotanio7
|
- Added links instead of imperative navigation with onClick - #1969 by @taniotanio7
|
||||||
- Fixed clearing attribute values - #2047 by @witoszekdev
|
- Fixed clearing attribute values - #2047 by @witoszekdev
|
||||||
- Fixed EditorJS integration in RichTextEditor input - #2052 by @witoszekdev
|
- Fixed EditorJS integration in RichTextEditor input - #2052 by @witoszekdev
|
||||||
|
- Added links to table pagination buttons - #2063 by @witoszekdev
|
||||||
|
- Using push instead of replace to history stack for pagination navigation - #2063 by @witoszekdev
|
||||||
|
|
||||||
## 3.1
|
## 3.1
|
||||||
### PREVIEW FEATURES
|
### PREVIEW FEATURES
|
||||||
|
|
52
package-lock.json
generated
52
package-lock.json
generated
|
@ -2263,6 +2263,38 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@floating-ui/core": {
|
||||||
|
"version": "0.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.2.tgz",
|
||||||
|
"integrity": "sha512-FRVAkSNU/vGXLIsgbggcs70GkXKEOXgBBbNpYPNHSaKsCAMMd00NrjbtKTesxkdv9xm9N3+XiDlcFGY6WnatBg=="
|
||||||
|
},
|
||||||
|
"@floating-ui/dom": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.2.tgz",
|
||||||
|
"integrity": "sha512-z1DnEa7F3d8Fm/eXSbii8UEGpcjZGkQaYYUI0WpEVgD3vBfebDW8j/3ysusxonuMexoigA+A3b/fYH7sEqiwyg==",
|
||||||
|
"requires": {
|
||||||
|
"@floating-ui/core": "^0.7.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@floating-ui/react-dom": {
|
||||||
|
"version": "0.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.1.tgz",
|
||||||
|
"integrity": "sha512-Dd7e8AupUjzcjeGf1g3EItf/QRtEWKF5GGyEs5WA5n3zlHvEgZ4XrZM6ANhUnzgE3pUQAaXkcXLnibgFp1YBRw==",
|
||||||
|
"requires": {
|
||||||
|
"@floating-ui/dom": "^0.5.1",
|
||||||
|
"use-isomorphic-layout-effect": "^1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@floating-ui/react-dom-interactions": {
|
||||||
|
"version": "0.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.5.0.tgz",
|
||||||
|
"integrity": "sha512-rfON7mkHjCeogd0BSXPa8GBp1TMxEytJQqGVlCouSUonJ4POqdHsqcxRnCh0yAaGVaL/nB/J1vq28V4RdoLszg==",
|
||||||
|
"requires": {
|
||||||
|
"@floating-ui/react-dom": "^0.7.0",
|
||||||
|
"aria-hidden": "^1.1.3",
|
||||||
|
"use-isomorphic-layout-effect": "^1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@formatjs/cli": {
|
"@formatjs/cli": {
|
||||||
"version": "4.8.3",
|
"version": "4.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-4.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-4.8.3.tgz",
|
||||||
|
@ -5277,10 +5309,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@saleor/macaw-ui": {
|
"@saleor/macaw-ui": {
|
||||||
"version": "0.5.2",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/@saleor/macaw-ui/-/macaw-ui-0.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/@saleor/macaw-ui/-/macaw-ui-0.6.1.tgz",
|
||||||
"integrity": "sha512-fAbIGLnMo9BiVuR6W6MMZUprIutS+f4i1oEG8PX7+WM4rMZbvD204wxvHyx5dXSrU1DhLzDR4MK7dEGK/jykHA==",
|
"integrity": "sha512-C7WPbuQQTtDH3MVKg//74rSxUheav7TKubw8VytZsUEBWFSVpuzV8Hw+T6riKYJWOtTfYPNUkJlGi1B257hoQQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"@floating-ui/react-dom-interactions": "^0.5.0",
|
||||||
"clsx": "^1.1.1",
|
"clsx": "^1.1.1",
|
||||||
"downshift": "^6.1.7",
|
"downshift": "^6.1.7",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
@ -8194,6 +8227,14 @@
|
||||||
"integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=",
|
"integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"aria-hidden": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-RhVWFtKH5BiGMycI72q2RAFMLQi8JP9bLuQXgR5a8Znp7P5KOIADSJeyfI8PCVxLEp067B2HbP5JIiI/PXIZeA==",
|
||||||
|
"requires": {
|
||||||
|
"tslib": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"arr-diff": {
|
"arr-diff": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
||||||
|
@ -30914,6 +30955,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/use-force-update/-/use-force-update-1.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/use-force-update/-/use-force-update-1.0.7.tgz",
|
||||||
"integrity": "sha512-k5dppYhO+I5X/cd7ildbrzeMZJkWwdAh5adaIk0qKN2euh7J0h2GBGBcB4QZ385eyHHnp7LIygvebdRx3XKdwA=="
|
"integrity": "sha512-k5dppYhO+I5X/cd7ildbrzeMZJkWwdAh5adaIk0qKN2euh7J0h2GBGBcB4QZ385eyHHnp7LIygvebdRx3XKdwA=="
|
||||||
},
|
},
|
||||||
|
"use-isomorphic-layout-effect": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA=="
|
||||||
|
},
|
||||||
"use-react-router": {
|
"use-react-router": {
|
||||||
"version": "1.0.7",
|
"version": "1.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/use-react-router/-/use-react-router-1.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/use-react-router/-/use-react-router-1.0.7.tgz",
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
"@material-ui/lab": "^4.0.0-alpha.58",
|
"@material-ui/lab": "^4.0.0-alpha.58",
|
||||||
"@material-ui/styles": "^4.11.4",
|
"@material-ui/styles": "^4.11.4",
|
||||||
"@reach/auto-id": "^0.16.0",
|
"@reach/auto-id": "^0.16.0",
|
||||||
"@saleor/macaw-ui": "^0.5.2",
|
"@saleor/macaw-ui": "^0.6.1",
|
||||||
"@saleor/sdk": "^0.4.4",
|
"@saleor/sdk": "^0.4.4",
|
||||||
"@sentry/react": "^6.0.0",
|
"@sentry/react": "^6.0.0",
|
||||||
"@types/faker": "^5.1.6",
|
"@types/faker": "^5.1.6",
|
||||||
|
|
|
@ -6,6 +6,7 @@ import {
|
||||||
tabPageProps
|
tabPageProps
|
||||||
} from "@saleor/fixtures";
|
} from "@saleor/fixtures";
|
||||||
import Decorator from "@saleor/storybook/Decorator";
|
import Decorator from "@saleor/storybook/Decorator";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -30,13 +31,12 @@ const props: AppsListPageProps = {
|
||||||
onAppInProgressRemove: () => undefined,
|
onAppInProgressRemove: () => undefined,
|
||||||
onAppInstallRetry: () => undefined,
|
onAppInstallRetry: () => undefined,
|
||||||
onCustomAppRemove: () => undefined,
|
onCustomAppRemove: () => undefined,
|
||||||
onInstalledAppRemove: () => undefined,
|
onInstalledAppRemove: () => undefined
|
||||||
onNextPage: () => undefined,
|
|
||||||
onPreviousPage: () => undefined
|
|
||||||
};
|
};
|
||||||
|
|
||||||
storiesOf("Views / Apps / Apps list", module)
|
storiesOf("Views / Apps / Apps list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <AppsListPage {...props} />)
|
.add("default", () => <AppsListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<AppsListPage
|
<AppsListPage
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { Button } from "@saleor/components/Button";
|
||||||
import CardTitle from "@saleor/components/CardTitle";
|
import CardTitle from "@saleor/components/CardTitle";
|
||||||
import { IconButton } from "@saleor/components/IconButton";
|
import { IconButton } from "@saleor/components/IconButton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { AppsListQuery } from "@saleor/graphql";
|
import { AppsListQuery } from "@saleor/graphql";
|
||||||
import { DeleteIcon, ResponsiveTable } from "@saleor/macaw-ui";
|
import { DeleteIcon, ResponsiveTable } from "@saleor/macaw-ui";
|
||||||
|
@ -36,10 +36,7 @@ const InstalledApps: React.FC<InstalledAppsProps> = ({
|
||||||
onRemove,
|
onRemove,
|
||||||
settings,
|
settings,
|
||||||
disabled,
|
disabled,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
pageInfo,
|
|
||||||
...props
|
...props
|
||||||
}) => {
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
@ -57,16 +54,10 @@ const InstalledApps: React.FC<InstalledAppsProps> = ({
|
||||||
<ResponsiveTable>
|
<ResponsiveTable>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -19,7 +19,8 @@ import useLocalStorage from "@saleor/hooks/useLocalStorage";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { ListViews } from "@saleor/types";
|
import { ListViews } from "@saleor/types";
|
||||||
import getAppErrorMessage from "@saleor/utils/errors/app";
|
import getAppErrorMessage from "@saleor/utils/errors/app";
|
||||||
|
@ -62,7 +63,6 @@ export const AppsList: React.FC<AppsListProps> = ({ params }) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const { updateListSettings, settings } = useListSettings(ListViews.APPS_LIST);
|
const { updateListSettings, settings } = useListSettings(ListViews.APPS_LIST);
|
||||||
const paginate = usePaginator();
|
|
||||||
const paginationState = createPaginationState(settings?.rowNumber, params);
|
const paginationState = createPaginationState(settings?.rowNumber, params);
|
||||||
const queryVariables = {
|
const queryVariables = {
|
||||||
sort: {
|
sort: {
|
||||||
|
@ -95,11 +95,11 @@ export const AppsList: React.FC<AppsListProps> = ({ params }) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.apps?.pageInfo,
|
pageInfo: data?.apps?.pageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: customAppsData,
|
data: customAppsData,
|
||||||
|
@ -278,7 +278,7 @@ export const AppsList: React.FC<AppsListProps> = ({ params }) => {
|
||||||
const customApps = customAppsData?.apps?.edges;
|
const customApps = customAppsData?.apps?.edges;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<AppDeleteDialog
|
<AppDeleteDialog
|
||||||
confirmButtonState={deleteAppOpts.status}
|
confirmButtonState={deleteAppOpts.status}
|
||||||
name={getCurrentAppName(
|
name={getCurrentAppName(
|
||||||
|
@ -307,9 +307,6 @@ export const AppsList: React.FC<AppsListProps> = ({ params }) => {
|
||||||
loadingAppsInProgress={loadingAppsInProgress}
|
loadingAppsInProgress={loadingAppsInProgress}
|
||||||
disabled={loading || customAppsLoading}
|
disabled={loading || customAppsLoading}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onAppInstallRetry={onAppInstallRetry}
|
onAppInstallRetry={onAppInstallRetry}
|
||||||
getCustomAppHref={id => customAppUrl(id)}
|
getCustomAppHref={id => customAppUrl(id)}
|
||||||
|
@ -329,7 +326,7 @@ export const AppsList: React.FC<AppsListProps> = ({ params }) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { AttributeFragment } from "@saleor/graphql";
|
import { AttributeFragment } from "@saleor/graphql";
|
||||||
import { translateBoolean } from "@saleor/intl";
|
import { translateBoolean } from "@saleor/intl";
|
||||||
|
@ -71,9 +71,6 @@ const AttributeList: React.FC<AttributeListProps> = ({
|
||||||
attributes,
|
attributes,
|
||||||
disabled,
|
disabled,
|
||||||
isChecked,
|
isChecked,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
pageInfo,
|
|
||||||
selected,
|
selected,
|
||||||
sort,
|
sort,
|
||||||
toggle,
|
toggle,
|
||||||
|
@ -172,15 +169,7 @@ const AttributeList: React.FC<AttributeListProps> = ({
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -20,12 +20,18 @@ import {
|
||||||
} from "@saleor/graphql";
|
} from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
||||||
import { renderCollection, stopPropagation } from "@saleor/misc";
|
import { renderCollection, stopPropagation } from "@saleor/misc";
|
||||||
import { ListProps, RelayToFlat, ReorderAction } from "@saleor/types";
|
import {
|
||||||
|
ListProps,
|
||||||
|
PaginateListProps,
|
||||||
|
RelayToFlat,
|
||||||
|
ReorderAction
|
||||||
|
} from "@saleor/types";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { FormattedMessage, useIntl } from "react-intl";
|
import { FormattedMessage, useIntl } from "react-intl";
|
||||||
|
|
||||||
export interface AttributeValuesProps
|
export interface AttributeValuesProps
|
||||||
extends Pick<ListProps, Exclude<keyof ListProps, "getRowHref">> {
|
extends Pick<ListProps, Exclude<keyof ListProps, "getRowHref">>,
|
||||||
|
PaginateListProps {
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
values: RelayToFlat<AttributeValueListFragment>;
|
values: RelayToFlat<AttributeValueListFragment>;
|
||||||
onValueAdd: () => void;
|
onValueAdd: () => void;
|
||||||
|
|
|
@ -18,7 +18,8 @@ import {
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
||||||
|
@ -48,7 +49,6 @@ interface AttributeListProps {
|
||||||
|
|
||||||
const AttributeList: React.FC<AttributeListProps> = ({ params }) => {
|
const AttributeList: React.FC<AttributeListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const paginate = usePaginator();
|
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
|
@ -131,16 +131,16 @@ const AttributeList: React.FC<AttributeListProps> = ({ params }) => {
|
||||||
handleTabChange(tabs.length + 1);
|
handleTabChange(tabs.length + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.attributes.pageInfo),
|
pageInfo: maybe(() => data.attributes.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, attributeListUrl, params);
|
const handleSort = createSortHandler(navigate, attributeListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<AttributeListPage
|
<AttributeListPage
|
||||||
attributes={mapEdgesToItems(data?.attributes)}
|
attributes={mapEdgesToItems(data?.attributes)}
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
|
@ -150,14 +150,11 @@ const AttributeList: React.FC<AttributeListProps> = ({ params }) => {
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
onAll={resetFilters}
|
onAll={resetFilters}
|
||||||
onFilterChange={changeFilters}
|
onFilterChange={changeFilters}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onSearchChange={handleSearchChange}
|
onSearchChange={handleSearchChange}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
onTabChange={handleTabChange}
|
onTabChange={handleTabChange}
|
||||||
onTabDelete={() => openModal("delete-search")}
|
onTabDelete={() => openModal("delete-search")}
|
||||||
onTabSave={() => openModal("save-search")}
|
onTabSave={() => openModal("save-search")}
|
||||||
pageInfo={pageInfo}
|
|
||||||
selected={listElements.length}
|
selected={listElements.length}
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
tabs={tabs.map(tab => tab.name)}
|
tabs={tabs.map(tab => tab.name)}
|
||||||
|
@ -199,7 +196,7 @@ const AttributeList: React.FC<AttributeListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
AttributeList.displayName = "AttributeList";
|
AttributeList.displayName = "AttributeList";
|
||||||
|
|
|
@ -5,7 +5,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { CategoryFragment } from "@saleor/graphql";
|
import { CategoryFragment } from "@saleor/graphql";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -58,15 +58,12 @@ const CategoryList: React.FC<CategoryListProps> = props => {
|
||||||
disabled,
|
disabled,
|
||||||
settings,
|
settings,
|
||||||
sort,
|
sort,
|
||||||
pageInfo,
|
|
||||||
isChecked,
|
isChecked,
|
||||||
isRoot,
|
isRoot,
|
||||||
selected,
|
selected,
|
||||||
toggle,
|
toggle,
|
||||||
toggleAll,
|
toggleAll,
|
||||||
toolbar,
|
toolbar,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort
|
onSort
|
||||||
} = props;
|
} = props;
|
||||||
|
@ -136,16 +133,10 @@ const CategoryList: React.FC<CategoryListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -36,7 +36,6 @@ export const CategoryListPage: React.FC<CategoryTableProps> = ({
|
||||||
disabled,
|
disabled,
|
||||||
initialSearch,
|
initialSearch,
|
||||||
isChecked,
|
isChecked,
|
||||||
pageInfo,
|
|
||||||
selected,
|
selected,
|
||||||
settings,
|
settings,
|
||||||
tabs,
|
tabs,
|
||||||
|
@ -44,8 +43,6 @@ export const CategoryListPage: React.FC<CategoryTableProps> = ({
|
||||||
toggleAll,
|
toggleAll,
|
||||||
toolbar,
|
toolbar,
|
||||||
onAll,
|
onAll,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onSearchChange,
|
onSearchChange,
|
||||||
onTabChange,
|
onTabChange,
|
||||||
onTabDelete,
|
onTabDelete,
|
||||||
|
@ -95,14 +92,11 @@ export const CategoryListPage: React.FC<CategoryTableProps> = ({
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
isRoot={true}
|
isRoot={true}
|
||||||
pageInfo={pageInfo}
|
|
||||||
selected={selected}
|
selected={selected}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
toggle={toggle}
|
toggle={toggle}
|
||||||
toggleAll={toggleAll}
|
toggleAll={toggleAll}
|
||||||
toolbar={toolbar}
|
toolbar={toolbar}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
{...listProps}
|
{...listProps}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -5,7 +5,7 @@ import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
||||||
import { AVATAR_MARGIN } from "@saleor/components/TableCellAvatar/Avatar";
|
import { AVATAR_MARGIN } from "@saleor/components/TableCellAvatar/Avatar";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { CategoryDetailsQuery } from "@saleor/graphql";
|
import { CategoryDetailsQuery } from "@saleor/graphql";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -59,14 +59,11 @@ export const CategoryProductList: React.FC<CategoryProductListProps> = props =>
|
||||||
const {
|
const {
|
||||||
disabled,
|
disabled,
|
||||||
isChecked,
|
isChecked,
|
||||||
pageInfo,
|
|
||||||
products,
|
products,
|
||||||
selected,
|
selected,
|
||||||
toggle,
|
toggle,
|
||||||
toggleAll,
|
toggleAll,
|
||||||
toolbar,
|
toolbar
|
||||||
onNextPage,
|
|
||||||
onPreviousPage
|
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const classes = useStyles(props);
|
const classes = useStyles(props);
|
||||||
|
@ -100,15 +97,7 @@ export const CategoryProductList: React.FC<CategoryProductListProps> = props =>
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -21,9 +21,6 @@ interface CategoryProductsProps extends PageListProps, ListActions {
|
||||||
export const CategoryProducts: React.FC<CategoryProductsProps> = ({
|
export const CategoryProducts: React.FC<CategoryProductsProps> = ({
|
||||||
products,
|
products,
|
||||||
disabled,
|
disabled,
|
||||||
pageInfo,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
categoryId,
|
categoryId,
|
||||||
categoryName,
|
categoryName,
|
||||||
isChecked,
|
isChecked,
|
||||||
|
@ -79,9 +76,6 @@ export const CategoryProducts: React.FC<CategoryProductsProps> = ({
|
||||||
<CategoryProductList
|
<CategoryProductList
|
||||||
products={products}
|
products={products}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
selected={selected}
|
selected={selected}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
toggle={toggle}
|
toggle={toggle}
|
||||||
|
|
|
@ -45,17 +45,11 @@ export interface CategoryUpdatePageProps
|
||||||
category: CategoryDetailsQuery["category"];
|
category: CategoryDetailsQuery["category"];
|
||||||
products: RelayToFlat<CategoryDetailsQuery["category"]["products"]>;
|
products: RelayToFlat<CategoryDetailsQuery["category"]["products"]>;
|
||||||
subcategories: RelayToFlat<CategoryDetailsQuery["category"]["children"]>;
|
subcategories: RelayToFlat<CategoryDetailsQuery["category"]["children"]>;
|
||||||
pageInfo: {
|
|
||||||
hasNextPage: boolean;
|
|
||||||
hasPreviousPage: boolean;
|
|
||||||
};
|
|
||||||
saveButtonBarState: ConfirmButtonTransitionState;
|
saveButtonBarState: ConfirmButtonTransitionState;
|
||||||
addProductHref: string;
|
addProductHref: string;
|
||||||
onImageDelete: () => void;
|
onImageDelete: () => void;
|
||||||
onSubmit: (data: CategoryUpdateData) => SubmitPromise;
|
onSubmit: (data: CategoryUpdateData) => SubmitPromise;
|
||||||
onImageUpload(file: File);
|
onImageUpload(file: File);
|
||||||
onNextPage();
|
|
||||||
onPreviousPage();
|
|
||||||
onDelete();
|
onDelete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,13 +63,10 @@ export const CategoryUpdatePage: React.FC<CategoryUpdatePageProps> = ({
|
||||||
category,
|
category,
|
||||||
disabled,
|
disabled,
|
||||||
errors,
|
errors,
|
||||||
pageInfo,
|
|
||||||
products,
|
products,
|
||||||
saveButtonBarState,
|
saveButtonBarState,
|
||||||
subcategories,
|
subcategories,
|
||||||
onDelete,
|
onDelete,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onSubmit,
|
onSubmit,
|
||||||
onImageDelete,
|
onImageDelete,
|
||||||
onImageUpload,
|
onImageUpload,
|
||||||
|
@ -191,14 +182,11 @@ export const CategoryUpdatePage: React.FC<CategoryUpdatePageProps> = ({
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
isRoot={false}
|
isRoot={false}
|
||||||
pageInfo={pageInfo}
|
|
||||||
selected={selected}
|
selected={selected}
|
||||||
sort={undefined}
|
sort={undefined}
|
||||||
toggle={toggle}
|
toggle={toggle}
|
||||||
toggleAll={toggleAll}
|
toggleAll={toggleAll}
|
||||||
toolbar={subcategoryListToolbar}
|
toolbar={subcategoryListToolbar}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
onSort={() => undefined}
|
onSort={() => undefined}
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
|
@ -209,9 +197,6 @@ export const CategoryUpdatePage: React.FC<CategoryUpdatePageProps> = ({
|
||||||
categoryName={category?.name}
|
categoryName={category?.name}
|
||||||
products={products}
|
products={products}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
toggle={toggle}
|
toggle={toggle}
|
||||||
toggleAll={toggleAll}
|
toggleAll={toggleAll}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import useLocalPaginator, {
|
||||||
} from "@saleor/hooks/useLocalPaginator";
|
} from "@saleor/hooks/useLocalPaginator";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
|
import { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages, errorMessages } from "@saleor/intl";
|
import { commonMessages, errorMessages } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
||||||
|
@ -174,7 +175,7 @@ export const CategoryDetails: React.FC<CategoryDetailsProps> = ({
|
||||||
CategoryUrlQueryParams
|
CategoryUrlQueryParams
|
||||||
>(navigate, params => categoryUrl(id, params), params);
|
>(navigate, params => categoryUrl(id, params), params);
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const { pageInfo, ...paginationFunctions } = paginate(
|
||||||
activeTab === CategoryPageTab.categories
|
activeTab === CategoryPageTab.categories
|
||||||
? maybe(() => data.category.children.pageInfo)
|
? maybe(() => data.category.children.pageInfo)
|
||||||
: maybe(() => data.category.products.pageInfo),
|
: maybe(() => data.category.products.pageInfo),
|
||||||
|
@ -208,7 +209,7 @@ export const CategoryDetails: React.FC<CategoryDetailsProps> = ({
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={{ ...pageInfo, ...paginationFunctions }}>
|
||||||
<WindowTitle title={maybe(() => data.category.name)} />
|
<WindowTitle title={maybe(() => data.category.name)} />
|
||||||
<CategoryUpdatePage
|
<CategoryUpdatePage
|
||||||
categoryId={id}
|
categoryId={id}
|
||||||
|
@ -239,9 +240,6 @@ export const CategoryDetails: React.FC<CategoryDetailsProps> = ({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
onSubmit={handleSubmit}
|
onSubmit={handleSubmit}
|
||||||
products={mapEdgesToItems(data?.category?.products)}
|
products={mapEdgesToItems(data?.category?.products)}
|
||||||
saveButtonBarState={updateResult.status}
|
saveButtonBarState={updateResult.status}
|
||||||
|
@ -371,7 +369,7 @@ export const CategoryDetails: React.FC<CategoryDetailsProps> = ({
|
||||||
/>
|
/>
|
||||||
</DialogContentText>
|
</DialogContentText>
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default CategoryDetails;
|
export default CategoryDetails;
|
||||||
|
|
|
@ -14,7 +14,8 @@ import useListSettings from "@saleor/hooks/useListSettings";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
import { maybe } from "@saleor/misc";
|
import { maybe } from "@saleor/misc";
|
||||||
|
@ -49,7 +50,6 @@ interface CategoryListProps {
|
||||||
|
|
||||||
export const CategoryList: React.FC<CategoryListProps> = ({ params }) => {
|
export const CategoryList: React.FC<CategoryListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const paginate = usePaginator();
|
|
||||||
|
|
||||||
const { isSelected, listElements, toggle, toggleAll, reset } = useBulkActions(
|
const { isSelected, listElements, toggle, toggleAll, reset } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
|
@ -117,11 +117,11 @@ export const CategoryList: React.FC<CategoryListProps> = ({ params }) => {
|
||||||
handleTabChange(tabs.length + 1);
|
handleTabChange(tabs.length + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.categories.pageInfo),
|
pageInfo: maybe(() => data.categories.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleCategoryBulkDelete = (data: CategoryBulkDeleteMutation) => {
|
const handleCategoryBulkDelete = (data: CategoryBulkDeleteMutation) => {
|
||||||
if (data.categoryBulkDelete.errors.length === 0) {
|
if (data.categoryBulkDelete.errors.length === 0) {
|
||||||
|
@ -141,7 +141,7 @@ export const CategoryList: React.FC<CategoryListProps> = ({ params }) => {
|
||||||
const handleSort = createSortHandler(navigate, categoryListUrl, params);
|
const handleSort = createSortHandler(navigate, categoryListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<CategoryListPage
|
<CategoryListPage
|
||||||
categories={mapEdgesToItems(data?.categories)}
|
categories={mapEdgesToItems(data?.categories)}
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
|
@ -156,10 +156,7 @@ export const CategoryList: React.FC<CategoryListProps> = ({ params }) => {
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
pageInfo={pageInfo}
|
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
selected={listElements.length}
|
selected={listElements.length}
|
||||||
toggle={toggle}
|
toggle={toggle}
|
||||||
|
@ -235,7 +232,7 @@ export const CategoryList: React.FC<CategoryListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default CategoryList;
|
export default CategoryList;
|
||||||
|
|
|
@ -14,7 +14,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
||||||
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
||||||
|
@ -73,11 +73,8 @@ const CollectionList: React.FC<CollectionListProps> = props => {
|
||||||
disabled,
|
disabled,
|
||||||
settings,
|
settings,
|
||||||
sort,
|
sort,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
pageInfo,
|
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
selectedChannelId,
|
selectedChannelId,
|
||||||
|
@ -150,16 +147,10 @@ const CollectionList: React.FC<CollectionListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -15,7 +15,7 @@ import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableB
|
||||||
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
||||||
import { AVATAR_MARGIN } from "@saleor/components/TableCellAvatar/Avatar";
|
import { AVATAR_MARGIN } from "@saleor/components/TableCellAvatar/Avatar";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { CollectionDetailsQuery } from "@saleor/graphql";
|
import { CollectionDetailsQuery } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -67,10 +67,7 @@ const CollectionProducts: React.FC<CollectionProductsProps> = props => {
|
||||||
collection,
|
collection,
|
||||||
disabled,
|
disabled,
|
||||||
onAdd,
|
onAdd,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onProductUnassign,
|
onProductUnassign,
|
||||||
pageInfo,
|
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
toggle,
|
toggle,
|
||||||
|
@ -154,13 +151,7 @@ const CollectionProducts: React.FC<CollectionProductsProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo?.hasNextPage}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={pageInfo?.hasPreviousPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -31,6 +31,7 @@ import useLocalPaginator, {
|
||||||
import useLocalStorage from "@saleor/hooks/useLocalStorage";
|
import useLocalStorage from "@saleor/hooks/useLocalStorage";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
|
import { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages, errorMessages } from "@saleor/intl";
|
import { commonMessages, errorMessages } from "@saleor/intl";
|
||||||
import useProductSearch from "@saleor/searches/useProductSearch";
|
import useProductSearch from "@saleor/searches/useProductSearch";
|
||||||
import { arrayDiff } from "@saleor/utils/arrays";
|
import { arrayDiff } from "@saleor/utils/arrays";
|
||||||
|
@ -255,13 +256,13 @@ export const CollectionDetails: React.FC<CollectionDetailsProps> = ({
|
||||||
updateCollectionOpts.data?.collectionUpdate.errors
|
updateCollectionOpts.data?.collectionUpdate.errors
|
||||||
);
|
);
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const { pageInfo, ...paginationValues } = paginate(
|
||||||
data?.collection?.products?.pageInfo,
|
data?.collection?.products?.pageInfo,
|
||||||
paginationState
|
paginationState
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={{ ...pageInfo, ...paginationValues }}>
|
||||||
<WindowTitle title={data?.collection?.name} />
|
<WindowTitle title={data?.collection?.name} />
|
||||||
{!!allChannels?.length && (
|
{!!allChannels?.length && (
|
||||||
<ChannelsAvailabilityDialog
|
<ChannelsAvailabilityDialog
|
||||||
|
@ -302,9 +303,6 @@ export const CollectionDetails: React.FC<CollectionDetailsProps> = ({
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onSubmit={handleSubmit}
|
onSubmit={handleSubmit}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
onProductUnassign={(productId, event) => {
|
onProductUnassign={(productId, event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
unassignProduct({
|
unassignProduct({
|
||||||
|
@ -448,7 +446,7 @@ export const CollectionDetails: React.FC<CollectionDetailsProps> = ({
|
||||||
/>
|
/>
|
||||||
</DialogContentText>
|
</DialogContentText>
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default CollectionDetails;
|
export default CollectionDetails;
|
||||||
|
|
|
@ -15,7 +15,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages } from "@saleor/intl";
|
import { commonMessages } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -55,7 +56,6 @@ export const CollectionList: React.FC<CollectionListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
);
|
);
|
||||||
|
@ -159,16 +159,16 @@ export const CollectionList: React.FC<CollectionListProps> = ({ params }) => {
|
||||||
handleTabChange(tabs.length + 1);
|
handleTabChange(tabs.length + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.collections.pageInfo),
|
pageInfo: maybe(() => data.collections.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, collectionListUrl, params);
|
const handleSort = createSortHandler(navigate, collectionListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<CollectionListPage
|
<CollectionListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
initialSearch={params.query || ""}
|
initialSearch={params.query || ""}
|
||||||
|
@ -181,11 +181,8 @@ export const CollectionList: React.FC<CollectionListProps> = ({ params }) => {
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
collections={mapEdgesToItems(data?.collections)}
|
collections={mapEdgesToItems(data?.collections)}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
pageInfo={pageInfo}
|
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
toolbar={
|
toolbar={
|
||||||
<IconButton
|
<IconButton
|
||||||
|
@ -251,7 +248,7 @@ export const CollectionList: React.FC<CollectionListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default CollectionList;
|
export default CollectionList;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import Attributes, { AttributesProps } from "@saleor/components/Attributes";
|
import Attributes, { AttributesProps } from "@saleor/components/Attributes";
|
||||||
import { fetchMoreProps } from "@saleor/fixtures";
|
import { fetchMoreProps } from "@saleor/fixtures";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -31,6 +32,7 @@ const props: AttributesProps = {
|
||||||
|
|
||||||
storiesOf("Attributes / Attributes", module)
|
storiesOf("Attributes / Attributes", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <Attributes {...props} />)
|
.add("default", () => <Attributes {...props} />)
|
||||||
.add("selected", () => (
|
.add("selected", () => (
|
||||||
<Attributes {...props} attributes={ATTRIBUTES_SELECTED} />
|
<Attributes {...props} attributes={ATTRIBUTES_SELECTED} />
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {
|
||||||
} from "@saleor/macaw-ui";
|
} from "@saleor/macaw-ui";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { defineMessages, useIntl } from "react-intl";
|
import { defineMessages, useIntl } from "react-intl";
|
||||||
|
import { Link, LinkProps } from "react-router-dom";
|
||||||
|
|
||||||
import { ListSettings } from "../../types";
|
import { ListSettings } from "../../types";
|
||||||
|
|
||||||
|
@ -22,17 +23,28 @@ const messages = defineMessages({
|
||||||
});
|
});
|
||||||
|
|
||||||
export interface PaginationProps
|
export interface PaginationProps
|
||||||
extends Omit<MacawPaginationProps, "labels" | "rowNumber"> {
|
extends Omit<
|
||||||
|
MacawPaginationProps,
|
||||||
|
"labels" | "rowNumber" | "nextIconButtonProps" | "prevIconButtonProps"
|
||||||
|
> {
|
||||||
component?: React.ElementType;
|
component?: React.ElementType;
|
||||||
colSpan?: number;
|
colSpan?: number;
|
||||||
settings?: ListSettings;
|
settings?: ListSettings;
|
||||||
onUpdateListSettings?: ListSettingsUpdate;
|
onUpdateListSettings?: ListSettingsUpdate;
|
||||||
|
prevHref?: string;
|
||||||
|
nextHref?: string;
|
||||||
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
export const TablePagination: React.FC<PaginationProps> = ({
|
export const TablePagination: React.FC<PaginationProps> = ({
|
||||||
component,
|
component,
|
||||||
colSpan,
|
colSpan,
|
||||||
settings,
|
settings,
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
|
nextHref,
|
||||||
|
prevHref,
|
||||||
|
hasNextPage,
|
||||||
|
hasPreviousPage,
|
||||||
|
disabled,
|
||||||
...rest
|
...rest
|
||||||
}) => {
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
@ -40,8 +52,10 @@ export const TablePagination: React.FC<PaginationProps> = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Wrapper colSpan={colSpan || 1000}>
|
<Wrapper colSpan={colSpan || 1000}>
|
||||||
<Pagination
|
<Pagination<LinkProps>
|
||||||
{...rest}
|
{...rest}
|
||||||
|
hasNextPage={hasNextPage && !disabled}
|
||||||
|
hasPreviousPage={hasPreviousPage && !disabled}
|
||||||
labels={{
|
labels={{
|
||||||
noOfRows: intl.formatMessage(messages.noOfRows)
|
noOfRows: intl.formatMessage(messages.noOfRows)
|
||||||
}}
|
}}
|
||||||
|
@ -51,6 +65,12 @@ export const TablePagination: React.FC<PaginationProps> = ({
|
||||||
? value => onUpdateListSettings("rowNumber", value)
|
? value => onUpdateListSettings("rowNumber", value)
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
|
nextIconButtonProps={
|
||||||
|
nextHref ? { component: Link, to: nextHref } : undefined
|
||||||
|
}
|
||||||
|
prevIconButtonProps={
|
||||||
|
prevHref ? { component: Link, to: prevHref } : undefined
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</Wrapper>
|
</Wrapper>
|
||||||
);
|
);
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
import { usePaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
import TablePagination, { PaginationProps } from "./TablePagination";
|
||||||
|
|
||||||
|
export type TablePaginationWithContextProps = Omit<
|
||||||
|
PaginationProps,
|
||||||
|
| "nextHref"
|
||||||
|
| "prevHref"
|
||||||
|
| "hasNextPage"
|
||||||
|
| "hasPreviousPage"
|
||||||
|
| "onNextPage"
|
||||||
|
| "onPreviousPage"
|
||||||
|
>;
|
||||||
|
export const TablePaginationWithContext = (
|
||||||
|
props: TablePaginationWithContextProps
|
||||||
|
) => {
|
||||||
|
const {
|
||||||
|
hasNextPage,
|
||||||
|
hasPreviousPage,
|
||||||
|
paginatorType,
|
||||||
|
...paginationProps
|
||||||
|
} = usePaginatorContext();
|
||||||
|
|
||||||
|
if (paginatorType === "click") {
|
||||||
|
const { loadNextPage, loadPreviousPage } = paginationProps;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TablePagination
|
||||||
|
{...props}
|
||||||
|
hasNextPage={hasNextPage}
|
||||||
|
hasPreviousPage={hasPreviousPage}
|
||||||
|
onNextPage={loadNextPage}
|
||||||
|
onPreviousPage={loadPreviousPage}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { prevPageHref, nextPageHref } = paginationProps;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TablePagination
|
||||||
|
{...props}
|
||||||
|
hasNextPage={hasNextPage}
|
||||||
|
hasPreviousPage={hasPreviousPage}
|
||||||
|
prevHref={prevPageHref}
|
||||||
|
nextHref={nextPageHref}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
|
@ -1,3 +1,4 @@
|
||||||
export { default } from "./TablePagination";
|
export { default } from "./TablePagination";
|
||||||
export * from "./TablePagination";
|
export * from "./TablePagination";
|
||||||
export * from "./TablePaginationActions";
|
export * from "./TablePaginationActions";
|
||||||
|
export * from "./TablePaginationWithContext";
|
||||||
|
|
|
@ -8,7 +8,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { CustomerListUrlSortField, customerUrl } from "@saleor/customers/urls";
|
import { CustomerListUrlSortField, customerUrl } from "@saleor/customers/urls";
|
||||||
import { ListCustomersQuery, PermissionEnum } from "@saleor/graphql";
|
import { ListCustomersQuery, PermissionEnum } from "@saleor/graphql";
|
||||||
|
@ -54,9 +54,6 @@ const CustomerList: React.FC<CustomerListProps> = props => {
|
||||||
settings,
|
settings,
|
||||||
disabled,
|
disabled,
|
||||||
customers,
|
customers,
|
||||||
pageInfo,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
toolbar,
|
toolbar,
|
||||||
|
@ -129,16 +126,10 @@ const CustomerList: React.FC<CustomerListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -15,7 +15,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -54,7 +55,6 @@ interface CustomerListProps {
|
||||||
export const CustomerList: React.FC<CustomerListProps> = ({ params }) => {
|
export const CustomerList: React.FC<CustomerListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
);
|
);
|
||||||
|
@ -122,11 +122,11 @@ export const CustomerList: React.FC<CustomerListProps> = ({ params }) => {
|
||||||
handleTabChange(tabs.length + 1);
|
handleTabChange(tabs.length + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.customers.pageInfo),
|
pageInfo: maybe(() => data.customers.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const [
|
const [
|
||||||
bulkRemoveCustomers,
|
bulkRemoveCustomers,
|
||||||
|
@ -148,7 +148,7 @@ export const CustomerList: React.FC<CustomerListProps> = ({ params }) => {
|
||||||
const handleSort = createSortHandler(navigate, customerListUrl, params);
|
const handleSort = createSortHandler(navigate, customerListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<WindowTitle title={intl.formatMessage(sectionNames.customers)} />
|
<WindowTitle title={intl.formatMessage(sectionNames.customers)} />
|
||||||
<CustomerListPage
|
<CustomerListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
|
@ -164,9 +164,6 @@ export const CustomerList: React.FC<CustomerListProps> = ({ params }) => {
|
||||||
customers={mapEdgesToItems(data?.customers)}
|
customers={mapEdgesToItems(data?.customers)}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
toolbar={
|
toolbar={
|
||||||
|
@ -230,7 +227,7 @@ export const CustomerList: React.FC<CustomerListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default CustomerList;
|
export default CustomerList;
|
||||||
|
|
|
@ -13,7 +13,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { SaleDetailsFragment, VoucherDetailsFragment } from "@saleor/graphql";
|
import { SaleDetailsFragment, VoucherDetailsFragment } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -38,11 +38,8 @@ const DiscountCategories: React.FC<DiscountCategoriesProps> = props => {
|
||||||
const {
|
const {
|
||||||
discount,
|
discount,
|
||||||
disabled,
|
disabled,
|
||||||
pageInfo,
|
|
||||||
onCategoryAssign,
|
onCategoryAssign,
|
||||||
onCategoryUnassign,
|
onCategoryUnassign,
|
||||||
onPreviousPage,
|
|
||||||
onNextPage,
|
|
||||||
toolbar,
|
toolbar,
|
||||||
toggle,
|
toggle,
|
||||||
toggleAll,
|
toggleAll,
|
||||||
|
@ -94,15 +91,7 @@ const DiscountCategories: React.FC<DiscountCategoriesProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -13,7 +13,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { SaleDetailsFragment, VoucherDetailsFragment } from "@saleor/graphql";
|
import { SaleDetailsFragment, VoucherDetailsFragment } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -38,11 +38,8 @@ const DiscountCollections: React.FC<DiscountCollectionsProps> = props => {
|
||||||
const {
|
const {
|
||||||
discount: sale,
|
discount: sale,
|
||||||
disabled,
|
disabled,
|
||||||
pageInfo,
|
|
||||||
onCollectionAssign,
|
onCollectionAssign,
|
||||||
onCollectionUnassign,
|
onCollectionUnassign,
|
||||||
onPreviousPage,
|
|
||||||
onNextPage,
|
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
toggle,
|
toggle,
|
||||||
|
@ -92,15 +89,7 @@ const DiscountCollections: React.FC<DiscountCollectionsProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -14,7 +14,7 @@ import Skeleton from "@saleor/components/Skeleton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { SaleDetailsFragment, VoucherDetailsFragment } from "@saleor/graphql";
|
import { SaleDetailsFragment, VoucherDetailsFragment } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -41,11 +41,8 @@ const DiscountProducts: React.FC<SaleProductsProps> = props => {
|
||||||
const {
|
const {
|
||||||
products,
|
products,
|
||||||
disabled,
|
disabled,
|
||||||
pageInfo,
|
|
||||||
onPreviousPage,
|
|
||||||
onProductAssign,
|
onProductAssign,
|
||||||
onProductUnassign,
|
onProductUnassign,
|
||||||
onNextPage,
|
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
toggle,
|
toggle,
|
||||||
|
@ -101,15 +98,7 @@ const DiscountProducts: React.FC<SaleProductsProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -13,7 +13,7 @@ import Skeleton from "@saleor/components/Skeleton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { SaleDetailsFragment } from "@saleor/graphql";
|
import { SaleDetailsFragment } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -38,11 +38,8 @@ const DiscountVariants: React.FC<SaleVariantsProps> = props => {
|
||||||
const {
|
const {
|
||||||
variants,
|
variants,
|
||||||
disabled,
|
disabled,
|
||||||
pageInfo,
|
|
||||||
onPreviousPage,
|
|
||||||
onVariantAssign,
|
onVariantAssign,
|
||||||
onVariantUnassign,
|
onVariantUnassign,
|
||||||
onNextPage,
|
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
toggle,
|
toggle,
|
||||||
|
@ -100,15 +97,7 @@ const DiscountVariants: React.FC<SaleVariantsProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -106,7 +106,6 @@ const SaleDetailsPage: React.FC<SaleDetailsPageProps> = ({
|
||||||
onSubmit,
|
onSubmit,
|
||||||
onTabClick,
|
onTabClick,
|
||||||
openChannelsModal,
|
openChannelsModal,
|
||||||
pageInfo,
|
|
||||||
sale,
|
sale,
|
||||||
saveButtonBarState,
|
saveButtonBarState,
|
||||||
onCategoryAssign,
|
onCategoryAssign,
|
||||||
|
@ -114,8 +113,6 @@ const SaleDetailsPage: React.FC<SaleDetailsPageProps> = ({
|
||||||
onChannelsChange,
|
onChannelsChange,
|
||||||
onCollectionAssign,
|
onCollectionAssign,
|
||||||
onCollectionUnassign,
|
onCollectionUnassign,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onProductAssign,
|
onProductAssign,
|
||||||
onProductUnassign,
|
onProductUnassign,
|
||||||
onVariantAssign,
|
onVariantAssign,
|
||||||
|
@ -277,9 +274,6 @@ const SaleDetailsPage: React.FC<SaleDetailsPageProps> = ({
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onCategoryAssign={onCategoryAssign}
|
onCategoryAssign={onCategoryAssign}
|
||||||
onCategoryUnassign={onCategoryUnassign}
|
onCategoryUnassign={onCategoryUnassign}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
discount={sale}
|
discount={sale}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
@ -292,9 +286,6 @@ const SaleDetailsPage: React.FC<SaleDetailsPageProps> = ({
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onCollectionAssign={onCollectionAssign}
|
onCollectionAssign={onCollectionAssign}
|
||||||
onCollectionUnassign={onCollectionUnassign}
|
onCollectionUnassign={onCollectionUnassign}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
discount={sale}
|
discount={sale}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
@ -305,11 +296,8 @@ const SaleDetailsPage: React.FC<SaleDetailsPageProps> = ({
|
||||||
) : activeTab === SaleDetailsPageTab.products ? (
|
) : activeTab === SaleDetailsPageTab.products ? (
|
||||||
<DiscountProducts
|
<DiscountProducts
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
onProductAssign={onProductAssign}
|
onProductAssign={onProductAssign}
|
||||||
onProductUnassign={onProductUnassign}
|
onProductUnassign={onProductUnassign}
|
||||||
pageInfo={pageInfo}
|
|
||||||
products={mapEdgesToItems(sale?.products)}
|
products={mapEdgesToItems(sale?.products)}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
@ -320,11 +308,8 @@ const SaleDetailsPage: React.FC<SaleDetailsPageProps> = ({
|
||||||
) : (
|
) : (
|
||||||
<DiscountVariants
|
<DiscountVariants
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
onVariantAssign={onVariantAssign}
|
onVariantAssign={onVariantAssign}
|
||||||
onVariantUnassign={onVariantUnassign}
|
onVariantUnassign={onVariantUnassign}
|
||||||
pageInfo={pageInfo}
|
|
||||||
variants={mapEdgesToItems(sale?.variants)}
|
variants={mapEdgesToItems(sale?.variants)}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
||||||
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
||||||
|
@ -71,11 +71,8 @@ const SaleList: React.FC<SaleListProps> = props => {
|
||||||
const {
|
const {
|
||||||
settings,
|
settings,
|
||||||
disabled,
|
disabled,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
pageInfo,
|
|
||||||
sales,
|
sales,
|
||||||
selectedChannelId,
|
selectedChannelId,
|
||||||
isChecked,
|
isChecked,
|
||||||
|
@ -174,16 +171,10 @@ const SaleList: React.FC<SaleListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -109,7 +109,6 @@ const VoucherDetailsPage: React.FC<VoucherDetailsPageProps> = ({
|
||||||
channelListings = [],
|
channelListings = [],
|
||||||
disabled,
|
disabled,
|
||||||
errors,
|
errors,
|
||||||
pageInfo,
|
|
||||||
saveButtonBarState,
|
saveButtonBarState,
|
||||||
voucher,
|
voucher,
|
||||||
onCategoryAssign,
|
onCategoryAssign,
|
||||||
|
@ -119,8 +118,6 @@ const VoucherDetailsPage: React.FC<VoucherDetailsPageProps> = ({
|
||||||
onCountryUnassign,
|
onCountryUnassign,
|
||||||
onCollectionAssign,
|
onCollectionAssign,
|
||||||
onCollectionUnassign,
|
onCollectionUnassign,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onProductAssign,
|
onProductAssign,
|
||||||
onProductUnassign,
|
onProductUnassign,
|
||||||
onTabClick,
|
onTabClick,
|
||||||
|
@ -309,9 +306,6 @@ const VoucherDetailsPage: React.FC<VoucherDetailsPageProps> = ({
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onCategoryAssign={onCategoryAssign}
|
onCategoryAssign={onCategoryAssign}
|
||||||
onCategoryUnassign={onCategoryUnassign}
|
onCategoryUnassign={onCategoryUnassign}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
discount={voucher}
|
discount={voucher}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
@ -324,9 +318,6 @@ const VoucherDetailsPage: React.FC<VoucherDetailsPageProps> = ({
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onCollectionAssign={onCollectionAssign}
|
onCollectionAssign={onCollectionAssign}
|
||||||
onCollectionUnassign={onCollectionUnassign}
|
onCollectionUnassign={onCollectionUnassign}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
discount={voucher}
|
discount={voucher}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
@ -337,11 +328,8 @@ const VoucherDetailsPage: React.FC<VoucherDetailsPageProps> = ({
|
||||||
) : (
|
) : (
|
||||||
<DiscountProducts
|
<DiscountProducts
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
onProductAssign={onProductAssign}
|
onProductAssign={onProductAssign}
|
||||||
onProductUnassign={onProductUnassign}
|
onProductUnassign={onProductUnassign}
|
||||||
pageInfo={pageInfo}
|
|
||||||
products={mapEdgesToItems(voucher?.products)}
|
products={mapEdgesToItems(voucher?.products)}
|
||||||
isChecked={isChecked}
|
isChecked={isChecked}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
||||||
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
||||||
|
@ -88,11 +88,8 @@ const VoucherList: React.FC<VoucherListProps> = props => {
|
||||||
const {
|
const {
|
||||||
settings,
|
settings,
|
||||||
disabled,
|
disabled,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
pageInfo,
|
|
||||||
vouchers,
|
vouchers,
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
|
@ -228,16 +225,10 @@ const VoucherList: React.FC<VoucherListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -40,6 +40,7 @@ import useLocalPaginator, {
|
||||||
import useLocalStorage from "@saleor/hooks/useLocalStorage";
|
import useLocalStorage from "@saleor/hooks/useLocalStorage";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
|
import { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||||
import { maybe } from "@saleor/misc";
|
import { maybe } from "@saleor/misc";
|
||||||
import useCategorySearch from "@saleor/searches/useCategorySearch";
|
import useCategorySearch from "@saleor/searches/useCategorySearch";
|
||||||
|
@ -251,7 +252,7 @@ export const SaleDetails: React.FC<SaleDetailsProps> = ({ id, params }) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const { pageInfo, ...paginationValues } = paginate(
|
||||||
tabPageInfo,
|
tabPageInfo,
|
||||||
paginationState
|
paginationState
|
||||||
);
|
);
|
||||||
|
@ -269,7 +270,7 @@ export const SaleDetails: React.FC<SaleDetailsProps> = ({ id, params }) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={{ ...pageInfo, ...paginationValues }}>
|
||||||
<WindowTitle title={intl.formatMessage(sectionNames.sales)} />
|
<WindowTitle title={intl.formatMessage(sectionNames.sales)} />
|
||||||
{!!allChannels?.length && (
|
{!!allChannels?.length && (
|
||||||
<ChannelsAvailabilityDialog
|
<ChannelsAvailabilityDialog
|
||||||
|
@ -295,11 +296,8 @@ export const SaleDetails: React.FC<SaleDetailsProps> = ({ id, params }) => {
|
||||||
disabled={loading || saleCataloguesRemoveOpts.loading}
|
disabled={loading || saleCataloguesRemoveOpts.loading}
|
||||||
errors={saleUpdateOpts.data?.saleUpdate.errors || []}
|
errors={saleUpdateOpts.data?.saleUpdate.errors || []}
|
||||||
selectedChannelId={selectedChannel}
|
selectedChannelId={selectedChannel}
|
||||||
pageInfo={pageInfo}
|
|
||||||
openChannelsModal={handleChannelsModalOpen}
|
openChannelsModal={handleChannelsModalOpen}
|
||||||
onChannelsChange={setCurrentChannels}
|
onChannelsChange={setCurrentChannels}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onCategoryAssign={() => openModal("assign-category")}
|
onCategoryAssign={() => openModal("assign-category")}
|
||||||
onCollectionAssign={() => openModal("assign-collection")}
|
onCollectionAssign={() => openModal("assign-collection")}
|
||||||
onCollectionUnassign={collectionId =>
|
onCollectionUnassign={collectionId =>
|
||||||
|
@ -589,7 +587,7 @@ export const SaleDetails: React.FC<SaleDetailsProps> = ({ id, params }) => {
|
||||||
/>
|
/>
|
||||||
</DialogContentText>
|
</DialogContentText>
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default SaleDetails;
|
export default SaleDetails;
|
||||||
|
|
|
@ -13,7 +13,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -52,7 +53,6 @@ interface SaleListProps {
|
||||||
export const SaleList: React.FC<SaleListProps> = ({ params }) => {
|
export const SaleList: React.FC<SaleListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
);
|
);
|
||||||
|
@ -141,11 +141,11 @@ export const SaleList: React.FC<SaleListProps> = ({ params }) => {
|
||||||
|
|
||||||
const canOpenBulkActionDialog = maybe(() => params.ids.length > 0);
|
const canOpenBulkActionDialog = maybe(() => params.ids.length > 0);
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.sales.pageInfo),
|
pageInfo: maybe(() => data.sales.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const [saleBulkDelete, saleBulkDeleteOpts] = useSaleBulkDeleteMutation({
|
const [saleBulkDelete, saleBulkDeleteOpts] = useSaleBulkDeleteMutation({
|
||||||
onCompleted: data => {
|
onCompleted: data => {
|
||||||
|
@ -171,7 +171,7 @@ export const SaleList: React.FC<SaleListProps> = ({ params }) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<WindowTitle title={intl.formatMessage(sectionNames.sales)} />
|
<WindowTitle title={intl.formatMessage(sectionNames.sales)} />
|
||||||
<SaleListPage
|
<SaleListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
|
@ -187,9 +187,6 @@ export const SaleList: React.FC<SaleListProps> = ({ params }) => {
|
||||||
sales={mapEdgesToItems(data?.sales)}
|
sales={mapEdgesToItems(data?.sales)}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
|
@ -251,7 +248,7 @@ export const SaleList: React.FC<SaleListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default SaleList;
|
export default SaleList;
|
||||||
|
|
|
@ -40,6 +40,7 @@ import useLocalPaginator, {
|
||||||
} from "@saleor/hooks/useLocalPaginator";
|
} from "@saleor/hooks/useLocalPaginator";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
|
import { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import useShop from "@saleor/hooks/useShop";
|
import useShop from "@saleor/hooks/useShop";
|
||||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||||
import useCategorySearch from "@saleor/searches/useCategorySearch";
|
import useCategorySearch from "@saleor/searches/useCategorySearch";
|
||||||
|
@ -263,13 +264,13 @@ export const VoucherDetails: React.FC<VoucherDetailsProps> = ({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const { pageInfo, ...paginationValues } = paginate(
|
||||||
tabPageInfo,
|
tabPageInfo,
|
||||||
paginationState
|
paginationState
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={{ ...pageInfo, ...paginationValues }}>
|
||||||
<WindowTitle title={intl.formatMessage(sectionNames.vouchers)} />
|
<WindowTitle title={intl.formatMessage(sectionNames.vouchers)} />
|
||||||
{!!allChannels?.length && (
|
{!!allChannels?.length && (
|
||||||
<ChannelsAvailabilityDialog
|
<ChannelsAvailabilityDialog
|
||||||
|
@ -303,9 +304,6 @@ export const VoucherDetails: React.FC<VoucherDetailsProps> = ({
|
||||||
...(updateChannelsOpts.data?.voucherChannelListingUpdate.errors || [])
|
...(updateChannelsOpts.data?.voucherChannelListingUpdate.errors || [])
|
||||||
]}
|
]}
|
||||||
selectedChannelId={channel?.id}
|
selectedChannelId={channel?.id}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onCategoryAssign={() => openModal("assign-category")}
|
onCategoryAssign={() => openModal("assign-category")}
|
||||||
onCollectionAssign={() => openModal("assign-collection")}
|
onCollectionAssign={() => openModal("assign-collection")}
|
||||||
onCollectionUnassign={collectionId =>
|
onCollectionUnassign={collectionId =>
|
||||||
|
@ -605,7 +603,7 @@ export const VoucherDetails: React.FC<VoucherDetailsProps> = ({
|
||||||
/>
|
/>
|
||||||
</DialogContentText>
|
</DialogContentText>
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default VoucherDetails;
|
export default VoucherDetails;
|
||||||
|
|
|
@ -16,7 +16,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -55,7 +56,6 @@ interface VoucherListProps {
|
||||||
export const VoucherList: React.FC<VoucherListProps> = ({ params }) => {
|
export const VoucherList: React.FC<VoucherListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
);
|
);
|
||||||
|
@ -145,11 +145,11 @@ export const VoucherList: React.FC<VoucherListProps> = ({ params }) => {
|
||||||
|
|
||||||
const canOpenBulkActionDialog = maybe(() => params.ids.length > 0);
|
const canOpenBulkActionDialog = maybe(() => params.ids.length > 0);
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.vouchers?.pageInfo,
|
pageInfo: data?.vouchers?.pageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const [
|
const [
|
||||||
voucherBulkDelete,
|
voucherBulkDelete,
|
||||||
|
@ -178,7 +178,7 @@ export const VoucherList: React.FC<VoucherListProps> = ({ params }) => {
|
||||||
const handleSort = createSortHandler(navigate, voucherListUrl, params);
|
const handleSort = createSortHandler(navigate, voucherListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<WindowTitle title={intl.formatMessage(sectionNames.vouchers)} />
|
<WindowTitle title={intl.formatMessage(sectionNames.vouchers)} />
|
||||||
<VoucherListPage
|
<VoucherListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
|
@ -194,9 +194,6 @@ export const VoucherList: React.FC<VoucherListProps> = ({ params }) => {
|
||||||
settings={settings}
|
settings={settings}
|
||||||
vouchers={mapEdgesToItems(data?.vouchers)}
|
vouchers={mapEdgesToItems(data?.vouchers)}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
|
@ -258,7 +255,7 @@ export const VoucherList: React.FC<VoucherListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default VoucherList;
|
export default VoucherList;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {
|
||||||
UserDetailsQuery
|
UserDetailsQuery
|
||||||
} from "@saleor/graphql";
|
} from "@saleor/graphql";
|
||||||
|
|
||||||
|
import { PaginatorContextValues } from "./hooks/usePaginator";
|
||||||
import {
|
import {
|
||||||
FetchMoreProps,
|
FetchMoreProps,
|
||||||
FilterPageProps,
|
FilterPageProps,
|
||||||
|
@ -303,6 +304,16 @@ export const tabPageProps: TabPageProps = {
|
||||||
tabs: ["Tab X"]
|
tabs: ["Tab X"]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const paginatorContextValues: PaginatorContextValues = {
|
||||||
|
endCursor: "",
|
||||||
|
startCursor: "",
|
||||||
|
hasNextPage: false,
|
||||||
|
hasPreviousPage: false,
|
||||||
|
nextPageHref: "",
|
||||||
|
prevPageHref: "",
|
||||||
|
paginatorType: "link"
|
||||||
|
};
|
||||||
|
|
||||||
export const searchPageProps: SearchPageProps = {
|
export const searchPageProps: SearchPageProps = {
|
||||||
initialSearch: "",
|
initialSearch: "",
|
||||||
onSearchChange: () => undefined
|
onSearchChange: () => undefined
|
||||||
|
|
|
@ -6,8 +6,6 @@ import React from "react";
|
||||||
import { useGiftCardList } from "../providers/GiftCardListProvider";
|
import { useGiftCardList } from "../providers/GiftCardListProvider";
|
||||||
|
|
||||||
const GiftCardsListTableFooter: React.FC = () => {
|
const GiftCardsListTableFooter: React.FC = () => {
|
||||||
const paginate = usePaginator();
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
settings,
|
settings,
|
||||||
updateListSettings,
|
updateListSettings,
|
||||||
|
@ -17,23 +15,20 @@ const GiftCardsListTableFooter: React.FC = () => {
|
||||||
numberOfColumns
|
numberOfColumns
|
||||||
} = useGiftCardList();
|
} = useGiftCardList();
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
apiPageInfo,
|
pageInfo: apiPageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePagination
|
||||||
|
{...paginationValues}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
hasNextPage={pageInfo ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
hasPreviousPage={pageInfo ? pageInfo.hasPreviousPage : false}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -117,6 +117,7 @@ function useLocalPaginator(
|
||||||
return {
|
return {
|
||||||
loadNextPage,
|
loadNextPage,
|
||||||
loadPreviousPage,
|
loadPreviousPage,
|
||||||
|
paginatorType: "click" as const,
|
||||||
pageInfo: newPageInfo
|
pageInfo: newPageInfo
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { stringifyQs } from "@saleor/utils/urls";
|
import { stringifyQs } from "@saleor/utils/urls";
|
||||||
|
import { createContext, useContext, useMemo } from "react";
|
||||||
|
|
||||||
import { Pagination } from "../types";
|
import { Pagination } from "../types";
|
||||||
import useNavigator from "./useNavigator";
|
|
||||||
|
|
||||||
export interface PageInfo {
|
export interface PageInfo {
|
||||||
endCursor: string;
|
endCursor: string;
|
||||||
|
@ -36,50 +36,105 @@ export function createPaginationState(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function usePaginator() {
|
interface UsePaginatorArgs {
|
||||||
const navigate = useNavigator();
|
pageInfo: PageInfo;
|
||||||
|
paginationState: PaginationState;
|
||||||
|
queryString: Pagination;
|
||||||
|
}
|
||||||
|
|
||||||
function paginate(
|
function usePaginator({
|
||||||
pageInfo: PageInfo,
|
queryString,
|
||||||
paginationState: PaginationState,
|
paginationState,
|
||||||
queryString: Pagination
|
pageInfo
|
||||||
) {
|
}: UsePaginatorArgs) {
|
||||||
const loadNextPage = () =>
|
const newPageInfo = useMemo<PageInfo>(
|
||||||
navigate(
|
() =>
|
||||||
"?" +
|
pageInfo
|
||||||
stringifyQs({
|
|
||||||
...queryString,
|
|
||||||
after: pageInfo.endCursor,
|
|
||||||
before: undefined
|
|
||||||
}),
|
|
||||||
{ replace: true, resetScroll: true }
|
|
||||||
);
|
|
||||||
|
|
||||||
const loadPreviousPage = () =>
|
|
||||||
navigate(
|
|
||||||
"?" +
|
|
||||||
stringifyQs({
|
|
||||||
...queryString,
|
|
||||||
after: undefined,
|
|
||||||
before: pageInfo.startCursor
|
|
||||||
}),
|
|
||||||
{ replace: true, resetScroll: true }
|
|
||||||
);
|
|
||||||
|
|
||||||
const newPageInfo = pageInfo
|
|
||||||
? {
|
? {
|
||||||
...pageInfo,
|
...pageInfo,
|
||||||
hasNextPage: !!paginationState.before || pageInfo.hasNextPage,
|
hasNextPage: !!paginationState.before || pageInfo.hasNextPage,
|
||||||
hasPreviousPage: !!paginationState.after || pageInfo.hasPreviousPage
|
hasPreviousPage: !!paginationState.after || pageInfo.hasPreviousPage
|
||||||
}
|
}
|
||||||
: undefined;
|
: undefined,
|
||||||
|
[paginationState, pageInfo]
|
||||||
|
);
|
||||||
|
|
||||||
|
const nextPageHref = useMemo(() => {
|
||||||
|
if (!newPageInfo?.hasNextPage || !pageInfo?.endCursor) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
"?" +
|
||||||
|
stringifyQs({
|
||||||
|
...queryString,
|
||||||
|
after: pageInfo.endCursor,
|
||||||
|
before: undefined
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}, [pageInfo?.endCursor, newPageInfo?.hasNextPage, queryString]);
|
||||||
|
|
||||||
|
const prevPageHref = useMemo(() => {
|
||||||
|
if (!newPageInfo?.hasPreviousPage || !pageInfo?.startCursor) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
"?" +
|
||||||
|
stringifyQs({
|
||||||
|
...queryString,
|
||||||
|
after: undefined,
|
||||||
|
before: pageInfo.startCursor
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}, [pageInfo?.startCursor, newPageInfo?.hasPreviousPage, queryString]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
loadNextPage,
|
nextPageHref,
|
||||||
loadPreviousPage,
|
prevPageHref,
|
||||||
pageInfo: newPageInfo
|
paginatorType: "link" as const,
|
||||||
|
...newPageInfo
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return paginate;
|
|
||||||
}
|
|
||||||
export default usePaginator;
|
export default usePaginator;
|
||||||
|
|
||||||
|
export interface PaginatorContextValuesCommon {
|
||||||
|
hasNextPage?: boolean;
|
||||||
|
hasPreviousPage?: boolean;
|
||||||
|
endCursor?: string;
|
||||||
|
startCursor?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type PaginatorContextValues = PaginatorContextValuesCommon &
|
||||||
|
(
|
||||||
|
| {
|
||||||
|
paginatorType: "link";
|
||||||
|
nextPageHref?: string;
|
||||||
|
prevPageHref?: string;
|
||||||
|
loadNextPage?: never;
|
||||||
|
loadPreviousPage?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
paginatorType: "click";
|
||||||
|
nextPageHref?: never;
|
||||||
|
prevPageHref?: never;
|
||||||
|
loadNextPage: () => void;
|
||||||
|
loadPreviousPage: () => void;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
export const PaginatorContext = createContext<PaginatorContextValues | null>(
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
export const usePaginatorContext = () => {
|
||||||
|
const context = useContext(PaginatorContext);
|
||||||
|
|
||||||
|
if (context === null) {
|
||||||
|
throw new Error(
|
||||||
|
"usePaginatorContext must be used within a PaginatorContext.Provider"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return context;
|
||||||
|
};
|
||||||
|
|
|
@ -12,7 +12,7 @@ import Skeleton from "@saleor/components/Skeleton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { MenuFragment } from "@saleor/graphql";
|
import { MenuFragment } from "@saleor/graphql";
|
||||||
import { DeleteIcon, makeStyles } from "@saleor/macaw-ui";
|
import { DeleteIcon, makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -64,11 +64,8 @@ const MenuList: React.FC<MenuListProps> = props => {
|
||||||
isChecked,
|
isChecked,
|
||||||
menus,
|
menus,
|
||||||
onDelete,
|
onDelete,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
pageInfo,
|
|
||||||
selected,
|
selected,
|
||||||
sort,
|
sort,
|
||||||
toggle,
|
toggle,
|
||||||
|
@ -121,16 +118,10 @@ const MenuList: React.FC<MenuListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -13,7 +13,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { buttonMessages, commonMessages } from "@saleor/intl";
|
import { buttonMessages, commonMessages } from "@saleor/intl";
|
||||||
import { getStringOrPlaceholder, maybe } from "@saleor/misc";
|
import { getStringOrPlaceholder, maybe } from "@saleor/misc";
|
||||||
|
@ -36,7 +37,6 @@ interface MenuListProps {
|
||||||
const MenuList: React.FC<MenuListProps> = ({ params }) => {
|
const MenuList: React.FC<MenuListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
);
|
);
|
||||||
|
@ -72,11 +72,11 @@ const MenuList: React.FC<MenuListProps> = ({ params }) => {
|
||||||
variables: queryVariables
|
variables: queryVariables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.menus.pageInfo),
|
pageInfo: maybe(() => data.menus.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const [menuCreate, menuCreateOpts] = useMenuCreateMutation({
|
const [menuCreate, menuCreateOpts] = useMenuCreateMutation({
|
||||||
onCompleted: data => {
|
onCompleted: data => {
|
||||||
|
@ -126,7 +126,7 @@ const MenuList: React.FC<MenuListProps> = ({ params }) => {
|
||||||
const handleSort = createSortHandler(navigate, menuListUrl, params);
|
const handleSort = createSortHandler(navigate, menuListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<MenuListPage
|
<MenuListPage
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
menus={mapEdgesToItems(data?.menus)}
|
menus={mapEdgesToItems(data?.menus)}
|
||||||
|
@ -139,11 +139,8 @@ const MenuList: React.FC<MenuListProps> = ({ params }) => {
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
pageInfo={pageInfo}
|
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
selected={listElements.length}
|
selected={listElements.length}
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
|
@ -242,7 +239,7 @@ const MenuList: React.FC<MenuListProps> = ({ params }) => {
|
||||||
/>
|
/>
|
||||||
</DialogContentText>
|
</DialogContentText>
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default MenuList;
|
export default MenuList;
|
||||||
|
|
|
@ -6,7 +6,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { OrderDraftListQuery } from "@saleor/graphql";
|
import { OrderDraftListQuery } from "@saleor/graphql";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -63,9 +63,6 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = props => {
|
||||||
disabled,
|
disabled,
|
||||||
settings,
|
settings,
|
||||||
orders,
|
orders,
|
||||||
pageInfo,
|
|
||||||
onPreviousPage,
|
|
||||||
onNextPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
isChecked,
|
isChecked,
|
||||||
|
@ -148,16 +145,10 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -11,7 +11,7 @@ import Money from "@saleor/components/Money";
|
||||||
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { OrderListQuery } from "@saleor/graphql";
|
import { OrderListQuery } from "@saleor/graphql";
|
||||||
import { makeStyles, Pill } from "@saleor/macaw-ui";
|
import { makeStyles, Pill } from "@saleor/macaw-ui";
|
||||||
|
@ -82,9 +82,6 @@ export const OrderList: React.FC<OrderListProps> = props => {
|
||||||
disabled,
|
disabled,
|
||||||
settings,
|
settings,
|
||||||
orders,
|
orders,
|
||||||
pageInfo,
|
|
||||||
onPreviousPage,
|
|
||||||
onNextPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
sort
|
sort
|
||||||
|
@ -183,16 +180,11 @@ export const OrderList: React.FC<OrderListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -18,7 +18,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
import { maybe } from "@saleor/misc";
|
import { maybe } from "@saleor/misc";
|
||||||
|
@ -57,7 +58,6 @@ interface OrderDraftListProps {
|
||||||
export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
);
|
);
|
||||||
|
@ -165,11 +165,11 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
variables: queryVariables
|
variables: queryVariables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.draftOrders.pageInfo),
|
pageInfo: maybe(() => data.draftOrders.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, orderDraftListUrl, params);
|
const handleSort = createSortHandler(navigate, orderDraftListUrl, params);
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<OrderDraftListPage
|
<OrderDraftListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
filterOpts={getFilterOpts(params)}
|
filterOpts={getFilterOpts(params)}
|
||||||
|
@ -197,10 +197,7 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
orders={mapEdgesToItems(data?.draftOrders)}
|
orders={mapEdgesToItems(data?.draftOrders)}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onAdd={() => openModal("create-order")}
|
onAdd={() => openModal("create-order")}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
|
@ -273,7 +270,7 @@ export const OrderDraftList: React.FC<OrderDraftListProps> = ({ params }) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { getStringOrPlaceholder } from "@saleor/misc";
|
import { getStringOrPlaceholder } from "@saleor/misc";
|
||||||
import { ListViews } from "@saleor/types";
|
import { ListViews } from "@saleor/types";
|
||||||
|
@ -53,7 +54,6 @@ interface OrderListProps {
|
||||||
export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { updateListSettings, settings } = useListSettings(
|
const { updateListSettings, settings } = useListSettings(
|
||||||
ListViews.ORDER_LIST
|
ListViews.ORDER_LIST
|
||||||
);
|
);
|
||||||
|
@ -140,16 +140,16 @@ export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
||||||
variables: queryVariables
|
variables: queryVariables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.orders?.pageInfo,
|
pageInfo: data?.orders?.pageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, orderListUrl, params);
|
const handleSort = createSortHandler(navigate, orderListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<OrderListPage
|
<OrderListPage
|
||||||
settings={settings}
|
settings={settings}
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
|
@ -157,11 +157,8 @@ export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
||||||
filterOpts={getFilterOpts(params, channelOpts)}
|
filterOpts={getFilterOpts(params, channelOpts)}
|
||||||
limits={limitOpts.data?.shop.limits}
|
limits={limitOpts.data?.shop.limits}
|
||||||
orders={mapEdgesToItems(data?.orders)}
|
orders={mapEdgesToItems(data?.orders)}
|
||||||
pageInfo={pageInfo}
|
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
onAdd={() => openModal("create-order")}
|
onAdd={() => openModal("create-order")}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
onSearchChange={handleSearchChange}
|
onSearchChange={handleSearchChange}
|
||||||
|
@ -203,7 +200,7 @@ export const OrderList: React.FC<OrderListProps> = ({ params }) => {
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { PageTypeFragment } from "@saleor/graphql";
|
import { PageTypeFragment } from "@saleor/graphql";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -39,9 +39,6 @@ const PageTypeList: React.FC<PageTypeListProps> = props => {
|
||||||
const {
|
const {
|
||||||
disabled,
|
disabled,
|
||||||
pageTypes,
|
pageTypes,
|
||||||
pageInfo,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onSort,
|
onSort,
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
|
@ -82,14 +79,9 @@ const PageTypeList: React.FC<PageTypeListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { PageTypeListUrlSortField } from "@saleor/pageTypes/urls";
|
import { PageTypeListUrlSortField } from "@saleor/pageTypes/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -28,6 +29,7 @@ const props: PageTypeListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Page types / Page types list", module)
|
storiesOf("Views / Page types / Page types list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <PageTypeListPage {...props} />)
|
.add("default", () => <PageTypeListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<PageTypeListPage {...props} disabled={true} pageTypes={undefined} />
|
<PageTypeListPage {...props} disabled={true} pageTypes={undefined} />
|
||||||
|
|
|
@ -13,7 +13,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages } from "@saleor/intl";
|
import { commonMessages } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -50,7 +51,6 @@ interface PageTypeListProps {
|
||||||
|
|
||||||
export const PageTypeList: React.FC<PageTypeListProps> = ({ params }) => {
|
export const PageTypeList: React.FC<PageTypeListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const paginate = usePaginator();
|
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const {
|
const {
|
||||||
isSelected,
|
isSelected,
|
||||||
|
@ -119,11 +119,11 @@ export const PageTypeList: React.FC<PageTypeListProps> = ({ params }) => {
|
||||||
handleTabChange(tabs.length + 1);
|
handleTabChange(tabs.length + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.pageTypes?.pageInfo,
|
pageInfo: data?.pageTypes?.pageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, pageTypeListUrl, params);
|
const handleSort = createSortHandler(navigate, pageTypeListUrl, params);
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ export const PageTypeList: React.FC<PageTypeListProps> = ({ params }) => {
|
||||||
const pageTypesData = mapEdgesToItems(data?.pageTypes);
|
const pageTypesData = mapEdgesToItems(data?.pageTypes);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<PageTypeListPage
|
<PageTypeListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
initialSearch={params.query || ""}
|
initialSearch={params.query || ""}
|
||||||
|
@ -177,9 +177,6 @@ export const PageTypeList: React.FC<PageTypeListProps> = ({ params }) => {
|
||||||
tabs={tabs.map(tab => tab.name)}
|
tabs={tabs.map(tab => tab.name)}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
pageTypes={pageTypesData}
|
pageTypes={pageTypesData}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
selected={selectedPageTypes.length}
|
selected={selectedPageTypes.length}
|
||||||
|
@ -224,7 +221,7 @@ export const PageTypeList: React.FC<PageTypeListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={getStringOrPlaceholder(tabs[currentTab - 1]?.name)}
|
tabName={getStringOrPlaceholder(tabs[currentTab - 1]?.name)}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
PageTypeList.displayName = "PageTypeList";
|
PageTypeList.displayName = "PageTypeList";
|
||||||
|
|
|
@ -10,7 +10,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { PageFragment } from "@saleor/graphql";
|
import { PageFragment } from "@saleor/graphql";
|
||||||
import { makeStyles, Pill } from "@saleor/macaw-ui";
|
import { makeStyles, Pill } from "@saleor/macaw-ui";
|
||||||
|
@ -58,11 +58,8 @@ const PageList: React.FC<PageListProps> = props => {
|
||||||
settings,
|
settings,
|
||||||
pages,
|
pages,
|
||||||
disabled,
|
disabled,
|
||||||
onNextPage,
|
|
||||||
pageInfo,
|
|
||||||
onSort,
|
onSort,
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onPreviousPage,
|
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
sort,
|
sort,
|
||||||
|
@ -136,16 +133,11 @@ const PageList: React.FC<PageListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -12,7 +12,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
import { maybe } from "@saleor/misc";
|
import { maybe } from "@saleor/misc";
|
||||||
|
@ -39,7 +40,6 @@ interface PageListProps {
|
||||||
export const PageList: React.FC<PageListProps> = ({ params }) => {
|
export const PageList: React.FC<PageListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
);
|
);
|
||||||
|
@ -65,11 +65,11 @@ export const PageList: React.FC<PageListProps> = ({ params }) => {
|
||||||
variables: queryVariables
|
variables: queryVariables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.pages.pageInfo),
|
pageInfo: maybe(() => data.pages.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const [openModal, closeModal] = createDialogActionHandlers<
|
const [openModal, closeModal] = createDialogActionHandlers<
|
||||||
PageListUrlDialog,
|
PageListUrlDialog,
|
||||||
|
@ -115,14 +115,11 @@ export const PageList: React.FC<PageListProps> = ({ params }) => {
|
||||||
const handleSort = createSortHandler(navigate, pageListUrl, params);
|
const handleSort = createSortHandler(navigate, pageListUrl, params);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<PageListPage
|
<PageListPage
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
pages={mapEdgesToItems(data?.pages)}
|
pages={mapEdgesToItems(data?.pages)}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
actionDialogOpts={{
|
actionDialogOpts={{
|
||||||
|
@ -263,7 +260,7 @@ export const PageList: React.FC<PageListProps> = ({ params }) => {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { PermissionGroupFragment } from "@saleor/graphql";
|
import { PermissionGroupFragment } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -65,16 +65,7 @@ interface PermissionGroupListProps
|
||||||
}
|
}
|
||||||
|
|
||||||
const PermissionGroupList: React.FC<PermissionGroupListProps> = props => {
|
const PermissionGroupList: React.FC<PermissionGroupListProps> = props => {
|
||||||
const {
|
const { disabled, permissionGroups, onDelete, onSort, sort } = props;
|
||||||
disabled,
|
|
||||||
permissionGroups,
|
|
||||||
pageInfo,
|
|
||||||
onDelete,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onSort,
|
|
||||||
sort
|
|
||||||
} = props;
|
|
||||||
const classes = useStyles(props);
|
const classes = useStyles(props);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -107,14 +98,9 @@ const PermissionGroupList: React.FC<PermissionGroupListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -9,6 +9,7 @@ import PermissionGroupListPage, {
|
||||||
import { permissionGroups } from "@saleor/permissionGroups/fixtures";
|
import { permissionGroups } from "@saleor/permissionGroups/fixtures";
|
||||||
import { PermissionGroupListUrlSortField } from "@saleor/permissionGroups/urls";
|
import { PermissionGroupListUrlSortField } from "@saleor/permissionGroups/urls";
|
||||||
import Decorator from "@saleor/storybook/Decorator";
|
import Decorator from "@saleor/storybook/Decorator";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -27,6 +28,7 @@ const props: PermissionGroupListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Permission Groups / Permission Group List", module)
|
storiesOf("Views / Permission Groups / Permission Group List", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <PermissionGroupListPage {...props} />)
|
.add("default", () => <PermissionGroupListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<PermissionGroupListPage
|
<PermissionGroupListPage
|
||||||
|
|
|
@ -8,7 +8,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { getStringOrPlaceholder } from "@saleor/misc";
|
import { getStringOrPlaceholder } from "@saleor/misc";
|
||||||
import PermissionGroupDeleteDialog from "@saleor/permissionGroups/components/PermissionGroupDeleteDialog";
|
import PermissionGroupDeleteDialog from "@saleor/permissionGroups/components/PermissionGroupDeleteDialog";
|
||||||
|
@ -36,7 +37,6 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
|
||||||
params
|
params
|
||||||
}) => {
|
}) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const paginate = usePaginator();
|
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const { updateListSettings, settings } = useListSettings(
|
const { updateListSettings, settings } = useListSettings(
|
||||||
|
@ -58,11 +58,11 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
|
||||||
variables: queryVariables
|
variables: queryVariables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.permissionGroups.pageInfo,
|
pageInfo: data?.permissionGroups.pageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(
|
const handleSort = createSortHandler(
|
||||||
navigate,
|
navigate,
|
||||||
|
@ -100,16 +100,13 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<PermissionGroupListPage
|
<PermissionGroupListPage
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
pageInfo={pageInfo}
|
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
permissionGroups={permissionGroups}
|
permissionGroups={permissionGroups}
|
||||||
onDelete={id => openModal("remove", { id })}
|
onDelete={id => openModal("remove", { id })}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
/>
|
/>
|
||||||
|
@ -129,7 +126,7 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
|
||||||
open={params.action === "remove"}
|
open={params.action === "remove"}
|
||||||
onClose={closeModal}
|
onClose={closeModal}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { TableBody, TableCell, TableFooter, TableRow } from "@material-ui/core";
|
import { TableBody, TableCell, TableFooter, TableRow } from "@material-ui/core";
|
||||||
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import { PluginBaseFragment } from "@saleor/graphql";
|
import { PluginBaseFragment } from "@saleor/graphql";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import { EditIcon, makeStyles } from "@saleor/macaw-ui";
|
import { EditIcon, makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -37,12 +37,9 @@ const PluginList: React.FC<PluginListProps> = props => {
|
||||||
settings,
|
settings,
|
||||||
plugins,
|
plugins,
|
||||||
disabled,
|
disabled,
|
||||||
onNextPage,
|
|
||||||
pageInfo,
|
|
||||||
sort,
|
sort,
|
||||||
onSort,
|
onSort,
|
||||||
onUpdateListSettings,
|
onUpdateListSettings
|
||||||
onPreviousPage
|
|
||||||
} = props;
|
} = props;
|
||||||
const classes = useStyles(props);
|
const classes = useStyles(props);
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
|
@ -53,16 +50,11 @@ const PluginList: React.FC<PluginListProps> = props => {
|
||||||
<PluginListTableHead sort={sort} onSort={onSort} />
|
<PluginListTableHead sort={sort} onSort={onSort} />
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={totalColSpan}
|
colSpan={totalColSpan}
|
||||||
settings={settings}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
settings={settings}
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
disabled={disabled}
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -8,7 +8,8 @@ import useListSettings from "@saleor/hooks/useListSettings";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { maybe } from "@saleor/misc";
|
import { maybe } from "@saleor/misc";
|
||||||
import { ListViews } from "@saleor/types";
|
import { ListViews } from "@saleor/types";
|
||||||
|
@ -43,7 +44,6 @@ interface PluginsListProps {
|
||||||
|
|
||||||
export const PluginsList: React.FC<PluginsListProps> = ({ params }) => {
|
export const PluginsList: React.FC<PluginsListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { updateListSettings, settings } = useListSettings(
|
const { updateListSettings, settings } = useListSettings(
|
||||||
ListViews.PLUGINS_LIST
|
ListViews.PLUGINS_LIST
|
||||||
);
|
);
|
||||||
|
@ -103,11 +103,11 @@ export const PluginsList: React.FC<PluginsListProps> = ({ params }) => {
|
||||||
handleTabChange(tabs.length + 1);
|
handleTabChange(tabs.length + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.plugins.pageInfo),
|
pageInfo: maybe(() => data.plugins.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, pluginListUrl, params);
|
const handleSort = createSortHandler(navigate, pluginListUrl, params);
|
||||||
const channelsSearchWithLoadMoreProps = useChannelsSearchWithLoadMore();
|
const channelsSearchWithLoadMoreProps = useChannelsSearchWithLoadMore();
|
||||||
|
@ -115,7 +115,7 @@ export const PluginsList: React.FC<PluginsListProps> = ({ params }) => {
|
||||||
const filterOpts = getFilterOpts(params, channelsSearchWithLoadMoreProps);
|
const filterOpts = getFilterOpts(params, channelsSearchWithLoadMoreProps);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<PluginsListPage
|
<PluginsListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
|
@ -123,14 +123,11 @@ export const PluginsList: React.FC<PluginsListProps> = ({ params }) => {
|
||||||
initialSearch={params.query || ""}
|
initialSearch={params.query || ""}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
plugins={mapEdgesToItems(data?.plugins)}
|
plugins={mapEdgesToItems(data?.plugins)}
|
||||||
pageInfo={pageInfo}
|
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
tabs={getFilterTabs().map(tab => tab.name)}
|
tabs={getFilterTabs().map(tab => tab.name)}
|
||||||
onAll={resetFilters}
|
onAll={resetFilters}
|
||||||
onFilterChange={changeFilters}
|
onFilterChange={changeFilters}
|
||||||
onSearchChange={handleSearchChange}
|
onSearchChange={handleSearchChange}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
onTabSave={() => openModal("save-search")}
|
onTabSave={() => openModal("save-search")}
|
||||||
onTabDelete={() => openModal("delete-search")}
|
onTabDelete={() => openModal("delete-search")}
|
||||||
|
@ -150,7 +147,7 @@ export const PluginsList: React.FC<PluginsListProps> = ({ params }) => {
|
||||||
onSubmit={handleFilterTabDelete}
|
onSubmit={handleFilterTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { ProductTypeFragment } from "@saleor/graphql";
|
import { ProductTypeFragment } from "@saleor/graphql";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -61,9 +61,6 @@ const ProductTypeList: React.FC<ProductTypeListProps> = props => {
|
||||||
const {
|
const {
|
||||||
disabled,
|
disabled,
|
||||||
productTypes,
|
productTypes,
|
||||||
pageInfo,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onSort,
|
onSort,
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
|
@ -127,15 +124,7 @@ const ProductTypeList: React.FC<ProductTypeListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={numberOfColumns} />
|
||||||
colSpan={numberOfColumns}
|
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -12,7 +12,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages } from "@saleor/intl";
|
import { commonMessages } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -53,7 +54,6 @@ interface ProductTypeListProps {
|
||||||
export const ProductTypeList: React.FC<ProductTypeListProps> = ({ params }) => {
|
export const ProductTypeList: React.FC<ProductTypeListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const {
|
const {
|
||||||
isSelected,
|
isSelected,
|
||||||
listElements: selectedProductTypes,
|
listElements: selectedProductTypes,
|
||||||
|
@ -123,11 +123,11 @@ export const ProductTypeList: React.FC<ProductTypeListProps> = ({ params }) => {
|
||||||
handleTabChange(tabs.length + 1);
|
handleTabChange(tabs.length + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.productTypes.pageInfo),
|
pageInfo: maybe(() => data.productTypes.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, productTypeListUrl, params);
|
const handleSort = createSortHandler(navigate, productTypeListUrl, params);
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ export const ProductTypeList: React.FC<ProductTypeListProps> = ({ params }) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<ProductTypeListPage
|
<ProductTypeListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
filterOpts={getFilterOpts(params)}
|
filterOpts={getFilterOpts(params)}
|
||||||
|
@ -183,9 +183,6 @@ export const ProductTypeList: React.FC<ProductTypeListProps> = ({ params }) => {
|
||||||
tabs={tabs.map(tab => tab.name)}
|
tabs={tabs.map(tab => tab.name)}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
productTypes={productTypesData}
|
productTypes={productTypesData}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
isChecked={isSelected}
|
isChecked={isSelected}
|
||||||
selected={selectedProductTypes.length}
|
selected={selectedProductTypes.length}
|
||||||
|
@ -229,7 +226,7 @@ export const ProductTypeList: React.FC<ProductTypeListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
ProductTypeList.displayName = "ProductTypeList";
|
ProductTypeList.displayName = "ProductTypeList";
|
||||||
|
|
|
@ -19,7 +19,7 @@ import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
||||||
import { AVATAR_MARGIN } from "@saleor/components/TableCellAvatar/Avatar";
|
import { AVATAR_MARGIN } from "@saleor/components/TableCellAvatar/Avatar";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
import TooltipTableCellHeader from "@saleor/components/TooltipTableCellHeader";
|
||||||
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
import { commonTooltipMessages } from "@saleor/components/TooltipTableCellHeader/messages";
|
||||||
|
@ -137,15 +137,12 @@ export const ProductList: React.FC<ProductListProps> = props => {
|
||||||
disabled,
|
disabled,
|
||||||
isChecked,
|
isChecked,
|
||||||
gridAttributes,
|
gridAttributes,
|
||||||
pageInfo,
|
|
||||||
products,
|
products,
|
||||||
selected,
|
selected,
|
||||||
sort,
|
sort,
|
||||||
toggle,
|
toggle,
|
||||||
toggleAll,
|
toggleAll,
|
||||||
toolbar,
|
toolbar,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
selectedChannelId,
|
selectedChannelId,
|
||||||
|
@ -323,16 +320,10 @@ export const ProductList: React.FC<ProductListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { ProductListAttributeFragment } from "@saleor/graphql";
|
import { ProductListAttributeFragment } from "@saleor/graphql";
|
||||||
import Decorator from "@saleor/storybook/Decorator";
|
import Decorator from "@saleor/storybook/Decorator";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -85,6 +86,7 @@ const attributes: ProductListAttributeFragment[] = [
|
||||||
|
|
||||||
storiesOf("Views / Products / Product list / Attribute display", module)
|
storiesOf("Views / Products / Product list / Attribute display", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => (
|
.add("default", () => (
|
||||||
<ProductListAttribute
|
<ProductListAttribute
|
||||||
attribute="attribute:3"
|
attribute="attribute:3"
|
||||||
|
|
|
@ -34,7 +34,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages } from "@saleor/intl";
|
import { commonMessages } from "@saleor/intl";
|
||||||
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton } from "@saleor/macaw-ui";
|
||||||
|
@ -86,7 +87,6 @@ interface ProductListProps {
|
||||||
export const ProductList: React.FC<ProductListProps> = ({ params }) => {
|
export const ProductList: React.FC<ProductListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { queue } = useBackgroundTask();
|
const { queue } = useBackgroundTask();
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
params.ids
|
params.ids
|
||||||
|
@ -341,14 +341,14 @@ export const ProductList: React.FC<ProductListProps> = ({ params }) => {
|
||||||
channelOpts
|
channelOpts
|
||||||
);
|
);
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.products?.pageInfo,
|
pageInfo: data?.products?.pageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<ProductListPage
|
<ProductListPage
|
||||||
activeAttributeSortId={params.attributeId}
|
activeAttributeSortId={params.attributeId}
|
||||||
sort={{
|
sort={{
|
||||||
|
@ -387,10 +387,7 @@ export const ProductList: React.FC<ProductListProps> = ({ params }) => {
|
||||||
products={mapEdgesToItems(data?.products)}
|
products={mapEdgesToItems(data?.products)}
|
||||||
onColumnQueryChange={availableInGridAttributesOpts.search}
|
onColumnQueryChange={availableInGridAttributesOpts.search}
|
||||||
onFetchMore={availableInGridAttributesOpts.loadMore}
|
onFetchMore={availableInGridAttributesOpts.loadMore}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onAll={resetFilters}
|
onAll={resetFilters}
|
||||||
toolbar={
|
toolbar={
|
||||||
<IconButton
|
<IconButton
|
||||||
|
@ -497,7 +494,7 @@ export const ProductList: React.FC<ProductListProps> = ({ params }) => {
|
||||||
onSubmit={handleFilterTabDelete}
|
onSubmit={handleFilterTabDelete}
|
||||||
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
tabName={maybe(() => tabs[currentTab - 1].name, "...")}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default ProductList;
|
export default ProductList;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { shippingZone } from "@saleor/shipping/fixtures";
|
import { shippingZone } from "@saleor/shipping/fixtures";
|
||||||
import Decorator from "@saleor/storybook//Decorator";
|
import Decorator from "@saleor/storybook//Decorator";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { mapEdgesToItems } from "@saleor/utils/maps";
|
import { mapEdgesToItems } from "@saleor/utils/maps";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
@ -15,14 +16,8 @@ const products = mapEdgesToItems(
|
||||||
const props: ShippingMethodProductsProps = {
|
const props: ShippingMethodProductsProps = {
|
||||||
disabled: false,
|
disabled: false,
|
||||||
isChecked: () => undefined,
|
isChecked: () => undefined,
|
||||||
onNextPage: () => undefined,
|
|
||||||
onPreviousPage: () => undefined,
|
|
||||||
onProductAssign: () => undefined,
|
onProductAssign: () => undefined,
|
||||||
onProductUnassign: () => undefined,
|
onProductUnassign: () => undefined,
|
||||||
pageInfo: {
|
|
||||||
hasNextPage: false,
|
|
||||||
hasPreviousPage: false
|
|
||||||
},
|
|
||||||
products,
|
products,
|
||||||
selected: products.length,
|
selected: products.length,
|
||||||
toggle: () => undefined,
|
toggle: () => undefined,
|
||||||
|
@ -32,4 +27,5 @@ const props: ShippingMethodProductsProps = {
|
||||||
|
|
||||||
storiesOf("Shipping / ShippingMethodProducts", module)
|
storiesOf("Shipping / ShippingMethodProducts", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <ShippingMethodProducts {...props} />);
|
.add("default", () => <ShippingMethodProducts {...props} />);
|
||||||
|
|
|
@ -13,7 +13,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
import TableCellAvatar from "@saleor/components/TableCellAvatar";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import { ShippingZoneQuery } from "@saleor/graphql";
|
import { ShippingZoneQuery } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
||||||
import { renderCollection } from "@saleor/misc";
|
import { renderCollection } from "@saleor/misc";
|
||||||
|
@ -58,10 +58,7 @@ const numberOfColumns = 3;
|
||||||
const ShippingMethodProducts: React.FC<ShippingMethodProductsProps> = props => {
|
const ShippingMethodProducts: React.FC<ShippingMethodProductsProps> = props => {
|
||||||
const {
|
const {
|
||||||
disabled,
|
disabled,
|
||||||
pageInfo,
|
|
||||||
products,
|
products,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onProductAssign,
|
onProductAssign,
|
||||||
onProductUnassign,
|
onProductUnassign,
|
||||||
isChecked,
|
isChecked,
|
||||||
|
@ -112,16 +109,9 @@ const ShippingMethodProducts: React.FC<ShippingMethodProductsProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
hasNextPage={
|
disabled={disabled}
|
||||||
pageInfo && !disabled ? pageInfo.hasNextPage : false
|
|
||||||
}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { ShippingMethodTypeEnum } from "@saleor/graphql";
|
import { ShippingMethodTypeEnum } from "@saleor/graphql";
|
||||||
import { shippingZone } from "@saleor/shipping/fixtures";
|
import { shippingZone } from "@saleor/shipping/fixtures";
|
||||||
import Decorator from "@saleor/storybook//Decorator";
|
import Decorator from "@saleor/storybook//Decorator";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -47,11 +48,9 @@ const props: ShippingZoneRatesPageProps = {
|
||||||
isChecked: () => undefined,
|
isChecked: () => undefined,
|
||||||
onChannelsChange: () => undefined,
|
onChannelsChange: () => undefined,
|
||||||
onDelete: () => undefined,
|
onDelete: () => undefined,
|
||||||
onNextPage: () => undefined,
|
|
||||||
onPostalCodeAssign: () => undefined,
|
onPostalCodeAssign: () => undefined,
|
||||||
onPostalCodeInclusionChange: () => undefined,
|
onPostalCodeInclusionChange: () => undefined,
|
||||||
onPostalCodeUnassign: () => undefined,
|
onPostalCodeUnassign: () => undefined,
|
||||||
onPreviousPage: () => undefined,
|
|
||||||
onProductAssign: () => undefined,
|
onProductAssign: () => undefined,
|
||||||
onProductUnassign: () => undefined,
|
onProductUnassign: () => undefined,
|
||||||
onSubmit: () => undefined,
|
onSubmit: () => undefined,
|
||||||
|
@ -70,6 +69,7 @@ const props: ShippingZoneRatesPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Shipping / Shipping rate", module)
|
storiesOf("Views / Shipping / Shipping rate", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("create price rate", () => <ShippingZoneRatesPage {...props} />)
|
.add("create price rate", () => <ShippingZoneRatesPage {...props} />)
|
||||||
.add("create weight rate", () => (
|
.add("create weight rate", () => (
|
||||||
<ShippingZoneRatesPage {...props} variant={ShippingMethodTypeEnum.WEIGHT} />
|
<ShippingZoneRatesPage {...props} variant={ShippingMethodTypeEnum.WEIGHT} />
|
||||||
|
|
|
@ -12,7 +12,7 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
import { TableButtonWrapper } from "@saleor/components/TableButtonWrapper/TableButtonWrapper";
|
||||||
import TableHead from "@saleor/components/TableHead";
|
import TableHead from "@saleor/components/TableHead";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { ShippingZoneFragment } from "@saleor/graphql";
|
import { ShippingZoneFragment } from "@saleor/graphql";
|
||||||
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
import { DeleteIcon, IconButton, makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -54,11 +54,8 @@ const ShippingZonesList: React.FC<ShippingZonesListProps> = props => {
|
||||||
const {
|
const {
|
||||||
disabled,
|
disabled,
|
||||||
settings,
|
settings,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onRemove,
|
onRemove,
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
pageInfo,
|
|
||||||
shippingZones,
|
shippingZones,
|
||||||
isChecked,
|
isChecked,
|
||||||
selected,
|
selected,
|
||||||
|
@ -118,16 +115,11 @@ const ShippingZonesList: React.FC<ShippingZonesListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={pageInfo && !disabled ? pageInfo.hasNextPage : false}
|
disabled={disabled}
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : false
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -25,6 +25,7 @@ import useLocalPaginator, {
|
||||||
} from "@saleor/hooks/useLocalPaginator";
|
} from "@saleor/hooks/useLocalPaginator";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
|
import { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages, sectionNames } from "@saleor/intl";
|
import { commonMessages, sectionNames } from "@saleor/intl";
|
||||||
import {
|
import {
|
||||||
getById,
|
getById,
|
||||||
|
@ -107,7 +108,7 @@ export const RateUpdate: React.FC<RateUpdateProps> = ({
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const { pageInfo, ...paginationValues } = paginate(
|
||||||
rate?.excludedProducts.pageInfo,
|
rate?.excludedProducts.pageInfo,
|
||||||
paginationState
|
paginationState
|
||||||
);
|
);
|
||||||
|
@ -314,7 +315,7 @@ export const RateUpdate: React.FC<RateUpdateProps> = ({
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={{ ...pageInfo, ...paginationValues }}>
|
||||||
<WindowTitle title={intl.formatMessage(sectionNames.shipping)} />
|
<WindowTitle title={intl.formatMessage(sectionNames.shipping)} />
|
||||||
{!!allChannels?.length && (
|
{!!allChannels?.length && (
|
||||||
<ChannelsAvailabilityDialog
|
<ChannelsAvailabilityDialog
|
||||||
|
@ -397,9 +398,6 @@ export const RateUpdate: React.FC<RateUpdateProps> = ({
|
||||||
selected={listElements.length}
|
selected={listElements.length}
|
||||||
toggle={toggle}
|
toggle={toggle}
|
||||||
toggleAll={toggleAll}
|
toggleAll={toggleAll}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
toolbar={
|
toolbar={
|
||||||
<Button onClick={() => openModal("unassign-product")}>
|
<Button onClick={() => openModal("unassign-product")}>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
|
@ -420,7 +418,7 @@ export const RateUpdate: React.FC<RateUpdateProps> = ({
|
||||||
onSubmit={code => onPostalCodeAssign(code)}
|
onSubmit={code => onPostalCodeAssign(code)}
|
||||||
open={params.action === "add-range"}
|
open={params.action === "add-range"}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import useShop from "@saleor/hooks/useShop";
|
import useShop from "@saleor/hooks/useShop";
|
||||||
import { commonMessages } from "@saleor/intl";
|
import { commonMessages } from "@saleor/intl";
|
||||||
|
@ -46,7 +47,6 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
|
||||||
}) => {
|
}) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const shop = useShop();
|
const shop = useShop();
|
||||||
const { user } = useUser();
|
const { user } = useUser();
|
||||||
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
const { isSelected, listElements, reset, toggle, toggleAll } = useBulkActions(
|
||||||
|
@ -126,14 +126,14 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
maybe(() => data.shippingZones.pageInfo),
|
pageInfo: maybe(() => data.shippingZones.pageInfo),
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<ShippingZonesListPage
|
<ShippingZonesListPage
|
||||||
defaultWeightUnit={shop?.defaultWeightUnit}
|
defaultWeightUnit={shop?.defaultWeightUnit}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
|
@ -143,10 +143,7 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
|
||||||
updateDefaultWeightUnitOpts.loading
|
updateDefaultWeightUnitOpts.loading
|
||||||
}
|
}
|
||||||
shippingZones={mapEdgesToItems(data?.shippingZones)}
|
shippingZones={mapEdgesToItems(data?.shippingZones)}
|
||||||
pageInfo={pageInfo}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onRemove={id =>
|
onRemove={id =>
|
||||||
openModal("remove", {
|
openModal("remove", {
|
||||||
id
|
id
|
||||||
|
@ -246,7 +243,7 @@ export const ShippingZonesList: React.FC<ShippingZonesListProps> = ({
|
||||||
/>
|
/>
|
||||||
</DialogContentText>
|
</DialogContentText>
|
||||||
</ActionDialog>
|
</ActionDialog>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
ShippingZonesList.displayName = "ShippingZonesList";
|
ShippingZonesList.displayName = "ShippingZonesList";
|
||||||
|
|
|
@ -9,7 +9,7 @@ import {
|
||||||
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TableCellHeader from "@saleor/components/TableCellHeader";
|
import TableCellHeader from "@saleor/components/TableCellHeader";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { StaffListQuery } from "@saleor/graphql";
|
import { StaffListQuery } from "@saleor/graphql";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -82,11 +82,8 @@ const StaffList: React.FC<StaffListProps> = props => {
|
||||||
const {
|
const {
|
||||||
settings,
|
settings,
|
||||||
disabled,
|
disabled,
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
onUpdateListSettings,
|
onUpdateListSettings,
|
||||||
onSort,
|
onSort,
|
||||||
pageInfo,
|
|
||||||
sort,
|
sort,
|
||||||
staffMembers
|
staffMembers
|
||||||
} = props;
|
} = props;
|
||||||
|
@ -132,18 +129,11 @@ const StaffList: React.FC<StaffListProps> = props => {
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
|
disabled={disabled}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
hasNextPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasNextPage : undefined
|
|
||||||
}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
onUpdateListSettings={onUpdateListSettings}
|
onUpdateListSettings={onUpdateListSettings}
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : undefined
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
|
|
|
@ -11,6 +11,7 @@ import { StaffMemberStatus } from "@saleor/graphql";
|
||||||
import { staffMembers } from "@saleor/staff/fixtures";
|
import { staffMembers } from "@saleor/staff/fixtures";
|
||||||
import { StaffListUrlSortField } from "@saleor/staff/urls";
|
import { StaffListUrlSortField } from "@saleor/staff/urls";
|
||||||
import Decorator from "@saleor/storybook/Decorator";
|
import Decorator from "@saleor/storybook/Decorator";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -39,6 +40,7 @@ const props: StaffListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Staff / Staff members", module)
|
storiesOf("Views / Staff / Staff members", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <StaffListPage {...props} />)
|
.add("default", () => <StaffListPage {...props} />)
|
||||||
.add("when loading", () => (
|
.add("when loading", () => (
|
||||||
<StaffListPage {...props} disabled={true} staffMembers={undefined} />
|
<StaffListPage {...props} disabled={true} staffMembers={undefined} />
|
||||||
|
|
|
@ -11,7 +11,8 @@ import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
import useNotifier from "@saleor/hooks/useNotifier";
|
import useNotifier from "@saleor/hooks/useNotifier";
|
||||||
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
import { usePaginationReset } from "@saleor/hooks/usePaginationReset";
|
||||||
import usePaginator, {
|
import usePaginator, {
|
||||||
createPaginationState
|
createPaginationState,
|
||||||
|
PaginatorContext
|
||||||
} from "@saleor/hooks/usePaginator";
|
} from "@saleor/hooks/usePaginator";
|
||||||
import { commonMessages } from "@saleor/intl";
|
import { commonMessages } from "@saleor/intl";
|
||||||
import { getStringOrPlaceholder } from "@saleor/misc";
|
import { getStringOrPlaceholder } from "@saleor/misc";
|
||||||
|
@ -55,7 +56,6 @@ interface StaffListProps {
|
||||||
export const StaffList: React.FC<StaffListProps> = ({ params }) => {
|
export const StaffList: React.FC<StaffListProps> = ({ params }) => {
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const notify = useNotifier();
|
const notify = useNotifier();
|
||||||
const paginate = usePaginator();
|
|
||||||
const { updateListSettings, settings } = useListSettings(
|
const { updateListSettings, settings } = useListSettings(
|
||||||
ListViews.STAFF_MEMBERS_LIST
|
ListViews.STAFF_MEMBERS_LIST
|
||||||
);
|
);
|
||||||
|
@ -94,11 +94,11 @@ export const StaffList: React.FC<StaffListProps> = ({ params }) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
staffQueryData?.staffUsers.pageInfo,
|
pageInfo: staffQueryData?.staffUsers.pageInfo,
|
||||||
paginationState,
|
paginationState,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
const handleSort = createSortHandler(navigate, staffListUrl, params);
|
const handleSort = createSortHandler(navigate, staffListUrl, params);
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ export const StaffList: React.FC<StaffListProps> = ({ params }) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<StaffListPage
|
<StaffListPage
|
||||||
currentTab={currentTab}
|
currentTab={currentTab}
|
||||||
filterOpts={getFilterOpts(params)}
|
filterOpts={getFilterOpts(params)}
|
||||||
|
@ -182,12 +182,9 @@ export const StaffList: React.FC<StaffListProps> = ({ params }) => {
|
||||||
disabled={loading || addStaffMemberData.loading || limitOpts.loading}
|
disabled={loading || addStaffMemberData.loading || limitOpts.loading}
|
||||||
limits={limitOpts.data?.shop.limits}
|
limits={limitOpts.data?.shop.limits}
|
||||||
settings={settings}
|
settings={settings}
|
||||||
pageInfo={pageInfo}
|
|
||||||
sort={getSortParams(params)}
|
sort={getSortParams(params)}
|
||||||
staffMembers={mapEdgesToItems(staffQueryData?.staffUsers)}
|
staffMembers={mapEdgesToItems(staffQueryData?.staffUsers)}
|
||||||
onAdd={() => openModal("add")}
|
onAdd={() => openModal("add")}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
onUpdateListSettings={updateListSettings}
|
onUpdateListSettings={updateListSettings}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
/>
|
/>
|
||||||
|
@ -222,7 +219,7 @@ export const StaffList: React.FC<StaffListProps> = ({ params }) => {
|
||||||
onSubmit={handleTabDelete}
|
onSubmit={handleTabDelete}
|
||||||
tabName={getStringOrPlaceholder(tabs[currentTab - 1]?.name)}
|
tabName={getStringOrPlaceholder(tabs[currentTab - 1]?.name)}
|
||||||
/>
|
/>
|
||||||
</>
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
9
src/storybook/PaginatorContextDecorator.tsx
Normal file
9
src/storybook/PaginatorContextDecorator.tsx
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import { paginatorContextValues } from "@saleor/fixtures";
|
||||||
|
import { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export const PaginatorContextDecorator = storyFn => (
|
||||||
|
<PaginatorContext.Provider value={paginatorContextValues}>
|
||||||
|
{storyFn()}
|
||||||
|
</PaginatorContext.Provider>
|
||||||
|
);
|
File diff suppressed because it is too large
Load diff
|
@ -11,6 +11,7 @@ import {
|
||||||
sortPageProps,
|
sortPageProps,
|
||||||
tabPageProps
|
tabPageProps
|
||||||
} from "@saleor/fixtures";
|
} from "@saleor/fixtures";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -50,6 +51,7 @@ const props: AttributeListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Attributes / Attribute list", module)
|
storiesOf("Views / Attributes / Attribute list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <AttributeListPage {...props} />)
|
.add("default", () => <AttributeListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<AttributeListPage {...props} attributes={undefined} disabled={true} />
|
<AttributeListPage {...props} attributes={undefined} disabled={true} />
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
sortPageProps,
|
sortPageProps,
|
||||||
tabPageProps
|
tabPageProps
|
||||||
} from "@saleor/fixtures";
|
} from "@saleor/fixtures";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -31,6 +32,7 @@ const categoryTableProps: CategoryTableProps = {
|
||||||
|
|
||||||
storiesOf("Views / Categories / Category list", module)
|
storiesOf("Views / Categories / Category list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <CategoryListPage {...categoryTableProps} />)
|
.add("default", () => <CategoryListPage {...categoryTableProps} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<CategoryListPage {...categoryTableProps} categories={undefined} />
|
<CategoryListPage {...categoryTableProps} categories={undefined} />
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import placeholderImage from "@assets/images/placeholder255x255.png";
|
import placeholderImage from "@assets/images/placeholder255x255.png";
|
||||||
import { ProductErrorCode } from "@saleor/graphql";
|
import { ProductErrorCode } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { mapEdgesToItems } from "@saleor/utils/maps";
|
import { mapEdgesToItems } from "@saleor/utils/maps";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
@ -25,13 +26,7 @@ const updateProps: Omit<CategoryUpdatePageProps, "classes"> = {
|
||||||
onDelete: () => undefined,
|
onDelete: () => undefined,
|
||||||
onImageDelete: () => undefined,
|
onImageDelete: () => undefined,
|
||||||
onImageUpload: () => undefined,
|
onImageUpload: () => undefined,
|
||||||
onNextPage: undefined,
|
|
||||||
onPreviousPage: undefined,
|
|
||||||
onSubmit: () => undefined,
|
onSubmit: () => undefined,
|
||||||
pageInfo: {
|
|
||||||
hasNextPage: true,
|
|
||||||
hasPreviousPage: true
|
|
||||||
},
|
|
||||||
productListToolbar: null,
|
productListToolbar: null,
|
||||||
products: mapEdgesToItems(category.products),
|
products: mapEdgesToItems(category.products),
|
||||||
saveButtonBarState: "default",
|
saveButtonBarState: "default",
|
||||||
|
@ -42,6 +37,7 @@ const updateProps: Omit<CategoryUpdatePageProps, "classes"> = {
|
||||||
|
|
||||||
storiesOf("Views / Categories / Update category", module)
|
storiesOf("Views / Categories / Update category", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <CategoryUpdatePage {...updateProps} />)
|
.add("default", () => <CategoryUpdatePage {...updateProps} />)
|
||||||
.add("products", () => (
|
.add("products", () => (
|
||||||
<CategoryUpdatePage
|
<CategoryUpdatePage
|
||||||
|
|
|
@ -2,6 +2,7 @@ import placeholderCollectionImage from "@assets/images/block1.jpg";
|
||||||
import placeholderProductImage from "@assets/images/placeholder60x60.png";
|
import placeholderProductImage from "@assets/images/placeholder60x60.png";
|
||||||
import { createCollectionChannelsData } from "@saleor/channels/utils";
|
import { createCollectionChannelsData } from "@saleor/channels/utils";
|
||||||
import { CollectionErrorCode } from "@saleor/graphql";
|
import { CollectionErrorCode } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -40,6 +41,7 @@ const props: Omit<CollectionDetailsPageProps, "classes"> = {
|
||||||
|
|
||||||
storiesOf("Views / Collections / Collection detailsCollection details", module)
|
storiesOf("Views / Collections / Collection detailsCollection details", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <CollectionDetailsPage {...props} />)
|
.add("default", () => <CollectionDetailsPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<CollectionDetailsPage {...props} collection={undefined} disabled={true} />
|
<CollectionDetailsPage {...props} collection={undefined} disabled={true} />
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { CollectionListUrlSortField } from "@saleor/collections/urls";
|
import { CollectionListUrlSortField } from "@saleor/collections/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ const props: CollectionListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Collections / Collection list", module)
|
storiesOf("Views / Collections / Collection list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <CollectionListPage {...props} />)
|
.add("default", () => <CollectionListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<CollectionListPage {...props} collections={undefined} disabled={true} />
|
<CollectionListPage {...props} collections={undefined} disabled={true} />
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { CustomerListUrlSortField } from "@saleor/customers/urls";
|
import { CustomerListUrlSortField } from "@saleor/customers/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -55,6 +56,7 @@ const CustomerListPage = props => (
|
||||||
|
|
||||||
storiesOf("Views / Customers / Customer list", module)
|
storiesOf("Views / Customers / Customer list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <CustomerListPage {...props} />)
|
.add("default", () => <CustomerListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<CustomerListPage {...props} disabled={true} customers={undefined} />
|
<CustomerListPage {...props} disabled={true} customers={undefined} />
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { channelsList } from "@saleor/channels/fixtures";
|
import { channelsList } from "@saleor/channels/fixtures";
|
||||||
import { createSaleChannels } from "@saleor/channels/utils";
|
import { createSaleChannels } from "@saleor/channels/utils";
|
||||||
import { DiscountErrorCode } from "@saleor/graphql";
|
import { DiscountErrorCode } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -27,8 +28,6 @@ const props: SaleDetailsPageProps = {
|
||||||
onChannelsChange: () => undefined,
|
onChannelsChange: () => undefined,
|
||||||
onCollectionAssign: () => undefined,
|
onCollectionAssign: () => undefined,
|
||||||
onCollectionUnassign: () => undefined,
|
onCollectionUnassign: () => undefined,
|
||||||
onNextPage: () => undefined,
|
|
||||||
onPreviousPage: () => undefined,
|
|
||||||
onProductAssign: () => undefined,
|
onProductAssign: () => undefined,
|
||||||
onProductUnassign: () => undefined,
|
onProductUnassign: () => undefined,
|
||||||
onVariantAssign: () => undefined,
|
onVariantAssign: () => undefined,
|
||||||
|
@ -37,10 +36,6 @@ const props: SaleDetailsPageProps = {
|
||||||
onSubmit: () => undefined,
|
onSubmit: () => undefined,
|
||||||
onTabClick: () => undefined,
|
onTabClick: () => undefined,
|
||||||
openChannelsModal: () => undefined,
|
openChannelsModal: () => undefined,
|
||||||
pageInfo: {
|
|
||||||
hasNextPage: true,
|
|
||||||
hasPreviousPage: false
|
|
||||||
},
|
|
||||||
productListToolbar: null,
|
productListToolbar: null,
|
||||||
variantListToolbar: null,
|
variantListToolbar: null,
|
||||||
sale,
|
sale,
|
||||||
|
@ -51,6 +46,7 @@ const props: SaleDetailsPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Discounts / Sale details", module)
|
storiesOf("Views / Discounts / Sale details", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <SaleDetailsPage {...props} />)
|
.add("default", () => <SaleDetailsPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<SaleDetailsPage {...props} sale={undefined} disabled={true} />
|
<SaleDetailsPage {...props} sale={undefined} disabled={true} />
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { SaleListUrlSortField } from "@saleor/discounts/urls";
|
import { SaleListUrlSortField } from "@saleor/discounts/urls";
|
||||||
import { DiscountStatusEnum, DiscountValueTypeEnum } from "@saleor/graphql";
|
import { DiscountStatusEnum, DiscountValueTypeEnum } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -59,6 +60,7 @@ const props: SaleListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Discounts / Sale list", module)
|
storiesOf("Views / Discounts / Sale list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <SaleListPage {...props} />)
|
.add("default", () => <SaleListPage {...props} />)
|
||||||
.add("loading", () => <SaleListPage {...props} sales={undefined} />)
|
.add("loading", () => <SaleListPage {...props} sales={undefined} />)
|
||||||
.add("no data", () => <SaleListPage {...props} sales={[]} />)
|
.add("no data", () => <SaleListPage {...props} sales={[]} />)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { channelsList } from "@saleor/channels/fixtures";
|
import { channelsList } from "@saleor/channels/fixtures";
|
||||||
import { createChannelsDataWithDiscountPrice } from "@saleor/channels/utils";
|
import { createChannelsDataWithDiscountPrice } from "@saleor/channels/utils";
|
||||||
import { DiscountErrorCode } from "@saleor/graphql";
|
import { DiscountErrorCode } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -48,6 +49,7 @@ const props: VoucherDetailsPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Discounts / Voucher details", module)
|
storiesOf("Views / Discounts / Voucher details", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <VoucherDetailsPage {...props} />)
|
.add("default", () => <VoucherDetailsPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<VoucherDetailsPage {...props} disabled={true} voucher={undefined} />
|
<VoucherDetailsPage {...props} disabled={true} voucher={undefined} />
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { VoucherListUrlSortField } from "@saleor/discounts/urls";
|
import { VoucherListUrlSortField } from "@saleor/discounts/urls";
|
||||||
import { DiscountStatusEnum, VoucherDiscountType } from "@saleor/graphql";
|
import { DiscountStatusEnum, VoucherDiscountType } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -68,6 +69,7 @@ const props: VoucherListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Discounts / Voucher list", module)
|
storiesOf("Views / Discounts / Voucher list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <VoucherListPage {...props} />)
|
.add("default", () => <VoucherListPage {...props} />)
|
||||||
.add("loading", () => <VoucherListPage {...props} vouchers={undefined} />)
|
.add("loading", () => <VoucherListPage {...props} vouchers={undefined} />)
|
||||||
.add("no data", () => <VoucherListPage {...props} vouchers={[]} />)
|
.add("no data", () => <VoucherListPage {...props} vouchers={[]} />)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { MenuListUrlSortField } from "@saleor/navigation/urls";
|
import { MenuListUrlSortField } from "@saleor/navigation/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -27,6 +28,7 @@ const props: MenuListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Navigation / Menu list", module)
|
storiesOf("Views / Navigation / Menu list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <MenuListPage {...props} />)
|
.add("default", () => <MenuListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<MenuListPage {...props} disabled={true} menus={undefined} />
|
<MenuListPage {...props} disabled={true} menus={undefined} />
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { OrderDraftListUrlSortField } from "@saleor/orders/urls";
|
import { OrderDraftListUrlSortField } from "@saleor/orders/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -49,6 +50,7 @@ const props: OrderDraftListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Orders / Draft order list", module)
|
storiesOf("Views / Orders / Draft order list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <OrderDraftListPage {...props} />)
|
.add("default", () => <OrderDraftListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<OrderDraftListPage {...props} disabled orders={undefined} />
|
<OrderDraftListPage {...props} disabled orders={undefined} />
|
||||||
|
|
|
@ -4,6 +4,7 @@ import OrderListPage, {
|
||||||
OrderListPageProps
|
OrderListPageProps
|
||||||
} from "@saleor/orders/components/OrderListPage";
|
} from "@saleor/orders/components/OrderListPage";
|
||||||
import { OrderListUrlSortField } from "@saleor/orders/urls";
|
import { OrderListUrlSortField } from "@saleor/orders/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -83,6 +84,7 @@ const props: OrderListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Orders / Order list", module)
|
storiesOf("Views / Orders / Order list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <OrderListPage {...props} />)
|
.add("default", () => <OrderListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<OrderListPage
|
<OrderListPage
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { PageListUrlSortField } from "@saleor/pages/urls";
|
import { PageListUrlSortField } from "@saleor/pages/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -33,6 +34,7 @@ const props: PageListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Pages / Page list", module)
|
storiesOf("Views / Pages / Page list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <PageListPage {...props} />)
|
.add("default", () => <PageListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<PageListPage {...props} disabled={true} pages={undefined} />
|
<PageListPage {...props} disabled={true} pages={undefined} />
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { PluginConfigurationType } from "@saleor/graphql";
|
import { PluginConfigurationType } from "@saleor/graphql";
|
||||||
import { PluginListUrlSortField } from "@saleor/plugins/urls";
|
import { PluginListUrlSortField } from "@saleor/plugins/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@ const props: PluginsListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Plugins / Plugin list", module)
|
storiesOf("Views / Plugins / Plugin list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <PluginsListPage {...props} />)
|
.add("default", () => <PluginsListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<PluginsListPage {...props} disabled={true} plugins={undefined} />
|
<PluginsListPage {...props} disabled={true} plugins={undefined} />
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { ProductTypeConfigurable, ProductTypeEnum } from "@saleor/graphql";
|
import { ProductTypeConfigurable, ProductTypeEnum } from "@saleor/graphql";
|
||||||
import { ProductTypeListUrlSortField } from "@saleor/productTypes/urls";
|
import { ProductTypeListUrlSortField } from "@saleor/productTypes/urls";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -43,6 +44,7 @@ const props: ProductTypeListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Product types / Product types list", module)
|
storiesOf("Views / Product types / Product types list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <ProductTypeListPage {...props} />)
|
.add("default", () => <ProductTypeListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<ProductTypeListPage {...props} disabled={true} productTypes={undefined} />
|
<ProductTypeListPage {...props} disabled={true} productTypes={undefined} />
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { products as productListFixture } from "@saleor/products/fixtures";
|
||||||
import { ProductListUrlSortField } from "@saleor/products/urls";
|
import { ProductListUrlSortField } from "@saleor/products/urls";
|
||||||
import { productListFilterOpts } from "@saleor/products/views/ProductList/fixtures";
|
import { productListFilterOpts } from "@saleor/products/views/ProductList/fixtures";
|
||||||
import { attributes } from "@saleor/productTypes/fixtures";
|
import { attributes } from "@saleor/productTypes/fixtures";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { ListViews } from "@saleor/types";
|
import { ListViews } from "@saleor/types";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
@ -57,6 +58,7 @@ const props: ProductListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Products / Product list", module)
|
storiesOf("Views / Products / Product list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <ProductListPage {...props} />)
|
.add("default", () => <ProductListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<ProductListPage
|
<ProductListPage
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { WeightUnitsEnum } from "@saleor/graphql";
|
import { WeightUnitsEnum } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -25,6 +26,7 @@ const props: ShippingZonesListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Shipping / Shipping zones list", module)
|
storiesOf("Views / Shipping / Shipping zones list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => <ShippingZonesListPage {...props} />)
|
.add("default", () => <ShippingZonesListPage {...props} />)
|
||||||
.add("loading", () => (
|
.add("loading", () => (
|
||||||
<ShippingZonesListPage
|
<ShippingZonesListPage
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { LanguageCodeEnum } from "@saleor/graphql";
|
import { LanguageCodeEnum } from "@saleor/graphql";
|
||||||
|
import { PaginatorContextDecorator } from "@saleor/storybook/PaginatorContextDecorator";
|
||||||
import { storiesOf } from "@storybook/react";
|
import { storiesOf } from "@storybook/react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
|
@ -33,6 +34,7 @@ const props: TranslationsEntitiesListPageProps = {
|
||||||
|
|
||||||
storiesOf("Views / Translations / Entity list", module)
|
storiesOf("Views / Translations / Entity list", module)
|
||||||
.addDecorator(Decorator)
|
.addDecorator(Decorator)
|
||||||
|
.addDecorator(PaginatorContextDecorator)
|
||||||
.add("default", () => (
|
.add("default", () => (
|
||||||
<TranslationsEntitiesListPage {...props}>
|
<TranslationsEntitiesListPage {...props}>
|
||||||
<TranslationsEntitiesList
|
<TranslationsEntitiesList
|
||||||
|
@ -50,12 +52,6 @@ storiesOf("Views / Translations / Entity list", module)
|
||||||
}
|
}
|
||||||
]}
|
]}
|
||||||
getRowHref={() => ""}
|
getRowHref={() => ""}
|
||||||
onNextPage={() => undefined}
|
|
||||||
onPreviousPage={() => undefined}
|
|
||||||
pageInfo={{
|
|
||||||
hasNextPage: true,
|
|
||||||
hasPreviousPage: false
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</TranslationsEntitiesListPage>
|
</TranslationsEntitiesListPage>
|
||||||
));
|
));
|
||||||
|
|
|
@ -5,7 +5,7 @@ import CardTitle from "@saleor/components/CardTitle";
|
||||||
import Grid from "@saleor/components/Grid";
|
import Grid from "@saleor/components/Grid";
|
||||||
import Hr from "@saleor/components/Hr";
|
import Hr from "@saleor/components/Hr";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import { SubmitPromise } from "@saleor/hooks/useForm";
|
import { SubmitPromise } from "@saleor/hooks/useForm";
|
||||||
import { buttonMessages } from "@saleor/intl";
|
import { buttonMessages } from "@saleor/intl";
|
||||||
import {
|
import {
|
||||||
|
@ -257,20 +257,8 @@ const TranslationFields: React.FC<TranslationFieldsProps> = props => {
|
||||||
))}
|
))}
|
||||||
</Grid>
|
</Grid>
|
||||||
{pagination && (
|
{pagination && (
|
||||||
<TablePagination
|
<TablePaginationWithContext
|
||||||
colSpan={numberOfColumns}
|
colSpan={numberOfColumns}
|
||||||
hasNextPage={
|
|
||||||
pagination.pageInfo && !disabled
|
|
||||||
? pagination.pageInfo.hasNextPage
|
|
||||||
: false
|
|
||||||
}
|
|
||||||
onNextPage={pagination.onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pagination.pageInfo && !disabled
|
|
||||||
? pagination.pageInfo.hasPreviousPage
|
|
||||||
: false
|
|
||||||
}
|
|
||||||
onPreviousPage={pagination.onPreviousPage}
|
|
||||||
settings={pagination.settings}
|
settings={pagination.settings}
|
||||||
onUpdateListSettings={pagination.onUpdateListSettings}
|
onUpdateListSettings={pagination.onUpdateListSettings}
|
||||||
component="div"
|
component="div"
|
||||||
|
|
|
@ -29,12 +29,6 @@ export interface TranslationsAttributesPageProps
|
||||||
data: AttributeTranslationDetailsFragment;
|
data: AttributeTranslationDetailsFragment;
|
||||||
settings?: ListSettings;
|
settings?: ListSettings;
|
||||||
onUpdateListSettings?: ListSettingsUpdate;
|
onUpdateListSettings?: ListSettingsUpdate;
|
||||||
pageInfo: {
|
|
||||||
hasNextPage: boolean;
|
|
||||||
hasPreviousPage: boolean;
|
|
||||||
};
|
|
||||||
onNextPage: () => void;
|
|
||||||
onPreviousPage: () => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const fieldNames = {
|
export const fieldNames = {
|
||||||
|
@ -55,10 +49,7 @@ const TranslationsAttributesPage: React.FC<TranslationsAttributesPageProps> = ({
|
||||||
onEdit,
|
onEdit,
|
||||||
onSubmit,
|
onSubmit,
|
||||||
settings,
|
settings,
|
||||||
onUpdateListSettings,
|
onUpdateListSettings
|
||||||
pageInfo,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage
|
|
||||||
}) => {
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
|
@ -134,10 +125,7 @@ const TranslationsAttributesPage: React.FC<TranslationsAttributesPageProps> = ({
|
||||||
richTextResetKey={languageCode}
|
richTextResetKey={languageCode}
|
||||||
pagination={{
|
pagination={{
|
||||||
settings,
|
settings,
|
||||||
onUpdateListSettings,
|
onUpdateListSettings
|
||||||
pageInfo,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage
|
|
||||||
}}
|
}}
|
||||||
onEdit={onEdit}
|
onEdit={onEdit}
|
||||||
onDiscard={onDiscard}
|
onDiscard={onDiscard}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import {
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
import ResponsiveTable from "@saleor/components/ResponsiveTable";
|
||||||
import Skeleton from "@saleor/components/Skeleton";
|
import Skeleton from "@saleor/components/Skeleton";
|
||||||
import TablePagination from "@saleor/components/TablePagination";
|
import { TablePaginationWithContext } from "@saleor/components/TablePagination";
|
||||||
import TableRowLink from "@saleor/components/TableRowLink";
|
import TableRowLink from "@saleor/components/TableRowLink";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
|
@ -46,14 +46,7 @@ const useStyles = makeStyles(
|
||||||
{ name: "TranslationsEntitiesList" }
|
{ name: "TranslationsEntitiesList" }
|
||||||
);
|
);
|
||||||
const TranslationsEntitiesList: React.FC<TranslationsEntitiesListProps> = props => {
|
const TranslationsEntitiesList: React.FC<TranslationsEntitiesListProps> = props => {
|
||||||
const {
|
const { disabled, entities, getRowHref } = props;
|
||||||
disabled,
|
|
||||||
entities,
|
|
||||||
onNextPage,
|
|
||||||
onPreviousPage,
|
|
||||||
getRowHref,
|
|
||||||
pageInfo
|
|
||||||
} = props;
|
|
||||||
|
|
||||||
const classes = useStyles(props);
|
const classes = useStyles(props);
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
@ -79,17 +72,7 @@ const TranslationsEntitiesList: React.FC<TranslationsEntitiesListProps> = props
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableFooter>
|
<TableFooter>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TablePagination
|
<TablePaginationWithContext colSpan={2} disabled={disabled} />
|
||||||
colSpan={2}
|
|
||||||
hasNextPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasNextPage : undefined
|
|
||||||
}
|
|
||||||
onNextPage={onNextPage}
|
|
||||||
hasPreviousPage={
|
|
||||||
pageInfo && !disabled ? pageInfo.hasPreviousPage : undefined
|
|
||||||
}
|
|
||||||
onPreviousPage={onPreviousPage}
|
|
||||||
/>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableFooter>
|
</TableFooter>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { useAttributeTranslationsQuery } from "@saleor/graphql";
|
import { useAttributeTranslationsQuery } from "@saleor/graphql";
|
||||||
import usePaginator from "@saleor/hooks/usePaginator";
|
import usePaginator, { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
||||||
import {
|
import {
|
||||||
languageEntityUrl,
|
languageEntityUrl,
|
||||||
|
@ -14,20 +14,19 @@ const TranslationsAttributeList: React.FC<TranslationsEntityListProps> = ({
|
||||||
params,
|
params,
|
||||||
variables
|
variables
|
||||||
}) => {
|
}) => {
|
||||||
const paginate = usePaginator();
|
|
||||||
|
|
||||||
const { data, loading } = useAttributeTranslationsQuery({
|
const { data, loading } = useAttributeTranslationsQuery({
|
||||||
displayLoader: true,
|
displayLoader: true,
|
||||||
variables
|
variables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.translations?.pageInfo,
|
pageInfo: data?.translations?.pageInfo,
|
||||||
variables,
|
paginationState: variables,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<TranslationsEntitiesList
|
<TranslationsEntitiesList
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
entities={mapEdgesToItems(data?.translations)?.map(
|
entities={mapEdgesToItems(data?.translations)?.map(
|
||||||
|
@ -45,10 +44,8 @@ const TranslationsAttributeList: React.FC<TranslationsEntityListProps> = ({
|
||||||
id
|
id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
/>
|
/>
|
||||||
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { useCategoryTranslationsQuery } from "@saleor/graphql";
|
import { useCategoryTranslationsQuery } from "@saleor/graphql";
|
||||||
import usePaginator from "@saleor/hooks/usePaginator";
|
import usePaginator, { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
||||||
import {
|
import {
|
||||||
languageEntityUrl,
|
languageEntityUrl,
|
||||||
|
@ -15,20 +15,19 @@ const TranslationsCategoryList: React.FC<TranslationsEntityListProps> = ({
|
||||||
params,
|
params,
|
||||||
variables
|
variables
|
||||||
}) => {
|
}) => {
|
||||||
const paginate = usePaginator();
|
|
||||||
|
|
||||||
const { data, loading } = useCategoryTranslationsQuery({
|
const { data, loading } = useCategoryTranslationsQuery({
|
||||||
displayLoader: true,
|
displayLoader: true,
|
||||||
variables
|
variables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.translations?.pageInfo,
|
pageInfo: data?.translations?.pageInfo,
|
||||||
variables,
|
paginationState: variables,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<TranslationsEntitiesList
|
<TranslationsEntitiesList
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
entities={mapEdgesToItems(data?.translations)?.map(
|
entities={mapEdgesToItems(data?.translations)?.map(
|
||||||
|
@ -54,10 +53,8 @@ const TranslationsCategoryList: React.FC<TranslationsEntityListProps> = ({
|
||||||
id
|
id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
/>
|
/>
|
||||||
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { useCollectionTranslationsQuery } from "@saleor/graphql";
|
import { useCollectionTranslationsQuery } from "@saleor/graphql";
|
||||||
import usePaginator from "@saleor/hooks/usePaginator";
|
import usePaginator, { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
||||||
import {
|
import {
|
||||||
languageEntityUrl,
|
languageEntityUrl,
|
||||||
|
@ -15,20 +15,19 @@ const TranslationsCollectionList: React.FC<TranslationsEntityListProps> = ({
|
||||||
params,
|
params,
|
||||||
variables
|
variables
|
||||||
}) => {
|
}) => {
|
||||||
const paginate = usePaginator();
|
|
||||||
|
|
||||||
const { data, loading } = useCollectionTranslationsQuery({
|
const { data, loading } = useCollectionTranslationsQuery({
|
||||||
displayLoader: true,
|
displayLoader: true,
|
||||||
variables
|
variables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.translations?.pageInfo,
|
pageInfo: data?.translations?.pageInfo,
|
||||||
variables,
|
paginationState: variables,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<TranslationsEntitiesList
|
<TranslationsEntitiesList
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
entities={mapEdgesToItems(data?.translations)?.map(
|
entities={mapEdgesToItems(data?.translations)?.map(
|
||||||
|
@ -54,10 +53,8 @@ const TranslationsCollectionList: React.FC<TranslationsEntityListProps> = ({
|
||||||
id
|
id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
/>
|
/>
|
||||||
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { usePageTranslationsQuery } from "@saleor/graphql";
|
import { usePageTranslationsQuery } from "@saleor/graphql";
|
||||||
import usePaginator from "@saleor/hooks/usePaginator";
|
import usePaginator, { PaginatorContext } from "@saleor/hooks/usePaginator";
|
||||||
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
import TranslationsEntitiesList from "@saleor/translations/components/TranslationsEntitiesList";
|
||||||
import {
|
import {
|
||||||
languageEntityUrl,
|
languageEntityUrl,
|
||||||
|
@ -15,20 +15,19 @@ const TranslationsPageList: React.FC<TranslationsEntityListProps> = ({
|
||||||
params,
|
params,
|
||||||
variables
|
variables
|
||||||
}) => {
|
}) => {
|
||||||
const paginate = usePaginator();
|
|
||||||
|
|
||||||
const { data, loading } = usePageTranslationsQuery({
|
const { data, loading } = usePageTranslationsQuery({
|
||||||
displayLoader: true,
|
displayLoader: true,
|
||||||
variables
|
variables
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loadNextPage, loadPreviousPage, pageInfo } = paginate(
|
const paginationValues = usePaginator({
|
||||||
data?.translations?.pageInfo,
|
pageInfo: data?.translations?.pageInfo,
|
||||||
variables,
|
paginationState: variables,
|
||||||
params
|
queryString: params
|
||||||
);
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<PaginatorContext.Provider value={paginationValues}>
|
||||||
<TranslationsEntitiesList
|
<TranslationsEntitiesList
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
entities={mapEdgesToItems(data?.translations)?.map(
|
entities={mapEdgesToItems(data?.translations)?.map(
|
||||||
|
@ -50,10 +49,8 @@ const TranslationsPageList: React.FC<TranslationsEntityListProps> = ({
|
||||||
getRowHref={id =>
|
getRowHref={id =>
|
||||||
languageEntityUrl(variables.language, TranslatableEntities.pages, id)
|
languageEntityUrl(variables.language, TranslatableEntities.pages, id)
|
||||||
}
|
}
|
||||||
onNextPage={loadNextPage}
|
|
||||||
onPreviousPage={loadPreviousPage}
|
|
||||||
pageInfo={pageInfo}
|
|
||||||
/>
|
/>
|
||||||
|
</PaginatorContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue