UNPKG

15.8 kBJavaScriptView Raw
1// ag-grid-react v26.2.0
2"use strict";
3var __assign = (this && this.__assign) || function () {
4 __assign = Object.assign || function(t) {
5 for (var s, i = 1, n = arguments.length; i < n; i++) {
6 s = arguments[i];
7 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8 t[p] = s[p];
9 }
10 return t;
11 };
12 return __assign.apply(this, arguments);
13};
14var __importStar = (this && this.__importStar) || function (mod) {
15 if (mod && mod.__esModule) return mod;
16 var result = {};
17 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
18 result["default"] = mod;
19 return result;
20};
21var __importDefault = (this && this.__importDefault) || function (mod) {
22 return (mod && mod.__esModule) ? mod : { "default": mod };
23};
24Object.defineProperty(exports, "__esModule", { value: true });
25var ag_grid_community_1 = require("ag-grid-community");
26var react_1 = __importStar(require("react"));
27var utils_1 = require("../utils");
28var popupEditorComp_1 = __importDefault(require("./popupEditorComp"));
29var showJsRenderer_1 = __importDefault(require("./showJsRenderer"));
30var beansContext_1 = require("../beansContext");
31var jsComp_1 = require("../jsComp");
32var CellCompState;
33(function (CellCompState) {
34 CellCompState[CellCompState["ShowValue"] = 0] = "ShowValue";
35 CellCompState[CellCompState["EditValue"] = 1] = "EditValue";
36})(CellCompState = exports.CellCompState || (exports.CellCompState = {}));
37var checkCellEditorDeprecations = function (popup, cellEditor, cellCtrl) {
38 var col = cellCtrl.getColumn();
39 // cellEditor is written to be a popup editor, however colDef.cellEditorPopup is not set
40 if (!popup && cellEditor.isPopup && cellEditor.isPopup()) {
41 var msg_1 = "AG Grid: Found an issue in column " + col.getColId() + ". If using ReactUI, specify an editor is a popup using colDef.cellEditorPopup=true";
42 ag_grid_community_1._.doOnce(function () { return console.warn(msg_1); }, 'jsEditorComp-isPopup-' + cellCtrl.getColumn().getColId());
43 }
44 // cellEditor is a popup and is trying to position itself the deprecated way
45 if (popup && cellEditor.getPopupPosition && cellEditor.getPopupPosition() != null) {
46 var msg_2 = "AG Grid: AG Grid: Found an issue in column " + col.getColId() + ". If using ReactUI, specify an editor popup position using colDef.cellEditorPopupPosition=[value]";
47 ag_grid_community_1._.doOnce(function () { return console.warn(msg_2); }, 'jsEditorComp-getPopupPosition-' + cellCtrl.getColumn().getColId());
48 }
49};
50var jsxEditValue = function (editDetails, setInlineCellEditorRef, setPopupCellEditorRef, eGui, cellCtrl, jsEditorComp) {
51 var compDetails = editDetails.compDetails;
52 var CellEditorClass = compDetails.componentClass;
53 var reactInlineEditor = compDetails.componentFromFramework && !editDetails.popup;
54 var reactPopupEditor = compDetails.componentFromFramework && editDetails.popup;
55 var jsPopupEditor = !compDetails.componentFromFramework && editDetails.popup;
56 return (react_1.default.createElement(react_1.default.Fragment, null,
57 reactInlineEditor
58 && react_1.default.createElement(CellEditorClass, __assign({}, editDetails.compDetails.params, { ref: setInlineCellEditorRef })),
59 reactPopupEditor
60 && react_1.default.createElement(popupEditorComp_1.default, { editDetails: editDetails, cellCtrl: cellCtrl, eParentCell: eGui, wrappedContent: react_1.default.createElement(CellEditorClass, __assign({}, editDetails.compDetails.params, { ref: setPopupCellEditorRef })) }),
61 jsPopupEditor && jsEditorComp && react_1.default.createElement(popupEditorComp_1.default, { editDetails: editDetails, cellCtrl: cellCtrl, eParentCell: eGui, jsChildComp: jsEditorComp })));
62};
63var jsxShowValue = function (showDetails, parentId, cellRendererRef, showTools, unSelectable, reactCellRendererStateless, toolsRefCallback, toolsValueRefCallback) {
64 var compDetails = showDetails.compDetails, value = showDetails.value;
65 var noCellRenderer = !compDetails;
66 var reactCellRenderer = compDetails && compDetails.componentFromFramework;
67 var CellRendererClass = compDetails && compDetails.componentClass;
68 var bodyJsxFunc = function () { return (react_1.default.createElement(react_1.default.Fragment, null,
69 noCellRenderer && react_1.default.createElement(react_1.default.Fragment, null, value),
70 reactCellRenderer && !reactCellRendererStateless && react_1.default.createElement(CellRendererClass, __assign({}, compDetails.params, { ref: cellRendererRef })),
71 reactCellRenderer && reactCellRendererStateless && react_1.default.createElement(CellRendererClass, __assign({}, compDetails.params)))); };
72 return (react_1.default.createElement(react_1.default.Fragment, null, showTools ?
73 react_1.default.createElement("div", { className: "ag-cell-wrapper", role: "presentation", ref: toolsRefCallback },
74 react_1.default.createElement("span", { role: "presentation", id: "cell-" + parentId, className: "ag-cell-value", unselectable: unSelectable, ref: toolsValueRefCallback }, bodyJsxFunc())) :
75 bodyJsxFunc()));
76};
77var CellComp = function (props) {
78 var context = react_1.useContext(beansContext_1.BeansContext).context;
79 var cellCtrl = props.cellCtrl, printLayout = props.printLayout, editingRow = props.editingRow;
80 var _a = react_1.useState(), renderDetails = _a[0], setRenderDetails = _a[1];
81 var _b = react_1.useState(), editDetails = _b[0], setEditDetails = _b[1];
82 var _c = react_1.useState(new utils_1.CssClasses()), cssClasses = _c[0], setCssClasses = _c[1];
83 var _d = react_1.useState(), userStyles = _d[0], setUserStyles = _d[1];
84 var _e = react_1.useState('on'), unselectable = _e[0], setUnselectable = _e[1];
85 var _f = react_1.useState(), left = _f[0], setLeft = _f[1];
86 var _g = react_1.useState(), width = _g[0], setWidth = _g[1];
87 var _h = react_1.useState(), height = _h[0], setHeight = _h[1];
88 var _j = react_1.useState(), transition = _j[0], setTransition = _j[1];
89 var _k = react_1.useState(), tabIndex = _k[0], setTabIndex = _k[1];
90 var _l = react_1.useState(), ariaSelected = _l[0], setAriaSelected = _l[1];
91 var _m = react_1.useState(), ariaExpanded = _m[0], setAriaExpanded = _m[1];
92 var _o = react_1.useState(), ariaColIndex = _o[0], setAriaColIndex = _o[1];
93 var _p = react_1.useState(), ariaDescribedBy = _p[0], setAriaDescribedBy = _p[1];
94 var _q = react_1.useState(), zIndex = _q[0], setZIndex = _q[1];
95 var _r = react_1.useState(), role = _r[0], setRole = _r[1];
96 var _s = react_1.useState(), colId = _s[0], setColId = _s[1];
97 var _t = react_1.useState(), title = _t[0], setTitle = _t[1];
98 var _u = react_1.useState(false), includeSelection = _u[0], setIncludeSelection = _u[1];
99 var _v = react_1.useState(false), includeRowDrag = _v[0], setIncludeRowDrag = _v[1];
100 var _w = react_1.useState(false), includeDndSource = _w[0], setIncludeDndSource = _w[1];
101 var _x = react_1.useState(false), forceWrapper = _x[0], setForceWrapper = _x[1];
102 var _y = react_1.useState(), jsEditorComp = _y[0], setJsEditorComp = _y[1];
103 var eGui = react_1.useRef(null);
104 var cellRendererRef = react_1.useRef(null);
105 var jsCellRendererRef = react_1.useRef();
106 var cellEditorRef = react_1.useRef();
107 var _z = react_1.useState(), toolsSpan = _z[0], setToolsSpan = _z[1];
108 var _0 = react_1.useState(), toolsValueSpan = _0[0], setToolsValueSpan = _0[1];
109 var showTools = renderDetails != null && (includeSelection || includeDndSource || includeRowDrag || forceWrapper);
110 var setCellEditorRef = react_1.useCallback(function (popup, cellEditor) {
111 cellEditorRef.current = cellEditor;
112 if (cellEditor) {
113 checkCellEditorDeprecations(popup, cellEditor, cellCtrl);
114 var editingCancelledByUserComp = cellEditor.isCancelBeforeStart && cellEditor.isCancelBeforeStart();
115 if (editingCancelledByUserComp) {
116 // we cannot set state inside render, so hack is to do it in next VM turn
117 setTimeout(function () { return cellCtrl.stopEditing(); }, 0);
118 }
119 }
120 }, []);
121 var setPopupCellEditorRef = react_1.useCallback(function (cellRenderer) { return setCellEditorRef(true, cellRenderer); }, []);
122 var setInlineCellEditorRef = react_1.useCallback(function (cellRenderer) { return setCellEditorRef(false, cellRenderer); }, []);
123 showJsRenderer_1.default(renderDetails, showTools, toolsValueSpan, jsCellRendererRef, eGui);
124 react_1.useEffect(function () {
125 var doingJsEditor = editDetails && !editDetails.compDetails.componentFromFramework;
126 if (!doingJsEditor) {
127 return;
128 }
129 var compDetails = editDetails.compDetails;
130 var isPopup = editDetails.popup === true;
131 var cellEditor = jsComp_1.createJsComp(compDetails);
132 if (!cellEditor) {
133 return;
134 }
135 var compGui = cellEditor.getGui();
136 setCellEditorRef(isPopup, cellEditor);
137 if (!isPopup) {
138 eGui.current.appendChild(compGui);
139 cellEditor.afterGuiAttached && cellEditor.afterGuiAttached();
140 }
141 setJsEditorComp(cellEditor);
142 return function () {
143 context.destroyBean(cellEditor);
144 setCellEditorRef(isPopup, undefined);
145 setJsEditorComp(undefined);
146 if (compGui && compGui.parentElement) {
147 compGui.parentElement.removeChild(compGui);
148 }
149 };
150 }, [editDetails]);
151 // tool widgets effect
152 react_1.useEffect(function () {
153 if (!cellCtrl || !context) {
154 return;
155 }
156 setAriaDescribedBy(!!toolsSpan ? "cell-" + cellCtrl.getInstanceId() : undefined);
157 if (!toolsSpan) {
158 return;
159 }
160 var beansToDestroy = [];
161 var addComp = function (comp) {
162 if (comp) {
163 toolsSpan.insertAdjacentElement('afterbegin', comp.getGui());
164 beansToDestroy.push(comp);
165 }
166 return comp;
167 };
168 if (includeSelection) {
169 addComp(cellCtrl.createSelectionCheckbox());
170 }
171 if (includeDndSource) {
172 addComp(cellCtrl.createDndSource());
173 }
174 if (includeRowDrag) {
175 addComp(cellCtrl.createRowDragComp());
176 }
177 return function () {
178 context.destroyBeans(beansToDestroy);
179 };
180 }, [includeDndSource, includeRowDrag, includeSelection, toolsSpan]);
181 // attaching the ref to state makes sure we render again when state is set. this is
182 // how we make sure the tools are added, as it's not possible to have an effect depend
183 // on a reference, as reference is not state, it doesn't create another render cycle.
184 var toolsRefCallback = react_1.useCallback(function (ref) { return setToolsSpan(ref); }, []);
185 var toolsValueRefCallback = react_1.useCallback(function (ref) { return setToolsValueSpan(ref); }, []);
186 react_1.useEffect(function () {
187 if (!cellCtrl) {
188 return;
189 }
190 var compProxy = {
191 addOrRemoveCssClass: function (name, on) { return setCssClasses(function (prev) { return prev.setClass(name, on); }); },
192 setUserStyles: function (styles) { return setUserStyles(styles); },
193 setAriaSelected: function (value) { return setAriaSelected(value); },
194 setAriaExpanded: function (value) { return setAriaExpanded(value); },
195 getFocusableElement: function () { return eGui.current; },
196 setLeft: function (left) { return setLeft(left); },
197 setWidth: function (width) { return setWidth(width); },
198 setAriaColIndex: function (index) { return setAriaColIndex(index); },
199 setHeight: function (height) { return setHeight(height); },
200 setZIndex: function (zIndex) { return setZIndex(zIndex); },
201 setTabIndex: function (tabIndex) { return setTabIndex(tabIndex); },
202 setRole: function (role) { return setRole(role); },
203 setColId: function (colId) { return setColId(colId); },
204 setTitle: function (title) { return setTitle(title); },
205 setUnselectable: function (value) { return setUnselectable(value || undefined); },
206 setTransition: function (transition) { return setTransition(transition); },
207 setIncludeSelection: function (include) { return setIncludeSelection(include); },
208 setIncludeRowDrag: function (include) { return setIncludeRowDrag(include); },
209 setIncludeDndSource: function (include) { return setIncludeDndSource(include); },
210 setForceWrapper: function (force) { return setForceWrapper(force); },
211 getCellEditor: function () { return cellEditorRef.current || null; },
212 getCellRenderer: function () { return cellRendererRef.current ? cellRendererRef.current : jsCellRendererRef.current; },
213 getParentOfValue: function () { return toolsValueSpan ? toolsValueSpan : eGui.current; },
214 setRenderDetails: function (compDetails, value, force) {
215 setRenderDetails({
216 value: value,
217 compDetails: compDetails,
218 force: force
219 });
220 },
221 setEditDetails: function (compDetails, popup, popupPosition) {
222 if (compDetails) {
223 // start editing
224 setEditDetails({
225 compDetails: compDetails,
226 popup: popup,
227 popupPosition: popupPosition
228 });
229 if (!popup) {
230 setRenderDetails(undefined);
231 }
232 }
233 else {
234 // stop editing
235 setEditDetails(undefined);
236 }
237 }
238 };
239 cellCtrl.setComp(compProxy, null, eGui.current, printLayout, editingRow);
240 }, []);
241 var reactCellRendererStateless = react_1.useMemo(function () {
242 var res = renderDetails && renderDetails.compDetails
243 && renderDetails.compDetails.componentFromFramework
244 && utils_1.isComponentStateless(renderDetails.compDetails.componentClass);
245 return !!res;
246 }, [renderDetails]);
247 var className = react_1.useMemo(function () {
248 var res = cssClasses.toString();
249 if (!showTools) {
250 res += ' ag-cell-value';
251 }
252 return res;
253 }, [cssClasses, showTools]);
254 var cellStyles = react_1.useMemo(function () {
255 var res = {
256 left: left,
257 width: width,
258 height: height,
259 transition: transition,
260 zIndex: zIndex
261 };
262 ag_grid_community_1._.assign(res, userStyles);
263 return res;
264 }, [left, width, height, transition, zIndex, userStyles]);
265 var cellInstanceId = react_1.useMemo(function () { return cellCtrl.getInstanceId(); }, []);
266 return (react_1.default.createElement("div", { ref: eGui, className: className, style: cellStyles, tabIndex: tabIndex, "aria-selected": ariaSelected, "aria-colindex": ariaColIndex, role: role, "aria-expanded": ariaExpanded, "col-id": colId, title: title, unselectable: unselectable, "aria-describedby": ariaDescribedBy },
267 renderDetails != null && jsxShowValue(renderDetails, cellInstanceId, cellRendererRef, showTools, unselectable, reactCellRendererStateless, toolsRefCallback, toolsValueRefCallback),
268 editDetails != null && jsxEditValue(editDetails, setInlineCellEditorRef, setPopupCellEditorRef, eGui.current, cellCtrl, jsEditorComp)));
269};
270exports.default = react_1.memo(CellComp);