@easydata/crud 1.4.12 → 1.4.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/browser/easydata.css +2186 -2181
  2. package/dist/browser/easydata.css.map +1 -1
  3. package/dist/browser/easydata.js +10903 -11624
  4. package/dist/browser/easydata.js.map +1 -1
  5. package/dist/browser/easydata.min.css +3 -1
  6. package/dist/browser/easydata.min.js +1 -1
  7. package/dist/browser/easydata.min.js.map +1 -1
  8. package/dist/bundles/easydata.crud.js +8447 -8429
  9. package/dist/bundles/easydata.crud.js.map +1 -1
  10. package/dist/bundles/easydata.crud.min.js +1 -1
  11. package/dist/bundles/easydata.crud.min.js.map +1 -1
  12. package/dist/lib/filter/data_filter.d.ts +6 -6
  13. package/dist/lib/filter/data_filter.js +1 -0
  14. package/dist/lib/filter/text_data_filter.d.ts +16 -16
  15. package/dist/lib/filter/text_data_filter.js +122 -122
  16. package/dist/lib/form/entity_edit_form.d.ts +20 -20
  17. package/dist/lib/form/entity_edit_form.js +133 -133
  18. package/dist/lib/form/entity_edit_form.js.map +1 -1
  19. package/dist/lib/form/entity_form_builder.d.ts +27 -27
  20. package/dist/lib/form/entity_form_builder.js +440 -440
  21. package/dist/lib/form/entity_form_builder.js.map +1 -1
  22. package/dist/lib/i18n/text_resources.d.ts +1 -1
  23. package/dist/lib/i18n/text_resources.js +31 -31
  24. package/dist/lib/main/data_context.d.ts +45 -45
  25. package/dist/lib/main/data_context.js +167 -167
  26. package/dist/lib/main/data_context.js.map +1 -1
  27. package/dist/lib/main/easy_data_server_loader.d.ts +11 -11
  28. package/dist/lib/main/easy_data_server_loader.js +43 -43
  29. package/dist/lib/public_api.d.ts +16 -16
  30. package/dist/lib/public_api.js +16 -14
  31. package/dist/lib/public_api.js.map +1 -1
  32. package/dist/lib/utils/utils.d.ts +4 -4
  33. package/dist/lib/utils/utils.js +24 -24
  34. package/dist/lib/utils/utils.js.map +1 -1
  35. package/dist/lib/validators/datetime_validator.d.ts +6 -6
  36. package/dist/lib/validators/datetime_validator.js +45 -43
  37. package/dist/lib/validators/datetime_validator.js.map +1 -1
  38. package/dist/lib/validators/required_validator.d.ts +6 -6
  39. package/dist/lib/validators/required_validator.js +36 -34
  40. package/dist/lib/validators/required_validator.js.map +1 -1
  41. package/dist/lib/validators/type_validator.d.ts +6 -6
  42. package/dist/lib/validators/type_validator.js +46 -44
  43. package/dist/lib/validators/type_validator.js.map +1 -1
  44. package/dist/lib/validators/validator.d.ts +9 -9
  45. package/dist/lib/validators/validator.js +6 -6
  46. package/dist/lib/views/easy_data_view_dispatcher.d.ts +18 -18
  47. package/dist/lib/views/easy_data_view_dispatcher.js +113 -113
  48. package/dist/lib/views/entity_data_view.d.ts +23 -23
  49. package/dist/lib/views/entity_data_view.js +224 -224
  50. package/dist/lib/views/entity_data_view.js.map +1 -1
  51. package/dist/lib/views/options.d.ts +14 -14
  52. package/dist/lib/views/options.js +1 -0
  53. package/dist/lib/views/root_data_view.d.ts +9 -9
  54. package/dist/lib/views/root_data_view.js +48 -48
  55. package/dist/lib/views/root_data_view.js.map +1 -1
  56. package/dist/lib/widgets/progress_bar.d.ts +6 -6
  57. package/dist/lib/widgets/progress_bar.js +15 -15
  58. package/dist/lib/widgets/text_filter_widget.d.ts +24 -24
  59. package/dist/lib/widgets/text_filter_widget.js +213 -213
  60. package/package.json +28 -27
  61. package/webpack.config.js +12 -9
