@antelopejs/interface-dms 0.3.5 → 0.3.6
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/CHANGELOG.md +27 -0
- package/README.md +2 -2
- package/dist/attachments.d.ts +19 -10
- package/dist/attachments.js +15 -0
- package/dist/attachments.js.map +1 -1
- package/dist/auth/db/internal/sessions.model.d.ts +9 -0
- package/dist/auth/db/internal/sessions.model.js +31 -0
- package/dist/auth/db/internal/sessions.model.js.map +1 -0
- package/dist/auth/db/models/sessions.model.d.ts +16 -2
- package/dist/auth/db/models/sessions.model.js +33 -41
- package/dist/auth/db/models/sessions.model.js.map +1 -1
- package/dist/auth/db/models/userExternalIdentities.model.d.ts +11 -0
- package/dist/auth/db/models/userExternalIdentities.model.js +11 -0
- package/dist/auth/db/models/userExternalIdentities.model.js.map +1 -1
- package/dist/auth/db/models/users.model.d.ts +13 -0
- package/dist/auth/db/models/users.model.js +13 -0
- package/dist/auth/db/models/users.model.js.map +1 -1
- package/dist/auth/db/tables/sessions.table.d.ts +6 -1
- package/dist/auth/db/tables/sessions.table.js +0 -4
- package/dist/auth/db/tables/sessions.table.js.map +1 -1
- package/dist/auth/db/tables/userExternalIdentities.table.d.ts +24 -0
- package/dist/auth/db/tables/userExternalIdentities.table.js +13 -0
- package/dist/auth/db/tables/userExternalIdentities.table.js.map +1 -1
- package/dist/auth/db/tables/users.table.d.ts +60 -0
- package/dist/auth/db/tables/users.table.js +32 -0
- package/dist/auth/db/tables/users.table.js.map +1 -1
- package/dist/auth/index.d.ts +114 -10
- package/dist/auth/index.js +110 -17
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/internal/request-authenticators.d.ts +6 -0
- package/dist/auth/internal/request-authenticators.js +82 -0
- package/dist/auth/internal/request-authenticators.js.map +1 -0
- package/dist/auth/internal/request-principal.d.ts +10 -0
- package/dist/auth/internal/request-principal.js +27 -0
- package/dist/auth/internal/request-principal.js.map +1 -0
- package/dist/auth/internal/user-agent.d.ts +10 -0
- package/dist/auth/internal/user-agent.js +3 -0
- package/dist/auth/internal/user-agent.js.map +1 -0
- package/dist/auth/password.d.ts +19 -0
- package/dist/auth/password.js +23 -0
- package/dist/auth/password.js.map +1 -1
- package/dist/auth/request-authenticators.d.ts +4 -3
- package/dist/auth/request-authenticators.js +0 -77
- package/dist/auth/request-authenticators.js.map +1 -1
- package/dist/base/activity-feed.d.ts +210 -0
- package/dist/base/activity-feed.js +104 -0
- package/dist/base/activity-feed.js.map +1 -0
- package/dist/base/banner.d.ts +111 -0
- package/dist/base/banner.js +93 -0
- package/dist/base/banner.js.map +1 -0
- package/dist/base/block-registry/helpers.d.ts +26 -0
- package/dist/base/block-registry/helpers.js +27 -1
- package/dist/base/block-registry/helpers.js.map +1 -1
- package/dist/base/block-registry/internal/describe.d.ts +35 -0
- package/dist/base/block-registry/{describe.js → internal/describe.js} +50 -0
- package/dist/base/block-registry/internal/describe.js.map +1 -0
- package/dist/base/block-registry/internal/ui.d.ts +23 -0
- package/dist/base/block-registry/internal/ui.js +35 -0
- package/dist/base/block-registry/internal/ui.js.map +1 -0
- package/dist/base/block-registry/registry.d.ts +24 -0
- package/dist/base/block-registry/registry.js +30 -1
- package/dist/base/block-registry/registry.js.map +1 -1
- package/dist/base/block-registry/types.d.ts +149 -0
- package/dist/base/block-types.d.ts +22 -2
- package/dist/base/block-types.js +24 -2
- package/dist/base/block-types.js.map +1 -1
- package/dist/base/card.d.ts +100 -0
- package/dist/base/card.js +91 -0
- package/dist/base/card.js.map +1 -0
- package/dist/base/chart-card.d.ts +9 -2
- package/dist/base/chart-card.js +14 -1
- package/dist/base/chart-card.js.map +1 -1
- package/dist/base/chart-schemas.d.ts +127 -115
- package/dist/base/chart-schemas.js +18 -56
- package/dist/base/chart-schemas.js.map +1 -1
- package/dist/base/chart-type.d.ts +15 -0
- package/dist/base/chart-type.js +20 -0
- package/dist/base/chart-type.js.map +1 -0
- package/dist/base/chart.d.ts +31 -22
- package/dist/base/chart.js +27 -54
- package/dist/base/chart.js.map +1 -1
- package/dist/base/confirm-dialog.d.ts +6 -0
- package/dist/base/confirm-dialog.js +18 -0
- package/dist/base/confirm-dialog.js.map +1 -0
- package/dist/base/data-sources.d.ts +38 -0
- package/dist/base/data-sources.js +13 -0
- package/dist/base/data-sources.js.map +1 -1
- package/dist/base/data-types/compare-types.d.ts +0 -2
- package/dist/base/data-types/compare-types.js +18 -13
- package/dist/base/data-types/compare-types.js.map +1 -1
- package/dist/base/data-types/core.d.ts +55 -0
- package/dist/base/data-types/core.js +42 -0
- package/dist/base/data-types/core.js.map +1 -1
- package/dist/base/data-types/default-types.d.ts +241 -62
- package/dist/base/data-types/default-types.js +257 -135
- package/dist/base/data-types/default-types.js.map +1 -1
- package/dist/base/data-types/field-types.d.ts +164 -0
- package/dist/base/data-types/field-types.js +236 -0
- package/dist/base/data-types/field-types.js.map +1 -0
- package/dist/base/data-types/index.d.ts +1 -0
- package/dist/base/data-types/index.js +21 -0
- package/dist/base/data-types/index.js.map +1 -1
- package/dist/base/data-types/internal/compare-types.d.ts +3 -0
- package/dist/base/data-types/internal/compare-types.js +15 -0
- package/dist/base/data-types/internal/compare-types.js.map +1 -0
- package/dist/base/data-types/status-type.d.ts +2 -1
- package/dist/base/data-types/status-type.js +6 -0
- package/dist/base/data-types/status-type.js.map +1 -1
- package/dist/base/display.d.ts +124 -0
- package/dist/base/display.js +95 -0
- package/dist/base/display.js.map +1 -0
- package/dist/base/empty-state.d.ts +106 -0
- package/dist/base/empty-state.js +109 -0
- package/dist/base/empty-state.js.map +1 -0
- package/dist/base/export-jobs.d.ts +39 -1
- package/dist/base/export-jobs.js +12 -3
- package/dist/base/export-jobs.js.map +1 -1
- package/dist/base/form-block-schema.d.ts +345 -28
- package/dist/base/form-block-schema.js +83 -12
- package/dist/base/form-block-schema.js.map +1 -1
- package/dist/base/form-schema.d.ts +137 -22
- package/dist/base/form-schema.js +139 -42
- package/dist/base/form-schema.js.map +1 -1
- package/dist/base/form-types.d.ts +139 -4
- package/dist/base/form-types.js +7 -1
- package/dist/base/form-types.js.map +1 -1
- package/dist/base/form.js +7 -0
- package/dist/base/form.js.map +1 -1
- package/dist/base/grid.d.ts +57 -0
- package/dist/base/grid.js +43 -0
- package/dist/base/grid.js.map +1 -1
- package/dist/base/helpers/file-refs.js +5 -1
- package/dist/base/helpers/file-refs.js.map +1 -1
- package/dist/base/index.d.ts +11 -1
- package/dist/base/index.js +16 -1
- package/dist/base/index.js.map +1 -1
- package/dist/base/internal/button-availability.d.ts +17 -0
- package/dist/base/internal/button-availability.js +31 -0
- package/dist/base/internal/button-availability.js.map +1 -0
- package/dist/base/internal/chart-schemas.d.ts +6 -0
- package/dist/base/internal/chart-schemas.js +70 -0
- package/dist/base/internal/chart-schemas.js.map +1 -0
- package/dist/base/internal/chart.d.ts +22 -0
- package/dist/base/internal/chart.js +37 -0
- package/dist/base/internal/chart.js.map +1 -0
- package/dist/base/internal/confirm-dialog.d.ts +13 -0
- package/dist/base/internal/confirm-dialog.js +24 -0
- package/dist/base/internal/confirm-dialog.js.map +1 -0
- package/dist/base/internal/display.d.ts +13 -0
- package/dist/base/internal/display.js +18 -0
- package/dist/base/internal/display.js.map +1 -0
- package/dist/base/internal/export-jobs.d.ts +2 -0
- package/dist/base/internal/export-jobs.js +6 -0
- package/dist/base/internal/export-jobs.js.map +1 -0
- package/dist/base/internal/form-block-schema.d.ts +6 -0
- package/dist/base/internal/form-block-schema.js +10 -0
- package/dist/base/internal/form-block-schema.js.map +1 -0
- package/dist/base/internal/form-schema.d.ts +7 -0
- package/dist/base/internal/form-schema.js +26 -0
- package/dist/base/internal/form-schema.js.map +1 -0
- package/dist/base/internal/layouts.d.ts +39 -0
- package/dist/base/internal/layouts.js +3 -0
- package/dist/base/internal/layouts.js.map +1 -0
- package/dist/base/internal/query-response.d.ts +24 -0
- package/dist/base/internal/query-response.js +47 -0
- package/dist/base/internal/query-response.js.map +1 -0
- package/dist/base/internal/searchable.d.ts +6 -0
- package/dist/base/internal/searchable.js +15 -0
- package/dist/base/internal/searchable.js.map +1 -0
- package/dist/base/key-value-list.d.ts +160 -0
- package/dist/base/key-value-list.js +107 -0
- package/dist/base/key-value-list.js.map +1 -0
- package/dist/base/kpi-card.d.ts +12 -4
- package/dist/base/kpi-card.js +7 -0
- package/dist/base/kpi-card.js.map +1 -1
- package/dist/base/layouts.d.ts +35 -0
- package/dist/base/layouts.js +41 -7
- package/dist/base/layouts.js.map +1 -1
- package/dist/base/meter.d.ts +186 -0
- package/dist/base/meter.js +134 -0
- package/dist/base/meter.js.map +1 -0
- package/dist/base/nav-card-grid.d.ts +173 -0
- package/dist/base/nav-card-grid.js +89 -0
- package/dist/base/nav-card-grid.js.map +1 -0
- package/dist/base/period-selector.d.ts +20 -0
- package/dist/base/period-selector.js +23 -0
- package/dist/base/period-selector.js.map +1 -1
- package/dist/base/placeholder.d.ts +26 -0
- package/dist/base/placeholder.js +12 -0
- package/dist/base/placeholder.js.map +1 -1
- package/dist/base/query-response.d.ts +51 -1
- package/dist/base/query-response.js +43 -26
- package/dist/base/query-response.js.map +1 -1
- package/dist/base/resource-form-schema.d.ts +18 -0
- package/dist/base/resource-form-schema.js +20 -3
- package/dist/base/resource-form-schema.js.map +1 -1
- package/dist/base/searchable.d.ts +2 -0
- package/dist/base/searchable.js +4 -0
- package/dist/base/searchable.js.map +1 -1
- package/dist/base/section.d.ts +105 -0
- package/dist/base/section.js +123 -0
- package/dist/base/section.js.map +1 -0
- package/dist/base/stack.d.ts +113 -0
- package/dist/base/stack.js +58 -0
- package/dist/base/stack.js.map +1 -1
- package/dist/base/stat-group.d.ts +152 -0
- package/dist/base/stat-group.js +97 -0
- package/dist/base/stat-group.js.map +1 -0
- package/dist/base/tab.d.ts +25 -8
- package/dist/base/tab.js +11 -0
- package/dist/base/tab.js.map +1 -1
- package/dist/base/table-view/column-display.d.ts +195 -0
- package/dist/base/table-view/column-display.js +131 -0
- package/dist/base/table-view/column-display.js.map +1 -0
- package/dist/base/table-view/data-functions.d.ts +36 -14
- package/dist/base/table-view/data-functions.js +26 -1
- package/dist/base/table-view/data-functions.js.map +1 -1
- package/dist/base/table-view/factory-helpers.d.ts +0 -42
- package/dist/base/table-view/factory-helpers.js +1 -244
- package/dist/base/table-view/factory-helpers.js.map +1 -1
- package/dist/base/table-view/factory.d.ts +5 -1
- package/dist/base/table-view/factory.js +158 -202
- package/dist/base/table-view/factory.js.map +1 -1
- package/dist/base/table-view/internal/auth.d.ts +33 -0
- package/dist/base/table-view/{auth.js → internal/auth.js} +45 -6
- package/dist/base/table-view/internal/auth.js.map +1 -0
- package/dist/base/table-view/internal/column-display.d.ts +18 -0
- package/dist/base/table-view/internal/column-display.js +37 -0
- package/dist/base/table-view/internal/column-display.js.map +1 -0
- package/dist/base/table-view/internal/data-functions.d.ts +14 -0
- package/dist/base/table-view/internal/data-functions.js +3 -0
- package/dist/base/table-view/internal/data-functions.js.map +1 -0
- package/dist/base/table-view/internal/factory-helpers.d.ts +213 -0
- package/dist/base/table-view/internal/factory-helpers.js +477 -0
- package/dist/base/table-view/internal/factory-helpers.js.map +1 -0
- package/dist/base/table-view/{files.d.ts → internal/files.d.ts} +5 -0
- package/dist/base/table-view/{files.js → internal/files.js} +14 -4
- package/dist/base/table-view/internal/files.js.map +1 -0
- package/dist/base/table-view/internal/footer.d.ts +33 -0
- package/dist/base/table-view/internal/footer.js +112 -0
- package/dist/base/table-view/internal/footer.js.map +1 -0
- package/dist/base/table-view/{guards.d.ts → internal/guards.d.ts} +3 -0
- package/dist/base/table-view/internal/guards.js +134 -0
- package/dist/base/table-view/internal/guards.js.map +1 -0
- package/dist/base/table-view/internal/meta.d.ts +5 -0
- package/dist/base/table-view/internal/meta.js +13 -0
- package/dist/base/table-view/internal/meta.js.map +1 -0
- package/dist/base/table-view/internal/nav-badges.d.ts +9 -0
- package/dist/base/table-view/internal/nav-badges.js +79 -0
- package/dist/base/table-view/internal/nav-badges.js.map +1 -0
- package/dist/base/table-view/internal/options.d.ts +6 -0
- package/dist/base/table-view/internal/options.js +10 -0
- package/dist/base/table-view/internal/options.js.map +1 -0
- package/dist/base/table-view/internal/realtime-listeners.d.ts +4 -0
- package/dist/base/table-view/internal/realtime-listeners.js +7 -0
- package/dist/base/table-view/internal/realtime-listeners.js.map +1 -0
- package/dist/base/table-view/internal/realtime.d.ts +39 -0
- package/dist/base/table-view/internal/realtime.js +163 -0
- package/dist/base/table-view/internal/realtime.js.map +1 -0
- package/dist/base/table-view/internal/request-filter.d.ts +75 -0
- package/dist/base/table-view/internal/request-filter.js +154 -0
- package/dist/base/table-view/internal/request-filter.js.map +1 -0
- package/dist/base/table-view/internal/resource-form.d.ts +25 -0
- package/dist/base/table-view/internal/resource-form.js +91 -0
- package/dist/base/table-view/internal/resource-form.js.map +1 -0
- package/dist/base/table-view/{row-rules.d.ts → internal/row-rules.d.ts} +5 -2
- package/dist/base/table-view/{row-rules.js → internal/row-rules.js} +20 -19
- package/dist/base/table-view/internal/row-rules.js.map +1 -0
- package/dist/base/table-view/internal/tabs.d.ts +39 -0
- package/dist/base/table-view/internal/tabs.js +116 -0
- package/dist/base/table-view/internal/tabs.js.map +1 -0
- package/dist/base/table-view/internal/validation.d.ts +99 -0
- package/dist/base/table-view/internal/validation.js +297 -0
- package/dist/base/table-view/internal/validation.js.map +1 -0
- package/dist/base/table-view/internal/views.d.ts +14 -0
- package/dist/base/table-view/internal/views.js +42 -0
- package/dist/base/table-view/internal/views.js.map +1 -0
- package/dist/base/table-view/internal/writer.d.ts +39 -0
- package/dist/base/table-view/internal/writer.js +55 -0
- package/dist/base/table-view/internal/writer.js.map +1 -0
- package/dist/base/table-view/meta.d.ts +77 -4
- package/dist/base/table-view/meta.js +133 -13
- package/dist/base/table-view/meta.js.map +1 -1
- package/dist/base/table-view/options.d.ts +749 -28
- package/dist/base/table-view/options.js +9 -2
- package/dist/base/table-view/options.js.map +1 -1
- package/dist/base/table-view/realtime.d.ts +26 -17
- package/dist/base/table-view/realtime.js +29 -126
- package/dist/base/table-view/realtime.js.map +1 -1
- package/dist/base/table-view/resource-form.d.ts +11 -5
- package/dist/base/table-view/resource-form.js +15 -59
- package/dist/base/table-view/resource-form.js.map +1 -1
- package/dist/base/table-view/routes.d.ts +29 -0
- package/dist/base/table-view/routes.js +71 -6
- package/dist/base/table-view/routes.js.map +1 -1
- package/dist/base/table-view/schema.d.ts +483 -69
- package/dist/base/table-view/schema.js +163 -18
- package/dist/base/table-view/schema.js.map +1 -1
- package/dist/base/table-view/source.d.ts +62 -0
- package/dist/base/table-view/source.js +161 -0
- package/dist/base/table-view/source.js.map +1 -0
- package/dist/base/table-view/views.d.ts +20 -0
- package/dist/base/table-view/views.js +38 -0
- package/dist/base/table-view/views.js.map +1 -0
- package/dist/base/table-view/writer.d.ts +7 -0
- package/dist/base/table-view/writer.js +17 -0
- package/dist/base/table-view/writer.js.map +1 -0
- package/dist/base/table-view.d.ts +34 -6
- package/dist/base/table-view.js +42 -6
- package/dist/base/table-view.js.map +1 -1
- package/dist/base/tenant-export-archive.d.ts +21 -0
- package/dist/base/tenant-export-archive.js +11 -0
- package/dist/base/tenant-export-archive.js.map +1 -1
- package/dist/base/top-list-card.d.ts +35 -12
- package/dist/base/top-list-card.js +24 -0
- package/dist/base/top-list-card.js.map +1 -1
- package/dist/base/types/action-target.d.ts +36 -20
- package/dist/base/types/component-input.d.ts +3 -0
- package/dist/base/types/confirm-dialog.d.ts +69 -0
- package/dist/base/types/confirm-dialog.js +3 -0
- package/dist/base/types/confirm-dialog.js.map +1 -0
- package/dist/base/types/custom-button.d.ts +48 -2
- package/dist/base/types/enum-option.d.ts +9 -0
- package/dist/base/types/error.d.ts +9 -0
- package/dist/base/types/error.js +7 -1
- package/dist/base/types/error.js.map +1 -1
- package/dist/base/types/export-status.d.ts +3 -0
- package/dist/base/types/export-status.js +3 -0
- package/dist/base/types/export-status.js.map +1 -1
- package/dist/base/types/field-config.d.ts +3 -0
- package/dist/base/types/form-mode.d.ts +3 -0
- package/dist/base/types/form-mode.js +3 -0
- package/dist/base/types/form-mode.js.map +1 -1
- package/dist/base/types/form-values.d.ts +6 -0
- package/dist/base/types/guards.d.ts +37 -7
- package/dist/base/types/index.d.ts +2 -0
- package/dist/base/types/index.js +2 -0
- package/dist/base/types/index.js.map +1 -1
- package/dist/base/types/internal/action-target.d.ts +8 -0
- package/dist/base/types/internal/action-target.js +16 -0
- package/dist/base/types/internal/action-target.js.map +1 -0
- package/dist/base/types/json.d.ts +6 -0
- package/dist/base/types/orientation.d.ts +3 -0
- package/dist/base/types/orientation.js +3 -0
- package/dist/base/types/orientation.js.map +1 -1
- package/dist/base/types/readonly-behavior.d.ts +9 -0
- package/dist/base/types/readonly-behavior.js +3 -0
- package/dist/base/types/readonly-behavior.js.map +1 -1
- package/dist/base/types/row-action.d.ts +111 -0
- package/dist/base/types/size.d.ts +1 -0
- package/dist/base/types/size.js +4 -0
- package/dist/base/types/size.js.map +1 -1
- package/dist/base/types/tone.d.ts +14 -0
- package/dist/base/types/tone.js +24 -0
- package/dist/base/types/tone.js.map +1 -0
- package/dist/client-base-url.d.ts +8 -0
- package/dist/client-base-url.js +8 -0
- package/dist/client-base-url.js.map +1 -1
- package/dist/component-slots.d.ts +17 -2
- package/dist/component-slots.js +18 -66
- package/dist/component-slots.js.map +1 -1
- package/dist/component.d.ts +113 -0
- package/dist/component.js +84 -1
- package/dist/component.js.map +1 -1
- package/dist/data-controllers/members.d.ts +16 -1
- package/dist/data-controllers/members.js +87 -26
- package/dist/data-controllers/members.js.map +1 -1
- package/dist/data-controllers/roles.d.ts +1 -0
- package/dist/data-controllers/roles.js +3 -3
- package/dist/data-controllers/roles.js.map +1 -1
- package/dist/db/{models → internal}/exportJobs.model.d.ts +2 -0
- package/dist/db/{models → internal}/exportJobs.model.js +4 -1
- package/dist/db/internal/exportJobs.model.js.map +1 -0
- package/dist/db/internal/inviteResolutions.model.d.ts +34 -0
- package/dist/db/internal/inviteResolutions.model.js +80 -0
- package/dist/db/internal/inviteResolutions.model.js.map +1 -0
- package/dist/db/internal/table-names.d.ts +4 -0
- package/dist/db/internal/table-names.js +8 -0
- package/dist/db/internal/table-names.js.map +1 -0
- package/dist/db/{models → internal}/tenantLifecycle.model.d.ts +10 -1
- package/dist/db/{models → internal}/tenantLifecycle.model.js +10 -1
- package/dist/db/internal/tenantLifecycle.model.js.map +1 -0
- package/dist/db/{tables → internal}/tenantLifecycle.table.d.ts +6 -0
- package/dist/db/{tables → internal}/tenantLifecycle.table.js +6 -0
- package/dist/db/internal/tenantLifecycle.table.js.map +1 -0
- package/dist/db/models/index.d.ts +0 -2
- package/dist/db/models/index.js +0 -2
- package/dist/db/models/index.js.map +1 -1
- package/dist/db/models/inviteResolutions.model.d.ts +1 -25
- package/dist/db/models/inviteResolutions.model.js +0 -68
- package/dist/db/models/inviteResolutions.model.js.map +1 -1
- package/dist/db/models/roles.model.d.ts +6 -0
- package/dist/db/models/roles.model.js +6 -0
- package/dist/db/models/roles.model.js.map +1 -1
- package/dist/db/models/tenantMembers.model.js +1 -1
- package/dist/db/models/tenantMembers.model.js.map +1 -1
- package/dist/db/models/user_invites.model.d.ts +24 -0
- package/dist/db/models/user_invites.model.js +25 -1
- package/dist/db/models/user_invites.model.js.map +1 -1
- package/dist/db/tables/exportJobs.table.d.ts +5 -1
- package/dist/db/tables/exportJobs.table.js +3 -3
- package/dist/db/tables/exportJobs.table.js.map +1 -1
- package/dist/db/tables/index.d.ts +0 -1
- package/dist/db/tables/index.js +0 -1
- package/dist/db/tables/index.js.map +1 -1
- package/dist/db/tables/inviteResolutions.table.d.ts +1 -1
- package/dist/db/tables/inviteResolutions.table.js +4 -3
- package/dist/db/tables/inviteResolutions.table.js.map +1 -1
- package/dist/db/tables/roles.table.d.ts +2 -0
- package/dist/db/tables/roles.table.js +4 -0
- package/dist/db/tables/roles.table.js.map +1 -1
- package/dist/db/tables/tenantMembers.table.d.ts +1 -0
- package/dist/db/tables/user_invites.table.d.ts +11 -0
- package/dist/db/tables/user_invites.table.js +4 -0
- package/dist/db/tables/user_invites.table.js.map +1 -1
- package/dist/guards.d.ts +36 -0
- package/dist/guards.js +30 -1
- package/dist/guards.js.map +1 -1
- package/dist/hooks.d.ts +133 -1
- package/dist/hooks.js +87 -1
- package/dist/hooks.js.map +1 -1
- package/dist/html-render/index.d.ts +15 -0
- package/dist/html-render/index.js +15 -0
- package/dist/html-render/index.js.map +1 -1
- package/dist/html-render/types.d.ts +4 -0
- package/dist/index.d.ts +6 -7
- package/dist/index.js +12 -17
- package/dist/index.js.map +1 -1
- package/dist/internal/attachments.d.ts +16 -0
- package/dist/internal/attachments.js +3 -0
- package/dist/internal/attachments.js.map +1 -0
- package/dist/internal/component-slots.d.ts +27 -0
- package/dist/internal/component-slots.js +97 -0
- package/dist/internal/component-slots.js.map +1 -0
- package/dist/internal/invite-membership.d.ts +8 -0
- package/dist/{invite-membership.js → internal/invite-membership.js} +11 -5
- package/dist/internal/invite-membership.js.map +1 -0
- package/dist/internal/invite-replacement.d.ts +7 -0
- package/dist/{invite-replacement.js → internal/invite-replacement.js} +8 -3
- package/dist/internal/invite-replacement.js.map +1 -0
- package/dist/internal/invite-resolution.d.ts +3 -0
- package/dist/internal/invite-resolution.js +50 -0
- package/dist/internal/invite-resolution.js.map +1 -0
- package/dist/internal/invites.d.ts +31 -0
- package/dist/internal/invites.js +44 -0
- package/dist/internal/invites.js.map +1 -0
- package/dist/internal/permission-gate.d.ts +23 -0
- package/dist/internal/permission-gate.js +43 -0
- package/dist/internal/permission-gate.js.map +1 -0
- package/dist/internal/tenant-access.d.ts +28 -0
- package/dist/internal/tenant-access.js +28 -0
- package/dist/internal/tenant-access.js.map +1 -0
- package/dist/internal/tenant-ownership.d.ts +13 -0
- package/dist/internal/tenant-ownership.js +95 -0
- package/dist/internal/tenant-ownership.js.map +1 -0
- package/dist/internal/uploads.d.ts +19 -0
- package/dist/internal/uploads.js +3 -0
- package/dist/internal/uploads.js.map +1 -0
- package/dist/invite-extensions/availability.d.ts +28 -3
- package/dist/invite-extensions/availability.js +26 -23
- package/dist/invite-extensions/availability.js.map +1 -1
- package/dist/invite-extensions/internal/availability.d.ts +12 -0
- package/dist/invite-extensions/internal/availability.js +32 -0
- package/dist/invite-extensions/internal/availability.js.map +1 -0
- package/dist/invite-extensions/internal/delivery.d.ts +44 -0
- package/dist/invite-extensions/{delivery.js → internal/delivery.js} +38 -0
- package/dist/invite-extensions/internal/delivery.js.map +1 -0
- package/dist/invite-extensions/internal/edit.d.ts +34 -0
- package/dist/invite-extensions/{edit.js → internal/edit.js} +33 -0
- package/dist/invite-extensions/internal/edit.js.map +1 -0
- package/dist/invite-extensions/internal/field-ids.d.ts +21 -0
- package/dist/invite-extensions/{field-ids.js → internal/field-ids.js} +13 -0
- package/dist/invite-extensions/internal/field-ids.js.map +1 -0
- package/dist/invite-extensions/internal/form-slot.d.ts +13 -0
- package/dist/invite-extensions/{form-slot.js → internal/form-slot.js} +49 -4
- package/dist/invite-extensions/internal/form-slot.js.map +1 -0
- package/dist/invite-extensions/internal/payload-slices.d.ts +31 -0
- package/dist/invite-extensions/{payload-slices.js → internal/payload-slices.js} +30 -0
- package/dist/invite-extensions/internal/payload-slices.js.map +1 -0
- package/dist/invite-extensions/internal/registry.d.ts +48 -0
- package/dist/invite-extensions/internal/registry.js +77 -0
- package/dist/invite-extensions/internal/registry.js.map +1 -0
- package/dist/invite-extensions/internal/types.d.ts +61 -0
- package/dist/invite-extensions/internal/types.js +3 -0
- package/dist/invite-extensions/internal/types.js.map +1 -0
- package/dist/invite-extensions/registry.d.ts +44 -12
- package/dist/invite-extensions/registry.js +51 -43
- package/dist/invite-extensions/registry.js.map +1 -1
- package/dist/invite-extensions/types.d.ts +59 -34
- package/dist/invite-extensions.d.ts +30 -4
- package/dist/invite-extensions.js +57 -7
- package/dist/invite-extensions.js.map +1 -1
- package/dist/invite-resolution.d.ts +5 -2
- package/dist/invite-resolution.js +16 -46
- package/dist/invite-resolution.js.map +1 -1
- package/dist/invitee-display-name.d.ts +5 -0
- package/dist/invitee-display-name.js +15 -0
- package/dist/invitee-display-name.js.map +1 -0
- package/dist/invites.d.ts +46 -14
- package/dist/invites.js +41 -44
- package/dist/invites.js.map +1 -1
- package/dist/layout-banners.d.ts +68 -0
- package/dist/layout-banners.js +18 -0
- package/dist/layout-banners.js.map +1 -1
- package/dist/notifications/builder.d.ts +3 -1
- package/dist/notifications/builder.js +10 -0
- package/dist/notifications/builder.js.map +1 -1
- package/dist/notifications/index.d.ts +1 -0
- package/dist/notifications/index.js +16 -0
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/internal.d.ts +8 -5
- package/dist/notifications/internal.js +6 -0
- package/dist/notifications/internal.js.map +1 -1
- package/dist/notifications/sendable.d.ts +6 -0
- package/dist/notifications/sendable.js +13 -4
- package/dist/notifications/sendable.js.map +1 -1
- package/dist/notifications/types.d.ts +26 -1
- package/dist/page/categories.d.ts +19 -17
- package/dist/page/categories.js +24 -168
- package/dist/page/categories.js.map +1 -1
- package/dist/page/component-tree.d.ts +15 -1
- package/dist/page/component-tree.js +0 -40
- package/dist/page/component-tree.js.map +1 -1
- package/dist/page/controllers.d.ts +135 -0
- package/dist/page/controllers.js +124 -8
- package/dist/page/controllers.js.map +1 -1
- package/dist/page/declaration-conflict.d.ts +9 -0
- package/dist/page/declaration-conflict.js +17 -0
- package/dist/page/declaration-conflict.js.map +1 -0
- package/dist/page/form-page-routes.d.ts +7 -10
- package/dist/page/form-page-routes.js +14 -31
- package/dist/page/form-page-routes.js.map +1 -1
- package/dist/page/internal/categories.d.ts +62 -0
- package/dist/page/internal/categories.js +260 -0
- package/dist/page/internal/categories.js.map +1 -0
- package/dist/page/internal/component-target.d.ts +37 -0
- package/dist/page/{component-target.js → internal/component-target.js} +27 -2
- package/dist/page/internal/component-target.js.map +1 -0
- package/dist/page/internal/component-tree.d.ts +13 -0
- package/dist/page/internal/component-tree.js +61 -0
- package/dist/page/internal/component-tree.js.map +1 -0
- package/dist/page/{extension-assembly.d.ts → internal/extension-assembly.d.ts} +5 -2
- package/dist/page/{extension-assembly.js → internal/extension-assembly.js} +8 -0
- package/dist/page/internal/extension-assembly.js.map +1 -0
- package/dist/page/internal/extension-validation.d.ts +24 -0
- package/dist/page/{extension-validation.js → internal/extension-validation.js} +8 -0
- package/dist/page/internal/extension-validation.js.map +1 -0
- package/dist/page/internal/form-page-routes.d.ts +26 -0
- package/dist/page/internal/form-page-routes.js +40 -0
- package/dist/page/internal/form-page-routes.js.map +1 -0
- package/dist/page/internal/layout-filter.d.ts +21 -0
- package/dist/page/internal/layout-filter.js +101 -0
- package/dist/page/internal/layout-filter.js.map +1 -0
- package/dist/page/{metadata-helpers.d.ts → internal/metadata-helpers.d.ts} +4 -1
- package/dist/page/{metadata-helpers.js → internal/metadata-helpers.js} +19 -2
- package/dist/page/internal/metadata-helpers.js.map +1 -0
- package/dist/page/internal/nav-badges.d.ts +17 -0
- package/dist/page/internal/nav-badges.js +68 -0
- package/dist/page/internal/nav-badges.js.map +1 -0
- package/dist/page/internal/page-registration.d.ts +29 -0
- package/dist/page/internal/page-registration.js +41 -0
- package/dist/page/internal/page-registration.js.map +1 -0
- package/dist/page/internal/registry.d.ts +128 -0
- package/dist/page/internal/registry.js +225 -0
- package/dist/page/internal/registry.js.map +1 -0
- package/dist/page/internal/table-view-ids.d.ts +10 -0
- package/dist/page/internal/table-view-ids.js +39 -0
- package/dist/page/internal/table-view-ids.js.map +1 -0
- package/dist/page/internal/types.d.ts +2 -0
- package/dist/page/internal/types.js +6 -0
- package/dist/page/internal/types.js.map +1 -0
- package/dist/page/layout-filter.d.ts +4 -0
- package/dist/page/layout-filter.js +11 -0
- package/dist/page/layout-filter.js.map +1 -1
- package/dist/page/metadata.d.ts +93 -0
- package/dist/page/metadata.js +236 -28
- package/dist/page/metadata.js.map +1 -1
- package/dist/page/registry.d.ts +17 -36
- package/dist/page/registry.js +25 -127
- package/dist/page/registry.js.map +1 -1
- package/dist/page/roots.d.ts +10 -0
- package/dist/page/roots.js +27 -6
- package/dist/page/roots.js.map +1 -1
- package/dist/page/types.d.ts +186 -1
- package/dist/page/types.js +1 -2
- package/dist/page/types.js.map +1 -1
- package/dist/page.d.ts +23 -1
- package/dist/page.js +24 -2
- package/dist/page.js.map +1 -1
- package/dist/permission-gate.d.ts +14 -0
- package/dist/permission-gate.js +3 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/permissions-resolver.d.ts +24 -0
- package/dist/permissions-resolver.js +24 -0
- package/dist/permissions-resolver.js.map +1 -1
- package/dist/permissions.d.ts +27 -0
- package/dist/permissions.js +37 -0
- package/dist/permissions.js.map +1 -1
- package/dist/quick-actions.d.ts +27 -0
- package/dist/quick-actions.js +1 -0
- package/dist/quick-actions.js.map +1 -1
- package/dist/realtime.d.ts +29 -0
- package/dist/realtime.js +30 -0
- package/dist/realtime.js.map +1 -1
- package/dist/request-tenant.d.ts +17 -0
- package/dist/request-tenant.js +18 -1
- package/dist/request-tenant.js.map +1 -1
- package/dist/tenant-access.d.ts +38 -6
- package/dist/tenant-access.js +38 -8
- package/dist/tenant-access.js.map +1 -1
- package/dist/tenant-export.d.ts +19 -0
- package/dist/tenant-lifecycle.d.ts +13 -0
- package/dist/tenant-lifecycle.js +22 -1
- package/dist/tenant-lifecycle.js.map +1 -1
- package/dist/tenant-ownership.d.ts +2 -1
- package/dist/tenant-ownership.js +5 -85
- package/dist/tenant-ownership.js.map +1 -1
- package/dist/tenant-scoped-model.d.ts +8 -0
- package/dist/tenant-scoped-model.js +8 -0
- package/dist/tenant-scoped-model.js.map +1 -1
- package/dist/uploads.d.ts +24 -16
- package/dist/uploads.js +24 -0
- package/dist/uploads.js.map +1 -1
- package/dist/utils/fire-and-forget.d.ts +4 -0
- package/dist/utils/fire-and-forget.js +4 -0
- package/dist/utils/fire-and-forget.js.map +1 -1
- package/dist/utils/internal/owned-registry.d.ts +36 -0
- package/dist/utils/internal/owned-registry.js +60 -0
- package/dist/utils/internal/owned-registry.js.map +1 -0
- package/dist/utils/{row-instance.d.ts → internal/row-instance.d.ts} +1 -0
- package/dist/utils/internal/row-instance.js +12 -0
- package/dist/utils/internal/row-instance.js.map +1 -0
- package/dist/utils/internal/saas-mode.d.ts +8 -0
- package/dist/utils/internal/saas-mode.js +3 -0
- package/dist/utils/internal/saas-mode.js.map +1 -0
- package/dist/utils/{time.d.ts → internal/time.d.ts} +4 -0
- package/dist/utils/{time.js → internal/time.js} +4 -0
- package/dist/utils/internal/time.js.map +1 -0
- package/dist/utils/{type-check.d.ts → internal/type-check.d.ts} +12 -0
- package/dist/utils/{type-check.js → internal/type-check.js} +12 -0
- package/dist/utils/internal/type-check.js.map +1 -0
- package/dist/utils/internal/value-parser.d.ts +86 -0
- package/dist/utils/internal/value-parser.js +160 -0
- package/dist/utils/internal/value-parser.js.map +1 -0
- package/dist/utils/saas-mode.d.ts +25 -3
- package/dist/utils/saas-mode.js +24 -0
- package/dist/utils/saas-mode.js.map +1 -1
- package/package.json +3 -3
- package/dist/base/block-registry/describe.d.ts +0 -6
- package/dist/base/block-registry/describe.js.map +0 -1
- package/dist/base/block-registry/ui.d.ts +0 -5
- package/dist/base/block-registry/ui.js +0 -17
- package/dist/base/block-registry/ui.js.map +0 -1
- package/dist/base/table-view/auth.d.ts +0 -9
- package/dist/base/table-view/auth.js.map +0 -1
- package/dist/base/table-view/files.js.map +0 -1
- package/dist/base/table-view/guards.js +0 -85
- package/dist/base/table-view/guards.js.map +0 -1
- package/dist/base/table-view/row-rules.js.map +0 -1
- package/dist/base/tree.d.ts +0 -115
- package/dist/base/tree.js +0 -145
- package/dist/base/tree.js.map +0 -1
- package/dist/db/models/exportJobs.model.js.map +0 -1
- package/dist/db/models/tenantLifecycle.model.js.map +0 -1
- package/dist/db/tables/tenantLifecycle.table.js.map +0 -1
- package/dist/invite-extensions/delivery.d.ts +0 -5
- package/dist/invite-extensions/delivery.js.map +0 -1
- package/dist/invite-extensions/edit.d.ts +0 -4
- package/dist/invite-extensions/edit.js.map +0 -1
- package/dist/invite-extensions/field-ids.d.ts +0 -7
- package/dist/invite-extensions/field-ids.js.map +0 -1
- package/dist/invite-extensions/form-slot.d.ts +0 -2
- package/dist/invite-extensions/form-slot.js.map +0 -1
- package/dist/invite-extensions/internal.d.ts +0 -17
- package/dist/invite-extensions/internal.js +0 -55
- package/dist/invite-extensions/internal.js.map +0 -1
- package/dist/invite-extensions/payload-slices.d.ts +0 -8
- package/dist/invite-extensions/payload-slices.js.map +0 -1
- package/dist/invite-membership.d.ts +0 -3
- package/dist/invite-membership.js.map +0 -1
- package/dist/invite-replacement.d.ts +0 -2
- package/dist/invite-replacement.js.map +0 -1
- package/dist/page/component-target.d.ts +0 -10
- package/dist/page/component-target.js.map +0 -1
- package/dist/page/extension-assembly.js.map +0 -1
- package/dist/page/extension-validation.d.ts +0 -7
- package/dist/page/extension-validation.js.map +0 -1
- package/dist/page/metadata-helpers.js.map +0 -1
- package/dist/page/page-registration.d.ts +0 -13
- package/dist/page/page-registration.js +0 -22
- package/dist/page/page-registration.js.map +0 -1
- package/dist/utils/owned-registry.d.ts +0 -10
- package/dist/utils/owned-registry.js +0 -34
- package/dist/utils/owned-registry.js.map +0 -1
- package/dist/utils/row-instance.js +0 -8
- package/dist/utils/row-instance.js.map +0 -1
- package/dist/utils/time.js.map +0 -1
- package/dist/utils/type-check.js.map +0 -1
- package/dist/utils/value-parser.d.ts +0 -11
- package/dist/utils/value-parser.js +0 -86
- package/dist/utils/value-parser.js.map +0 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The footer band and the empty states of a table view: the figures the
|
|
3
|
+
// `summary` route computes over the listed rows, the legend, and what an
|
|
4
|
+
// empty body says.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ruleFields = ruleFields;
|
|
7
|
+
exports.serializeFooter = serializeFooter;
|
|
8
|
+
exports.serializeEmptyStates = serializeEmptyStates;
|
|
9
|
+
exports.warnIfSummaryLacksRoute = warnIfSummaryLacksRoute;
|
|
10
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
11
|
+
const data_types_1 = require("../../data-types");
|
|
12
|
+
const row_action_operators_1 = require("../../types/row-action-operators");
|
|
13
|
+
const tabs_1 = require("./tabs");
|
|
14
|
+
const LEGEND_TYPE_ID = "select";
|
|
15
|
+
/**
|
|
16
|
+
* The columns a row rule reads, nested rules included.
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
function ruleFields(rule) {
|
|
21
|
+
const record = rule;
|
|
22
|
+
if (row_action_operators_1.FIELD_KEY in record)
|
|
23
|
+
return [String(record[row_action_operators_1.FIELD_KEY])];
|
|
24
|
+
return row_action_operators_1.LOGICAL_OPERATOR_KEYS.flatMap((key) => {
|
|
25
|
+
const nested = record[key];
|
|
26
|
+
if (!nested)
|
|
27
|
+
return [];
|
|
28
|
+
const rules = Array.isArray(nested) ? nested : [nested];
|
|
29
|
+
return rules.flatMap((entry) => ruleFields(entry));
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function assertSummary(controllerName, meta, summary) {
|
|
33
|
+
const where = `TableView footer summary "${summary.label}" on ${controllerName}`;
|
|
34
|
+
if (summary.op === "sum" && !summary.field) {
|
|
35
|
+
throw new Error(`${where} sums no field: give it a field`);
|
|
36
|
+
}
|
|
37
|
+
const fields = [
|
|
38
|
+
...(summary.field ? [summary.field] : []),
|
|
39
|
+
...(summary.where ? ruleFields(summary.where) : []),
|
|
40
|
+
];
|
|
41
|
+
for (const field of fields) {
|
|
42
|
+
if (!meta.columns[field]) {
|
|
43
|
+
throw new Error(`${where} references unknown column "${field}"`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The footer as it reaches the client: its summaries checked, recorded on
|
|
49
|
+
* the controller and named by the id the `summary` route knows them by,
|
|
50
|
+
* their `where` rule kept server-side. The legend must be a select column.
|
|
51
|
+
*
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
function serializeFooter(controllerName, meta, footer) {
|
|
55
|
+
if (!footer)
|
|
56
|
+
return undefined;
|
|
57
|
+
const { summary, ...texts } = footer;
|
|
58
|
+
const legendColumn = footer.legend ? meta.columns[footer.legend] : undefined;
|
|
59
|
+
if (footer.legend &&
|
|
60
|
+
(!legendColumn || (0, data_types_1.getDataTypeId)(legendColumn.type) !== LEGEND_TYPE_ID)) {
|
|
61
|
+
throw new Error(`TableView footer legend on ${controllerName} must name a SelectType column (got "${footer.legend}")`);
|
|
62
|
+
}
|
|
63
|
+
if (!summary)
|
|
64
|
+
return texts;
|
|
65
|
+
for (const entry of summary)
|
|
66
|
+
assertSummary(controllerName, meta, entry);
|
|
67
|
+
const ids = meta.registerFooterSummaries(summary);
|
|
68
|
+
return {
|
|
69
|
+
...texts,
|
|
70
|
+
summary: summary.map(({ where: _where, ...entry }, index) => ({
|
|
71
|
+
...entry,
|
|
72
|
+
id: ids[index],
|
|
73
|
+
})),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The empty states as they reach the client, components serialized.
|
|
78
|
+
*
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
function serializeEmptyStates(emptyStates) {
|
|
82
|
+
if (!emptyStates)
|
|
83
|
+
return undefined;
|
|
84
|
+
return Object.fromEntries(Object.entries(emptyStates).map(([kind, state]) => [
|
|
85
|
+
kind,
|
|
86
|
+
state && {
|
|
87
|
+
...state,
|
|
88
|
+
component: state.component?.serializeSync(),
|
|
89
|
+
},
|
|
90
|
+
]));
|
|
91
|
+
}
|
|
92
|
+
const SUMMARY_PATH = "summary";
|
|
93
|
+
const SUMMARY_METHOD = "get";
|
|
94
|
+
const controllersWarnedForSummaries = new WeakSet();
|
|
95
|
+
/**
|
|
96
|
+
* Warn, once per controller, when a table view declares footer summaries but
|
|
97
|
+
* its controller mounts no `GET summary` route: the footer could not read
|
|
98
|
+
* them. The fix belongs in the controller (`summary: TableViewRoutes.Summary`).
|
|
99
|
+
*
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
function warnIfSummaryLacksRoute(controller, location, footer, endpoints) {
|
|
103
|
+
if (!footer?.summary?.length)
|
|
104
|
+
return;
|
|
105
|
+
if (controllersWarnedForSummaries.has(controller))
|
|
106
|
+
return;
|
|
107
|
+
if ((0, tabs_1.servesRoute)(endpoints, SUMMARY_PATH, SUMMARY_METHOD))
|
|
108
|
+
return;
|
|
109
|
+
controllersWarnedForSummaries.add(controller);
|
|
110
|
+
logging_1.Logging.Warn(`[DMS] TableView on "${controller.name}" (${location}) declares footer summaries but its controller mounts no GET ${location}/${SUMMARY_PATH} route: they will not show. Mount \`summary: TableViewRoutes.Summary\` on the controller.`);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/footer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { type DataControllerCallback } from "@antelopejs/interface-data-api";
|
|
2
2
|
import type { Parameters } from "@antelopejs/interface-data-api/components";
|
|
3
3
|
type GuardedActionName = "edit" | "delete" | "archive" | "restore" | "new";
|
|
4
|
+
/** @internal */
|
|
4
5
|
export declare const parseGuardBody: (raw: unknown) => Record<string, unknown>;
|
|
6
|
+
/** @internal */
|
|
5
7
|
export declare const guardedGetRoute: DataControllerCallback<Parameters.GetParameters>;
|
|
8
|
+
/** @internal */
|
|
6
9
|
export declare const createGuardedRoute: (baseRoute: DataControllerCallback, actionName: GuardedActionName) => DataControllerCallback;
|
|
7
10
|
export {};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createGuardedRoute = exports.guardedGetRoute = exports.parseGuardBody = void 0;
|
|
4
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
5
|
+
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
6
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
7
|
+
const interface_data_api_1 = require("@antelopejs/interface-data-api");
|
|
8
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
9
|
+
const data_functions_1 = require("../data-functions");
|
|
10
|
+
const meta_1 = require("../meta");
|
|
11
|
+
const options_1 = require("../options");
|
|
12
|
+
const row_rules_1 = require("./row-rules");
|
|
13
|
+
/**
|
|
14
|
+
* The values of a confirmation's fields, sent as the body of a delete,
|
|
15
|
+
* archive or restore; unset when the request carried none.
|
|
16
|
+
*/
|
|
17
|
+
const parseConfirmValues = (raw) => {
|
|
18
|
+
const isEmpty = raw === undefined ||
|
|
19
|
+
raw === null ||
|
|
20
|
+
((Buffer.isBuffer(raw) || typeof raw === "string") && raw.length === 0);
|
|
21
|
+
return isEmpty ? undefined : (0, exports.parseGuardBody)(raw);
|
|
22
|
+
};
|
|
23
|
+
/** @internal */
|
|
24
|
+
const parseGuardBody = (raw) => {
|
|
25
|
+
if (Buffer.isBuffer(raw))
|
|
26
|
+
return JSON.parse(raw.toString());
|
|
27
|
+
if (typeof raw === "string" && raw.length > 0)
|
|
28
|
+
return JSON.parse(raw);
|
|
29
|
+
if (raw && typeof raw === "object")
|
|
30
|
+
return raw;
|
|
31
|
+
return {};
|
|
32
|
+
};
|
|
33
|
+
exports.parseGuardBody = parseGuardBody;
|
|
34
|
+
const ACTION_GUARD_CONFIGS = {
|
|
35
|
+
edit: {
|
|
36
|
+
// A published contract: the runtime calls this positionally and every
|
|
37
|
+
// implementing module declares the same shape, so an options object
|
|
38
|
+
// cannot be introduced from this side.
|
|
39
|
+
// oxlint-disable-next-line eslint/max-params
|
|
40
|
+
invokeGuard: async (controller, ctx, params, args, guard, idField) => {
|
|
41
|
+
const id = String(params.id);
|
|
42
|
+
const body = (0, exports.parseGuardBody)(args[0]);
|
|
43
|
+
const current = await (0, data_functions_1.fetchRowForGuard)(controller, id, idField);
|
|
44
|
+
(0, interface_api_util_1.assert)(current, 404, "Not Found");
|
|
45
|
+
return guard.call(controller, ctx, { id, body, current });
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
delete: {
|
|
49
|
+
invokeGuard: async (controller, ctx, params, args, guard) => {
|
|
50
|
+
const ids = (0, row_rules_1.normalizeToArray)(params.id);
|
|
51
|
+
return guard.call(controller, ctx, {
|
|
52
|
+
ids,
|
|
53
|
+
values: parseConfirmValues(args.at(-1)),
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
archive: {
|
|
58
|
+
invokeGuard: async (controller, ctx, params, args, guard) => {
|
|
59
|
+
const ids = (0, row_rules_1.normalizeToArray)(params);
|
|
60
|
+
return guard.call(controller, ctx, {
|
|
61
|
+
ids,
|
|
62
|
+
values: parseConfirmValues(args.at(-1)),
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
restore: {
|
|
67
|
+
invokeGuard: async (controller, ctx, params, args, guard) => {
|
|
68
|
+
const ids = (0, row_rules_1.normalizeToArray)(params);
|
|
69
|
+
return guard.call(controller, ctx, {
|
|
70
|
+
ids,
|
|
71
|
+
values: parseConfirmValues(args.at(-1)),
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
new: {
|
|
76
|
+
invokeGuard: async (controller, ctx, _params, args, guard) => {
|
|
77
|
+
const body = (0, exports.parseGuardBody)(args[0]);
|
|
78
|
+
return guard.call(controller, ctx, { body });
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
const getGuardForAction = (controller, actionName) => {
|
|
83
|
+
const meta = (0, interface_core_1.GetMetadata)(controller.constructor, meta_1.TableViewMeta);
|
|
84
|
+
return meta.controllerGuards?.[actionName];
|
|
85
|
+
};
|
|
86
|
+
/** @internal */
|
|
87
|
+
exports.guardedGetRoute = interface_data_api_1.DefaultRoutes.WithGetGuard(async function (ctx, current, params) {
|
|
88
|
+
await getGuardForAction(this, "get")?.call(this, ctx, {
|
|
89
|
+
id: params.id,
|
|
90
|
+
current,
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
const getIdField = (controller) => {
|
|
94
|
+
const meta = (0, interface_core_1.GetMetadata)(controller.constructor, meta_1.TableViewMeta);
|
|
95
|
+
return meta.options.rowIdKey || options_1.DEFAULT_ROW_ID_FIELD;
|
|
96
|
+
};
|
|
97
|
+
async function runAfterWrite(afterWrite, actionName) {
|
|
98
|
+
try {
|
|
99
|
+
await afterWrite();
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
logging_1.Logging.Error(`[dms] the ${actionName} guard's after-write work failed: ${String(error)}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Their routes read no body of their own: the guard is handed the one the
|
|
106
|
+
// confirmation sends, read here and kept from the route.
|
|
107
|
+
const CONFIRM_BODY_ACTIONS = new Set([
|
|
108
|
+
"delete",
|
|
109
|
+
"archive",
|
|
110
|
+
"restore",
|
|
111
|
+
]);
|
|
112
|
+
/** @internal */
|
|
113
|
+
const createGuardedRoute = (baseRoute, actionName) => {
|
|
114
|
+
const config = ACTION_GUARD_CONFIGS[actionName];
|
|
115
|
+
const readsConfirmBody = CONFIRM_BODY_ACTIONS.has(actionName);
|
|
116
|
+
return {
|
|
117
|
+
func: async function (ctx, params, ...routeArgs) {
|
|
118
|
+
const confirmBody = readsConfirmBody ? routeArgs.pop() : undefined;
|
|
119
|
+
const args = readsConfirmBody ? [confirmBody] : routeArgs;
|
|
120
|
+
const guard = getGuardForAction(this, actionName);
|
|
121
|
+
const afterWrite = guard
|
|
122
|
+
? await config.invokeGuard(this, ctx, params, args, guard, getIdField(this))
|
|
123
|
+
: undefined;
|
|
124
|
+
const result = await baseRoute.func.call(this, ctx, params, ...routeArgs);
|
|
125
|
+
if (afterWrite)
|
|
126
|
+
await runAfterWrite(afterWrite, actionName);
|
|
127
|
+
return result;
|
|
128
|
+
},
|
|
129
|
+
args: readsConfirmBody ? [...baseRoute.args, (0, interface_api_1.RawBody)()] : baseRoute.args,
|
|
130
|
+
method: baseRoute.method,
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
exports.createGuardedRoute = createGuardedRoute;
|
|
134
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/guards.ts"],"names":[],"mappings":";;;AAAA,6DAImC;AACnC,uEAA2E;AAC3E,+DAAyD;AACzD,uEAGwC;AAExC,gEAA6D;AAE7D,sDAAqD;AACrD,kCAAwC;AACxC,wCAAkD;AAClD,2CAA+C;AAI/C;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CACzB,GAAY,EACyB,EAAE;IACvC,MAAM,OAAO,GACX,GAAG,KAAK,SAAS;QACjB,GAAG,KAAK,IAAI;QACZ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,GAAG,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,gBAAgB;AACT,MAAM,cAAc,GAAG,CAAC,GAAY,EAA2B,EAAE;IACtE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtE,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAA8B,CAAC;IAC1E,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AALW,QAAA,cAAc,kBAKzB;AAiBF,MAAM,oBAAoB,GAAqD;IAC7E,IAAI,EAAE;QACJ,sEAAsE;QACtE,oEAAoE;QACpE,uCAAuC;QACvC,6CAA6C;QAC7C,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACnE,MAAM,EAAE,GAAG,MAAM,CAAE,MAAoC,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAgB,EACpC,UAAoC,EACpC,EAAE,EACF,OAAO,CACR,CAAC;YACF,IAAA,2BAAe,EAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;KACF;IACD,MAAM,EAAE;QACN,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,GAAG,GAAG,IAAA,4BAAgB,EACzB,MAAsC,CAAC,EAAuB,CAChE,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;gBACjC,GAAG;gBACH,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;KACF;IACD,OAAO,EAAE;QACP,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,GAAG,GAAG,IAAA,4BAAgB,EAAC,MAA2B,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;gBACjC,GAAG;gBACH,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;KACF;IACD,OAAO,EAAE;QACP,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,GAAG,GAAG,IAAA,4BAAgB,EAAC,MAA2B,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;gBACjC,GAAG;gBACH,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;KACF;IACD,GAAG,EAAE;QACH,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;KACF;CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,UAAmB,EACnB,UAAqC,EACX,EAAE;IAC5B,MAAM,IAAI,GAAG,IAAA,4BAAW,EACrB,UAA+C,CAAC,WAAW,EAC5D,oBAAa,CACd,CAAC;IACF,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAA6B,CAAC;AACzE,CAAC,CAAC;AAEF,gBAAgB;AACH,QAAA,eAAe,GAAG,kCAAa,CAAC,YAAY,CACvD,KAAK,WAAW,GAAG,EAAE,OAAO,EAAE,MAAM;IAClC,MAAM,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;QACpD,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,UAAmB,EAAU,EAAE;IACjD,MAAM,IAAI,GAAG,IAAA,4BAAW,EACrB,UAA+C,CAAC,WAAW,EAC5D,oBAAa,CACd,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,8BAAoB,CAAC;AACvD,CAAC,CAAC;AAEF,KAAK,UAAU,aAAa,CAC1B,UAAsB,EACtB,UAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iBAAO,CAAC,KAAK,CACX,aAAa,UAAU,qCAAqC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,yDAAyD;AACzD,MAAM,oBAAoB,GAAmC,IAAI,GAAG,CAAC;IACnE,QAAQ;IACR,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAEH,gBAAgB;AACT,MAAM,kBAAkB,GAAG,CAChC,SAAiC,EACjC,UAA6B,EACL,EAAE;IAC1B,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,KAAK,WAET,GAAmB,EACnB,MAAe,EACf,GAAG,SAAoB;YAEvB,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,KAAK;gBACtB,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CACtB,IAAI,EACJ,GAAG,EACH,MAAM,EACN,IAAI,EACJ,KAAK,EACL,UAAU,CAAC,IAAI,CAAC,CACjB;gBACH,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;YAC1E,IAAI,UAAU;gBAAE,MAAM,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5D,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,IAAA,uBAAO,GAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;QACxE,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC,CAAC;AAjCW,QAAA,kBAAkB,sBAiC7B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getControllerLocation = exports.getTableViewMetaFor = void 0;
|
|
4
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
5
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
6
|
+
const meta_1 = require("../meta");
|
|
7
|
+
/** @internal */
|
|
8
|
+
const getTableViewMetaFor = (target) => (0, interface_core_1.GetMetadata)(target.constructor, meta_1.TableViewMeta);
|
|
9
|
+
exports.getTableViewMetaFor = getTableViewMetaFor;
|
|
10
|
+
/** @internal */
|
|
11
|
+
const getControllerLocation = (target) => (0, interface_core_1.GetMetadata)(target.constructor, interface_api_1.ControllerMeta).location;
|
|
12
|
+
exports.getControllerLocation = getControllerLocation;
|
|
13
|
+
//# sourceMappingURL=meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/meta.ts"],"names":[],"mappings":";;;AAAA,6DAGmC;AACnC,+DAAyD;AACzD,kCAAwC;AAExC,gBAAgB;AACT,MAAM,mBAAmB,GAAG,CAAC,MAAe,EAAiB,EAAE,CACpE,IAAA,4BAAW,EACR,MAA2C,CAAC,WAAW,EACxD,oBAAa,CACd,CAAC;AAJS,QAAA,mBAAmB,uBAI5B;AAEJ,gBAAgB;AACT,MAAM,qBAAqB,GAAG,CAAC,MAAe,EAAU,EAAE,CAC/D,IAAA,4BAAW,EACR,MAA2C,CAAC,WAAW,EACxD,8BAAc,CACf,CAAC,QAAQ,CAAC;AAJA,QAAA,qBAAqB,yBAIrB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ControllerClass } from "@antelopejs/interface-api";
|
|
2
|
+
import type { ComponentBuilder } from "../../../component";
|
|
3
|
+
import type { TableViewTab } from "../options";
|
|
4
|
+
/**
|
|
5
|
+
* Declares on `builder` the navigation badges of the tabs that publish one.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare function declareTabNavBadges<T>(builder: ComponentBuilder<T>, tabs: TableViewTab[] | undefined, controller: ControllerClass): void;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The navigation badges a table view publishes: the counter of a tab declared
|
|
3
|
+
// with `navBadge`, counted on the server when the menu loads.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.declareTabNavBadges = declareTabNavBadges;
|
|
6
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
7
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
8
|
+
const interface_data_api_1 = require("@antelopejs/interface-data-api");
|
|
9
|
+
const components_1 = require("@antelopejs/interface-data-api/components");
|
|
10
|
+
const request_tenant_1 = require("../../../request-tenant");
|
|
11
|
+
const auth_1 = require("./auth");
|
|
12
|
+
const data_functions_1 = require("../data-functions");
|
|
13
|
+
const FILTER_QUERY_PREFIX = "filter_";
|
|
14
|
+
/** The list query a tab's hidden filter reads as (`filter_<key>=<mode>:<value>`). */
|
|
15
|
+
function tabFilterQuery(filter) {
|
|
16
|
+
if (!filter)
|
|
17
|
+
return {};
|
|
18
|
+
return {
|
|
19
|
+
[`${FILTER_QUERY_PREFIX}${filter.accessorKey}`]: `${filter.mode}:${filter.value ?? ""}`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function withQuery(ctx, query) {
|
|
23
|
+
const url = new URL(ctx.url);
|
|
24
|
+
url.search = "";
|
|
25
|
+
for (const [key, value] of Object.entries(query)) {
|
|
26
|
+
url.searchParams.set(key, value);
|
|
27
|
+
}
|
|
28
|
+
return { ...ctx, url };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The rows of `controller` the caller lists through `filter`, read with the
|
|
32
|
+
* caller's own `list` permission, as the table's tab counter is: it throws
|
|
33
|
+
* for a caller without it.
|
|
34
|
+
*/
|
|
35
|
+
async function countRows(controller, ctx, user, filter) {
|
|
36
|
+
const instance = await (0, interface_api_1.GetControllerInstance)(controller, ctx);
|
|
37
|
+
const permissions = await (0, auth_1.authorizeAction)(instance, auth_1.LIST_ACTION, user, (0, request_tenant_1.getRequestTenantId)(ctx));
|
|
38
|
+
const queryContext = withQuery(ctx, tabFilterQuery(filter));
|
|
39
|
+
const filters = components_1.Parameters.ExtractFilters(queryContext, (0, interface_data_api_1.GetDataControllerMeta)(instance));
|
|
40
|
+
const { total } = await (0, data_functions_1.countWithSearch)(instance, queryContext, { filters }, user, permissions);
|
|
41
|
+
return total;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The badge a `navBadge` tab publishes: a filter tab counts its table for its
|
|
45
|
+
* own page, a link tab counts its `countFrom` controller for the page it links
|
|
46
|
+
* to. A link tab given as a path, or counting from a location, cannot say
|
|
47
|
+
* which page or controller it means: it is warned about and publishes nothing.
|
|
48
|
+
*/
|
|
49
|
+
function navBadgeSourceOf(tab, controller) {
|
|
50
|
+
if (!tab.to) {
|
|
51
|
+
return {
|
|
52
|
+
count: (ctx, user) => countRows(controller, ctx, user, tab.filter),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const { to, countFrom } = tab;
|
|
56
|
+
if (typeof to === "string" || !countFrom || typeof countFrom === "string") {
|
|
57
|
+
logging_1.Logging.Warn(`[DMS] TableView on "${controller.name}": tab "${tab.id}" sets navBadge but links to a path or counts from a location; a navigation badge needs a page controller \`to\` and a data controller \`countFrom\`. It publishes nothing.`);
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
page: to,
|
|
62
|
+
count: (ctx, user) => countRows(countFrom, ctx, user, undefined),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Declares on `builder` the navigation badges of the tabs that publish one.
|
|
67
|
+
*
|
|
68
|
+
* @internal
|
|
69
|
+
*/
|
|
70
|
+
function declareTabNavBadges(builder, tabs, controller) {
|
|
71
|
+
for (const tab of tabs ?? []) {
|
|
72
|
+
if (!tab.navBadge)
|
|
73
|
+
continue;
|
|
74
|
+
const source = navBadgeSourceOf(tab, controller);
|
|
75
|
+
if (source)
|
|
76
|
+
builder.navBadge(source);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=nav-badges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-badges.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/nav-badges.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TABLE_VIEW_COMPONENT_NAME = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The frontend component `TableView` emits.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
exports.TABLE_VIEW_COMPONENT_NAME = "dms-table-view";
|
|
10
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/options.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACU,QAAA,yBAAyB,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.realtimeMutationListeners = void 0;
|
|
4
|
+
const owned_registry_1 = require("../../../utils/internal/owned-registry");
|
|
5
|
+
/** @internal */
|
|
6
|
+
exports.realtimeMutationListeners = new owned_registry_1.OwnedRegistry();
|
|
7
|
+
//# sourceMappingURL=realtime-listeners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-listeners.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/realtime-listeners.ts"],"names":[],"mappings":";;;AAAA,2EAAuE;AAGvE,gBAAgB;AACH,QAAA,yBAAyB,GACpC,IAAI,8BAAa,EAA4B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { DataControllerCallback } from "@antelopejs/interface-data-api";
|
|
2
|
+
import { type RealtimeMutationEventType } from "../realtime";
|
|
3
|
+
/** @internal */
|
|
4
|
+
export declare const REALTIME_PRESENCE_QUERY = "_presence";
|
|
5
|
+
/** @internal */
|
|
6
|
+
export declare const REALTIME_PRESENCE_ACQUIRE_VALUE = "1";
|
|
7
|
+
/**
|
|
8
|
+
* Bind the topics of the table view served at `controllerLocation` to the page
|
|
9
|
+
* it is placed on. Called from the builder's `onCreated`, so the module whose
|
|
10
|
+
* page it is owns them.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerTableViewPageTopics(pageId: string, controllerLocation: string): void;
|
|
15
|
+
type IdExtractor = (args: unknown[], result: unknown, idKey: string) => string[];
|
|
16
|
+
/** @internal */
|
|
17
|
+
export declare const extractFromResult: IdExtractor;
|
|
18
|
+
/** @internal */
|
|
19
|
+
export declare const extractSingleParamId: IdExtractor;
|
|
20
|
+
/** @internal */
|
|
21
|
+
export declare const extractMultiParamId: IdExtractor;
|
|
22
|
+
/** @internal */
|
|
23
|
+
export declare const extractBulkArgIds: IdExtractor;
|
|
24
|
+
/**
|
|
25
|
+
* Whether a write reports changing no row: its row rules refused every id,
|
|
26
|
+
* or none existed. Broadcasting its ids would have every session watching
|
|
27
|
+
* the table (the caller included) drop rows that are still there.
|
|
28
|
+
*/
|
|
29
|
+
/** @internal */
|
|
30
|
+
export declare const reportsNoChange: (result: unknown) => boolean;
|
|
31
|
+
interface MutationConfig {
|
|
32
|
+
eventType: RealtimeMutationEventType;
|
|
33
|
+
extractIds: IdExtractor;
|
|
34
|
+
}
|
|
35
|
+
/** @internal */
|
|
36
|
+
export declare function withRealtimeMutation<T extends DataControllerCallback>(config: MutationConfig, baseRoute: T): DataControllerCallback;
|
|
37
|
+
/** @internal */
|
|
38
|
+
export declare function withPresenceAcquire<T extends DataControllerCallback>(baseRoute: T): DataControllerCallback;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reportsNoChange = exports.extractBulkArgIds = exports.extractMultiParamId = exports.extractSingleParamId = exports.extractFromResult = exports.REALTIME_PRESENCE_ACQUIRE_VALUE = exports.REALTIME_PRESENCE_QUERY = void 0;
|
|
4
|
+
exports.registerTableViewPageTopics = registerTableViewPageTopics;
|
|
5
|
+
exports.withRealtimeMutation = withRealtimeMutation;
|
|
6
|
+
exports.withPresenceAcquire = withPresenceAcquire;
|
|
7
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
8
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
9
|
+
const auth_1 = require("../../../auth");
|
|
10
|
+
const realtime_1 = require("../../../realtime");
|
|
11
|
+
const meta_1 = require("./meta");
|
|
12
|
+
const realtime_listeners_1 = require("./realtime-listeners");
|
|
13
|
+
const realtime_2 = require("../realtime");
|
|
14
|
+
const REALTIME_SESSION_HEADER = "x-realtime-session";
|
|
15
|
+
/** @internal */
|
|
16
|
+
exports.REALTIME_PRESENCE_QUERY = "_presence";
|
|
17
|
+
/** @internal */
|
|
18
|
+
exports.REALTIME_PRESENCE_ACQUIRE_VALUE = "1";
|
|
19
|
+
const PARAMS_INDEX = 1;
|
|
20
|
+
const BULK_IDS_ARG_INDEX = 1;
|
|
21
|
+
/**
|
|
22
|
+
* Bind the topics of the table view served at `controllerLocation` to the page
|
|
23
|
+
* it is placed on. Called from the builder's `onCreated`, so the module whose
|
|
24
|
+
* page it is owns them.
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
function registerTableViewPageTopics(pageId, controllerLocation) {
|
|
29
|
+
(0, realtime_1.RegisterPageTopic)(pageId, (0, realtime_2.tableViewRowTopic)(controllerLocation));
|
|
30
|
+
(0, realtime_1.RegisterPageTopic)(pageId, (0, realtime_2.tableViewPresenceTopic)(controllerLocation));
|
|
31
|
+
}
|
|
32
|
+
async function dispatchRealtimeMutation(context) {
|
|
33
|
+
await realtime_2.internal.PublishMutation(context);
|
|
34
|
+
for (const listener of realtime_listeners_1.realtimeMutationListeners.values()) {
|
|
35
|
+
try {
|
|
36
|
+
await listener(context);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
logging_1.Logging.Error(`[DMS] Realtime mutation listener failed for '${context.controllerLocation}':`, error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** @internal */
|
|
44
|
+
const extractFromResult = (_args, result, idKey) => {
|
|
45
|
+
if (!result || typeof result !== "object")
|
|
46
|
+
return [];
|
|
47
|
+
const value = result[idKey];
|
|
48
|
+
return typeof value === "string" ? [value] : [];
|
|
49
|
+
};
|
|
50
|
+
exports.extractFromResult = extractFromResult;
|
|
51
|
+
/** @internal */
|
|
52
|
+
const extractSingleParamId = (args) => {
|
|
53
|
+
const params = args[PARAMS_INDEX];
|
|
54
|
+
return params?.id ? [params.id] : [];
|
|
55
|
+
};
|
|
56
|
+
exports.extractSingleParamId = extractSingleParamId;
|
|
57
|
+
/** @internal */
|
|
58
|
+
const extractMultiParamId = (args) => {
|
|
59
|
+
const params = args[PARAMS_INDEX];
|
|
60
|
+
if (!params?.id)
|
|
61
|
+
return [];
|
|
62
|
+
return Array.isArray(params.id) ? params.id : [params.id];
|
|
63
|
+
};
|
|
64
|
+
exports.extractMultiParamId = extractMultiParamId;
|
|
65
|
+
/** @internal */
|
|
66
|
+
const extractBulkArgIds = (args) => {
|
|
67
|
+
const ids = args[BULK_IDS_ARG_INDEX];
|
|
68
|
+
if (!ids)
|
|
69
|
+
return [];
|
|
70
|
+
return Array.isArray(ids) ? ids : [ids];
|
|
71
|
+
};
|
|
72
|
+
exports.extractBulkArgIds = extractBulkArgIds;
|
|
73
|
+
const isRealtimeEnabled = (target) => (0, meta_1.getTableViewMetaFor)(target).options.realtime !== false;
|
|
74
|
+
// The counts the bulk routes answer with: delete sends the number of deleted
|
|
75
|
+
// rows (or `{ deleted }`), archive and restore `{ archivedCount }` and
|
|
76
|
+
// `{ restoredCount }`.
|
|
77
|
+
const CHANGED_COUNT_KEYS = ["deleted", "archivedCount", "restoredCount"];
|
|
78
|
+
/**
|
|
79
|
+
* Whether a write reports changing no row: its row rules refused every id,
|
|
80
|
+
* or none existed. Broadcasting its ids would have every session watching
|
|
81
|
+
* the table (the caller included) drop rows that are still there.
|
|
82
|
+
*/
|
|
83
|
+
/** @internal */
|
|
84
|
+
const reportsNoChange = (result) => {
|
|
85
|
+
if (typeof result === "number")
|
|
86
|
+
return result === 0;
|
|
87
|
+
if (!result || typeof result !== "object")
|
|
88
|
+
return false;
|
|
89
|
+
const counts = CHANGED_COUNT_KEYS.map((key) => result[key]).filter((value) => typeof value === "number");
|
|
90
|
+
return counts.length > 0 && counts.every((count) => count === 0);
|
|
91
|
+
};
|
|
92
|
+
exports.reportsNoChange = reportsNoChange;
|
|
93
|
+
/** @internal */
|
|
94
|
+
function withRealtimeMutation(config, baseRoute) {
|
|
95
|
+
return {
|
|
96
|
+
method: baseRoute.method,
|
|
97
|
+
args: [
|
|
98
|
+
...baseRoute.args,
|
|
99
|
+
(0, interface_api_1.Parameter)(REALTIME_SESSION_HEADER, "header"),
|
|
100
|
+
(0, auth_1.AuthUser)(),
|
|
101
|
+
],
|
|
102
|
+
func: async function (...allArgs) {
|
|
103
|
+
const user = allArgs.pop();
|
|
104
|
+
const sessionId = allArgs.pop();
|
|
105
|
+
const result = await baseRoute.func.apply(this, allArgs);
|
|
106
|
+
if (!isRealtimeEnabled(this))
|
|
107
|
+
return result;
|
|
108
|
+
const meta = (0, meta_1.getTableViewMetaFor)(this);
|
|
109
|
+
const idKey = meta.options.rowIdKey || "_id";
|
|
110
|
+
const ids = config.extractIds(allArgs, result, idKey);
|
|
111
|
+
if (ids.length === 0 && config.eventType !== "created")
|
|
112
|
+
return result;
|
|
113
|
+
if (config.eventType !== "created" && (0, exports.reportsNoChange)(result)) {
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
await dispatchRealtimeMutation({
|
|
117
|
+
controllerLocation: (0, meta_1.getControllerLocation)(this),
|
|
118
|
+
rowIdKey: idKey,
|
|
119
|
+
eventType: config.eventType,
|
|
120
|
+
ids,
|
|
121
|
+
sessionId,
|
|
122
|
+
actor: { id: user._id, displayName: user.name || user.email },
|
|
123
|
+
});
|
|
124
|
+
return result;
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/** @internal */
|
|
129
|
+
function withPresenceAcquire(baseRoute) {
|
|
130
|
+
return {
|
|
131
|
+
method: baseRoute.method,
|
|
132
|
+
args: [
|
|
133
|
+
...baseRoute.args,
|
|
134
|
+
(0, interface_api_1.Parameter)(REALTIME_SESSION_HEADER, "header"),
|
|
135
|
+
(0, interface_api_1.Parameter)(exports.REALTIME_PRESENCE_QUERY, "query"),
|
|
136
|
+
(0, auth_1.AuthUser)(),
|
|
137
|
+
],
|
|
138
|
+
func: async function (...allArgs) {
|
|
139
|
+
const user = allArgs.pop();
|
|
140
|
+
const presenceFlag = allArgs.pop();
|
|
141
|
+
const sessionId = allArgs.pop();
|
|
142
|
+
const result = await baseRoute.func.apply(this, allArgs);
|
|
143
|
+
if (presenceFlag !== exports.REALTIME_PRESENCE_ACQUIRE_VALUE ||
|
|
144
|
+
!sessionId ||
|
|
145
|
+
!isRealtimeEnabled(this)) {
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
const params = allArgs[PARAMS_INDEX];
|
|
149
|
+
if (!params?.id)
|
|
150
|
+
return result;
|
|
151
|
+
const meta = (0, meta_1.getTableViewMetaFor)(this);
|
|
152
|
+
await realtime_2.internal.AcquirePresence({
|
|
153
|
+
controllerLocation: (0, meta_1.getControllerLocation)(this),
|
|
154
|
+
rowIdKey: meta.options.rowIdKey || "_id",
|
|
155
|
+
sessionId,
|
|
156
|
+
rowId: params.id,
|
|
157
|
+
actor: { id: user._id, displayName: user.name || user.email },
|
|
158
|
+
});
|
|
159
|
+
return result;
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=realtime.js.map
|