|
1 | | -import { RefreshIndicator } from "@mendix/widget-plugin-component-kit/RefreshIndicator"; |
2 | | -import { FocusTargetController } from "@mendix/widget-plugin-grid/keyboard-navigation/FocusTargetController"; |
3 | | -import { ListActionValue, ObjectItem } from "mendix"; |
4 | | -import { observer } from "mobx-react-lite"; |
5 | | -import { CSSProperties, Fragment, ReactElement, ReactNode } from "react"; |
6 | | -import { LoadingTypeEnum, PaginationEnum } from "../../typings/DatagridProps"; |
7 | | - |
| 1 | +import { ReactNode } from "react"; |
| 2 | +import { ExportProgressDialog } from "../features/data-export/ExportProgressDialog"; |
8 | 3 | import { EmptyPlaceholder } from "../features/empty-message/EmptyPlaceholder"; |
9 | 4 | import { SelectAllBar } from "../features/select-all/SelectAllBar"; |
10 | 5 | import { SelectionProgressDialog } from "../features/select-all/SelectionProgressDialog"; |
11 | | -import { SelectActionHelper } from "../helpers/SelectActionHelper"; |
12 | | -import { useBasicData } from "../model/hooks/injection-hooks"; |
13 | | -import { EventsController } from "../typings/CellComponent"; |
14 | | -import { ExportWidget } from "./ExportWidget"; |
15 | 6 | import { Grid } from "./Grid"; |
16 | 7 | import { GridBody } from "./GridBody"; |
17 | 8 | import { GridHeader } from "./GridHeader"; |
| 9 | +import { RefreshStatus } from "./RefreshStatus"; |
18 | 10 | import { RowsRenderer } from "./RowsRenderer"; |
19 | 11 | import { WidgetContent } from "./WidgetContent"; |
20 | 12 | import { WidgetFooter } from "./WidgetFooter"; |
21 | 13 | import { WidgetHeader } from "./WidgetHeader"; |
22 | 14 | import { WidgetRoot } from "./WidgetRoot"; |
23 | 15 | import { WidgetTopBar } from "./WidgetTopBar"; |
24 | 16 |
|
25 | | -export interface WidgetProps { |
26 | | - className: string; |
27 | | - columnsDraggable: boolean; |
28 | | - columnsFilterable: boolean; |
29 | | - columnsHidable: boolean; |
30 | | - columnsResizable: boolean; |
31 | | - columnsSortable: boolean; |
32 | | - data: ObjectItem[]; |
33 | | - exporting: boolean; |
34 | | - headerContent?: ReactNode; |
35 | | - headerTitle?: string; |
36 | | - id: string; |
37 | | - numberOfItems?: number; |
38 | | - onExportCancel?: () => void; |
39 | | - paginationType: PaginationEnum; |
40 | | - loadMoreButtonCaption?: string; |
41 | | - |
42 | | - processedRows: number; |
43 | | - |
44 | | - styles?: CSSProperties; |
45 | | - rowAction?: ListActionValue; |
46 | | - isFirstLoad: boolean; |
47 | | - isFetchingNextBatch: boolean; |
48 | | - loadingType: LoadingTypeEnum; |
49 | | - columnsLoading: boolean; |
50 | | - showRefreshIndicator: boolean; |
51 | | - |
52 | | - // Helpers |
53 | | - cellEventsController: EventsController; |
54 | | - checkboxEventsController: EventsController; |
55 | | - selectActionHelper: SelectActionHelper; |
56 | | - focusController: FocusTargetController; |
57 | | -} |
58 | | - |
59 | | -export const Widget = observer(function Widget(props: WidgetProps) { |
60 | | - const { className, exporting, numberOfItems, onExportCancel, selectActionHelper } = props; |
61 | | - const basicData = useBasicData(); |
62 | | - const selectionEnabled = selectActionHelper.selectionType !== "None"; |
63 | | - |
64 | | - return ( |
65 | | - <WidgetRoot |
66 | | - className={className} |
67 | | - selectionMethod={selectActionHelper.selectionMethod} |
68 | | - selection={selectionEnabled} |
69 | | - style={props.styles} |
70 | | - exporting={exporting} |
71 | | - > |
72 | | - <Main {...props} data={exporting ? [] : props.data} /> |
73 | | - <SelectionProgressDialog /> |
74 | | - {exporting && ( |
75 | | - <ExportWidget |
76 | | - alertLabel={basicData.exportDialogLabel ?? "Export progress"} |
77 | | - cancelLabel={basicData.cancelExportLabel ?? "Cancel data export"} |
78 | | - failed={false} |
79 | | - onCancel={onExportCancel} |
80 | | - open={exporting} |
81 | | - progress={props.processedRows} |
82 | | - total={numberOfItems} |
83 | | - /> |
84 | | - )} |
85 | | - </WidgetRoot> |
86 | | - ); |
87 | | -}); |
88 | | - |
89 | | -const Main = observer((props: WidgetProps): ReactElement => { |
90 | | - const { data: rows, headerContent, headerTitle, loadMoreButtonCaption, showRefreshIndicator } = props; |
91 | | - |
| 17 | +export function Widget(props: { onExportCancel?: () => void }): ReactNode { |
92 | 18 | return ( |
93 | | - <Fragment> |
| 19 | + <WidgetRoot> |
94 | 20 | <WidgetTopBar /> |
95 | | - <WidgetHeader headerTitle={headerTitle} headerContent={headerContent} /> |
| 21 | + <WidgetHeader /> |
96 | 22 | <WidgetContent> |
97 | 23 | <Grid> |
98 | 24 | <GridHeader /> |
99 | 25 | <SelectAllBar /> |
100 | | - {showRefreshIndicator ? <RefreshIndicator /> : null} |
| 26 | + <RefreshStatus /> |
101 | 27 | <GridBody> |
102 | | - <RowsRenderer rows={rows} /> |
| 28 | + <RowsRenderer /> |
103 | 29 | <EmptyPlaceholder /> |
104 | 30 | </GridBody> |
105 | 31 | </Grid> |
106 | 32 | </WidgetContent> |
107 | | - <WidgetFooter loadMoreButtonCaption={loadMoreButtonCaption} /> |
108 | | - </Fragment> |
| 33 | + <WidgetFooter /> |
| 34 | + <SelectionProgressDialog /> |
| 35 | + <ExportProgressDialog onExportCancel={props.onExportCancel} /> |
| 36 | + </WidgetRoot> |
109 | 37 | ); |
110 | | -}); |
| 38 | +} |
0 commit comments