@omnitend/dashboard-for-laravel 0.40.0 → 0.41.1
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/charts.d.ts +19 -0
- package/dist/components/base/DAccordion.vue.d.ts +12 -0
- package/dist/components/base/DAccordionItem.vue.d.ts +12 -0
- package/dist/components/base/DAlert.vue.d.ts +17 -0
- package/dist/components/base/DAspect.vue.d.ts +12 -0
- package/dist/components/base/DAutocomplete.vue.d.ts +32 -0
- package/dist/components/base/DAvatar.vue.d.ts +12 -0
- package/dist/components/base/DBadge.vue.d.ts +12 -0
- package/dist/components/base/DBreadcrumb.vue.d.ts +12 -0
- package/dist/components/base/DButton.vue.d.ts +97 -0
- package/dist/components/base/DButtonGroup.vue.d.ts +12 -0
- package/dist/components/base/DButtonToolbar.vue.d.ts +12 -0
- package/dist/components/base/DCard.vue.d.ts +12 -0
- package/dist/components/base/DCol.vue.d.ts +12 -0
- package/dist/components/base/DCollapse.vue.d.ts +12 -0
- package/dist/components/base/DContainer.vue.d.ts +12 -0
- package/dist/components/base/DDropdown.vue.d.ts +12 -0
- package/dist/components/base/DDropdownDivider.vue.d.ts +2 -0
- package/dist/components/base/DDropdownItem.vue.d.ts +12 -0
- package/dist/components/base/DForm.vue.d.ts +12 -0
- package/dist/components/base/DFormCheckbox.vue.d.ts +12 -0
- package/dist/components/base/DFormCheckboxGroup.vue.d.ts +12 -0
- package/dist/components/base/DFormGroup.vue.d.ts +12 -0
- package/dist/components/base/DFormInput.vue.d.ts +2 -0
- package/dist/components/base/DFormInvalidFeedback.vue.d.ts +12 -0
- package/dist/components/base/DFormOtp.vue.d.ts +12 -0
- package/dist/components/base/DFormRadio.vue.d.ts +12 -0
- package/dist/components/base/DFormRadioGroup.vue.d.ts +12 -0
- package/dist/components/base/DFormSelect.vue.d.ts +27 -0
- package/dist/components/base/DFormSpinbutton.vue.d.ts +12 -0
- package/dist/components/base/DFormTags.vue.d.ts +12 -0
- package/dist/components/base/DFormText.vue.d.ts +12 -0
- package/dist/components/base/DFormTextarea.vue.d.ts +2 -0
- package/dist/components/base/DImage.vue.d.ts +12 -0
- package/dist/components/base/DInputGroup.vue.d.ts +12 -0
- package/dist/components/base/DLink.vue.d.ts +12 -0
- package/dist/components/base/DListGroup.vue.d.ts +12 -0
- package/dist/components/base/DListGroupItem.vue.d.ts +12 -0
- package/dist/components/base/DModal.vue.d.ts +12 -0
- package/dist/components/base/DNav.vue.d.ts +12 -0
- package/dist/components/base/DNavItem.vue.d.ts +12 -0
- package/dist/components/base/DNavbar.vue.d.ts +12 -0
- package/dist/components/base/DNavbarBrand.vue.d.ts +12 -0
- package/dist/components/base/DNavbarNav.vue.d.ts +12 -0
- package/dist/components/base/DNavbarToggle.vue.d.ts +12 -0
- package/dist/components/base/DOffcanvas.vue.d.ts +12 -0
- package/dist/components/base/DOverlay.vue.d.ts +12 -0
- package/dist/components/base/DPagination.vue.d.ts +2 -0
- package/dist/components/base/DPlaceholder.vue.d.ts +12 -0
- package/dist/components/base/DPopover.vue.d.ts +12 -0
- package/dist/components/base/DProgress.vue.d.ts +12 -0
- package/dist/components/base/DRow.vue.d.ts +12 -0
- package/dist/components/base/DSpinner.vue.d.ts +2 -0
- package/dist/components/base/DTable.vue.d.ts +34 -0
- package/dist/components/base/DTabs.vue.d.ts +12 -0
- package/dist/components/base/DToast.vue.d.ts +12 -0
- package/dist/components/base/DToaster.vue.d.ts +12 -0
- package/dist/components/base/DTooltip.vue.d.ts +12 -0
- package/dist/components/charts/DXBarChart.vue.d.ts +7 -0
- package/dist/components/charts/DXDoughnutChart.vue.d.ts +24 -0
- package/dist/components/charts/DXLineChart.vue.d.ts +7 -0
- package/dist/components/charts/chartTheme.d.ts +59 -0
- package/dist/components/charts/useThemedChart.d.ts +40 -0
- package/dist/components/extended/DXBasicForm.vue.d.ts +10 -0
- package/dist/components/extended/DXChoiceField.vue.d.ts +26 -0
- package/dist/components/extended/DXCurrencyInput.vue.d.ts +42 -0
- package/dist/components/extended/DXDashboard.vue.d.ts +105 -0
- package/dist/components/extended/DXDashboardNavbar.vue.d.ts +86 -0
- package/dist/components/extended/DXDashboardSidebar.vue.d.ts +61 -0
- package/dist/components/extended/DXField.vue.d.ts +86 -0
- package/dist/components/extended/DXFieldLabel.vue.d.ts +18 -0
- package/dist/components/extended/DXFieldShell.vue.d.ts +73 -0
- package/dist/components/extended/DXForm.vue.d.ts +112 -0
- package/dist/components/extended/DXFormField.vue.d.ts +41 -0
- package/dist/components/extended/DXNumericField.vue.d.ts +23 -0
- package/dist/components/extended/DXRepeater.vue.d.ts +46 -0
- package/dist/components/extended/DXRepeaterCards.vue.d.ts +45 -0
- package/dist/components/extended/DXStatCard.vue.d.ts +56 -0
- package/dist/components/extended/DXSwitch.vue.d.ts +47 -0
- package/dist/components/extended/DXTable.vue.d.ts +495 -0
- package/dist/components/extended/DXTableEditorModal.vue.d.ts +100 -0
- package/dist/components/extended/DXTablePagination.vue.d.ts +50 -0
- package/dist/components/extended/DXTableShell.vue.d.ts +24 -0
- package/dist/components/extended/DXUserAvatar.vue.d.ts +40 -0
- package/dist/components/extended/dxFieldContext.d.ts +11 -0
- package/dist/composables/defineForm.d.ts +41 -0
- package/dist/composables/useAsyncOptions.d.ts +20 -0
- package/dist/composables/useContainerWidth.d.ts +96 -0
- package/dist/composables/useForm.d.ts +46 -0
- package/dist/composables/useResourceEditor.d.ts +77 -0
- package/dist/composables/useToast.d.ts +2 -0
- package/dist/dashboard-for-laravel.js +4166 -4156
- package/dist/dashboard-for-laravel.js.map +1 -1
- package/dist/dashboard-for-laravel.umd.cjs +5 -5
- package/dist/dashboard-for-laravel.umd.cjs.map +1 -1
- package/dist/index.d.ts +93 -0
- package/dist/style.css +2 -2
- package/dist/types/index.d.ts +477 -0
- package/dist/types/navigation.d.ts +43 -0
- package/dist/utils/api.d.ts +30 -0
- package/dist/utils/formSchema.d.ts +59 -0
- package/dist/utils/objectPath.d.ts +18 -0
- package/docs/public/api-reference.json +26 -5
- package/docs/public/docs-map.md +1 -1
- package/package.json +1 -1
- package/resources/css/theme.scss +33 -26
- package/resources/js/components/base/DAutocomplete.vue +3 -3
- package/resources/js/components/base/DButton.vue +39 -5
- package/resources/js/components/extended/DXDashboardSidebar.vue +9 -5
- package/resources/js/components/extended/DXSwitch.vue +10 -7
- package/resources/js/components/extended/DXTable.vue +86 -88
- package/resources/js/composables/useResourceEditor.ts +41 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, ref, type Ref } from "vue";
|
|
1
|
+
import { computed, ref, watch, type Ref } from "vue";
|
|
2
2
|
import { api } from "../utils/api";
|
|
3
3
|
import { useForm } from "./useForm";
|
|
4
4
|
import { useToast } from "./useToast";
|
|
@@ -102,6 +102,30 @@ export function useResourceEditor<T = any>(
|
|
|
102
102
|
// True while the edit modal is fetching the full record via `showUrl`.
|
|
103
103
|
const editLoading = ref(false);
|
|
104
104
|
|
|
105
|
+
// Bumped every time the modal closes. An action that AWAITS something —
|
|
106
|
+
// a save or delete guard — re-reads this before committing, so work begun
|
|
107
|
+
// in one modal session can never land after that session has ended (#174).
|
|
108
|
+
//
|
|
109
|
+
// A counter rather than a boolean because the modal reopens: by the time a
|
|
110
|
+
// slow guard resolves the user may already be editing a different row, and
|
|
111
|
+
// "is it open?" answers yes for the WRONG record. The generation only
|
|
112
|
+
// matches if this is still the same session that started the action.
|
|
113
|
+
//
|
|
114
|
+
// Watched rather than folded into `cancel()` because `cancel()` is not the
|
|
115
|
+
// only way out: the Cancel button and the slot's `close` binding route
|
|
116
|
+
// through it, but the header X, Escape and a backdrop click reach BModal
|
|
117
|
+
// directly and merely flip `show`. Watching the flag itself catches every
|
|
118
|
+
// route, including any added later. `flush: 'sync'` so the bump lands in
|
|
119
|
+
// the same tick as the dismissal, leaving no window of its own.
|
|
120
|
+
const editGeneration = ref(0);
|
|
121
|
+
watch(
|
|
122
|
+
showEditModal,
|
|
123
|
+
(isOpen) => {
|
|
124
|
+
if (!isOpen) editGeneration.value++;
|
|
125
|
+
},
|
|
126
|
+
{ flush: 'sync' },
|
|
127
|
+
);
|
|
128
|
+
|
|
105
129
|
// Monotonic token so a slow fetch for a previously-opened row can't overwrite
|
|
106
130
|
// the form after the user has since opened a different row.
|
|
107
131
|
let editFetchToken = 0;
|
|
@@ -324,8 +348,17 @@ export function useResourceEditor<T = any>(
|
|
|
324
348
|
if (pendingAction.value) return;
|
|
325
349
|
|
|
326
350
|
pendingAction.value = 'save';
|
|
351
|
+
const generation = editGeneration.value;
|
|
327
352
|
try {
|
|
328
353
|
if (!(await passesSaveGuard())) return;
|
|
354
|
+
|
|
355
|
+
// Dismissed while the guard was pending. Saving now would write a
|
|
356
|
+
// record the user watched themselves close — the same silent
|
|
357
|
+
// outliving-of-intent the guard exists to prevent, reached by a
|
|
358
|
+
// different route (#174). The check sits HERE rather than inside
|
|
359
|
+
// performSave so it covers the whole class, not one call site.
|
|
360
|
+
if (editGeneration.value !== generation) return;
|
|
361
|
+
|
|
329
362
|
await performSave();
|
|
330
363
|
} finally {
|
|
331
364
|
pendingAction.value = null;
|
|
@@ -532,6 +565,7 @@ export function useResourceEditor<T = any>(
|
|
|
532
565
|
if (pendingAction.value) return;
|
|
533
566
|
|
|
534
567
|
pendingAction.value = 'delete';
|
|
568
|
+
const generation = editGeneration.value;
|
|
535
569
|
try {
|
|
536
570
|
// Delete guard: a non-null message means this item can't be deleted —
|
|
537
571
|
// show it immediately and skip the confirm and the request entirely.
|
|
@@ -543,6 +577,12 @@ export function useResourceEditor<T = any>(
|
|
|
543
577
|
|
|
544
578
|
if (!confirmed) return;
|
|
545
579
|
|
|
580
|
+
// Same window as `save`, opened by awaiting the guard: the modal can
|
|
581
|
+
// be dismissed underneath a pending delete (#174). Checked after the
|
|
582
|
+
// confirm as well as the guard, though `window.confirm` blocks the
|
|
583
|
+
// event loop, so nothing can slip in during it.
|
|
584
|
+
if (editGeneration.value !== generation) return;
|
|
585
|
+
|
|
546
586
|
const itemId = (selectedItem.value as any).id;
|
|
547
587
|
const url = props.deleteUrl.replace(':id', itemId);
|
|
548
588
|
|