1 |
|
2 | "use strict";
|
3 | var __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 | };
|
14 | var __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 | };
|
21 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
22 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
23 | };
|
24 | Object.defineProperty(exports, "__esModule", { value: true });
|
25 | var ag_grid_community_1 = require("ag-grid-community");
|
26 | var react_1 = __importStar(require("react"));
|
27 | var utils_1 = require("../utils");
|
28 | var popupEditorComp_1 = __importDefault(require("./popupEditorComp"));
|
29 | var showJsRenderer_1 = __importDefault(require("./showJsRenderer"));
|
30 | var beansContext_1 = require("../beansContext");
|
31 | var jsComp_1 = require("../jsComp");
|
32 | var CellCompState;
|
33 | (function (CellCompState) {
|
34 | CellCompState[CellCompState["ShowValue"] = 0] = "ShowValue";
|
35 | CellCompState[CellCompState["EditValue"] = 1] = "EditValue";
|
36 | })(CellCompState = exports.CellCompState || (exports.CellCompState = {}));
|
37 | var checkCellEditorDeprecations = function (popup, cellEditor, cellCtrl) {
|
38 | var col = cellCtrl.getColumn();
|
39 |
|
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 |
|
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 | };
|
50 | var 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 | };
|
63 | var 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 | };
|
77 | var 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 |
|
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 |
|
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 |
|
182 |
|
183 |
|
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 |
|
224 | setEditDetails({
|
225 | compDetails: compDetails,
|
226 | popup: popup,
|
227 | popupPosition: popupPosition
|
228 | });
|
229 | if (!popup) {
|
230 | setRenderDetails(undefined);
|
231 | }
|
232 | }
|
233 | else {
|
234 |
|
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 | };
|
270 | exports.default = react_1.memo(CellComp);
|