lkt-item-crud 2.0.13 → 2.0.15
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/dist/build.d.ts +6 -6
- package/dist/build.js +543 -374
- package/dist/components/ButtonNav.vue.d.ts +66 -23
- package/dist/components/ButtonNavButtons.vue.d.ts +75 -0
- package/dist/lib-components/LktItemCrud.vue.d.ts +33 -20
- package/package.json +1 -1
- package/src/components/ButtonNav.vue +90 -77
- package/src/lib-components/LktItemCrud.vue +130 -18
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
import { DataState } from 'lkt-data-state';
|
|
5
5
|
import { debug } from '../functions/debug';
|
|
6
6
|
import {
|
|
7
|
+
ButtonConfig,
|
|
8
|
+
ensureButtonConfig,
|
|
7
9
|
getDefaultValues,
|
|
8
10
|
ItemCrud,
|
|
9
11
|
ItemCrudButtonNavPosition,
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
ItemCrudMode,
|
|
12
14
|
ItemCrudView,
|
|
13
15
|
LktObject,
|
|
14
|
-
LktSettings,
|
|
16
|
+
LktSettings, ModalConfig,
|
|
15
17
|
NotificationType,
|
|
16
18
|
TablePermission,
|
|
17
19
|
ToastConfig,
|
|
@@ -65,6 +67,28 @@
|
|
|
65
67
|
createMode.value = v === ItemCrudMode.Create;
|
|
66
68
|
})
|
|
67
69
|
|
|
70
|
+
const safeCreateButton = ref(ensureButtonConfig(props.createButton, LktSettings.defaultCreateButton)),
|
|
71
|
+
safeUpdateButton = ref(ensureButtonConfig(props.updateButton, LktSettings.defaultUpdateButton)),
|
|
72
|
+
safeDropButton = ref(ensureButtonConfig(props.dropButton, LktSettings.defaultDropButton)),
|
|
73
|
+
safeEditModeButton = ref(ensureButtonConfig(props.editModeButton, LktSettings.defaultEditModeButton)),
|
|
74
|
+
safeGroupButton = ref(ensureButtonConfig(props.groupButton, LktSettings.defaultGroupButton));
|
|
75
|
+
|
|
76
|
+
watch(() => props.createButton, v => {
|
|
77
|
+
safeCreateButton.value = ensureButtonConfig(v, LktSettings.defaultCreateButton);
|
|
78
|
+
}, { deep: true });
|
|
79
|
+
|
|
80
|
+
watch(() => props.updateButton, v => {
|
|
81
|
+
safeUpdateButton.value = ensureButtonConfig(v, LktSettings.defaultUpdateButton);
|
|
82
|
+
}, { deep: true });
|
|
83
|
+
|
|
84
|
+
watch(() => props.dropButton, v => {
|
|
85
|
+
safeDropButton.value = ensureButtonConfig(v, LktSettings.defaultDropButton);
|
|
86
|
+
}, { deep: true });
|
|
87
|
+
|
|
88
|
+
watch(() => props.editModeButton, v => {
|
|
89
|
+
safeEditModeButton.value = ensureButtonConfig(v, LktSettings.defaultEditModeButton);
|
|
90
|
+
}, { deep: true });
|
|
91
|
+
|
|
68
92
|
const fetchItem = async () => {
|
|
69
93
|
debug('fetchItem');
|
|
70
94
|
isLoading.value = true;
|
|
@@ -193,7 +217,7 @@
|
|
|
193
217
|
},
|
|
194
218
|
onCreate = ($event: PointerEvent, r: HTTPResponse) => {
|
|
195
219
|
debug('onCreate');
|
|
196
|
-
if (!ensureValidResourceSave(r,
|
|
220
|
+
if (!ensureValidResourceSave(r, safeCreateButton.value.resource)) {
|
|
197
221
|
if (props.notificationType === NotificationType.Toast) {
|
|
198
222
|
openToast(<ToastConfig>{
|
|
199
223
|
text: LktSettings.defaultCreateErrorText,
|
|
@@ -221,7 +245,7 @@
|
|
|
221
245
|
},
|
|
222
246
|
onUpdate = ($event: PointerEvent, r: HTTPResponse) => {
|
|
223
247
|
debug('onUpdate');
|
|
224
|
-
if (!ensureValidResourceSave(r,
|
|
248
|
+
if (!ensureValidResourceSave(r, safeUpdateButton.value.resource)) {
|
|
225
249
|
if (props.notificationType === NotificationType.Toast) {
|
|
226
250
|
openToast(<ToastConfig>{
|
|
227
251
|
text: LktSettings.defaultUpdateErrorText,
|
|
@@ -247,7 +271,7 @@
|
|
|
247
271
|
},
|
|
248
272
|
onDrop = ($event: PointerEvent, r: HTTPResponse) => {
|
|
249
273
|
debug('onDrop');
|
|
250
|
-
if (!ensureValidResourceSave(r,
|
|
274
|
+
if (!ensureValidResourceSave(r, safeDropButton.value.resource)) {
|
|
251
275
|
if (props.notificationType === NotificationType.Toast) {
|
|
252
276
|
openToast(<ToastConfig>{
|
|
253
277
|
text: LktSettings.defaultDropErrorText,
|
|
@@ -325,9 +349,36 @@
|
|
|
325
349
|
if (computedInsideModal.value) return 'lkt-modal';
|
|
326
350
|
return 'section';
|
|
327
351
|
}),
|
|
352
|
+
ableToUpdate = computed(() => {
|
|
353
|
+
if (props.mode !== ItemCrudMode.Update || !canUpdate.value) return false;
|
|
354
|
+
if (!dataChanged.value) return false;
|
|
355
|
+
|
|
356
|
+
if (typeof safeUpdateButton.value?.disabled === 'function') return !safeUpdateButton.value.disabled(item.value);
|
|
357
|
+
if (typeof safeUpdateButton.value?.disabled === 'boolean') return !safeUpdateButton.value.disabled;
|
|
358
|
+
|
|
359
|
+
return true;
|
|
360
|
+
}),
|
|
361
|
+
ableToCreate = computed(() => {
|
|
362
|
+
if (props.mode !== ItemCrudMode.Create) return false;
|
|
363
|
+
if (!dataChanged.value) return false;
|
|
364
|
+
|
|
365
|
+
if (typeof safeCreateButton.value?.disabled === 'function') return !safeCreateButton.value.disabled(item.value);
|
|
366
|
+
if (typeof safeCreateButton.value?.disabled === 'boolean') return !safeCreateButton.value.disabled;
|
|
367
|
+
|
|
368
|
+
return true;
|
|
369
|
+
}),
|
|
370
|
+
ableToDrop = computed(() => {
|
|
371
|
+
|
|
372
|
+
if (!canDrop.value) return false;
|
|
373
|
+
|
|
374
|
+
if (typeof safeDropButton.value?.disabled === 'function') return !safeDropButton.value.disabled(item.value);
|
|
375
|
+
if (typeof safeDropButton.value?.disabled === 'boolean') return !safeDropButton.value.disabled;
|
|
376
|
+
|
|
377
|
+
return true;
|
|
378
|
+
}),
|
|
328
379
|
computedContainerAttrs = computed(() => {
|
|
329
380
|
if (computedContainerTag.value === 'lkt-modal') {
|
|
330
|
-
return {
|
|
381
|
+
return <ModalConfig>{
|
|
331
382
|
...{
|
|
332
383
|
title: props.title,
|
|
333
384
|
item: item.value,
|
|
@@ -337,17 +388,68 @@
|
|
|
337
388
|
beforeClose: crudBeforeClose,
|
|
338
389
|
closeConfirm: closeConfirm.value,
|
|
339
390
|
},
|
|
391
|
+
headerActionsButton: props.groupButton !== false ? <ButtonConfig>{
|
|
392
|
+
dot: ableToCreate.value || ableToUpdate.value,
|
|
393
|
+
} : false
|
|
340
394
|
};
|
|
341
395
|
}
|
|
342
396
|
return {};
|
|
343
|
-
})
|
|
397
|
+
})
|
|
344
398
|
</script>
|
|
345
399
|
|
|
346
400
|
<template>
|
|
347
401
|
<component
|
|
348
402
|
:is="computedContainerTag"
|
|
349
403
|
v-bind="computedContainerAttrs"
|
|
404
|
+
class="lkt-item-crud"
|
|
350
405
|
>
|
|
406
|
+
<template v-if="groupButton !== false && groupButtonAsModalActions" #header-actions>
|
|
407
|
+
<button-nav
|
|
408
|
+
ref="buttonNav"
|
|
409
|
+
v-if="buttonNavPosition === ItemCrudButtonNavPosition.Top"
|
|
410
|
+
v-model:loading="isLoading"
|
|
411
|
+
v-model:editing="editMode"
|
|
412
|
+
:item="item"
|
|
413
|
+
:mode="mode"
|
|
414
|
+
:view="view"
|
|
415
|
+
:grouped="true"
|
|
416
|
+
:button-nav-visibility="buttonNavVisibility"
|
|
417
|
+
:create-button="safeCreateButton"
|
|
418
|
+
:update-button="safeUpdateButton"
|
|
419
|
+
:drop-button="safeDropButton"
|
|
420
|
+
:edit-mode-button="safeEditModeButton"
|
|
421
|
+
:group-button="safeGroupButton"
|
|
422
|
+
:data-changed="dataChanged"
|
|
423
|
+
:http-success-read="httpSuccessRead"
|
|
424
|
+
:can-update="canUpdate"
|
|
425
|
+
:can-drop="canDrop"
|
|
426
|
+
:can-switch-edit-mode="canSwitchEditMode"
|
|
427
|
+
:group-button-as-modal-actions="groupButtonAsModalActions"
|
|
428
|
+
:able-to-create="ableToCreate"
|
|
429
|
+
:able-to-update="ableToUpdate"
|
|
430
|
+
:able-to-drop="ableToDrop"
|
|
431
|
+
:perms="perms"
|
|
432
|
+
@create="onCreate"
|
|
433
|
+
@save="onUpdate"
|
|
434
|
+
@drop="onDrop"
|
|
435
|
+
>
|
|
436
|
+
<template #prev-buttons-ever="{canUpdate, canDrop, perms}" v-if="slots['prev-buttons-ever']">
|
|
437
|
+
<slot name="prev-buttons-ever"
|
|
438
|
+
:can-update="canUpdate"
|
|
439
|
+
:can-drop="canDrop"
|
|
440
|
+
:perms="perms"
|
|
441
|
+
/>
|
|
442
|
+
</template>
|
|
443
|
+
<template #prev-buttons="{canUpdate, canDrop, perms}" v-if="slots['prev-buttons']">
|
|
444
|
+
<slot name="prev-buttons"
|
|
445
|
+
:can-update="canUpdate"
|
|
446
|
+
:can-drop="canDrop"
|
|
447
|
+
:perms="perms"
|
|
448
|
+
/>
|
|
449
|
+
</template>
|
|
450
|
+
</button-nav>
|
|
451
|
+
</template>
|
|
452
|
+
|
|
351
453
|
<article class="lkt-item-crud">
|
|
352
454
|
<header class="lkt-item-crud_header" v-if="!computedInsideModal && displayHeader">
|
|
353
455
|
<div class="lkt-item-crud_header-slot" v-if="slots['pre-title']">
|
|
@@ -361,23 +463,28 @@
|
|
|
361
463
|
|
|
362
464
|
<button-nav
|
|
363
465
|
ref="buttonNav"
|
|
364
|
-
v-if="buttonNavPosition === ItemCrudButtonNavPosition.Top"
|
|
466
|
+
v-if="buttonNavPosition === ItemCrudButtonNavPosition.Top && (groupButton === false || !groupButtonAsModalActions)"
|
|
365
467
|
v-model:loading="isLoading"
|
|
366
468
|
v-model:editing="editMode"
|
|
367
469
|
:item="item"
|
|
368
470
|
:mode="mode"
|
|
369
471
|
:view="view"
|
|
472
|
+
:grouped="groupButton !== false"
|
|
370
473
|
:button-nav-visibility="buttonNavVisibility"
|
|
371
|
-
:create-button="
|
|
372
|
-
:update-button="
|
|
373
|
-
:drop-button="
|
|
374
|
-
:edit-mode-button="
|
|
375
|
-
:group-button="
|
|
474
|
+
:create-button="safeCreateButton"
|
|
475
|
+
:update-button="safeUpdateButton"
|
|
476
|
+
:drop-button="safeDropButton"
|
|
477
|
+
:edit-mode-button="safeEditModeButton"
|
|
478
|
+
:group-button="safeGroupButton"
|
|
376
479
|
:data-changed="dataChanged"
|
|
377
480
|
:http-success-read="httpSuccessRead"
|
|
378
481
|
:can-update="canUpdate"
|
|
379
482
|
:can-drop="canDrop"
|
|
380
483
|
:can-switch-edit-mode="canSwitchEditMode"
|
|
484
|
+
:group-button-as-modal-actions="groupButtonAsModalActions"
|
|
485
|
+
:able-to-create="ableToCreate"
|
|
486
|
+
:able-to-update="ableToUpdate"
|
|
487
|
+
:able-to-drop="ableToDrop"
|
|
381
488
|
:perms="perms"
|
|
382
489
|
@create="onCreate"
|
|
383
490
|
@save="onUpdate"
|
|
@@ -425,23 +532,28 @@
|
|
|
425
532
|
|
|
426
533
|
<button-nav
|
|
427
534
|
ref="buttonNav"
|
|
428
|
-
v-if="buttonNavPosition === ItemCrudButtonNavPosition.Bottom"
|
|
535
|
+
v-if="buttonNavPosition === ItemCrudButtonNavPosition.Bottom && (groupButton === false || !groupButtonAsModalActions)"
|
|
429
536
|
v-model:loading="isLoading"
|
|
430
537
|
v-model:editing="editMode"
|
|
431
538
|
:item="item"
|
|
432
539
|
:mode="mode"
|
|
433
540
|
:view="view"
|
|
541
|
+
:grouped="groupButton !== false"
|
|
434
542
|
:button-nav-visibility="buttonNavVisibility"
|
|
435
|
-
:create-button="
|
|
436
|
-
:update-button="
|
|
437
|
-
:drop-button="
|
|
438
|
-
:edit-mode-button="
|
|
439
|
-
:group-button="
|
|
543
|
+
:create-button="safeCreateButton"
|
|
544
|
+
:update-button="safeUpdateButton"
|
|
545
|
+
:drop-button="safeDropButton"
|
|
546
|
+
:edit-mode-button="safeEditModeButton"
|
|
547
|
+
:group-button="safeGroupButton"
|
|
440
548
|
:data-changed="dataChanged"
|
|
441
549
|
:http-success-read="httpSuccessRead"
|
|
442
550
|
:can-update="canUpdate"
|
|
443
551
|
:can-drop="canDrop"
|
|
444
552
|
:can-switch-edit-mode="canSwitchEditMode"
|
|
553
|
+
:group-button-as-modal-actions="groupButtonAsModalActions"
|
|
554
|
+
:able-to-create="ableToCreate"
|
|
555
|
+
:able-to-update="ableToUpdate"
|
|
556
|
+
:able-to-drop="ableToDrop"
|
|
445
557
|
:perms="perms"
|
|
446
558
|
@create="onCreate"
|
|
447
559
|
@save="onUpdate"
|