@atscript/vue-table 0.1.138 → 0.1.140
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/as-action-form-dialog.cjs +1 -1
- package/dist/as-action-form-dialog.mjs +1 -1
- package/dist/{as-action-menu-content-D8f60mY-.cjs → as-action-menu-content-B5RFt7Hc.cjs} +1 -1
- package/dist/{as-action-menu-content-CVlExEpl.mjs → as-action-menu-content-KNJr1EkO.mjs} +1 -1
- package/dist/{as-cell-array-BWHkJX3I.mjs → as-cell-array-Bgc4GYZf.mjs} +1 -1
- package/dist/{as-cell-array-D-8Pqlgo.cjs → as-cell-array-CCZ0Ajj9.cjs} +1 -1
- package/dist/as-cell-array.cjs +1 -1
- package/dist/as-cell-array.d.mts +1 -1
- package/dist/as-cell-array.mjs +1 -1
- package/dist/{as-cell-date-mGlnDeLP.mjs → as-cell-date-B9mu0OOD.mjs} +1 -1
- package/dist/{as-cell-date-DviMJEqs.cjs → as-cell-date-RU5JPJhI.cjs} +1 -1
- package/dist/as-cell-date.cjs +1 -1
- package/dist/as-cell-date.d.mts +1 -1
- package/dist/as-cell-date.mjs +1 -1
- package/dist/{as-cell-json-2I081xnO.mjs → as-cell-json-ByEGYRST.mjs} +1 -1
- package/dist/{as-cell-json-CaVB6e7V.cjs → as-cell-json-w5YJxNuF.cjs} +1 -1
- package/dist/as-cell-json.cjs +1 -1
- package/dist/as-cell-json.d.mts +1 -1
- package/dist/as-cell-json.mjs +1 -1
- package/dist/{as-cell-number-CP2AZI9g.mjs → as-cell-number-CNDT6gfw.mjs} +1 -1
- package/dist/{as-cell-number-BnYbxOiG.cjs → as-cell-number-DGJCTXDf.cjs} +1 -1
- package/dist/as-cell-number.cjs +1 -1
- package/dist/as-cell-number.d.mts +1 -1
- package/dist/as-cell-number.mjs +1 -1
- package/dist/{as-cell-union-NHpDCXty.mjs → as-cell-union-DMnoa7RM.mjs} +2 -2
- package/dist/{as-cell-union-BjMP91PS.cjs → as-cell-union-LOGvhPeK.cjs} +2 -2
- package/dist/as-cell-union.cjs +1 -1
- package/dist/as-cell-union.d.mts +1 -1
- package/dist/as-cell-union.mjs +1 -1
- package/dist/{as-column-menu-BMTS3DO2.mjs → as-column-menu-CBtUfYEE.mjs} +2 -2
- package/dist/{as-column-menu-D_8NxujZ.cjs → as-column-menu-ChB7hzmr.cjs} +1 -1
- package/dist/as-column-menu.cjs +1 -1
- package/dist/as-column-menu.d.cts +1 -1
- package/dist/as-column-menu.d.mts +1 -1
- package/dist/as-column-menu.mjs +1 -1
- package/dist/{as-column-menu.vue-SRkxrvo_.d.mts → as-column-menu.vue-DKQNY5gh.d.cts} +2 -2
- package/dist/{as-column-menu.vue-CgvDp7JK.d.cts → as-column-menu.vue-hOmuVcKf.d.mts} +2 -2
- package/dist/{as-config-dialog-BrVhIV_e.cjs → as-config-dialog-B1KJJSHE.cjs} +4 -4
- package/dist/{as-config-dialog-DHdpmRo9.mjs → as-config-dialog-JXNkCCrh.mjs} +5 -5
- package/dist/as-config-dialog.cjs +1 -1
- package/dist/as-config-dialog.d.mts +1 -1
- package/dist/as-config-dialog.mjs +1 -1
- package/dist/{as-confirm-dialog-BG5vlbvV.mjs → as-confirm-dialog-CC6U8nLZ.mjs} +1 -1
- package/dist/{as-confirm-dialog-iytk-urB.cjs → as-confirm-dialog-a736BLOm.cjs} +1 -1
- package/dist/as-confirm-dialog.cjs +1 -1
- package/dist/as-confirm-dialog.d.mts +1 -1
- package/dist/as-confirm-dialog.mjs +1 -1
- package/dist/{as-filter-dialog-Dis7tkN_.mjs → as-filter-dialog-C3wltqrN.mjs} +16 -16
- package/dist/{as-filter-dialog-CW8-zoag.cjs → as-filter-dialog-IflKkOd8.cjs} +15 -15
- package/dist/as-filter-dialog.cjs +1 -1
- package/dist/as-filter-dialog.d.mts +1 -1
- package/dist/as-filter-dialog.mjs +1 -1
- package/dist/{as-filter-field-BKoxTudl.mjs → as-filter-field-D_6DlFcp.mjs} +5 -6
- package/dist/{as-filter-field-bVIXoH3j.cjs → as-filter-field-pygBjA-K.cjs} +4 -5
- package/dist/as-filter-field.cjs +1 -1
- package/dist/as-filter-field.d.mts +1 -1
- package/dist/as-filter-field.mjs +1 -1
- package/dist/as-filter-input.cjs +1 -1
- package/dist/as-filter-input.d.mts +1 -1
- package/dist/as-filter-input.mjs +1 -1
- package/dist/{as-filters-CxVy00LQ.mjs → as-filters-BDzQ2SM_.mjs} +19 -4
- package/dist/{as-filters-Dx8WkGiA.cjs → as-filters-BIoEsPD0.cjs} +19 -4
- package/dist/as-filters.cjs +1 -1
- package/dist/as-filters.d.cts +1 -1
- package/dist/as-filters.d.mts +1 -1
- package/dist/as-filters.mjs +1 -1
- package/dist/{as-filters.vue-DcxDnWAU.d.cts → as-filters.vue-BSgUEh4D.d.mts} +23 -1
- package/dist/{as-filters.vue-BG_ysCkC.d.mts → as-filters.vue-DMXZhQW3.d.cts} +23 -1
- package/dist/{as-preset-dialog-D8o2ChtM.cjs → as-preset-dialog-BgZB8xyk.cjs} +2 -2
- package/dist/{as-preset-dialog-C0f_6VxJ.mjs → as-preset-dialog-D_w4cxKS.mjs} +2 -2
- package/dist/as-preset-dialog.cjs +1 -1
- package/dist/as-preset-dialog.d.mts +1 -1
- package/dist/as-preset-dialog.mjs +1 -1
- package/dist/{as-preset-picker-CDItDinB.mjs → as-preset-picker-B8d6l3U1.mjs} +12 -7
- package/dist/{as-preset-picker-DonMQ8Ia.cjs → as-preset-picker-XnGrqHyF.cjs} +12 -7
- package/dist/as-preset-picker.cjs +1 -1
- package/dist/as-preset-picker.d.mts +1 -1
- package/dist/as-preset-picker.mjs +1 -1
- package/dist/as-residual-filter-C65QsWxr.mjs +49 -0
- package/dist/as-residual-filter-ihvXCtpH.cjs +54 -0
- package/dist/as-residual-filter.cjs +2 -0
- package/dist/as-residual-filter.d.cts +2 -0
- package/dist/as-residual-filter.d.mts +2 -0
- package/dist/as-residual-filter.mjs +2 -0
- package/dist/as-residual-filter.vue-Dfw1l2wS.d.cts +21 -0
- package/dist/as-residual-filter.vue-N89YqlCz.d.mts +21 -0
- package/dist/{as-row-actions-CAiCfw8d.cjs → as-row-actions-C6N0lcZb.cjs} +2 -2
- package/dist/{as-row-actions-B8YANdb4.mjs → as-row-actions-xQ9M1PrO.mjs} +2 -2
- package/dist/as-row-actions.cjs +1 -1
- package/dist/as-row-actions.d.cts +1 -1
- package/dist/as-row-actions.d.mts +1 -1
- package/dist/as-row-actions.mjs +1 -1
- package/dist/{as-row-actions.vue-BCgHsU18.d.mts → as-row-actions.vue-B3XAxDAL.d.cts} +1 -1
- package/dist/{as-row-actions.vue-C49h8PpE.d.cts → as-row-actions.vue-C8vslg0n.d.mts} +1 -1
- package/dist/{as-table-BAoJ60tx.mjs → as-table-B49x0hDM.mjs} +3 -3
- package/dist/{as-table-actions-8yf2QIER.cjs → as-table-actions-B-jY3s6f.cjs} +2 -2
- package/dist/{as-table-actions-z5xUWtvK.mjs → as-table-actions-B2Hy3h7v.mjs} +2 -2
- package/dist/as-table-actions.cjs +1 -1
- package/dist/as-table-actions.d.cts +1 -1
- package/dist/as-table-actions.d.mts +1 -1
- package/dist/as-table-actions.mjs +1 -1
- package/dist/{as-table-actions.vue-BTGQnFH_.d.mts → as-table-actions.vue-BgTJuXEH.d.cts} +2 -2
- package/dist/{as-table-actions.vue-oxyikRAt.d.cts → as-table-actions.vue-BnLH2NqO.d.mts} +2 -2
- package/dist/{as-table-base-DA5T7x_K.mjs → as-table-base-DErJfFYz.mjs} +2 -2
- package/dist/{as-table-base-wPJuru7P.cjs → as-table-base-ceywcVRq.cjs} +2 -2
- package/dist/{as-table-cell-value-BAi5yadc.cjs → as-table-cell-value-COyZnwUj.cjs} +1 -1
- package/dist/{as-table-cell-value-BVcfhhCb.mjs → as-table-cell-value-DoH8Mieo.mjs} +1 -1
- package/dist/as-table-cell-value.cjs +1 -1
- package/dist/as-table-cell-value.d.cts +1 -1
- package/dist/as-table-cell-value.d.mts +1 -1
- package/dist/as-table-cell-value.mjs +1 -1
- package/dist/{as-table-header-cell-Cl8waY_g.mjs → as-table-header-cell-Ccf06b2_.mjs} +2 -2
- package/dist/{as-table-header-cell-CiRLNVJz.cjs → as-table-header-cell-ZCk3XD_d.cjs} +2 -2
- package/dist/as-table-header-cell.cjs +1 -1
- package/dist/as-table-header-cell.d.cts +1 -1
- package/dist/as-table-header-cell.d.mts +1 -1
- package/dist/as-table-header-cell.mjs +1 -1
- package/dist/{as-table-header-cell.vue-BjgxfKhi.d.cts → as-table-header-cell.vue-C7jNmdDh.d.mts} +2 -2
- package/dist/{as-table-header-cell.vue-zGeuzm3w.d.mts → as-table-header-cell.vue-DkClJBAT.d.cts} +2 -2
- package/dist/{as-table-QoXP-NZr.cjs → as-table-ouPxssqv.cjs} +3 -3
- package/dist/{as-table-root-Bza3ZGJZ.mjs → as-table-root-CG7bLzcQ.mjs} +18 -29
- package/dist/{as-table-root-C6a6iO6M.cjs → as-table-root-_58hdHAi.cjs} +19 -30
- package/dist/as-table-root.cjs +1 -1
- package/dist/as-table-root.d.cts +1 -1
- package/dist/as-table-root.d.mts +1 -1
- package/dist/as-table-root.mjs +1 -1
- package/dist/{as-table-root.vue-Dze91qga.d.cts → as-table-root.vue-D8hH1xGK.d.cts} +29 -5
- package/dist/{as-table-root.vue-DnOHVQtA.d.mts → as-table-root.vue-DpPRMy3v.d.mts} +29 -5
- package/dist/{as-table-status-aebsG7bR.mjs → as-table-status-2rA91OFT.mjs} +5 -5
- package/dist/{as-table-status-B2O3hLGg.cjs → as-table-status-UWTPJJUL.cjs} +5 -5
- package/dist/as-table.cjs +1 -1
- package/dist/as-table.d.cts +1 -1
- package/dist/as-table.d.mts +1 -1
- package/dist/as-table.mjs +1 -1
- package/dist/{as-table.vue-emq84QmP.d.mts → as-table.vue-Bv6sKnL5.d.cts} +3 -3
- package/dist/{as-table.vue-BSKifGzD.d.cts → as-table.vue-CudFoZTF.d.mts} +3 -3
- package/dist/{as-window-table-DS30wumm.cjs → as-window-table-C9YtzepV.cjs} +3 -3
- package/dist/{as-window-table-ByTXS8yA.mjs → as-window-table-KyS6YUpa.mjs} +3 -3
- package/dist/as-window-table.cjs +1 -1
- package/dist/as-window-table.d.cts +1 -1
- package/dist/as-window-table.d.mts +1 -1
- package/dist/as-window-table.mjs +1 -1
- package/dist/{as-window-table.vue-DJNJ-6dd.d.cts → as-window-table.vue-COVl3die.d.mts} +2 -2
- package/dist/{as-window-table.vue-DUJgZDXy.d.mts → as-window-table.vue-CRWdhOgC.d.cts} +2 -2
- package/dist/index.cjs +45 -71
- package/dist/index.d.cts +10 -10
- package/dist/index.d.mts +22 -22
- package/dist/index.mjs +46 -72
- package/dist/{types-CsgAGRfG.d.mts → types-BCixOa8x.d.cts} +41 -11
- package/dist/{types-DvWLY5zQ.d.cts → types-D7qVxU_y.d.mts} +41 -11
- package/dist/{use-table-DRN4nlZs.mjs → use-table-2xPxoNRX.mjs} +3 -2
- package/dist/{use-table-JU7BAX4e.cjs → use-table-B45WZLwg.cjs} +3 -2
- package/dist/{use-table-column-handlers-DGn4ZW9j.mjs → use-table-column-handlers-p_xK-l0e.mjs} +1 -1
- package/dist/{use-table-column-handlers-r47WDxEh.cjs → use-table-column-handlers-rqFo9HLz.cjs} +1 -1
- package/dist/{use-table-component-VUFlxIk-.mjs → use-table-component-BYO0zMQj.mjs} +1 -1
- package/dist/{use-table-component-DIWiP_Vs.cjs → use-table-component-XQ-Qt_sp.cjs} +1 -1
- package/dist/{use-table-nav-bridge-DT8oU-6r.mjs → use-table-nav-bridge-BDBnRc4C.mjs} +1 -1
- package/dist/{use-table-nav-bridge-BBtXE70x.cjs → use-table-nav-bridge-DvrsPanF.cjs} +1 -1
- package/dist/{use-table-state-CqU1N4Q9.mjs → use-table-state-BzjbnpBA.mjs} +100 -12
- package/dist/{use-table-state-CoVe_8NI.cjs → use-table-state-pF_9gnTG.cjs} +104 -10
- package/package.json +14 -7
- /package/dist/{as-cell-array.vue-D4vS7C_D.d.mts → as-cell-array.vue-ow34clSF.d.mts} +0 -0
- /package/dist/{as-cell-date.vue-Chs7WTZ9.d.mts → as-cell-date.vue-B4JCr1qP.d.mts} +0 -0
- /package/dist/{as-cell-json-popover-vty5vMjW.cjs → as-cell-json-popover-BM2QLgfk.cjs} +0 -0
- /package/dist/{as-cell-json-popover-CH5bAcLE.mjs → as-cell-json-popover-Dkdv5Y9E.mjs} +0 -0
- /package/dist/{as-cell-json.vue-C0_LDvQw.d.mts → as-cell-json.vue-B-T3TuFj.d.mts} +0 -0
- /package/dist/{as-cell-number.vue-BBF0OuU8.d.mts → as-cell-number.vue-CNH2fbCB.d.mts} +0 -0
- /package/dist/{as-cell-union.vue-CL-Lf-Rm.d.mts → as-cell-union.vue-CZwN81H4.d.mts} +0 -0
- /package/dist/{as-config-dialog.vue-BvFZZRuY.d.mts → as-config-dialog.vue-BKo2GpzN.d.mts} +0 -0
- /package/dist/{as-confirm-dialog.vue-Cz52-v6c.d.mts → as-confirm-dialog.vue-BN_yzu3h.d.mts} +0 -0
- /package/dist/{as-filter-dialog.vue-likNLqzF.d.mts → as-filter-dialog.vue-Bl8OIKOf.d.mts} +0 -0
- /package/dist/{as-filter-field.vue-BbXLhd6O.d.mts → as-filter-field.vue-DD0IZXS1.d.mts} +0 -0
- /package/dist/{as-filter-input-C8KmOus8.mjs → as-filter-input-BM23TNeh.mjs} +0 -0
- /package/dist/{as-filter-input-DUqpkTkg.cjs → as-filter-input-DJu2k9gO.cjs} +0 -0
- /package/dist/{as-filter-input.vue-B9ma2l9j.d.mts → as-filter-input.vue-CFZ33B--.d.mts} +0 -0
- /package/dist/{as-preset-dialog.vue-BRjjfPty.d.mts → as-preset-dialog.vue-ChM7H7B4.d.mts} +0 -0
- /package/dist/{as-preset-picker.vue-BPjsiaVt.d.mts → as-preset-picker.vue-OaAV2v9z.d.mts} +0 -0
- /package/dist/{as-table-cell-value.vue-BgFDv2JQ.d.cts → as-table-cell-value.vue-C0VR9GRK.d.cts} +0 -0
- /package/dist/{as-table-cell-value.vue-kfNgVhzn.d.mts → as-table-cell-value.vue-DphckGq-.d.mts} +0 -0
- /package/dist/{format-cell-Bx7wNc4X.mjs → format-cell-D1Ziv96Q.mjs} +0 -0
- /package/dist/{format-cell-DaxV6WIJ.cjs → format-cell-vCNTh4WZ.cjs} +0 -0
- /package/dist/{use-cell-locale-caG2Fzpc.cjs → use-cell-locale-BGBRQB7s.cjs} +0 -0
- /package/dist/{use-cell-locale-CxQOQsns.mjs → use-cell-locale-MQXoONh5.mjs} +0 -0
- /package/dist/{use-seed-on-open-DSh4XFyp.mjs → use-seed-on-open-DO3A1kIb.mjs} +0 -0
- /package/dist/{use-seed-on-open-9TSm1Vbv.cjs → use-seed-on-open-Dg9I89fU.cjs} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as getCellValue } from "./get-cell-value-Cb3X8nUn.mjs";
|
|
2
2
|
import { navigateHrefFor } from "@atscript/ui";
|
|
3
3
|
import { computed, inject, nextTick, onBeforeUnmount, onScopeDispose, provide, ref, shallowRef, toValue, watch } from "vue";
|
|
4
|
-
import { STANDARD_PRESET_ID, blockStartFor, buildTableQuery, cellAsString, debounce, derivePresetAspects, fromWireSnapshot, gateOwns, isDirtyAgainst, isFilled, isSystemPresetId, mergeDisplayColumns, mergeSorters, pageAlignedBlocksFor, planFetch, reconcileColumnWidthDefaults, resolveAspectGate, resolveSystemPresets, rowsToPks, sameColumnSet, sortRowsLocally, sortersEqual, stateToUrlQueryString, togglePk, urlQueryStringToState, walkBackwardAbsorb, walkForwardAbsorb } from "@atscript/ui-table";
|
|
4
|
+
import { DEV, STANDARD_PRESET_ID, arraysEqual, blockStartFor, buildTableQuery, cellAsString, debounce, derivePresetAspects, filterExprFields, filterExprKey, fromWireSnapshot, gateOwns, isDirtyAgainst, isFilled, isSystemPresetId, mergeDisplayColumns, mergeSorters, normalizeResidualFilters, pageAlignedBlocksFor, planFetch, reconcileColumnWidthDefaults, residualGateOwns, resolveAspectGate, resolveSystemPresets, rowsToPks, sameColumnSet, sortRowsLocally, sortersEqual, stateToUrlQueryString, togglePk, urlQueryStringToState, walkBackwardAbsorb, walkForwardAbsorb } from "@atscript/ui-table";
|
|
5
5
|
import { formatIdentifier } from "@atscript/db-client";
|
|
6
6
|
//#region src/types.ts
|
|
7
7
|
/** UI-side sentinel for the synthesised row-delete processor. */
|
|
@@ -1023,6 +1023,7 @@ function createPresetState(opts) {
|
|
|
1023
1023
|
apply(o, value, isSystem) {
|
|
1024
1024
|
if (!value && !isSystem) return;
|
|
1025
1025
|
o.filters.value = value ? { ...value } : {};
|
|
1026
|
+
if (o.residualFilters?.value.length) o.residualFilters.value = [];
|
|
1026
1027
|
},
|
|
1027
1028
|
expandDefault: () => ({})
|
|
1028
1029
|
},
|
|
@@ -1151,7 +1152,7 @@ function createPresetState(opts) {
|
|
|
1151
1152
|
const wire = row.data?.content;
|
|
1152
1153
|
return wire ? fromWireSnapshot(wire) : {};
|
|
1153
1154
|
});
|
|
1154
|
-
const isDirty = computed(() => isDirtyAgainst(activeSnapshot.value, captureSnapshot()));
|
|
1155
|
+
const isDirty = computed(() => isDirtyAgainst(activeSnapshot.value, captureSnapshot()) || activeSnapshot.value.filterOps !== void 0 && !!opts.residualFilters?.value.length);
|
|
1155
1156
|
function requirePresets() {
|
|
1156
1157
|
if (!opts.presetsHandle) throw new Error("[vue-table] presets feature not configured (preset.url missing)");
|
|
1157
1158
|
return opts.presetsHandle;
|
|
@@ -1586,6 +1587,26 @@ function createRequestSlot(cancelValue) {
|
|
|
1586
1587
|
release
|
|
1587
1588
|
};
|
|
1588
1589
|
}
|
|
1590
|
+
const cloneConditions = (conds) => conds.map((c) => ({
|
|
1591
|
+
type: c.type,
|
|
1592
|
+
value: [...c.value]
|
|
1593
|
+
}));
|
|
1594
|
+
const cloneSorter = (s) => ({
|
|
1595
|
+
field: s.field,
|
|
1596
|
+
direction: s.direction
|
|
1597
|
+
});
|
|
1598
|
+
/** Same residual conditions, in the same (canonical) order. */
|
|
1599
|
+
function sameResidualFilters(a, b) {
|
|
1600
|
+
return arraysEqual(a.map(filterExprKey), b.map(filterExprKey));
|
|
1601
|
+
}
|
|
1602
|
+
/**
|
|
1603
|
+
* The report for a restored URL's filter piece when nobody handles it
|
|
1604
|
+
* (`onUnsupportedFilter` / `@unsupported-filter`): a dev-mode warning.
|
|
1605
|
+
*/
|
|
1606
|
+
function warnUnsupportedFilter(issue) {
|
|
1607
|
+
if (!DEV) return;
|
|
1608
|
+
console.warn(`[vue-table] URL filter left out (${issue.reason}): ${JSON.stringify(issue.expr)}. Field filters cannot express it, so the table shows more rows than the URL described.`);
|
|
1609
|
+
}
|
|
1589
1610
|
function createTableState(opts) {
|
|
1590
1611
|
const client = opts.client;
|
|
1591
1612
|
const modelOpts = opts.model;
|
|
@@ -1622,6 +1643,7 @@ function createTableState(opts) {
|
|
|
1622
1643
|
*/
|
|
1623
1644
|
const rowActionsPolicy = computed(() => compileRowActionsConfig(rowActions.value));
|
|
1624
1645
|
const filters = shallowRef({});
|
|
1646
|
+
const residualFilters = shallowRef([]);
|
|
1625
1647
|
const results = shallowRef([]);
|
|
1626
1648
|
const resultsStart = ref(0);
|
|
1627
1649
|
const querying = ref(false);
|
|
@@ -1664,6 +1686,7 @@ function createTableState(opts) {
|
|
|
1664
1686
|
columnWidths,
|
|
1665
1687
|
filterFields,
|
|
1666
1688
|
filters,
|
|
1689
|
+
residualFilters,
|
|
1667
1690
|
sorters,
|
|
1668
1691
|
pagination,
|
|
1669
1692
|
allColumns,
|
|
@@ -1762,6 +1785,7 @@ function createTableState(opts) {
|
|
|
1762
1785
|
sorters: splitSorters.value.server,
|
|
1763
1786
|
forceSorters: queryOpts?.forceSorters,
|
|
1764
1787
|
filters: filters.value,
|
|
1788
|
+
residualFilters: residualFilters.value,
|
|
1765
1789
|
forceFilters: queryOpts?.forceFilters,
|
|
1766
1790
|
search: searchTerm.value || void 0,
|
|
1767
1791
|
ignoreSorters: sortersIgnored(),
|
|
@@ -1948,6 +1972,10 @@ function createTableState(opts) {
|
|
|
1948
1972
|
}
|
|
1949
1973
|
};
|
|
1950
1974
|
}
|
|
1975
|
+
function setResidualFilters(exprs) {
|
|
1976
|
+
const next = normalizeResidualFilters(exprs);
|
|
1977
|
+
if (!sameResidualFilters(next, residualFilters.value)) residualFilters.value = next;
|
|
1978
|
+
}
|
|
1951
1979
|
const state = {
|
|
1952
1980
|
tableDef,
|
|
1953
1981
|
loadingMetadata,
|
|
@@ -1957,6 +1985,7 @@ function createTableState(opts) {
|
|
|
1957
1985
|
columnWidths,
|
|
1958
1986
|
filterFields,
|
|
1959
1987
|
filters,
|
|
1988
|
+
residualFilters,
|
|
1960
1989
|
sorters,
|
|
1961
1990
|
results,
|
|
1962
1991
|
resultsStart,
|
|
@@ -2031,8 +2060,14 @@ function createTableState(opts) {
|
|
|
2031
2060
|
loadingAt,
|
|
2032
2061
|
errorAt,
|
|
2033
2062
|
resetFilters() {
|
|
2034
|
-
if (Object.keys(filters.value).length
|
|
2035
|
-
|
|
2063
|
+
if (Object.keys(filters.value).length > 0) filters.value = {};
|
|
2064
|
+
if (residualFilters.value.length > 0) residualFilters.value = [];
|
|
2065
|
+
},
|
|
2066
|
+
setResidualFilters,
|
|
2067
|
+
removeResidualFilter(index) {
|
|
2068
|
+
const list = residualFilters.value;
|
|
2069
|
+
if (index < 0 || index >= list.length) return;
|
|
2070
|
+
residualFilters.value = list.filter((_, i) => i !== index);
|
|
2036
2071
|
},
|
|
2037
2072
|
showConfigDialog(tab) {
|
|
2038
2073
|
configTab.value = tab ?? "columns";
|
|
@@ -2083,6 +2118,7 @@ function createTableState(opts) {
|
|
|
2083
2118
|
function serializeStateForUrl() {
|
|
2084
2119
|
return stateToUrlQueryString({
|
|
2085
2120
|
filters: filters.value,
|
|
2121
|
+
residualFilters: residualFilters.value,
|
|
2086
2122
|
sorters: sorters.value,
|
|
2087
2123
|
page: pagination.value.page,
|
|
2088
2124
|
itemsPerPage: pagination.value.itemsPerPage,
|
|
@@ -2111,31 +2147,78 @@ function createTableState(opts) {
|
|
|
2111
2147
|
lastEmittedUrl = next;
|
|
2112
2148
|
queryOpts.onUrlQueryChange(next);
|
|
2113
2149
|
}
|
|
2150
|
+
const filtersGate = resolveAspectGate(urlQuerySync?.filters);
|
|
2151
|
+
const sortersGate = resolveAspectGate(urlQuerySync?.sorters);
|
|
2152
|
+
const residualSync = urlQuerySync?.residual !== false;
|
|
2153
|
+
const urlOwnsResidual = (expr) => residualSync && residualGateOwns(filtersGate, expr);
|
|
2154
|
+
let urlBaseline = null;
|
|
2155
|
+
function captureUrlBaseline() {
|
|
2156
|
+
if (urlBaseline) return;
|
|
2157
|
+
const owned = {};
|
|
2158
|
+
for (const path in filters.value) {
|
|
2159
|
+
if (!gateOwns(filtersGate, path)) continue;
|
|
2160
|
+
owned[path] = cloneConditions(filters.value[path]);
|
|
2161
|
+
}
|
|
2162
|
+
urlBaseline = {
|
|
2163
|
+
filters: owned,
|
|
2164
|
+
residual: residualFilters.value.filter(urlOwnsResidual),
|
|
2165
|
+
sorters: sorters.value.filter((s) => gateOwns(sortersGate, s.field)).map(cloneSorter)
|
|
2166
|
+
};
|
|
2167
|
+
}
|
|
2168
|
+
if (queryOpts?.onUrlQueryChange) {
|
|
2169
|
+
const gate = queryOpts.urlQueryReady;
|
|
2170
|
+
if (!gate || gate.value) lastEmittedUrl = serializeStateForUrl();
|
|
2171
|
+
else {
|
|
2172
|
+
const stop = watch(() => gate.value, () => {
|
|
2173
|
+
captureUrlBaseline();
|
|
2174
|
+
lastEmittedUrl = serializeStateForUrl();
|
|
2175
|
+
stop();
|
|
2176
|
+
}, { flush: "sync" });
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2114
2179
|
function applyUrlQuery(urlString, opts) {
|
|
2180
|
+
captureUrlBaseline();
|
|
2115
2181
|
if (urlsEquivalent(urlString, lastEmittedUrl)) return;
|
|
2116
|
-
const replace = opts?.mode === "replace";
|
|
2117
2182
|
const cols = allColumns.value;
|
|
2118
2183
|
const parsed = urlQueryStringToState(urlString, {
|
|
2119
|
-
knownFields: cols.length > 0 ? cols.map((c) => c.path) : void 0,
|
|
2184
|
+
knownFields: cols.length > 0 ? cols.filter((c) => !c.local).map((c) => c.path) : void 0,
|
|
2120
2185
|
sync: urlQuerySync
|
|
2121
2186
|
});
|
|
2187
|
+
for (const issue of parsed.unsupported ?? []) (queryOpts?.onUnsupportedFilter ?? warnUnsupportedFilter)(issue);
|
|
2188
|
+
const urlResidual = parsed.residual ?? [];
|
|
2189
|
+
const residualPaths = new Set(urlResidual.flatMap((expr) => filterExprFields(expr)));
|
|
2190
|
+
const base = (opts?.mode ? opts.mode === "replace" : parsed.snapshot === true) ? null : urlBaseline;
|
|
2122
2191
|
const currentItemsPerPage = pagination.value.itemsPerPage;
|
|
2123
2192
|
const skip = parsed.skip ?? 0;
|
|
2124
2193
|
const nextPage = skip > 0 && currentItemsPerPage > 0 ? Math.floor(skip / currentItemsPerPage) + 1 : 1;
|
|
2125
2194
|
const wasQueryDetected = queryDetected;
|
|
2126
2195
|
hydratingFromUrl = true;
|
|
2127
|
-
const filtersGate = resolveAspectGate(urlQuerySync?.filters);
|
|
2128
2196
|
if (filtersGate !== "none") {
|
|
2129
2197
|
const next = {};
|
|
2130
|
-
|
|
2198
|
+
const fromBase = (path) => !!base?.filters[path] && !residualPaths.has(path);
|
|
2199
|
+
for (const path in filters.value) if (!gateOwns(filtersGate, path)) next[path] = filters.value[path];
|
|
2200
|
+
else if (fromBase(path)) next[path] = cloneConditions(base.filters[path]);
|
|
2201
|
+
if (base) {
|
|
2202
|
+
for (const path in base.filters) if (fromBase(path)) next[path] ??= cloneConditions(base.filters[path]);
|
|
2203
|
+
}
|
|
2131
2204
|
for (const path in parsed.filters) next[path] = parsed.filters[path];
|
|
2132
2205
|
filters.value = next;
|
|
2133
2206
|
}
|
|
2134
|
-
|
|
2207
|
+
if (residualSync) {
|
|
2208
|
+
const mentioned = new Set([...Object.keys(parsed.filters), ...residualPaths]);
|
|
2209
|
+
const next = residualFilters.value.filter((expr) => !urlOwnsResidual(expr));
|
|
2210
|
+
if (base) {
|
|
2211
|
+
for (const expr of base.residual) if (!filterExprFields(expr).some((f) => mentioned.has(f))) next.push(expr);
|
|
2212
|
+
}
|
|
2213
|
+
next.push(...urlResidual);
|
|
2214
|
+
setResidualFilters(next);
|
|
2215
|
+
}
|
|
2135
2216
|
let urlSortersChanged = false;
|
|
2136
2217
|
if (sortersGate !== "none") {
|
|
2137
2218
|
const urlSortFields = new Set(parsed.sorters.map((s) => s.field));
|
|
2138
|
-
const
|
|
2219
|
+
const start = sorters.value.filter((s) => !gateOwns(sortersGate, s.field));
|
|
2220
|
+
if (base) start.push(...base.sorters.map(cloneSorter));
|
|
2221
|
+
const merged = [...start.filter((s) => !urlSortFields.has(s.field)), ...parsed.sorters];
|
|
2139
2222
|
if (!sortersEqual(sorters.value, merged)) {
|
|
2140
2223
|
sorters.value = merged;
|
|
2141
2224
|
urlSortersChanged = true;
|
|
@@ -2174,7 +2257,11 @@ function createTableState(opts) {
|
|
|
2174
2257
|
const debouncedFilterQuery = debounce(() => {
|
|
2175
2258
|
if (queryDetected) scheduleQuery();
|
|
2176
2259
|
}, FILTER_DEBOUNCE_MS);
|
|
2177
|
-
watch([
|
|
2260
|
+
watch([
|
|
2261
|
+
() => filters.value,
|
|
2262
|
+
() => residualFilters.value,
|
|
2263
|
+
() => searchTerm.value
|
|
2264
|
+
], () => {
|
|
2178
2265
|
if (hydratingFromUrl) return;
|
|
2179
2266
|
if (!queryDetected) return;
|
|
2180
2267
|
mustRefresh.value = true;
|
|
@@ -2221,6 +2308,7 @@ function createTableState(opts) {
|
|
|
2221
2308
|
});
|
|
2222
2309
|
watch([
|
|
2223
2310
|
() => filters.value,
|
|
2311
|
+
() => residualFilters.value,
|
|
2224
2312
|
() => sorters.value,
|
|
2225
2313
|
() => searchTerm.value,
|
|
2226
2314
|
() => pagination.value,
|
|
@@ -2405,4 +2493,4 @@ function useRegisterMainActionListener(state, listener, enabled) {
|
|
|
2405
2493
|
});
|
|
2406
2494
|
}
|
|
2407
2495
|
//#endregion
|
|
2408
|
-
export {
|
|
2496
|
+
export { intentToScope as C, ROW_ACTIONS_PATH as D, triggerAction as E, ROW_ACTIONS_TYPE as O, intentClass as S, isPlainLeftClick as T, applyRowsGate as _, useTableContext as a, createNavigateGestures as b, DEFAULT_AVAILABLE_ASPECTS as c, ownerNameOf as d, readPresetLabel as f, applyRowGate as g, rowActionHref as h, useRegisterMainActionListener as i, ASPECT_ICONS as l, onSelectControlKeydown as m, createTableState as n, useTableContextOptional as o, INTERACTIVE_SELECTOR as p, provideTableContext as r, warnUnsupportedFilter as s, createStaticTableState as t, ASPECT_LABELS as u, ariaLabelFor as v, isModClick as w, extractIdentifier as x, collectIdentifiers as y };
|
|
@@ -1023,6 +1023,7 @@ function createPresetState(opts) {
|
|
|
1023
1023
|
apply(o, value, isSystem) {
|
|
1024
1024
|
if (!value && !isSystem) return;
|
|
1025
1025
|
o.filters.value = value ? { ...value } : {};
|
|
1026
|
+
if (o.residualFilters?.value.length) o.residualFilters.value = [];
|
|
1026
1027
|
},
|
|
1027
1028
|
expandDefault: () => ({})
|
|
1028
1029
|
},
|
|
@@ -1151,7 +1152,7 @@ function createPresetState(opts) {
|
|
|
1151
1152
|
const wire = row.data?.content;
|
|
1152
1153
|
return wire ? (0, _atscript_ui_table.fromWireSnapshot)(wire) : {};
|
|
1153
1154
|
});
|
|
1154
|
-
const isDirty = (0, vue.computed)(() => (0, _atscript_ui_table.isDirtyAgainst)(activeSnapshot.value, captureSnapshot()));
|
|
1155
|
+
const isDirty = (0, vue.computed)(() => (0, _atscript_ui_table.isDirtyAgainst)(activeSnapshot.value, captureSnapshot()) || activeSnapshot.value.filterOps !== void 0 && !!opts.residualFilters?.value.length);
|
|
1155
1156
|
function requirePresets() {
|
|
1156
1157
|
if (!opts.presetsHandle) throw new Error("[vue-table] presets feature not configured (preset.url missing)");
|
|
1157
1158
|
return opts.presetsHandle;
|
|
@@ -1586,6 +1587,26 @@ function createRequestSlot(cancelValue) {
|
|
|
1586
1587
|
release
|
|
1587
1588
|
};
|
|
1588
1589
|
}
|
|
1590
|
+
const cloneConditions = (conds) => conds.map((c) => ({
|
|
1591
|
+
type: c.type,
|
|
1592
|
+
value: [...c.value]
|
|
1593
|
+
}));
|
|
1594
|
+
const cloneSorter = (s) => ({
|
|
1595
|
+
field: s.field,
|
|
1596
|
+
direction: s.direction
|
|
1597
|
+
});
|
|
1598
|
+
/** Same residual conditions, in the same (canonical) order. */
|
|
1599
|
+
function sameResidualFilters(a, b) {
|
|
1600
|
+
return (0, _atscript_ui_table.arraysEqual)(a.map(_atscript_ui_table.filterExprKey), b.map(_atscript_ui_table.filterExprKey));
|
|
1601
|
+
}
|
|
1602
|
+
/**
|
|
1603
|
+
* The report for a restored URL's filter piece when nobody handles it
|
|
1604
|
+
* (`onUnsupportedFilter` / `@unsupported-filter`): a dev-mode warning.
|
|
1605
|
+
*/
|
|
1606
|
+
function warnUnsupportedFilter(issue) {
|
|
1607
|
+
if (!_atscript_ui_table.DEV) return;
|
|
1608
|
+
console.warn(`[vue-table] URL filter left out (${issue.reason}): ${JSON.stringify(issue.expr)}. Field filters cannot express it, so the table shows more rows than the URL described.`);
|
|
1609
|
+
}
|
|
1589
1610
|
function createTableState(opts) {
|
|
1590
1611
|
const client = opts.client;
|
|
1591
1612
|
const modelOpts = opts.model;
|
|
@@ -1622,6 +1643,7 @@ function createTableState(opts) {
|
|
|
1622
1643
|
*/
|
|
1623
1644
|
const rowActionsPolicy = (0, vue.computed)(() => compileRowActionsConfig(rowActions.value));
|
|
1624
1645
|
const filters = (0, vue.shallowRef)({});
|
|
1646
|
+
const residualFilters = (0, vue.shallowRef)([]);
|
|
1625
1647
|
const results = (0, vue.shallowRef)([]);
|
|
1626
1648
|
const resultsStart = (0, vue.ref)(0);
|
|
1627
1649
|
const querying = (0, vue.ref)(false);
|
|
@@ -1664,6 +1686,7 @@ function createTableState(opts) {
|
|
|
1664
1686
|
columnWidths,
|
|
1665
1687
|
filterFields,
|
|
1666
1688
|
filters,
|
|
1689
|
+
residualFilters,
|
|
1667
1690
|
sorters,
|
|
1668
1691
|
pagination,
|
|
1669
1692
|
allColumns,
|
|
@@ -1762,6 +1785,7 @@ function createTableState(opts) {
|
|
|
1762
1785
|
sorters: splitSorters.value.server,
|
|
1763
1786
|
forceSorters: queryOpts?.forceSorters,
|
|
1764
1787
|
filters: filters.value,
|
|
1788
|
+
residualFilters: residualFilters.value,
|
|
1765
1789
|
forceFilters: queryOpts?.forceFilters,
|
|
1766
1790
|
search: searchTerm.value || void 0,
|
|
1767
1791
|
ignoreSorters: sortersIgnored(),
|
|
@@ -1948,6 +1972,10 @@ function createTableState(opts) {
|
|
|
1948
1972
|
}
|
|
1949
1973
|
};
|
|
1950
1974
|
}
|
|
1975
|
+
function setResidualFilters(exprs) {
|
|
1976
|
+
const next = (0, _atscript_ui_table.normalizeResidualFilters)(exprs);
|
|
1977
|
+
if (!sameResidualFilters(next, residualFilters.value)) residualFilters.value = next;
|
|
1978
|
+
}
|
|
1951
1979
|
const state = {
|
|
1952
1980
|
tableDef,
|
|
1953
1981
|
loadingMetadata,
|
|
@@ -1957,6 +1985,7 @@ function createTableState(opts) {
|
|
|
1957
1985
|
columnWidths,
|
|
1958
1986
|
filterFields,
|
|
1959
1987
|
filters,
|
|
1988
|
+
residualFilters,
|
|
1960
1989
|
sorters,
|
|
1961
1990
|
results,
|
|
1962
1991
|
resultsStart,
|
|
@@ -2031,8 +2060,14 @@ function createTableState(opts) {
|
|
|
2031
2060
|
loadingAt,
|
|
2032
2061
|
errorAt,
|
|
2033
2062
|
resetFilters() {
|
|
2034
|
-
if (Object.keys(filters.value).length
|
|
2035
|
-
|
|
2063
|
+
if (Object.keys(filters.value).length > 0) filters.value = {};
|
|
2064
|
+
if (residualFilters.value.length > 0) residualFilters.value = [];
|
|
2065
|
+
},
|
|
2066
|
+
setResidualFilters,
|
|
2067
|
+
removeResidualFilter(index) {
|
|
2068
|
+
const list = residualFilters.value;
|
|
2069
|
+
if (index < 0 || index >= list.length) return;
|
|
2070
|
+
residualFilters.value = list.filter((_, i) => i !== index);
|
|
2036
2071
|
},
|
|
2037
2072
|
showConfigDialog(tab) {
|
|
2038
2073
|
configTab.value = tab ?? "columns";
|
|
@@ -2083,6 +2118,7 @@ function createTableState(opts) {
|
|
|
2083
2118
|
function serializeStateForUrl() {
|
|
2084
2119
|
return (0, _atscript_ui_table.stateToUrlQueryString)({
|
|
2085
2120
|
filters: filters.value,
|
|
2121
|
+
residualFilters: residualFilters.value,
|
|
2086
2122
|
sorters: sorters.value,
|
|
2087
2123
|
page: pagination.value.page,
|
|
2088
2124
|
itemsPerPage: pagination.value.itemsPerPage,
|
|
@@ -2111,31 +2147,78 @@ function createTableState(opts) {
|
|
|
2111
2147
|
lastEmittedUrl = next;
|
|
2112
2148
|
queryOpts.onUrlQueryChange(next);
|
|
2113
2149
|
}
|
|
2150
|
+
const filtersGate = (0, _atscript_ui_table.resolveAspectGate)(urlQuerySync?.filters);
|
|
2151
|
+
const sortersGate = (0, _atscript_ui_table.resolveAspectGate)(urlQuerySync?.sorters);
|
|
2152
|
+
const residualSync = urlQuerySync?.residual !== false;
|
|
2153
|
+
const urlOwnsResidual = (expr) => residualSync && (0, _atscript_ui_table.residualGateOwns)(filtersGate, expr);
|
|
2154
|
+
let urlBaseline = null;
|
|
2155
|
+
function captureUrlBaseline() {
|
|
2156
|
+
if (urlBaseline) return;
|
|
2157
|
+
const owned = {};
|
|
2158
|
+
for (const path in filters.value) {
|
|
2159
|
+
if (!(0, _atscript_ui_table.gateOwns)(filtersGate, path)) continue;
|
|
2160
|
+
owned[path] = cloneConditions(filters.value[path]);
|
|
2161
|
+
}
|
|
2162
|
+
urlBaseline = {
|
|
2163
|
+
filters: owned,
|
|
2164
|
+
residual: residualFilters.value.filter(urlOwnsResidual),
|
|
2165
|
+
sorters: sorters.value.filter((s) => (0, _atscript_ui_table.gateOwns)(sortersGate, s.field)).map(cloneSorter)
|
|
2166
|
+
};
|
|
2167
|
+
}
|
|
2168
|
+
if (queryOpts?.onUrlQueryChange) {
|
|
2169
|
+
const gate = queryOpts.urlQueryReady;
|
|
2170
|
+
if (!gate || gate.value) lastEmittedUrl = serializeStateForUrl();
|
|
2171
|
+
else {
|
|
2172
|
+
const stop = (0, vue.watch)(() => gate.value, () => {
|
|
2173
|
+
captureUrlBaseline();
|
|
2174
|
+
lastEmittedUrl = serializeStateForUrl();
|
|
2175
|
+
stop();
|
|
2176
|
+
}, { flush: "sync" });
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2114
2179
|
function applyUrlQuery(urlString, opts) {
|
|
2180
|
+
captureUrlBaseline();
|
|
2115
2181
|
if (urlsEquivalent(urlString, lastEmittedUrl)) return;
|
|
2116
|
-
const replace = opts?.mode === "replace";
|
|
2117
2182
|
const cols = allColumns.value;
|
|
2118
2183
|
const parsed = (0, _atscript_ui_table.urlQueryStringToState)(urlString, {
|
|
2119
|
-
knownFields: cols.length > 0 ? cols.map((c) => c.path) : void 0,
|
|
2184
|
+
knownFields: cols.length > 0 ? cols.filter((c) => !c.local).map((c) => c.path) : void 0,
|
|
2120
2185
|
sync: urlQuerySync
|
|
2121
2186
|
});
|
|
2187
|
+
for (const issue of parsed.unsupported ?? []) (queryOpts?.onUnsupportedFilter ?? warnUnsupportedFilter)(issue);
|
|
2188
|
+
const urlResidual = parsed.residual ?? [];
|
|
2189
|
+
const residualPaths = new Set(urlResidual.flatMap((expr) => (0, _atscript_ui_table.filterExprFields)(expr)));
|
|
2190
|
+
const base = (opts?.mode ? opts.mode === "replace" : parsed.snapshot === true) ? null : urlBaseline;
|
|
2122
2191
|
const currentItemsPerPage = pagination.value.itemsPerPage;
|
|
2123
2192
|
const skip = parsed.skip ?? 0;
|
|
2124
2193
|
const nextPage = skip > 0 && currentItemsPerPage > 0 ? Math.floor(skip / currentItemsPerPage) + 1 : 1;
|
|
2125
2194
|
const wasQueryDetected = queryDetected;
|
|
2126
2195
|
hydratingFromUrl = true;
|
|
2127
|
-
const filtersGate = (0, _atscript_ui_table.resolveAspectGate)(urlQuerySync?.filters);
|
|
2128
2196
|
if (filtersGate !== "none") {
|
|
2129
2197
|
const next = {};
|
|
2130
|
-
|
|
2198
|
+
const fromBase = (path) => !!base?.filters[path] && !residualPaths.has(path);
|
|
2199
|
+
for (const path in filters.value) if (!(0, _atscript_ui_table.gateOwns)(filtersGate, path)) next[path] = filters.value[path];
|
|
2200
|
+
else if (fromBase(path)) next[path] = cloneConditions(base.filters[path]);
|
|
2201
|
+
if (base) {
|
|
2202
|
+
for (const path in base.filters) if (fromBase(path)) next[path] ??= cloneConditions(base.filters[path]);
|
|
2203
|
+
}
|
|
2131
2204
|
for (const path in parsed.filters) next[path] = parsed.filters[path];
|
|
2132
2205
|
filters.value = next;
|
|
2133
2206
|
}
|
|
2134
|
-
|
|
2207
|
+
if (residualSync) {
|
|
2208
|
+
const mentioned = new Set([...Object.keys(parsed.filters), ...residualPaths]);
|
|
2209
|
+
const next = residualFilters.value.filter((expr) => !urlOwnsResidual(expr));
|
|
2210
|
+
if (base) {
|
|
2211
|
+
for (const expr of base.residual) if (!(0, _atscript_ui_table.filterExprFields)(expr).some((f) => mentioned.has(f))) next.push(expr);
|
|
2212
|
+
}
|
|
2213
|
+
next.push(...urlResidual);
|
|
2214
|
+
setResidualFilters(next);
|
|
2215
|
+
}
|
|
2135
2216
|
let urlSortersChanged = false;
|
|
2136
2217
|
if (sortersGate !== "none") {
|
|
2137
2218
|
const urlSortFields = new Set(parsed.sorters.map((s) => s.field));
|
|
2138
|
-
const
|
|
2219
|
+
const start = sorters.value.filter((s) => !(0, _atscript_ui_table.gateOwns)(sortersGate, s.field));
|
|
2220
|
+
if (base) start.push(...base.sorters.map(cloneSorter));
|
|
2221
|
+
const merged = [...start.filter((s) => !urlSortFields.has(s.field)), ...parsed.sorters];
|
|
2139
2222
|
if (!(0, _atscript_ui_table.sortersEqual)(sorters.value, merged)) {
|
|
2140
2223
|
sorters.value = merged;
|
|
2141
2224
|
urlSortersChanged = true;
|
|
@@ -2174,7 +2257,11 @@ function createTableState(opts) {
|
|
|
2174
2257
|
const debouncedFilterQuery = (0, _atscript_ui_table.debounce)(() => {
|
|
2175
2258
|
if (queryDetected) scheduleQuery();
|
|
2176
2259
|
}, FILTER_DEBOUNCE_MS);
|
|
2177
|
-
(0, vue.watch)([
|
|
2260
|
+
(0, vue.watch)([
|
|
2261
|
+
() => filters.value,
|
|
2262
|
+
() => residualFilters.value,
|
|
2263
|
+
() => searchTerm.value
|
|
2264
|
+
], () => {
|
|
2178
2265
|
if (hydratingFromUrl) return;
|
|
2179
2266
|
if (!queryDetected) return;
|
|
2180
2267
|
mustRefresh.value = true;
|
|
@@ -2221,6 +2308,7 @@ function createTableState(opts) {
|
|
|
2221
2308
|
});
|
|
2222
2309
|
(0, vue.watch)([
|
|
2223
2310
|
() => filters.value,
|
|
2311
|
+
() => residualFilters.value,
|
|
2224
2312
|
() => sorters.value,
|
|
2225
2313
|
() => searchTerm.value,
|
|
2226
2314
|
() => pagination.value,
|
|
@@ -2567,3 +2655,9 @@ Object.defineProperty(exports, "useTableContextOptional", {
|
|
|
2567
2655
|
return useTableContextOptional;
|
|
2568
2656
|
}
|
|
2569
2657
|
});
|
|
2658
|
+
Object.defineProperty(exports, "warnUnsupportedFilter", {
|
|
2659
|
+
enumerable: true,
|
|
2660
|
+
get: function() {
|
|
2661
|
+
return warnUnsupportedFilter;
|
|
2662
|
+
}
|
|
2663
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atscript/vue-table",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.140",
|
|
4
4
|
"description": "Type-driven table components for Atscript with Vue 3",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"atscript",
|
|
@@ -117,6 +117,11 @@
|
|
|
117
117
|
"import": "./dist/as-preset-picker.mjs",
|
|
118
118
|
"require": "./dist/as-preset-picker.cjs"
|
|
119
119
|
},
|
|
120
|
+
"./as-residual-filter": {
|
|
121
|
+
"types": "./dist/as-residual-filter.d.mts",
|
|
122
|
+
"import": "./dist/as-residual-filter.mjs",
|
|
123
|
+
"require": "./dist/as-residual-filter.cjs"
|
|
124
|
+
},
|
|
120
125
|
"./as-row-actions": {
|
|
121
126
|
"types": "./dist/as-row-actions.d.mts",
|
|
122
127
|
"import": "./dist/as-row-actions.mjs",
|
|
@@ -162,15 +167,16 @@
|
|
|
162
167
|
"access": "public"
|
|
163
168
|
},
|
|
164
169
|
"dependencies": {
|
|
165
|
-
"@atscript/ui": "^0.1.
|
|
166
|
-
"@atscript/ui-table": "^0.1.
|
|
167
|
-
"@atscript/vue-form": "^0.1.
|
|
170
|
+
"@atscript/ui": "^0.1.140",
|
|
171
|
+
"@atscript/ui-table": "^0.1.140",
|
|
172
|
+
"@atscript/vue-form": "^0.1.140"
|
|
168
173
|
},
|
|
169
174
|
"devDependencies": {
|
|
170
|
-
"@atscript/db-client": "^0.1.
|
|
175
|
+
"@atscript/db-client": "^0.1.133",
|
|
171
176
|
"@atscript/typescript": "^0.1.93",
|
|
172
177
|
"@tanstack/vue-virtual": "^3.13.26",
|
|
173
|
-
"@uniqu/core": "^0.1.
|
|
178
|
+
"@uniqu/core": "^0.1.10",
|
|
179
|
+
"@uniqu/url": "^0.1.10",
|
|
174
180
|
"@vitejs/plugin-vue": "^6",
|
|
175
181
|
"@vue/test-utils": "^2",
|
|
176
182
|
"@vueuse/core": "^14.3.0",
|
|
@@ -183,8 +189,9 @@
|
|
|
183
189
|
"vunor": "^0.3.0"
|
|
184
190
|
},
|
|
185
191
|
"peerDependencies": {
|
|
186
|
-
"@atscript/db-client": "^0.1.
|
|
192
|
+
"@atscript/db-client": "^0.1.133",
|
|
187
193
|
"@tanstack/vue-virtual": "^3.13.26",
|
|
194
|
+
"@uniqu/url": "^0.1.10",
|
|
188
195
|
"@vueuse/core": "^14.3.0",
|
|
189
196
|
"reka-ui": "^2.9.8",
|
|
190
197
|
"vue": "^3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/{as-table-cell-value.vue-BgFDv2JQ.d.cts → as-table-cell-value.vue-C0VR9GRK.d.cts}
RENAMED
|
File without changes
|
/package/dist/{as-table-cell-value.vue-kfNgVhzn.d.mts → as-table-cell-value.vue-DphckGq-.d.mts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|