@@ -1,441 +1,441 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import { DataRow, DataType, EasyDataTable, EditorTag, EntityAttrKind, i18n, utils as dataUtils, ValueEditor } from '@easydata/core';
13
- import { browserUtils, DefaultDateTimePicker, DefaultDialogService, domel, EasyGrid } from '@easydata/ui';
14
- import * as crudUtils from '../utils/utils';
15
- import { EntityEditForm } from './entity_edit_form';
16
- import { TextFilterWidget } from '../widgets/text_filter_widget';
17
- var isIE = browserUtils.IsIE();
18
- var EntityEditFormBuilder = /** @class */ (function () {
19
- function EntityEditFormBuilder(context, params) {
20
- this.context = context;
21
- this.params = params;
22
- this.params = params || {};
23
- this.reset();
24
- }
25
- EntityEditFormBuilder.prototype.reset = function () {
26
- this.form = new EntityEditForm(this.context);
27
- };
28
- EntityEditFormBuilder.prototype.setupLookupField = function (parent, attr, readOnly, value) {
29
- var _this = this;
30
- var lookupEntity = this.context.getMetaData().getRootEntity()
31
- .subEntities.filter(function (ent) { return ent.id == attr.lookupEntity; })[0];
32
- var dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);
33
- if (!dataAttr)
34
- return;
35
- readOnly = readOnly || !dataAttr.isEditable;
36
- value = this.params.values
37
- ? this.params.values.getValue(dataAttr.id)
38
- : undefined;
39
- var horizClass = isIE
40
- ? 'kfrm-fields-ie is-horizontal'
41
- : 'kfrm-fields is-horizontal';
42
- var inputEl;
43
- domel(parent)
44
- .addChild('div', function (b) {
45
- b
46
- .addClass(horizClass)
47
- .addChild('input', function (b) {
48
- inputEl = b.toDOM();
49
- b.attr('readonly', '');
50
- b.name(dataAttr.id);
51
- b.type(_this.resolveInputType(dataAttr.dataType));
52
- b.value(dataUtils.IsDefinedAndNotNull(value)
53
- ? value.toString() : '');
54
- });
55
- if (!readOnly)
56
- b.addChild('button', function (b) { return b
57
- .addClass('kfrm-button')
58
- .attr('title', i18n.getText('NavigationBtnTitle'))
59
- .addText('...')
60
- .on('click', function (ev) {
61
- var lookupTable = new EasyDataTable({
62
- loader: {
63
- loadChunk: function (chunkParams) { return _this.context.getDataLoader()
64
- .loadChunk(__assign(__assign({}, chunkParams), { id: lookupEntity.id })); }
65
- }
66
- });
67
- _this.context.getDataLoader()
68
- .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id })
69
- .then(function (data) {
70
- var _a;
71
- var _loop_1 = function (col) {
72
- var attrs = lookupEntity.attributes.filter(function (attr) {
73
- return attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup);
74
- });
75
- if (attrs.length) {
76
- lookupTable.columns.add(col);
77
- }
78
- };
79
- for (var _i = 0, _b = data.table.columns.getItems(); _i < _b.length; _i++) {
80
- var col = _b[_i];
81
- _loop_1(col);
82
- }
83
- lookupTable.setTotal(data.total);
84
- for (var _c = 0, _d = data.table.getCachedRows(); _c < _d.length; _c++) {
85
- var row = _d[_c];
86
- lookupTable.addRow(row);
87
- }
88
- var ds = new DefaultDialogService();
89
- var gridSlot = null;
90
- var selectedSlot = null;
91
- var widgetSlot;
92
- var slot = domel('div')
93
- .addClass("kfrm-form")
94
- .addChild('div', function (b) { return b
95
- .addClass("kfrm-field")
96
- .addChild('label', function (b) { return b
97
- .addText(i18n.getText('LookupSelectedItem'))
98
- .toDOM(); })
99
- .addChild('div', function (b) { return selectedSlot = b
100
- .addText('None')
101
- .toDOM(); }); })
102
- .addChild('div', function (b) { return widgetSlot = b.toDOM(); })
103
- .addChild('div', function (b) { return b
104
- .addClass('kfrm-control')
105
- .addChild('div', function (b) { return gridSlot = b.toDOM(); }); })
106
- .toDOM();
107
- var selectedValue = inputEl.value;
108
- var getValue = function (row, colId) {
109
- if (row instanceof DataRow) {
110
- return row.getValue(colId);
111
- }
112
- var property = colId.substring(colId.lastIndexOf('.') + 1);
113
- return row[property];
114
- };
115
- var updateSelectedValue = function (row) {
116
- selectedSlot.innerHTML = lookupTable.columns
117
- .getItems()
118
- .map(function (col) {
119
- return "<b>" + col.label + ":</b> " + getValue(row, col.id);
120
- })
121
- .join(', ');
122
- };
123
- if (selectedValue) {
124
- var attr_1 = lookupEntity.getFirstPrimaryAttr();
125
- var key = attr_1.id.substring(attr_1.id.lastIndexOf('.') + 1);
126
- _this.context.fetchRecord((_a = {}, _a[key] = selectedValue, _a), lookupEntity.id)
127
- .then(function (data) {
128
- if (data.entity) {
129
- updateSelectedValue(data.entity);
130
- }
131
- })
132
- .catch(function (error) {
133
- console.error(error);
134
- });
135
- }
136
- var lookupGrid = new EasyGrid({
137
- slot: gridSlot,
138
- dataTable: lookupTable,
139
- fixHeightOnFirstRender: true,
140
- paging: {
141
- pageSize: 10
142
- },
143
- onActiveRowChanged: function (ev) {
144
- lookupGrid.getData().getRow(ev.rowIndex)
145
- .then(function (row) {
146
- selectedValue = row.getValue(attr.lookupDataAttr);
147
- updateSelectedValue(row);
148
- });
149
- }
150
- });
151
- ds.open({
152
- title: i18n.getText('LookupDlgCaption')
153
- .replace('{entity}', lookupEntity.caption),
154
- body: slot,
155
- arrangeParents: true,
156
- beforeOpen: function () {
157
- var dataFilter = _this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);
158
- new TextFilterWidget(widgetSlot, lookupGrid, dataFilter, { instantMode: true, focus: true });
159
- },
160
- onSubmit: function () {
161
- inputEl.value = selectedValue;
162
- return true;
163
- },
164
- onDestroy: function () {
165
- lookupGrid.destroy();
166
- // return focus on button
167
- b.toDOM().focus();
168
- }
169
- });
170
- });
171
- }); });
172
- });
173
- };
174
- EntityEditFormBuilder.prototype.setupDateTimeField = function (parent, attr, value, readOnly, hidden) {
175
- var _this = this;
176
- var horizClass = isIE
177
- ? 'kfrm-fields-ie is-horizontal'
178
- : 'kfrm-fields is-horizontal';
179
- var editFormat = crudUtils.getEditDateTimeFormat(attr.dataType);
180
- var inputEl;
181
- var btnEl;
182
- var mask = editFormat
183
- .replace('yyyy', '9999')
184
- .replace('MM', '99')
185
- .replace('dd', '99')
186
- .replace('HH', '99')
187
- .replace('mm', '99')
188
- .replace('ss', '99');
189
- domel(parent)
190
- .addChild('div', function (b) {
191
- b
192
- .addClass(horizClass)
193
- .addChild('input', function (b) {
194
- inputEl = b.toDOM();
195
- b.name(attr.id);
196
- b.type(hidden ? 'hidden' : _this.resolveInputType(attr.dataType));
197
- if (readOnly) {
198
- b.attr('readonly', '');
199
- }
200
- else {
201
- b.mask(mask);
202
- b.on('keypress', function (ev) { return _this.applySumbit(ev); })
203
- .on('input', function (ev) {
204
- b.removeClass('is-invalid');
205
- try {
206
- var newDate = dataUtils.strToDateTime(inputEl.value, editFormat);
207
- }
208
- catch (e) {
209
- b.addClass('is-invalid');
210
- }
211
- finally {
212
- }
213
- })
214
- .on('blur', function (ev) {
215
- if (inputEl.value === mask.replace(/[9]/g, '_')) {
216
- inputEl.value = '';
217
- }
218
- });
219
- }
220
- b.value((dataUtils.IsDefinedAndNotNull(value)
221
- ? dataUtils.dateTimeToStr(value, editFormat)
222
- : ''));
223
- });
224
- if (!readOnly)
225
- b.addChild('button', function (b) { return btnEl = b
226
- .addClass('kfrm-button')
227
- .attr('title', i18n.getText(attr.dataType !== DataType.Time
228
- ? 'CalendarBtnTitle'
229
- : 'TimerBtnTitle'))
230
- .addChild('i', function (b) { return b.addClass(attr.dataType !== DataType.Time
231
- ? 'ed-calendar-icon'
232
- : 'ed-timer-icon'); })
233
- .on('click', function (ev) {
234
- var value;
235
- try {
236
- value = inputEl.value.length
237
- ? attr.dataType !== DataType.Time
238
- ? dataUtils.strToDateTime(inputEl.value, editFormat)
239
- : dataUtils.strToTime(inputEl.value)
240
- : new Date(new Date().setSeconds(0));
241
- }
242
- catch (_a) {
243
- value = new Date(new Date().setSeconds(0));
244
- }
245
- var pickerOptions = {
246
- zIndex: 9999999999,
247
- showCalendar: attr.dataType !== DataType.Time,
248
- showTimePicker: attr.dataType !== DataType.Date,
249
- onApply: function (dateTime) {
250
- dateTime.setSeconds(0);
251
- dateTime.setMilliseconds(0);
252
- inputEl.value = dataUtils.dateTimeToStr(dateTime, editFormat);
253
- }
254
- };
255
- var dtp = new DefaultDateTimePicker(pickerOptions);
256
- dtp.setDateTime(value);
257
- dtp.show(ev.target);
258
- }).toDOM(); });
259
- });
260
- };
261
- EntityEditFormBuilder.prototype.setupListField = function (parent, attr, value, values, readOnly) {
262
- var _this = this;
263
- domel(parent)
264
- .addChild('div', function (b) { return b
265
- .addClass('kfrm-select full-width')
266
- .addChild('select', function (b) {
267
- if (readOnly)
268
- b.attr('readonly', '');
269
- b.attr('name', attr.id);
270
- b.on('keypress', function (ev) { return _this.applySumbit(ev); });
271
- if (values) {
272
- for (var i = 0; i < values.length; i++) {
273
- var val = values[i];
274
- b.addOption({
275
- value: val.id,
276
- title: val.text,
277
- selected: i === 0
278
- });
279
- }
280
- }
281
- b.value(value);
282
- }); });
283
- };
284
- EntityEditFormBuilder.prototype.setupFileField = function (parent, attr, readOnly, accept) {
285
- var _this = this;
286
- domel(parent)
287
- .addChild('input', function (b) {
288
- if (readOnly)
289
- b.attr('readonly', '');
290
- b.name(attr.id)
291
- .type(_this.resolveInputType(attr.dataType));
292
- b.attr('accept', accept);
293
- });
294
- };
295
- EntityEditFormBuilder.prototype.setupTextField = function (parent, attr, value, readOnly, hidden) {
296
- var _this = this;
297
- domel(parent)
298
- .addChild('input', function (b) {
299
- if (readOnly) {
300
- b.attr('readonly', '');
301
- }
302
- b.type(hidden ? 'hidden' : _this.resolveInputType(attr.dataType));
303
- b.name(attr.id)
304
- .type(_this.resolveInputType(attr.dataType));
305
- if (attr.dataType == DataType.Bool) {
306
- if (value)
307
- b.attr('checked', '');
308
- }
309
- else {
310
- b.on('keypress', function (ev) { return _this.applySumbit(ev); })
311
- .value(dataUtils.IsDefinedAndNotNull(value)
312
- ? value.toString()
313
- : '');
314
- }
315
- });
316
- };
317
- EntityEditFormBuilder.prototype.setupTextArea = function (parent, attr, value, readOnly) {
318
- // feature: modify size in value editor ??
319
- domel(parent)
320
- .addChild('textarea', function (b) {
321
- if (readOnly)
322
- b.attr('readonly', '');
323
- b.attr('name', attr.id);
324
- b.setStyle('height', "120px");
325
- b.value(dataUtils.IsDefinedAndNotNull(value)
326
- ? value.toString()
327
- : '');
328
- });
329
- };
330
- EntityEditFormBuilder.prototype.addFormField = function (parent, attr) {
331
- var value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)
332
- ? this.params.values.getValue(attr.id)
333
- : !this.params.isEditForm
334
- ? attr.defaultValue
335
- : undefined;
336
- var editor = this.resolveEditor(attr);
337
- var readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);
338
- var required = !attr.isNullable;
339
- if (isIE) {
340
- parent = domel('div', parent)
341
- .addClass('kfrm-field-ie')
342
- .toDOM();
343
- }
344
- domel(parent)
345
- .addChild('label', function (b) {
346
- b.attr('for', attr.id);
347
- b.addHtml(attr.caption + " " + (required ? '<sup style="color: red">*</sup>' : '') + ": ");
348
- if (attr.description) {
349
- b.addChild('div', function (b) { return b
350
- .attr('title', attr.description)
351
- .addClass('question-mark')
352
- .setStyle('vertical-align', 'middle')
353
- .setStyle('display', 'inline-block'); });
354
- }
355
- });
356
- var hidden = attr.isPrimaryKey;
357
- if (attr.kind === EntityAttrKind.Lookup) {
358
- this.setupLookupField(parent, attr, readOnly, value);
359
- return;
360
- }
361
- switch (editor.tag) {
362
- case EditorTag.DateTime:
363
- this.setupDateTimeField(parent, attr, value, readOnly, hidden);
364
- break;
365
- case EditorTag.List:
366
- this.setupListField(parent, attr, value, editor.values, readOnly);
367
- break;
368
- case EditorTag.File:
369
- this.setupFileField(parent, attr, readOnly, editor.accept);
370
- break;
371
- case EditorTag.Edit:
372
- default:
373
- if (editor.multiline) {
374
- this.setupTextArea(parent, attr, value, readOnly);
375
- }
376
- else {
377
- this.setupTextField(parent, attr, value, readOnly, hidden);
378
- }
379
- break;
380
- }
381
- };
382
- EntityEditFormBuilder.prototype.resolveInputType = function (dataType) {
383
- if (dataType === DataType.Bool)
384
- return 'checkbox';
385
- if (dataType === DataType.Blob)
386
- return 'file';
387
- return 'text';
388
- };
389
- EntityEditFormBuilder.prototype.resolveEditor = function (attr) {
390
- var editor = attr.defaultEditor || new ValueEditor();
391
- if (editor.tag == EditorTag.Unknown) {
392
- if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {
393
- editor.tag = EditorTag.DateTime;
394
- }
395
- else {
396
- editor.tag = EditorTag.Edit;
397
- }
398
- }
399
- return editor;
400
- };
401
- EntityEditFormBuilder.prototype.applySumbit = function (ev) {
402
- if (ev.keyCode === 13) {
403
- this.sumbitCallback && this.sumbitCallback();
404
- return false;
405
- }
406
- return false;
407
- };
408
- EntityEditFormBuilder.prototype.onSubmit = function (sumbitCallback) {
409
- this.sumbitCallback = sumbitCallback;
410
- return this;
411
- };
412
- EntityEditFormBuilder.prototype.build = function () {
413
- var fb;
414
- var formHtml = domel('div')
415
- .addClass('kfrm-form')
416
- .addChild('div', function (b) { return b
417
- .addClass("errors-block")
418
- .toDOM(); })
419
- .addChild('div', function (b) {
420
- b.addClass("" + (isIE
421
- ? 'kfrm-fields-ie col-ie-1-4 label-align-right'
422
- : 'kfrm-fields col-a-1 label-align-right'));
423
- fb = b;
424
- })
425
- .toDOM();
426
- this.form['setHtmlInt'](formHtml);
427
- for (var _i = 0, _a = this.context.getActiveEntity().attributes; _i < _a.length; _i++) {
428
- var attr = _a[_i];
429
- if (!this.params.isEditForm && !attr.showOnCreate)
430
- continue;
431
- if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {
432
- continue;
433
- }
434
- this.addFormField(fb.toDOM(), attr);
435
- }
436
- return this.form;
437
- };
438
- return EntityEditFormBuilder;
439
- }());
440
- export { EntityEditFormBuilder };
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { DataRow, DataType, EasyDataTable, EditorTag, EntityAttrKind, i18n, utils as dataUtils, ValueEditor } from '@easydata/core';
13
+ import { browserUtils, DefaultDateTimePicker, DefaultDialogService, domel, EasyGrid } from '@easydata/ui';
14
+ import * as crudUtils from '../utils/utils';
15
+ import { EntityEditForm } from './entity_edit_form';
16
+ import { TextFilterWidget } from '../widgets/text_filter_widget';
17
+ var isIE = browserUtils.IsIE();
18
+ var EntityEditFormBuilder = /** @class */ (function () {
19
+ function EntityEditFormBuilder(context, params) {
20
+ this.context = context;
21
+ this.params = params;
22
+ this.params = params || {};
23
+ this.reset();
24
+ }
25
+ EntityEditFormBuilder.prototype.reset = function () {
26
+ this.form = new EntityEditForm(this.context);
27
+ };
28
+ EntityEditFormBuilder.prototype.setupLookupField = function (parent, attr, readOnly, value) {
29
+ var _this = this;
30
+ var lookupEntity = this.context.getMetaData().getRootEntity()
31
+ .subEntities.filter(function (ent) { return ent.id == attr.lookupEntity; })[0];
32
+ var dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);
33
+ if (!dataAttr)
34
+ return;
35
+ readOnly = readOnly || !dataAttr.isEditable;
36
+ value = this.params.values
37
+ ? this.params.values.getValue(dataAttr.id)
38
+ : undefined;
39
+ var horizClass = isIE
40
+ ? 'kfrm-fields-ie is-horizontal'
41
+ : 'kfrm-fields is-horizontal';
42
+ var inputEl;
43
+ domel(parent)
44
+ .addChild('div', function (b) {
45
+ b
46
+ .addClass(horizClass)
47
+ .addChild('input', function (b) {
48
+ inputEl = b.toDOM();
49
+ b.attr('readonly', '');
50
+ b.name(dataAttr.id);
51
+ b.type(_this.resolveInputType(dataAttr.dataType));
52
+ b.value(dataUtils.IsDefinedAndNotNull(value)
53
+ ? value.toString() : '');
54
+ });
55
+ if (!readOnly)
56
+ b.addChild('button', function (b) { return b
57
+ .addClass('kfrm-button')
58
+ .attr('title', i18n.getText('NavigationBtnTitle'))
59
+ .addText('...')
60
+ .on('click', function (ev) {
61
+ var lookupTable = new EasyDataTable({
62
+ loader: {
63
+ loadChunk: function (chunkParams) { return _this.context.getDataLoader()
64
+ .loadChunk(__assign(__assign({}, chunkParams), { id: lookupEntity.id })); }
65
+ }
66
+ });
67
+ _this.context.getDataLoader()
68
+ .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id })
69
+ .then(function (data) {
70
+ var _a;
71
+ var _loop_1 = function (col) {
72
+ var attrs = lookupEntity.attributes.filter(function (attr) {
73
+ return attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup);
74
+ });
75
+ if (attrs.length) {
76
+ lookupTable.columns.add(col);
77
+ }
78
+ };
79
+ for (var _i = 0, _b = data.table.columns.getItems(); _i < _b.length; _i++) {
80
+ var col = _b[_i];
81
+ _loop_1(col);
82
+ }
83
+ lookupTable.setTotal(data.total);
84
+ for (var _c = 0, _d = data.table.getCachedRows(); _c < _d.length; _c++) {
85
+ var row = _d[_c];
86
+ lookupTable.addRow(row);
87
+ }
88
+ var ds = new DefaultDialogService();
89
+ var gridSlot = null;
90
+ var selectedSlot = null;
91
+ var widgetSlot;
92
+ var slot = domel('div')
93
+ .addClass("kfrm-form")
94
+ .addChild('div', function (b) { return b
95
+ .addClass("kfrm-field")
96
+ .addChild('label', function (b) { return b
97
+ .addText(i18n.getText('LookupSelectedItem'))
98
+ .toDOM(); })
99
+ .addChild('div', function (b) { return selectedSlot = b
100
+ .addText('None')
101
+ .toDOM(); }); })
102
+ .addChild('div', function (b) { return widgetSlot = b.toDOM(); })
103
+ .addChild('div', function (b) { return b
104
+ .addClass('kfrm-control')
105
+ .addChild('div', function (b) { return gridSlot = b.toDOM(); }); })
106
+ .toDOM();
107
+ var selectedValue = inputEl.value;
108
+ var getValue = function (row, colId) {
109
+ if (row instanceof DataRow) {
110
+ return row.getValue(colId);
111
+ }
112
+ var property = colId.substring(colId.lastIndexOf('.') + 1);
113
+ return row[property];
114
+ };
115
+ var updateSelectedValue = function (row) {
116
+ selectedSlot.innerHTML = lookupTable.columns
117
+ .getItems()
118
+ .map(function (col) {
119
+ return "<b>".concat(col.label, ":</b> ").concat(getValue(row, col.id));
120
+ })
121
+ .join(', ');
122
+ };
123
+ if (selectedValue) {
124
+ var attr_1 = lookupEntity.getFirstPrimaryAttr();
125
+ var key = attr_1.id.substring(attr_1.id.lastIndexOf('.') + 1);
126
+ _this.context.fetchRecord((_a = {}, _a[key] = selectedValue, _a), lookupEntity.id)
127
+ .then(function (data) {
128
+ if (data.entity) {
129
+ updateSelectedValue(data.entity);
130
+ }
131
+ })
132
+ .catch(function (error) {
133
+ console.error(error);
134
+ });
135
+ }
136
+ var lookupGrid = new EasyGrid({
137
+ slot: gridSlot,
138
+ dataTable: lookupTable,
139
+ fixHeightOnFirstRender: true,
140
+ paging: {
141
+ pageSize: 10
142
+ },
143
+ onActiveRowChanged: function (ev) {
144
+ lookupGrid.getData().getRow(ev.rowIndex)
145
+ .then(function (row) {
146
+ selectedValue = row.getValue(attr.lookupDataAttr);
147
+ updateSelectedValue(row);
148
+ });
149
+ }
150
+ });
151
+ ds.open({
152
+ title: i18n.getText('LookupDlgCaption')
153
+ .replace('{entity}', lookupEntity.caption),
154
+ body: slot,
155
+ arrangeParents: true,
156
+ beforeOpen: function () {
157
+ var dataFilter = _this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);
158
+ new TextFilterWidget(widgetSlot, lookupGrid, dataFilter, { instantMode: true, focus: true });
159
+ },
160
+ onSubmit: function () {
161
+ inputEl.value = selectedValue;
162
+ return true;
163
+ },
164
+ onDestroy: function () {
165
+ lookupGrid.destroy();
166
+ // return focus on button
167
+ b.toDOM().focus();
168
+ }
169
+ });
170
+ });
171
+ }); });
172
+ });
173
+ };
174
+ EntityEditFormBuilder.prototype.setupDateTimeField = function (parent, attr, value, readOnly, hidden) {
175
+ var _this = this;
176
+ var horizClass = isIE
177
+ ? 'kfrm-fields-ie is-horizontal'
178
+ : 'kfrm-fields is-horizontal';
179
+ var editFormat = crudUtils.getEditDateTimeFormat(attr.dataType);
180
+ var inputEl;
181
+ var btnEl;
182
+ var mask = editFormat
183
+ .replace('yyyy', '9999')
184
+ .replace('MM', '99')
185
+ .replace('dd', '99')
186
+ .replace('HH', '99')
187
+ .replace('mm', '99')
188
+ .replace('ss', '99');
189
+ domel(parent)
190
+ .addChild('div', function (b) {
191
+ b
192
+ .addClass(horizClass)
193
+ .addChild('input', function (b) {
194
+ inputEl = b.toDOM();
195
+ b.name(attr.id);
196
+ b.type(hidden ? 'hidden' : _this.resolveInputType(attr.dataType));
197
+ if (readOnly) {
198
+ b.attr('readonly', '');
199
+ }
200
+ else {
201
+ b.mask(mask);
202
+ b.on('keypress', function (ev) { return _this.applySumbit(ev); })
203
+ .on('input', function (ev) {
204
+ b.removeClass('is-invalid');
205
+ try {
206
+ var newDate = dataUtils.strToDateTime(inputEl.value, editFormat);
207
+ }
208
+ catch (e) {
209
+ b.addClass('is-invalid');
210
+ }
211
+ finally {
212
+ }
213
+ })
214
+ .on('blur', function (ev) {
215
+ if (inputEl.value === mask.replace(/[9]/g, '_')) {
216
+ inputEl.value = '';
217
+ }
218
+ });
219
+ }
220
+ b.value((dataUtils.IsDefinedAndNotNull(value)
221
+ ? dataUtils.dateTimeToStr(value, editFormat)
222
+ : ''));
223
+ });
224
+ if (!readOnly)
225
+ b.addChild('button', function (b) { return btnEl = b
226
+ .addClass('kfrm-button')
227
+ .attr('title', i18n.getText(attr.dataType !== DataType.Time
228
+ ? 'CalendarBtnTitle'
229
+ : 'TimerBtnTitle'))
230
+ .addChild('i', function (b) { return b.addClass(attr.dataType !== DataType.Time
231
+ ? 'ed-calendar-icon'
232
+ : 'ed-timer-icon'); })
233
+ .on('click', function (ev) {
234
+ var value;
235
+ try {
236
+ value = inputEl.value.length
237
+ ? attr.dataType !== DataType.Time
238
+ ? dataUtils.strToDateTime(inputEl.value, editFormat)
239
+ : dataUtils.strToTime(inputEl.value)
240
+ : new Date(new Date().setSeconds(0));
241
+ }
242
+ catch (_a) {
243
+ value = new Date(new Date().setSeconds(0));
244
+ }
245
+ var pickerOptions = {
246
+ zIndex: 9999999999,
247
+ showCalendar: attr.dataType !== DataType.Time,
248
+ showTimePicker: attr.dataType !== DataType.Date,
249
+ onApply: function (dateTime) {
250
+ dateTime.setSeconds(0);
251
+ dateTime.setMilliseconds(0);
252
+ inputEl.value = dataUtils.dateTimeToStr(dateTime, editFormat);
253
+ }
254
+ };
255
+ var dtp = new DefaultDateTimePicker(pickerOptions);
256
+ dtp.setDateTime(value);
257
+ dtp.show(ev.target);
258
+ }).toDOM(); });
259
+ });
260
+ };
261
+ EntityEditFormBuilder.prototype.setupListField = function (parent, attr, value, values, readOnly) {
262
+ var _this = this;
263
+ domel(parent)
264
+ .addChild('div', function (b) { return b
265
+ .addClass('kfrm-select full-width')
266
+ .addChild('select', function (b) {
267
+ if (readOnly)
268
+ b.attr('readonly', '');
269
+ b.attr('name', attr.id);
270
+ b.on('keypress', function (ev) { return _this.applySumbit(ev); });
271
+ if (values) {
272
+ for (var i = 0; i < values.length; i++) {
273
+ var val = values[i];
274
+ b.addOption({
275
+ value: val.id,
276
+ title: val.text,
277
+ selected: i === 0
278
+ });
279
+ }
280
+ }
281
+ b.value(value);
282
+ }); });
283
+ };
284
+ EntityEditFormBuilder.prototype.setupFileField = function (parent, attr, readOnly, accept) {
285
+ var _this = this;
286
+ domel(parent)
287
+ .addChild('input', function (b) {
288
+ if (readOnly)
289
+ b.attr('readonly', '');
290
+ b.name(attr.id)
291
+ .type(_this.resolveInputType(attr.dataType));
292
+ b.attr('accept', accept);
293
+ });
294
+ };
295
+ EntityEditFormBuilder.prototype.setupTextField = function (parent, attr, value, readOnly, hidden) {
296
+ var _this = this;
297
+ domel(parent)
298
+ .addChild('input', function (b) {
299
+ if (readOnly) {
300
+ b.attr('readonly', '');
301
+ }
302
+ b.type(hidden ? 'hidden' : _this.resolveInputType(attr.dataType));
303
+ b.name(attr.id)
304
+ .type(_this.resolveInputType(attr.dataType));
305
+ if (attr.dataType == DataType.Bool) {
306
+ if (value)
307
+ b.attr('checked', '');
308
+ }
309
+ else {
310
+ b.on('keypress', function (ev) { return _this.applySumbit(ev); })
311
+ .value(dataUtils.IsDefinedAndNotNull(value)
312
+ ? value.toString()
313
+ : '');
314
+ }
315
+ });
316
+ };
317
+ EntityEditFormBuilder.prototype.setupTextArea = function (parent, attr, value, readOnly) {
318
+ // feature: modify size in value editor ??
319
+ domel(parent)
320
+ .addChild('textarea', function (b) {
321
+ if (readOnly)
322
+ b.attr('readonly', '');
323
+ b.attr('name', attr.id);
324
+ b.setStyle('height', "120px");
325
+ b.value(dataUtils.IsDefinedAndNotNull(value)
326
+ ? value.toString()
327
+ : '');
328
+ });
329
+ };
330
+ EntityEditFormBuilder.prototype.addFormField = function (parent, attr) {
331
+ var value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)
332
+ ? this.params.values.getValue(attr.id)
333
+ : !this.params.isEditForm
334
+ ? attr.defaultValue
335
+ : undefined;
336
+ var editor = this.resolveEditor(attr);
337
+ var readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);
338
+ var required = !attr.isNullable;
339
+ if (isIE) {
340
+ parent = domel('div', parent)
341
+ .addClass('kfrm-field-ie')
342
+ .toDOM();
343
+ }
344
+ domel(parent)
345
+ .addChild('label', function (b) {
346
+ b.attr('for', attr.id);
347
+ b.addHtml("".concat(attr.caption, " ").concat(required ? '<sup style="color: red">*</sup>' : '', ": "));
348
+ if (attr.description) {
349
+ b.addChild('div', function (b) { return b
350
+ .attr('title', attr.description)
351
+ .addClass('question-mark')
352
+ .setStyle('vertical-align', 'middle')
353
+ .setStyle('display', 'inline-block'); });
354
+ }
355
+ });
356
+ var hidden = attr.isPrimaryKey;
357
+ if (attr.kind === EntityAttrKind.Lookup) {
358
+ this.setupLookupField(parent, attr, readOnly, value);
359
+ return;
360
+ }
361
+ switch (editor.tag) {
362
+ case EditorTag.DateTime:
363
+ this.setupDateTimeField(parent, attr, value, readOnly, hidden);
364
+ break;
365
+ case EditorTag.List:
366
+ this.setupListField(parent, attr, value, editor.values, readOnly);
367
+ break;
368
+ case EditorTag.File:
369
+ this.setupFileField(parent, attr, readOnly, editor.accept);
370
+ break;
371
+ case EditorTag.Edit:
372
+ default:
373
+ if (editor.multiline) {
374
+ this.setupTextArea(parent, attr, value, readOnly);
375
+ }
376
+ else {
377
+ this.setupTextField(parent, attr, value, readOnly, hidden);
378
+ }
379
+ break;
380
+ }
381
+ };
382
+ EntityEditFormBuilder.prototype.resolveInputType = function (dataType) {
383
+ if (dataType === DataType.Bool)
384
+ return 'checkbox';
385
+ if (dataType === DataType.Blob)
386
+ return 'file';
387
+ return 'text';
388
+ };
389
+ EntityEditFormBuilder.prototype.resolveEditor = function (attr) {
390
+ var editor = attr.defaultEditor || new ValueEditor();
391
+ if (editor.tag == EditorTag.Unknown) {
392
+ if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {
393
+ editor.tag = EditorTag.DateTime;
394
+ }
395
+ else {
396
+ editor.tag = EditorTag.Edit;
397
+ }
398
+ }
399
+ return editor;
400
+ };
401
+ EntityEditFormBuilder.prototype.applySumbit = function (ev) {
402
+ if (ev.keyCode === 13) {
403
+ this.sumbitCallback && this.sumbitCallback();
404
+ return false;
405
+ }
406
+ return false;
407
+ };
408
+ EntityEditFormBuilder.prototype.onSubmit = function (sumbitCallback) {
409
+ this.sumbitCallback = sumbitCallback;
410
+ return this;
411
+ };
412
+ EntityEditFormBuilder.prototype.build = function () {
413
+ var fb;
414
+ var formHtml = domel('div')
415
+ .addClass('kfrm-form')
416
+ .addChild('div', function (b) { return b
417
+ .addClass("errors-block")
418
+ .toDOM(); })
419
+ .addChild('div', function (b) {
420
+ b.addClass("".concat(isIE
421
+ ? 'kfrm-fields-ie col-ie-1-4 label-align-right'
422
+ : 'kfrm-fields col-a-1 label-align-right'));
423
+ fb = b;
424
+ })
425
+ .toDOM();
426
+ this.form['setHtmlInt'](formHtml);
427
+ for (var _i = 0, _a = this.context.getActiveEntity().attributes; _i < _a.length; _i++) {
428
+ var attr = _a[_i];
429
+ if (!this.params.isEditForm && !attr.showOnCreate)
430
+ continue;
431
+ if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {
432
+ continue;
433
+ }
434
+ this.addFormField(fb.toDOM(), attr);
435
+ }
436
+ return this.form;
437
+ };
438
+ return EntityEditFormBuilder;
439
+ }());
440
+ export { EntityEditFormBuilder };
441
441
  //# sourceMappingURL=entity_form_builder.js.map