UNPKG

8.76 kBJavaScriptView Raw
1// ag-grid-react v26.2.0
2"use strict";
3var __importStar = (this && this.__importStar) || function (mod) {
4 if (mod && mod.__esModule) return mod;
5 var result = {};
6 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
7 result["default"] = mod;
8 return result;
9};
10var __importDefault = (this && this.__importDefault) || function (mod) {
11 return (mod && mod.__esModule) ? mod : { "default": mod };
12};
13Object.defineProperty(exports, "__esModule", { value: true });
14var ag_grid_community_1 = require("ag-grid-community");
15var react_1 = __importStar(require("react"));
16var beansContext_1 = require("./beansContext");
17var gridBodyComp_1 = __importDefault(require("./gridBodyComp"));
18var reactComment_1 = __importDefault(require("./reactComment"));
19var tabGuardComp_1 = __importDefault(require("./tabGuardComp"));
20var utils_1 = require("./utils");
21var GridComp = function (_a) {
22 var context = _a.context;
23 var _b = react_1.useState(''), rtlClass = _b[0], setRtlClass = _b[1];
24 var _c = react_1.useState(''), keyboardFocusClass = _c[0], setKeyboardFocusClass = _c[1];
25 var _d = react_1.useState(''), layoutClass = _d[0], setLayoutClass = _d[1];
26 var _e = react_1.useState(null), cursor = _e[0], setCursor = _e[1];
27 var _f = react_1.useState(null), userSelect = _f[0], setUserSelect = _f[1];
28 var _g = react_1.useState(false), initialised = _g[0], setInitialised = _g[1];
29 var _h = react_1.useState(), tabGuardReady = _h[0], setTabGuardReady = _h[1];
30 var gridCtrlRef = react_1.useRef(null);
31 var eRootWrapperRef = react_1.useRef(null);
32 var tabGuardRef = react_1.useRef();
33 var eGridBodyParentRef = react_1.useRef(null);
34 var focusInnerElementRef = react_1.useRef(function () { return undefined; });
35 var onTabKeyDown = react_1.useCallback(function () { return undefined; }, []);
36 var beans = react_1.useMemo(function () { return context.getBean('beans'); }, []);
37 reactComment_1.default(' AG Grid ', eRootWrapperRef);
38 // create shared controller.
39 react_1.useEffect(function () {
40 var currentController = gridCtrlRef.current = context.createBean(new ag_grid_community_1.GridCtrl());
41 return function () {
42 context.destroyBean(currentController);
43 gridCtrlRef.current = null;
44 };
45 }, []);
46 // initialise the UI
47 react_1.useEffect(function () {
48 var gridCtrl = gridCtrlRef.current;
49 focusInnerElementRef.current = gridCtrl.focusInnerElement.bind(gridCtrl);
50 var compProxy = {
51 destroyGridUi: function () { },
52 setRtlClass: setRtlClass,
53 addOrRemoveKeyboardFocusClass: function (addOrRemove) { return setKeyboardFocusClass(addOrRemove ? ag_grid_community_1.FocusService.AG_KEYBOARD_FOCUS : ''); },
54 forceFocusOutOfContainer: function () {
55 tabGuardRef.current.forceFocusOutOfContainer();
56 },
57 updateLayoutClasses: setLayoutClass,
58 getFocusableContainers: function () {
59 var els = [];
60 var gridBodyCompEl = eRootWrapperRef.current.querySelector('.ag-root');
61 var sideBarEl = eRootWrapperRef.current.querySelector('.ag-side-bar');
62 if (gridBodyCompEl) {
63 els.push(gridBodyCompEl);
64 }
65 if (sideBarEl) {
66 els.push(sideBarEl);
67 }
68 return els;
69 },
70 setCursor: setCursor,
71 setUserSelect: setUserSelect
72 };
73 gridCtrl.setComp(compProxy, eRootWrapperRef.current, eRootWrapperRef.current);
74 setInitialised(true);
75 }, []);
76 // initialise the extra components
77 react_1.useEffect(function () {
78 if (!tabGuardReady) {
79 return;
80 }
81 var gridCtrl = gridCtrlRef.current;
82 var beansToDestroy = [];
83 var agStackComponentsRegistry = beans.agStackComponentsRegistry;
84 var HeaderDropZonesClass = agStackComponentsRegistry.getComponentClass('AG-GRID-HEADER-DROP-ZONES');
85 var SideBarClass = agStackComponentsRegistry.getComponentClass('AG-SIDE-BAR');
86 var StatusBarClass = agStackComponentsRegistry.getComponentClass('AG-STATUS-BAR');
87 var WatermarkClass = agStackComponentsRegistry.getComponentClass('AG-WATERMARK');
88 var PaginationClass = agStackComponentsRegistry.getComponentClass('AG-PAGINATION');
89 var additionalEls = [];
90 var eRootWrapper = eRootWrapperRef.current;
91 var eGridBodyParent = eGridBodyParentRef.current;
92 if (gridCtrl.showDropZones() && HeaderDropZonesClass) {
93 var headerDropZonesComp = context.createBean(new HeaderDropZonesClass());
94 var eGui = headerDropZonesComp.getGui();
95 eRootWrapper.insertAdjacentElement('afterbegin', eGui);
96 additionalEls.push(eGui);
97 beansToDestroy.push(headerDropZonesComp);
98 }
99 if (gridCtrl.showSideBar() && SideBarClass) {
100 var sideBarComp = context.createBean(new SideBarClass());
101 var eGui = sideBarComp.getGui();
102 var bottomTabGuard = eGridBodyParent.querySelector('.ag-tab-guard-bottom');
103 if (bottomTabGuard) {
104 bottomTabGuard.insertAdjacentElement('beforebegin', eGui);
105 additionalEls.push(eGui);
106 }
107 beansToDestroy.push(sideBarComp);
108 }
109 if (gridCtrl.showStatusBar() && StatusBarClass) {
110 var statusBarComp = context.createBean(new StatusBarClass());
111 var eGui = statusBarComp.getGui();
112 eRootWrapper.insertAdjacentElement('beforeend', eGui);
113 additionalEls.push(eGui);
114 beansToDestroy.push(statusBarComp);
115 }
116 if (PaginationClass) {
117 var paginationComp = context.createBean(new PaginationClass());
118 var eGui = paginationComp.getGui();
119 eRootWrapper.insertAdjacentElement('beforeend', eGui);
120 additionalEls.push(eGui);
121 beansToDestroy.push(paginationComp);
122 }
123 if (gridCtrl.showWatermark() && WatermarkClass) {
124 var watermarkComp = context.createBean(new WatermarkClass());
125 var eGui = watermarkComp.getGui();
126 eRootWrapper.insertAdjacentElement('beforeend', eGui);
127 additionalEls.push(eGui);
128 beansToDestroy.push(watermarkComp);
129 }
130 return function () {
131 context.destroyBeans(beansToDestroy);
132 additionalEls.forEach(function (el) {
133 if (el.parentElement) {
134 el.parentElement.removeChild(el);
135 }
136 });
137 };
138 }, [tabGuardReady]);
139 var rootWrapperClasses = react_1.useMemo(function () { return utils_1.classesList('ag-root-wrapper', rtlClass, keyboardFocusClass, layoutClass); }, [rtlClass, keyboardFocusClass, layoutClass]);
140 var rootWrapperBodyClasses = react_1.useMemo(function () { return utils_1.classesList('ag-root-wrapper-body', 'ag-focus-managed', layoutClass); }, [layoutClass]);
141 var topStyle = react_1.useMemo(function () { return ({
142 userSelect: userSelect != null ? userSelect : '',
143 WebkitUserSelect: userSelect != null ? userSelect : '',
144 cursor: cursor != null ? cursor : ''
145 }); }, [userSelect, cursor]);
146 var eGridBodyParent = eGridBodyParentRef.current;
147 var setTabGuardCompRef = react_1.useCallback(function (ref) {
148 tabGuardRef.current = ref;
149 setTabGuardReady(true);
150 }, []);
151 return (react_1.default.createElement("div", { ref: eRootWrapperRef, className: rootWrapperClasses, style: topStyle },
152 react_1.default.createElement("div", { className: rootWrapperBodyClasses, ref: eGridBodyParentRef }, initialised && eGridBodyParent &&
153 react_1.default.createElement(beansContext_1.BeansContext.Provider, { value: beans },
154 react_1.default.createElement(tabGuardComp_1.default, { ref: setTabGuardCompRef, eFocusableElement: eGridBodyParent, onTabKeyDown: onTabKeyDown, gridCtrl: gridCtrlRef.current }, // we wait for initialised before rending the children, so GridComp has created and registered with it's
155 // GridCtrl before we create the child GridBodyComp. Otherwise the GridBodyComp would initialise first,
156 // before we have set the the Layout CSS classes, causing the GridBodyComp to render rows to a grid that
157 // doesn't have it's height specified, which would result if all the rows getting rendered (and if many rows,
158 // hangs the UI)
159 react_1.default.createElement(gridBodyComp_1.default, null))))));
160};
161exports.default = react_1.memo(GridComp);