@mmlogic/components 0.1.9 → 0.1.11
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.
- package/README.md +196 -61
- package/dist/cjs/format-DBr-GTvS.js +308 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mosterdcomponents.cjs.js +1 -1
- package/dist/cjs/mrd-boolean-field_16.cjs.entry.js +108 -117
- package/dist/cjs/mrd-table.cjs.entry.js +318 -62
- package/dist/collection/components/mrd-field/mrd-field.js +26 -2
- package/dist/collection/components/mrd-file-field/mrd-file-field.js +70 -2
- package/dist/collection/components/mrd-file-field/mrd-file-field.scss +13 -0
- package/dist/collection/components/mrd-form/mrd-form.js +28 -1
- package/dist/collection/components/mrd-image-field/mrd-image-field.js +71 -2
- package/dist/collection/components/mrd-image-field/mrd-image-field.scss +26 -2
- package/dist/collection/components/mrd-table/mrd-table.js +386 -62
- package/dist/collection/components/mrd-table/mrd-table.scss +388 -0
- package/dist/collection/dev/app.js +48 -4
- package/dist/collection/dev/sprites.svg +55 -0
- package/dist/collection/utils/i18n.js +144 -0
- package/dist/components/i18n.js +1 -1
- package/dist/components/mrd-field2.js +1 -1
- package/dist/components/mrd-file-field2.js +1 -1
- package/dist/components/mrd-form.js +1 -1
- package/dist/components/mrd-image-field2.js +1 -1
- package/dist/components/mrd-table.js +1 -1
- package/dist/esm/format-EzhfM0uw.js +299 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mosterdcomponents.js +1 -1
- package/dist/esm/mrd-boolean-field_16.entry.js +82 -91
- package/dist/esm/mrd-table.entry.js +318 -62
- package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
- package/dist/mosterdcomponents/p-27f6947a.entry.js +1 -0
- package/dist/mosterdcomponents/p-EzhfM0uw.js +1 -0
- package/dist/mosterdcomponents/p-ca5f9919.entry.js +1 -0
- package/dist/types/components/mrd-field/mrd-field.d.ts +5 -0
- package/dist/types/components/mrd-file-field/mrd-file-field.d.ts +10 -0
- package/dist/types/components/mrd-form/mrd-form.d.ts +5 -0
- package/dist/types/components/mrd-image-field/mrd-image-field.d.ts +10 -0
- package/dist/types/components/mrd-table/mrd-table.d.ts +52 -18
- package/dist/types/components.d.ts +53 -3
- package/dist/types/utils/cell-renderer.d.ts +27 -0
- package/package.json +1 -1
- package/dist/cjs/format-CDw-zie_.js +0 -82
- package/dist/esm/format-Dt-aHxkM.js +0 -74
- package/dist/mosterdcomponents/p-2a8cb2eb.entry.js +0 -1
- package/dist/mosterdcomponents/p-Dt-aHxkM.js +0 -1
- package/dist/mosterdcomponents/p-baf08615.entry.js +0 -1
|
@@ -152,6 +152,394 @@
|
|
|
152
152
|
100% { background-position: -200% 0; }
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
+
/* ── Toolbar ───────────────────────────────────────────────────────────── */
|
|
156
|
+
.mrd-table__toolbar {
|
|
157
|
+
display: flex;
|
|
158
|
+
align-items: center;
|
|
159
|
+
justify-content: space-between;
|
|
160
|
+
padding-bottom: var(--mrd-space-2);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.mrd-table__toolbar-left,
|
|
164
|
+
.mrd-table__toolbar-right {
|
|
165
|
+
display: flex;
|
|
166
|
+
gap: var(--mrd-space-2);
|
|
167
|
+
align-items: center;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.mrd-table__action {
|
|
171
|
+
position: relative;
|
|
172
|
+
display: inline-flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
justify-content: center;
|
|
175
|
+
width: 2rem;
|
|
176
|
+
height: 2rem;
|
|
177
|
+
padding: 0;
|
|
178
|
+
background: transparent;
|
|
179
|
+
border: 1px solid transparent;
|
|
180
|
+
border-radius: var(--mrd-border-radius);
|
|
181
|
+
cursor: pointer;
|
|
182
|
+
color: var(--mrd-color-neutral-400);
|
|
183
|
+
transition: background-color 0.15s, border-color 0.15s, color 0.15s;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.mrd-table__action:hover {
|
|
187
|
+
background-color: var(--mrd-color-neutral-100);
|
|
188
|
+
border-color: var(--mrd-color-neutral-300);
|
|
189
|
+
color: var(--mrd-color-neutral-700);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.mrd-table__action:disabled {
|
|
193
|
+
opacity: 0.4;
|
|
194
|
+
cursor: not-allowed;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* Primary: slightly more prominent than regular at rest; primary fill on hover */
|
|
198
|
+
.mrd-table__action--primary {
|
|
199
|
+
color: var(--mrd-color-neutral-500);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.mrd-table__action--primary:hover {
|
|
203
|
+
background: var(--mrd-color-primary);
|
|
204
|
+
border-color: var(--mrd-color-primary);
|
|
205
|
+
color: var(--mrd-color-white);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.mrd-table__action--danger {
|
|
209
|
+
color: var(--mrd-color-error);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.mrd-table__action--danger:hover {
|
|
213
|
+
background-color: var(--mrd-color-error-light, #fef2f2);
|
|
214
|
+
border-color: var(--mrd-color-error);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.mrd-table__action-icon {
|
|
218
|
+
width: 1.25rem;
|
|
219
|
+
height: 1.25rem;
|
|
220
|
+
pointer-events: none;
|
|
221
|
+
fill: currentColor;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* CSS tooltip — appears above the button on hover */
|
|
225
|
+
.mrd-table__action-tooltip {
|
|
226
|
+
display: none;
|
|
227
|
+
position: absolute;
|
|
228
|
+
bottom: calc(100% + 6px);
|
|
229
|
+
right: 0;
|
|
230
|
+
padding: var(--mrd-space-1) var(--mrd-space-2);
|
|
231
|
+
font-size: var(--mrd-font-size-xs);
|
|
232
|
+
white-space: nowrap;
|
|
233
|
+
background: var(--mrd-color-tooltip, #fffce1);
|
|
234
|
+
color: var(--mrd-color-neutral-900);
|
|
235
|
+
border: 1px solid var(--mrd-border-color);
|
|
236
|
+
border-radius: var(--mrd-border-radius-sm, var(--mrd-border-radius));
|
|
237
|
+
pointer-events: none;
|
|
238
|
+
z-index: 10;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.mrd-table__action:hover .mrd-table__action-tooltip {
|
|
242
|
+
display: block;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* ── Filter toggle active state ────────────────────────────────────────── */
|
|
246
|
+
.mrd-table__filter-toggle--active {
|
|
247
|
+
background: var(--mrd-color-primary);
|
|
248
|
+
border-color: var(--mrd-color-primary);
|
|
249
|
+
color: var(--mrd-color-white);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.mrd-table__filter-toggle--active:hover {
|
|
253
|
+
background: var(--mrd-color-primary-dark, var(--mrd-color-primary));
|
|
254
|
+
border-color: var(--mrd-color-primary-dark, var(--mrd-color-primary));
|
|
255
|
+
color: var(--mrd-color-white);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/* Badge showing count of active filters */
|
|
259
|
+
.mrd-table__filter-badge {
|
|
260
|
+
position: absolute;
|
|
261
|
+
top: -6px;
|
|
262
|
+
right: -6px;
|
|
263
|
+
min-width: 1.25rem;
|
|
264
|
+
height: 1.25rem;
|
|
265
|
+
padding: 0 3px;
|
|
266
|
+
background: var(--mrd-color-error, #e53e3e);
|
|
267
|
+
color: var(--mrd-color-white);
|
|
268
|
+
border-radius: 9999px;
|
|
269
|
+
font-size: 0.65rem;
|
|
270
|
+
font-weight: var(--mrd-font-weight-medium);
|
|
271
|
+
line-height: 1.25rem;
|
|
272
|
+
text-align: center;
|
|
273
|
+
pointer-events: none;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* ── Header: filtered indicator + filter button ─────────────────────────── */
|
|
277
|
+
.mrd-table__header--filtered {
|
|
278
|
+
color: var(--mrd-color-primary);
|
|
279
|
+
border-bottom-color: var(--mrd-color-primary);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.mrd-table__header-filter-btn {
|
|
283
|
+
display: inline-flex;
|
|
284
|
+
align-items: center;
|
|
285
|
+
justify-content: center;
|
|
286
|
+
margin-left: var(--mrd-space-1);
|
|
287
|
+
padding: 0 3px;
|
|
288
|
+
background: transparent;
|
|
289
|
+
border: none;
|
|
290
|
+
border-radius: 3px;
|
|
291
|
+
cursor: pointer;
|
|
292
|
+
color: var(--mrd-color-neutral-500);
|
|
293
|
+
font-size: 0.8rem;
|
|
294
|
+
line-height: 1;
|
|
295
|
+
vertical-align: middle;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.mrd-table__header-filter-btn:hover {
|
|
299
|
+
background: var(--mrd-color-neutral-200);
|
|
300
|
+
color: var(--mrd-color-neutral-800);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.mrd-table__header-filter-btn--active {
|
|
304
|
+
color: var(--mrd-color-primary);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* ── Filter popup ───────────────────────────────────────────────────────── */
|
|
308
|
+
.mrd-table__filter-popup {
|
|
309
|
+
position: fixed;
|
|
310
|
+
width: 280px;
|
|
311
|
+
background: var(--mrd-color-white);
|
|
312
|
+
border: 1px solid var(--mrd-border-color);
|
|
313
|
+
border-radius: var(--mrd-border-radius);
|
|
314
|
+
box-shadow: var(--mrd-shadow-md, 0 4px 12px rgba(0,0,0,.12));
|
|
315
|
+
z-index: var(--mrd-z-dropdown, 200);
|
|
316
|
+
font-size: var(--mrd-font-size-sm);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.mrd-table__filter-popup-header {
|
|
320
|
+
display: flex;
|
|
321
|
+
align-items: center;
|
|
322
|
+
justify-content: space-between;
|
|
323
|
+
padding: var(--mrd-space-2) var(--mrd-space-3);
|
|
324
|
+
border-bottom: 1px solid var(--mrd-border-color);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.mrd-table__filter-popup-title {
|
|
328
|
+
font-weight: var(--mrd-font-weight-medium);
|
|
329
|
+
color: var(--mrd-color-neutral-800);
|
|
330
|
+
font-size: var(--mrd-font-size-sm);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.mrd-table__filter-close {
|
|
334
|
+
background: transparent;
|
|
335
|
+
border: none;
|
|
336
|
+
cursor: pointer;
|
|
337
|
+
color: var(--mrd-color-neutral-500);
|
|
338
|
+
font-size: 0.9rem;
|
|
339
|
+
padding: 2px 4px;
|
|
340
|
+
border-radius: 3px;
|
|
341
|
+
line-height: 1;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.mrd-table__filter-close:hover {
|
|
345
|
+
background: var(--mrd-color-neutral-100);
|
|
346
|
+
color: var(--mrd-color-neutral-800);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.mrd-table__filter-section {
|
|
350
|
+
padding: var(--mrd-space-2) var(--mrd-space-3);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.mrd-table__filter-section-label {
|
|
354
|
+
font-size: var(--mrd-font-size-xs);
|
|
355
|
+
font-weight: var(--mrd-font-weight-medium);
|
|
356
|
+
text-transform: uppercase;
|
|
357
|
+
letter-spacing: 0.04em;
|
|
358
|
+
color: var(--mrd-color-neutral-500);
|
|
359
|
+
margin-bottom: var(--mrd-space-2);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.mrd-table__filter-sort-buttons {
|
|
363
|
+
display: flex;
|
|
364
|
+
gap: var(--mrd-space-2);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.mrd-table__filter-sort-btn {
|
|
368
|
+
flex: 1;
|
|
369
|
+
padding: var(--mrd-space-1) var(--mrd-space-2);
|
|
370
|
+
background: transparent;
|
|
371
|
+
border: 1px solid var(--mrd-border-color);
|
|
372
|
+
border-radius: var(--mrd-border-radius);
|
|
373
|
+
cursor: pointer;
|
|
374
|
+
font-size: var(--mrd-font-size-xs);
|
|
375
|
+
color: var(--mrd-color-neutral-700);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.mrd-table__filter-sort-btn:hover {
|
|
379
|
+
background: var(--mrd-color-neutral-100);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.mrd-table__filter-sort-btn--active {
|
|
383
|
+
background: var(--mrd-color-primary);
|
|
384
|
+
border-color: var(--mrd-color-primary);
|
|
385
|
+
color: var(--mrd-color-white);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.mrd-table__filter-divider {
|
|
389
|
+
height: 1px;
|
|
390
|
+
background: var(--mrd-border-color);
|
|
391
|
+
margin: 0;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/* ── Filter editors ─────────────────────────────────────────────────────── */
|
|
395
|
+
.mrd-table__filter-editor {
|
|
396
|
+
display: flex;
|
|
397
|
+
flex-direction: column;
|
|
398
|
+
gap: var(--mrd-space-2);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.mrd-table__filter-select,
|
|
402
|
+
.mrd-table__filter-input {
|
|
403
|
+
width: 100%;
|
|
404
|
+
padding: var(--mrd-space-1) var(--mrd-space-2);
|
|
405
|
+
border: 1px solid var(--mrd-border-color);
|
|
406
|
+
border-radius: var(--mrd-border-radius);
|
|
407
|
+
font-size: var(--mrd-font-size-sm);
|
|
408
|
+
color: var(--mrd-color-neutral-900);
|
|
409
|
+
background: var(--mrd-color-white);
|
|
410
|
+
box-sizing: border-box;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
.mrd-table__filter-select:focus,
|
|
414
|
+
.mrd-table__filter-input:focus {
|
|
415
|
+
outline: none;
|
|
416
|
+
border-color: var(--mrd-color-primary);
|
|
417
|
+
box-shadow: 0 0 0 2px rgba(0,0,0,.06);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.mrd-table__filter-range {
|
|
421
|
+
display: flex;
|
|
422
|
+
align-items: center;
|
|
423
|
+
gap: var(--mrd-space-1);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.mrd-table__filter-range .mrd-table__filter-input {
|
|
427
|
+
flex: 1;
|
|
428
|
+
min-width: 0;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.mrd-table__filter-range-sep {
|
|
432
|
+
color: var(--mrd-color-neutral-400);
|
|
433
|
+
flex-shrink: 0;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/* Radio group */
|
|
437
|
+
.mrd-table__filter-radio-group {
|
|
438
|
+
display: flex;
|
|
439
|
+
flex-direction: column;
|
|
440
|
+
gap: var(--mrd-space-1);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.mrd-table__filter-radio-group--inline {
|
|
444
|
+
flex-direction: row;
|
|
445
|
+
gap: var(--mrd-space-3);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.mrd-table__filter-radio-label {
|
|
449
|
+
display: flex;
|
|
450
|
+
align-items: center;
|
|
451
|
+
gap: var(--mrd-space-1);
|
|
452
|
+
cursor: pointer;
|
|
453
|
+
font-size: var(--mrd-font-size-sm);
|
|
454
|
+
color: var(--mrd-color-neutral-800);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/* List (enum) checkboxes */
|
|
458
|
+
.mrd-table__filter-list {
|
|
459
|
+
display: flex;
|
|
460
|
+
flex-direction: column;
|
|
461
|
+
gap: var(--mrd-space-1);
|
|
462
|
+
max-height: 180px;
|
|
463
|
+
overflow-y: auto;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.mrd-table__filter-list-controls {
|
|
467
|
+
display: flex;
|
|
468
|
+
gap: var(--mrd-space-2);
|
|
469
|
+
margin-bottom: var(--mrd-space-1);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.mrd-table__filter-list-btn {
|
|
473
|
+
font-size: var(--mrd-font-size-xs);
|
|
474
|
+
color: var(--mrd-color-primary);
|
|
475
|
+
background: transparent;
|
|
476
|
+
border: none;
|
|
477
|
+
cursor: pointer;
|
|
478
|
+
padding: 0;
|
|
479
|
+
text-decoration: underline;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
.mrd-table__filter-checkbox-label {
|
|
483
|
+
display: flex;
|
|
484
|
+
align-items: center;
|
|
485
|
+
gap: var(--mrd-space-1);
|
|
486
|
+
cursor: pointer;
|
|
487
|
+
font-size: var(--mrd-font-size-sm);
|
|
488
|
+
color: var(--mrd-color-neutral-800);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.mrd-table__filter-no-support {
|
|
492
|
+
font-size: var(--mrd-font-size-sm);
|
|
493
|
+
color: var(--mrd-color-neutral-500);
|
|
494
|
+
margin: 0;
|
|
495
|
+
font-style: italic;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/* ── Popup footer ───────────────────────────────────────────────────────── */
|
|
499
|
+
.mrd-table__filter-popup-footer {
|
|
500
|
+
display: flex;
|
|
501
|
+
justify-content: flex-end;
|
|
502
|
+
gap: var(--mrd-space-2);
|
|
503
|
+
padding: var(--mrd-space-2) var(--mrd-space-3);
|
|
504
|
+
border-top: 1px solid var(--mrd-border-color);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.mrd-table__filter-btn {
|
|
508
|
+
padding: var(--mrd-space-1) var(--mrd-space-3);
|
|
509
|
+
border-radius: var(--mrd-border-radius);
|
|
510
|
+
border: 1px solid var(--mrd-border-color);
|
|
511
|
+
font-size: var(--mrd-font-size-sm);
|
|
512
|
+
cursor: pointer;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.mrd-table__filter-btn--clear {
|
|
516
|
+
background: transparent;
|
|
517
|
+
color: var(--mrd-color-neutral-600);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.mrd-table__filter-btn--clear:hover {
|
|
521
|
+
background: var(--mrd-color-neutral-100);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
.mrd-table__filter-btn--apply {
|
|
525
|
+
background: var(--mrd-color-primary);
|
|
526
|
+
border-color: var(--mrd-color-primary);
|
|
527
|
+
color: var(--mrd-color-white);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.mrd-table__filter-btn--apply:hover {
|
|
531
|
+
background: var(--mrd-color-primary-dark, var(--mrd-color-primary));
|
|
532
|
+
border-color: var(--mrd-color-primary-dark, var(--mrd-color-primary));
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/* ── Pagination footer ─────────────────────────────────────────────────── */
|
|
536
|
+
.mrd-table__footer {
|
|
537
|
+
padding: var(--mrd-space-1) var(--mrd-space-2);
|
|
538
|
+
font-size: var(--mrd-font-size-xs);
|
|
539
|
+
color: var(--mrd-color-neutral-500);
|
|
540
|
+
text-align: right;
|
|
541
|
+
}
|
|
542
|
+
|
|
155
543
|
/* ── Empty state ───────────────────────────────────────────────────────── */
|
|
156
544
|
.mrd-table__empty {
|
|
157
545
|
padding: var(--mrd-space-4) var(--mrd-space-3);
|
|
@@ -6,6 +6,7 @@ let _selectedTenant = null;
|
|
|
6
6
|
let _selectedType = null; // { name, pluralName }
|
|
7
7
|
let _relationMeta = {}; // relatedClass / mostSignificantClass → { name, mostSignificantClass }
|
|
8
8
|
let _tableDataHref = null; // base href for the current table view (without ?page=)
|
|
9
|
+
let _locale = navigator.language || 'nl-NL';
|
|
9
10
|
|
|
10
11
|
/* =====================================================================
|
|
11
12
|
UTILITIES
|
|
@@ -192,18 +193,40 @@ function renderTable(columns, totalElements, pageSize, page0Rows, dataHref, defa
|
|
|
192
193
|
customElements.whenDefined('mrd-table').then(async () => {
|
|
193
194
|
const table = document.getElementById('live-table');
|
|
194
195
|
|
|
196
|
+
// Active filters stored here; combined with sort in every mrdLoadPage call
|
|
197
|
+
let _activeFilters = [];
|
|
198
|
+
|
|
195
199
|
table.columns = columns;
|
|
196
|
-
table.locale =
|
|
200
|
+
table.locale = _locale;
|
|
197
201
|
table.pageSize = pageSize;
|
|
198
202
|
table.tableHeight = 500;
|
|
199
203
|
table.totalElements = totalElements;
|
|
200
204
|
table.defaultSort = defaultSort;
|
|
205
|
+
table.actions = [
|
|
206
|
+
{ action: 'create', label: 'Nieuw record', icon: 'dev/sprites.svg#icon-plus', variant: 'primary' },
|
|
207
|
+
{ action: 'export', label: 'Exporteer naar Excel', icon: 'dev/sprites.svg#icon-file-excel' },
|
|
208
|
+
];
|
|
201
209
|
|
|
202
210
|
// Register mrdLoadPage before init() so scroll events are caught immediately
|
|
203
211
|
table.addEventListener('mrdLoadPage', async (e) => {
|
|
204
212
|
const { page, sort } = e.detail;
|
|
205
213
|
try {
|
|
206
|
-
const
|
|
214
|
+
const params = new URLSearchParams();
|
|
215
|
+
if (sort) params.set('sort', sort);
|
|
216
|
+
// Apply active filters as simple ?field=value params (range = future API)
|
|
217
|
+
_activeFilters.forEach(f => {
|
|
218
|
+
if (f.operator === 'isEmpty') { params.set(f.field, ''); return; }
|
|
219
|
+
if (f.operator === 'isNotEmpty') { params.set(f.field + '_notempty', 'true'); return; }
|
|
220
|
+
if (f.values?.length) { params.set(f.field, f.values.join(',')); return; }
|
|
221
|
+
if (f.value != null && f.value !== '') params.set(f.field, String(f.value));
|
|
222
|
+
// Range: _from/_to suffix (future API support)
|
|
223
|
+
if (f.from != null && f.from !== '') params.set(f.field + '_from', String(f.from));
|
|
224
|
+
if (f.to != null && f.to !== '') params.set(f.field + '_to', String(f.to));
|
|
225
|
+
});
|
|
226
|
+
const qs = params.toString();
|
|
227
|
+
const url = qs ? `${dataHref}?${qs}` : dataHref;
|
|
228
|
+
|
|
229
|
+
const result = await apiFetchPage(authGetToken(), url, page);
|
|
207
230
|
const embedded = result._embedded ?? {};
|
|
208
231
|
const rows = Object.values(embedded)[0] ?? [];
|
|
209
232
|
await table.setPage(page, rows);
|
|
@@ -217,6 +240,18 @@ function renderTable(columns, totalElements, pageSize, page0Rows, dataHref, defa
|
|
|
217
240
|
await loadRecord(e.detail);
|
|
218
241
|
});
|
|
219
242
|
|
|
243
|
+
// Table-level action buttons (toolbar)
|
|
244
|
+
table.addEventListener('mrdAction', (e) => {
|
|
245
|
+
logEvent('mrdAction', e.detail);
|
|
246
|
+
if (e.detail.action === 'create') loadForm();
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// Store filters; mrdLoadPage will pick them up automatically
|
|
250
|
+
table.addEventListener('mrdFilter', (e) => {
|
|
251
|
+
logEvent('mrdFilter', e.detail);
|
|
252
|
+
_activeFilters = e.detail.filters;
|
|
253
|
+
});
|
|
254
|
+
|
|
220
255
|
await table.init();
|
|
221
256
|
await table.setPage(0, page0Rows); // inject pre-fetched page 0 — no extra request
|
|
222
257
|
});
|
|
@@ -328,7 +363,7 @@ function renderForm(layout, record = null, selfHref = null) {
|
|
|
328
363
|
}
|
|
329
364
|
|
|
330
365
|
const formPanel = document.getElementById('panel-form');
|
|
331
|
-
formPanel.innerHTML =
|
|
366
|
+
formPanel.innerHTML = `<mrd-form id="live-form" locale="${_locale}"></mrd-form>`;
|
|
332
367
|
|
|
333
368
|
customElements.whenDefined('mrd-form').then(() => {
|
|
334
369
|
const form = document.getElementById('live-form');
|
|
@@ -488,7 +523,16 @@ customElements.whenDefined('mrd-form').then(() => {
|
|
|
488
523
|
});
|
|
489
524
|
|
|
490
525
|
document.getElementById('locale-select').addEventListener('change', (e) => {
|
|
491
|
-
|
|
526
|
+
_locale = e.target.value;
|
|
527
|
+
// Update embedded demo form
|
|
528
|
+
const demoForm = document.getElementById('demo-form');
|
|
529
|
+
if (demoForm) demoForm.locale = _locale;
|
|
530
|
+
// Update live table if present
|
|
531
|
+
const liveTable = document.getElementById('live-table');
|
|
532
|
+
if (liveTable) liveTable.locale = _locale;
|
|
533
|
+
// Update live form if present
|
|
534
|
+
const liveForm = document.getElementById('live-form');
|
|
535
|
+
if (liveForm) liveForm.locale = _locale;
|
|
492
536
|
});
|
|
493
537
|
|
|
494
538
|
document.getElementById('btn-inject-results').addEventListener('click', () => {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
2
|
+
<defs>
|
|
3
|
+
<symbol id="icon-search" viewBox="0 0 32 32">
|
|
4
|
+
<path d="M31.008 27.231l-7.58-6.447c-0.784-0.705-1.622-1.029-2.299-0.998 1.789-2.096 2.87-4.815 2.87-7.787 0-6.627-5.373-12-12-12s-12 5.373-12 12 5.373 12 12 12c2.972 0 5.691-1.081 7.787-2.87-0.031 0.677 0.293 1.515 0.998 2.299l6.447 7.58c1.104 1.226 2.907 1.33 4.007 0.23s0.997-2.903-0.23-4.007zM12 20c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z"></path>
|
|
5
|
+
</symbol>
|
|
6
|
+
<symbol id="icon-bin" viewBox="0 0 32 32">
|
|
7
|
+
<path d="M4 10v20c0 1.1 0.9 2 2 2h18c1.1 0 2-0.9 2-2v-20h-22zM10 28h-2v-14h2v14zM14 28h-2v-14h2v14zM18 28h-2v-14h2v14zM22 28h-2v-14h2v14z"></path>
|
|
8
|
+
<path d="M26.5 4h-6.5v-2.5c0-0.825-0.675-1.5-1.5-1.5h-7c-0.825 0-1.5 0.675-1.5 1.5v2.5h-6.5c-0.825 0-1.5 0.675-1.5 1.5v2.5h26v-2.5c0-0.825-0.675-1.5-1.5-1.5zM18 4h-6v-1.975h6v1.975z"></path>
|
|
9
|
+
</symbol>
|
|
10
|
+
<symbol id="icon-plus" viewBox="0 0 32 32">
|
|
11
|
+
<path d="M31 12h-11v-11c0-0.552-0.448-1-1-1h-6c-0.552 0-1 0.448-1 1v11h-11c-0.552 0-1 0.448-1 1v6c0 0.552 0.448 1 1 1h11v11c0 0.552 0.448 1 1 1h6c0.552 0 1-0.448 1-1v-11h11c0.552 0 1-0.448 1-1v-6c0-0.552-0.448-1-1-1z"></path>
|
|
12
|
+
</symbol>
|
|
13
|
+
<symbol id="icon-cross" viewBox="0 0 32 32">
|
|
14
|
+
<path d="M31.708 25.708c-0-0-0-0-0-0l-9.708-9.708 9.708-9.708c0-0 0-0 0-0 0.105-0.105 0.18-0.227 0.229-0.357 0.133-0.356 0.057-0.771-0.229-1.057l-4.586-4.586c-0.286-0.286-0.702-0.361-1.057-0.229-0.13 0.048-0.252 0.124-0.357 0.228 0 0-0 0-0 0l-9.708 9.708-9.708-9.708c-0-0-0-0-0-0-0.105-0.104-0.227-0.18-0.357-0.228-0.356-0.133-0.771-0.057-1.057 0.229l-4.586 4.586c-0.286 0.286-0.361 0.702-0.229 1.057 0.049 0.13 0.124 0.252 0.229 0.357 0 0 0 0 0 0l9.708 9.708-9.708 9.708c-0 0-0 0-0 0-0.104 0.105-0.18 0.227-0.229 0.357-0.133 0.355-0.057 0.771 0.229 1.057l4.586 4.586c0.286 0.286 0.702 0.361 1.057 0.229 0.13-0.049 0.252-0.124 0.357-0.229 0-0 0-0 0-0l9.708-9.708 9.708 9.708c0 0 0 0 0 0 0.105 0.105 0.227 0.18 0.357 0.229 0.356 0.133 0.771 0.057 1.057-0.229l4.586-4.586c0.286-0.286 0.362-0.702 0.229-1.057-0.049-0.13-0.124-0.252-0.229-0.357z"></path>
|
|
15
|
+
</symbol>
|
|
16
|
+
<symbol id="icon-backward2" viewBox="0 0 32 32">
|
|
17
|
+
<path d="M18 5v10l10-10v22l-10-10v10l-11-11z"></path>
|
|
18
|
+
</symbol>
|
|
19
|
+
<symbol id="icon-forward3" viewBox="0 0 32 32">
|
|
20
|
+
<path d="M16 27v-10l-10 10v-22l10 10v-10l11 11z"></path>
|
|
21
|
+
</symbol>
|
|
22
|
+
<symbol id="icon-previous2" viewBox="0 0 32 32">
|
|
23
|
+
<path d="M8 28v-24h4v11l10-10v22l-10-10v11z"></path>
|
|
24
|
+
</symbol>
|
|
25
|
+
<symbol id="icon-next2" viewBox="0 0 32 32">
|
|
26
|
+
<path d="M24 4v24h-4v-11l-10 10v-22l10 10v-11z"></path>
|
|
27
|
+
</symbol>
|
|
28
|
+
<symbol id="icon-sort-alpha-asc" viewBox="0 0 32 32">
|
|
29
|
+
<path d="M10 24v-24h-4v24h-5l7 7 7-7h-5z"></path>
|
|
30
|
+
<path d="M29 32h-8c-0.369 0-0.708-0.203-0.882-0.528s-0.155-0.72 0.050-1.027l6.963-10.445h-6.131c-0.552 0-1-0.448-1-1s0.448-1 1-1h8c0.369 0 0.708 0.203 0.882 0.528s0.155 0.72-0.050 1.027l-6.963 10.445h6.131c0.552 0 1 0.448 1 1s-0.448 1-1 1z"></path>
|
|
31
|
+
<path d="M31.894 12.553l-6-12c-0.169-0.339-0.516-0.553-0.894-0.553s-0.725 0.214-0.895 0.553l-6 12c-0.247 0.494-0.047 1.095 0.447 1.342 0.144 0.072 0.296 0.106 0.447 0.106 0.367 0 0.72-0.203 0.895-0.553l1.724-3.447h6.764l1.724 3.447c0.247 0.494 0.848 0.694 1.342 0.447s0.694-0.848 0.447-1.342zM22.618 8l2.382-4.764 2.382 4.764h-4.764z"></path>
|
|
32
|
+
</symbol>
|
|
33
|
+
<symbol id="icon-sort-alpha-desc" viewBox="0 0 32 32">
|
|
34
|
+
<path d="M10 24v-24h-4v24h-5l7 7 7-7h-5z"></path>
|
|
35
|
+
<path d="M29 14h-8c-0.369 0-0.708-0.203-0.882-0.528s-0.155-0.72 0.050-1.027l6.963-10.445h-6.131c-0.552 0-1-0.448-1-1s0.448-1 1-1h8c0.369 0 0.708 0.203 0.882 0.528s0.155 0.72-0.050 1.027l-6.963 10.445h6.131c0.552 0 1 0.448 1 1s-0.448 1-1 1z"></path>
|
|
36
|
+
<path d="M31.894 30.553l-6-12c-0.169-0.339-0.516-0.553-0.894-0.553s-0.725 0.214-0.895 0.553l-6 12c-0.247 0.494-0.047 1.095 0.447 1.342 0.144 0.072 0.296 0.106 0.447 0.106 0.367 0 0.72-0.203 0.895-0.553l1.724-3.447h6.764l1.724 3.447c0.247 0.494 0.848 0.694 1.342 0.447s0.694-0.848 0.447-1.342zM22.618 26l2.382-4.764 2.382 4.764h-4.764z"></path>
|
|
37
|
+
</symbol>
|
|
38
|
+
<symbol id="icon-filter" viewBox="0 0 32 32">
|
|
39
|
+
<path d="M16 0c-8.837 0-16 2.239-16 5v3l12 12v10c0 1.105 1.791 2 4 2s4-0.895 4-2v-10l12-12v-3c0-2.761-7.163-5-16-5zM2.95 4.338c0.748-0.427 1.799-0.832 3.040-1.171 2.748-0.752 6.303-1.167 10.011-1.167s7.262 0.414 10.011 1.167c1.241 0.34 2.292 0.745 3.040 1.171 0.494 0.281 0.76 0.519 0.884 0.662-0.124 0.142-0.391 0.38-0.884 0.662-0.748 0.427-1.8 0.832-3.040 1.171-2.748 0.752-6.303 1.167-10.011 1.167s-7.262-0.414-10.011-1.167c-1.24-0.34-2.292-0.745-3.040-1.171-0.494-0.282-0.76-0.519-0.884-0.662 0.124-0.142 0.391-0.38 0.884-0.662z"></path>
|
|
40
|
+
</symbol>
|
|
41
|
+
<symbol id="icon-file-excel" viewBox="0 0 32 32">
|
|
42
|
+
<path d="M23.22 12h-4.228l-2.992 4.407-2.992-4.407h-4.228l5.068 7.577-5.718 8.423h7.87v-2.862h-1.567l1.567-2.344 3.481 5.205h4.389l-5.718-8.423 5.068-7.577z"></path>
|
|
43
|
+
<path d="M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.121 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841v0zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268v0zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z"></path>
|
|
44
|
+
</symbol>
|
|
45
|
+
<symbol id="icon-pencil" viewBox="0 0 32 32">
|
|
46
|
+
<path d="M27.414 0.586c-0.781-0.781-2.048-0.781-2.828 0l-3.172 3.172 5.828 5.828 3.172-3.172c0.781-0.781 0.781-2.047 0-2.828l-3-3zM0 24v8h8l17.414-17.414-8-8-17.414 17.414zM6.828 28h-2.828v-2.828l12-12 2.828 2.828-12 12z"></path>
|
|
47
|
+
</symbol>
|
|
48
|
+
<symbol id="icon-ellipsis" viewBox="0 0 32 32">
|
|
49
|
+
<circle cx="4" cy="16" r="3.5"></circle>
|
|
50
|
+
<circle cx="16" cy="16" r="3.5"></circle>
|
|
51
|
+
<circle cx="28" cy="16" r="3.5"></circle>
|
|
52
|
+
</symbol>
|
|
53
|
+
</defs>
|
|
54
|
+
</svg>
|
|
55
|
+
|