@vcmap/ui 5.0.0-rc.24 → 5.0.0-rc.25
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/build/build.js +132 -14
- package/build/buildHelpers.js +196 -92
- package/build/bundle.js +56 -0
- package/build/commonViteConfig.js +2 -2
- package/config/base.config.json +29 -2
- package/config/dev.config.json +29 -1
- package/config/www.config.json +81 -39
- package/dist/assets/@mdi/font/LICENSE +20 -0
- package/dist/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
- package/dist/assets/@mdi/font/css/materialdesignicons.min.e3f476.css +3 -0
- package/dist/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
- package/dist/assets/cesium/Workers/{AxisAlignedBoundingBox-85d9e53a.js → AxisAlignedBoundingBox-4140c51f.js} +1 -1
- package/dist/assets/cesium/Workers/{BoundingRectangle-1ee7eb47.js → BoundingRectangle-c714b156.js} +1 -1
- package/dist/assets/cesium/Workers/{BoxGeometry-3b2be784.js → BoxGeometry-6f3da43d.js} +1 -1
- package/dist/assets/cesium/Workers/{Color-f107c84d.js → Color-8a565ff2.js} +5 -5
- package/dist/assets/cesium/Workers/{CoplanarPolygonGeometryLibrary-78d71993.js → CoplanarPolygonGeometryLibrary-4b4d4096.js} +1 -1
- package/dist/assets/cesium/Workers/{CorridorGeometryLibrary-50d99b33.js → CorridorGeometryLibrary-7b94502b.js} +1 -1
- package/dist/assets/cesium/Workers/{CylinderGeometry-51b0d9bf.js → CylinderGeometry-ca070b87.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseGeometry-bcfb5d87.js → EllipseGeometry-122e51fa.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseGeometryLibrary-e94f8472.js → EllipseGeometryLibrary-4d326efc.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseOutlineGeometry-28e3a1bb.js → EllipseOutlineGeometry-16cc2bd7.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipsoidGeometry-b222fa63.js → EllipsoidGeometry-cb148ca2.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipsoidOutlineGeometry-38a3fb5b.js → EllipsoidOutlineGeometry-0fa10c79.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipsoidTangentPlane-8c89f28c.js → EllipsoidTangentPlane-6dd1b7af.js} +1 -1
- package/dist/assets/cesium/Workers/{FrustumGeometry-bdd3a04d.js → FrustumGeometry-ee73037c.js} +1 -1
- package/dist/assets/cesium/Workers/{GeometryAttribute-153115c5.js → GeometryAttribute-ff5b4fb1.js} +1 -1
- package/dist/assets/cesium/Workers/{GeometryPipeline-acb2399c.js → GeometryPipeline-1f8fbf05.js} +1 -1
- package/dist/assets/cesium/Workers/{IntersectionTests-271e513e.js → IntersectionTests-70d39ba9.js} +1 -1
- package/dist/assets/cesium/Workers/{OrientedBoundingBox-5e04e31f.js → OrientedBoundingBox-159cf1d6.js} +1 -1
- package/dist/assets/cesium/Workers/{PolygonGeometryLibrary-6762b65b.js → PolygonGeometryLibrary-076a5d25.js} +1 -1
- package/dist/assets/cesium/Workers/{PolygonPipeline-7dc7a431.js → PolygonPipeline-b9f2810a.js} +1 -1
- package/dist/assets/cesium/Workers/{PolylinePipeline-15fde655.js → PolylinePipeline-639192e0.js} +1 -1
- package/dist/assets/cesium/Workers/{PolylineVolumeGeometryLibrary-ba7dfed5.js → PolylineVolumeGeometryLibrary-b73549fb.js} +1 -1
- package/dist/assets/cesium/Workers/{PrimitivePipeline-68f0b9a2.js → PrimitivePipeline-10ede1b6.js} +1 -1
- package/dist/assets/cesium/Workers/{RectangleGeometryLibrary-8eaf23da.js → RectangleGeometryLibrary-c35a7356.js} +1 -1
- package/dist/assets/cesium/Workers/{TerrainEncoding-eb8a645a.js → TerrainEncoding-668d242f.js} +1 -1
- package/dist/assets/cesium/Workers/{Transforms-f6451f99.js → Transforms-a2a85221.js} +14 -0
- package/dist/assets/cesium/Workers/{WallGeometryLibrary-feef3109.js → WallGeometryLibrary-1938bf0d.js} +1 -1
- package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +1 -1
- package/dist/assets/cesium/Workers/combineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createBoxGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCircleGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCorridorGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCylinderGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipseGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createFrustumGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPlaneGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolygonGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolylineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createRectangleGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createSphereGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createVectorTileGeometries.js +1 -1
- package/dist/assets/cesium/Workers/createVectorTilePolygons.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
- package/dist/assets/cesium/Workers/createWallGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/package.js +1 -1
- package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
- package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +1 -1
- package/dist/assets/{cesium.253914.js → cesium.1457fa.js} +58656 -33170
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/core.47836f.js +19060 -0
- package/dist/assets/core.js +1 -1
- package/dist/assets/index-bb372634.js +1 -0
- package/dist/assets/{ol.1c946a.js → ol.9e4d23.js} +27344 -12118
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui.6ed89d.css +5 -0
- package/dist/assets/ui.6ed89d.js +13461 -0
- package/dist/assets/ui.js +1 -1
- package/dist/assets/{vue.c1ece7.js → vue.7327e4.js} +834 -598
- package/dist/assets/vue.js +2 -2
- package/dist/assets/{vuetify.6efa21.css → vuetify.d2131d.css} +1 -1
- package/dist/assets/{vuetify.6efa21.js → vuetify.d2131d.js} +343 -103
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +7 -6
- package/index.html +14 -6
- package/index.js +17 -2
- package/lib/olLib.js +19 -16
- package/package.json +15 -14
- package/plugins/@vcmap/create-link/fallbackCreateLink.vue +0 -2
- package/plugins/@vcmap/simple-graph/index.js +1 -1
- package/plugins/@vcmap-show-case/README.md +2 -1
- package/plugins/@vcmap-show-case/buttons-example/ButtonsExample.vue +55 -79
- package/plugins/@vcmap-show-case/category-tester/CategoriesExample.vue +135 -0
- package/plugins/@vcmap-show-case/category-tester/CollectionComponentOptions.vue +209 -0
- package/plugins/@vcmap-show-case/category-tester/index.js +19 -1
- package/plugins/@vcmap-show-case/collection-manager-example/CollectionManagerExample.vue +182 -0
- package/plugins/@vcmap-show-case/collection-manager-example/README.md +3 -0
- package/plugins/@vcmap-show-case/collection-manager-example/index.js +74 -0
- package/plugins/@vcmap-show-case/collection-manager-example/package.json +5 -0
- package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +20 -3
- package/plugins/@vcmap-show-case/switch-map-callback-example/README.md +21 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/SwitchMapCallback.js +47 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/config.json +3 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/index.js +34 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/package.json +5 -0
- package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +0 -1
- package/plugins/package.json +3 -1
- package/public/assets/@mdi/font/LICENSE +20 -0
- package/public/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
- package/public/assets/@mdi/font/css/materialdesignicons.min.css +3 -0
- package/public/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
- package/public/assets/favicon-128.png +0 -0
- package/public/assets/favicon-180.png +0 -0
- package/public/assets/favicon-192.png +0 -0
- package/public/assets/favicon-32.png +0 -0
- package/public/assets/logo-mobile.svg +9 -0
- package/public/assets/logo.svg +26 -0
- package/src/application/VcsApp.vue +34 -5
- package/src/application/VcsAttributions.vue +20 -5
- package/src/application/VcsAttributionsFooter.vue +0 -1
- package/src/application/VcsNavbar.vue +18 -13
- package/src/callback/activateLayersCallback.js +54 -0
- package/src/callback/applyLayerStyleCallback.js +63 -0
- package/src/callback/deactivateLayersCallback.js +54 -0
- package/src/callback/goToViewpointCallback.js +54 -0
- package/src/callback/vcsCallback.js +66 -0
- package/src/components/buttons/VcsActionButtonList.vue +28 -10
- package/src/components/buttons/VcsButton.vue +38 -100
- package/src/components/buttons/VcsFormButton.vue +6 -4
- package/src/components/buttons/VcsToolButton.vue +161 -0
- package/src/components/form-inputs-controls/VcsDatePicker.vue +19 -5
- package/src/components/form-inputs-controls/VcsFormSection.vue +0 -1
- package/src/components/form-inputs-controls/VcsSelect.vue +16 -2
- package/src/components/form-inputs-controls/VcsSlider.vue +72 -0
- package/src/components/form-inputs-controls/VcsTextField.vue +24 -13
- package/src/components/form-inputs-controls/VcsWizard.vue +13 -14
- package/src/components/form-inputs-controls/VcsWizardStep.vue +0 -1
- package/src/components/lists/VcsList.vue +3 -2
- package/src/components/lists/VcsTreeviewLeaf.vue +0 -1
- package/src/components/tables/VcsDataTable.vue +2 -4
- package/src/contentTree/LayerTree.vue +15 -9
- package/src/contentTree/contentTreeCollection.js +1 -1
- package/src/contentTree/contentTreeItem.js +22 -3
- package/src/contentTree/groupContentTreeItem.js +1 -0
- package/src/contentTree/layerContentTreeItem.js +4 -14
- package/src/contentTree/layerGroupContentTreeItem.js +4 -14
- package/src/contentTree/obliqueCollectionContentTreeItem.js +4 -0
- package/src/contentTree/viewpointContentTreeItem.js +1 -0
- package/src/featureInfo/BalloonComponent.vue +0 -1
- package/src/featureInfo/abstractFeatureInfoView.js +16 -1
- package/src/featureInfo/featureInfo.js +45 -56
- package/src/i18n/de.js +5 -2
- package/src/i18n/en.js +5 -2
- package/src/i18n/i18nCollection.js +1 -2
- package/src/init.js +1 -4
- package/src/legend/vcsLegend.vue +1 -1
- package/src/manager/buttonManager.js +15 -0
- package/src/manager/{categoryManager/CategoryComponent.vue → collectionManager/CollectionComponent.vue} +57 -66
- package/src/manager/collectionManager/CollectionComponentList.vue +62 -0
- package/src/manager/collectionManager/CollectionComponentProvider.vue +38 -0
- package/src/manager/collectionManager/CollectionManager.vue +43 -0
- package/src/manager/collectionManager/categoryManager.js +83 -0
- package/src/manager/collectionManager/collectionComponent.js +453 -0
- package/src/manager/collectionManager/collectionManager.js +432 -0
- package/src/manager/navbarManager.js +5 -4
- package/src/manager/toolbox/GroupToolboxComponent.vue +5 -7
- package/src/manager/toolbox/SelectToolboxComponent.vue +6 -9
- package/src/manager/toolbox/ToolboxManager.vue +4 -5
- package/src/manager/window/WindowComponentHeader.vue +0 -4
- package/src/navigation/mapNavigation.vue +34 -8
- package/src/navigation/overviewMap.js +7 -1
- package/src/notifier/notifierComponent.vue +0 -1
- package/src/pluginHelper.js +5 -0
- package/src/search/resultItem.vue +0 -1
- package/src/search/searchComponent.vue +7 -9
- package/src/styles/_theming.scss +2 -2
- package/src/styles/_typography.scss +2 -2
- package/src/styles/main.scss +8 -0
- package/src/styles/vcsFont.scss +1 -22
- package/src/vcsUiApp.js +76 -12
- package/src/vuePlugins/i18n.js +18 -19
- package/src/vuePlugins/vuetify.js +0 -1
- package/dist/assets/core.3a8205.js +0 -18426
- package/dist/assets/index.91ae2d55.js +0 -1
- package/dist/assets/ui.0025be.css +0 -5
- package/dist/assets/ui.0025be.js +0 -18534
- package/plugins/@vcmap-show-case/category-tester/Categories.vue +0 -291
- package/plugins/@vcmap-show-case/category-tester/Category.vue +0 -164
- package/src/manager/categoryManager/CategoryComponentList.vue +0 -82
- package/src/manager/categoryManager/CategoryManager.vue +0 -47
- package/src/manager/categoryManager/categoryManager.js +0 -633
- package/start.js +0 -9
- /package/{src/assets/favicon-128.png → dist/assets/favicon-128.4c4ce5.png} +0 -0
- /package/{src/assets/favicon-180.png → dist/assets/favicon-180.5b99c0.png} +0 -0
- /package/{src/assets/favicon-192.png → dist/assets/favicon-192.0e205e.png} +0 -0
- /package/{src/assets/favicon-32.png → dist/assets/favicon-32.6b9add.png} +0 -0
- /package/dist/assets/{favicon.decf54cc.svg → favicon.d5ec97.svg} +0 -0
- /package/dist/assets/font/{TitilliumWeb-Regular.woff2 → TitilliumWeb-Regular.9ca076.woff2} +0 -0
- /package/{src/assets/logo-mobile.svg → dist/assets/logo-mobile.2d10a6.svg} +0 -0
- /package/{src/assets/logo.svg → dist/assets/logo.27089a.svg} +0 -0
- /package/{src → public}/assets/favicon.svg +0 -0
- /package/{src → public}/assets/font/OFL.txt +0 -0
- /package/{src → public}/assets/font/TitilliumWeb-Regular.woff2 +0 -0
package/src/i18n/de.js
CHANGED
@@ -14,6 +14,7 @@ const messages = {
|
|
14
14
|
},
|
15
15
|
content: {
|
16
16
|
title: 'Inhalte',
|
17
|
+
empty: 'Aktuell sind keine Einträge verfügbar.',
|
17
18
|
search: {
|
18
19
|
placeholder: 'Elemente suchen',
|
19
20
|
},
|
@@ -41,8 +42,10 @@ const messages = {
|
|
41
42
|
homeButton: 'Springe zur Startansicht',
|
42
43
|
},
|
43
44
|
categoryManager: {
|
44
|
-
title: '
|
45
|
-
tooltip: '
|
45
|
+
title: 'Mein Arbeitsbereich',
|
46
|
+
tooltip: 'Mein Arbeitsbereich',
|
47
|
+
},
|
48
|
+
collectionManager: {
|
46
49
|
more: 'Weitere anzeigen...',
|
47
50
|
empty: 'Es gibt noch keine Einträge.',
|
48
51
|
},
|
package/src/i18n/en.js
CHANGED
@@ -14,6 +14,7 @@ const messages = {
|
|
14
14
|
},
|
15
15
|
content: {
|
16
16
|
title: 'Content',
|
17
|
+
empty: 'Currently there are no entries available.',
|
17
18
|
search: {
|
18
19
|
placeholder: 'Search elements',
|
19
20
|
},
|
@@ -41,8 +42,10 @@ const messages = {
|
|
41
42
|
homeButton: 'Go to starting view',
|
42
43
|
},
|
43
44
|
categoryManager: {
|
44
|
-
title: '
|
45
|
-
tooltip: '
|
45
|
+
title: 'My Workspace',
|
46
|
+
tooltip: 'My Workspace',
|
47
|
+
},
|
48
|
+
collectionManager: {
|
46
49
|
more: 'Show more...',
|
47
50
|
empty: 'There are no entries yet.',
|
48
51
|
},
|
@@ -103,8 +103,7 @@ class I18nCollection extends IndexedCollection {
|
|
103
103
|
async parseItems(configArray, moduleId) {
|
104
104
|
if (Array.isArray(configArray)) {
|
105
105
|
configArray.forEach((item) => {
|
106
|
-
item[moduleIdSymbol]
|
107
|
-
this.add(item);
|
106
|
+
this.add({ ...item, [moduleIdSymbol]: moduleId });
|
108
107
|
});
|
109
108
|
}
|
110
109
|
}
|
package/src/init.js
CHANGED
@@ -3,7 +3,6 @@ import { check, checkMaybe, is } from '@vcsuite/check';
|
|
3
3
|
import { VcsModule } from '@vcmap/core';
|
4
4
|
import VcsAppComponentWrapper from './application/vcsAppWrapper.vue';
|
5
5
|
import { vuetify } from './vuePlugins/vuetify.js';
|
6
|
-
import { createVueI18n, setupI18n } from './vuePlugins/i18n.js';
|
7
6
|
import VcsUiApp from './vcsUiApp.js';
|
8
7
|
|
9
8
|
/**
|
@@ -45,10 +44,9 @@ export const VcsUiAppConfigPattern = {
|
|
45
44
|
export default async function initApp(mountTarget) {
|
46
45
|
check(mountTarget, String);
|
47
46
|
const app = new VcsUiApp();
|
48
|
-
const i18n = createVueI18n();
|
49
47
|
new Vue({
|
50
48
|
vuetify,
|
51
|
-
i18n,
|
49
|
+
i18n: app.vueI18n,
|
52
50
|
render: (h) =>
|
53
51
|
h(VcsAppComponentWrapper, {
|
54
52
|
props: {
|
@@ -57,7 +55,6 @@ export default async function initApp(mountTarget) {
|
|
57
55
|
}),
|
58
56
|
}).$mount(mountTarget);
|
59
57
|
|
60
|
-
setupI18n(app, i18n);
|
61
58
|
return app;
|
62
59
|
}
|
63
60
|
|
package/src/legend/vcsLegend.vue
CHANGED
@@ -5,10 +5,20 @@ import { check, checkMaybe } from '@vcsuite/check';
|
|
5
5
|
import { vcsAppSymbol } from '../pluginHelper.js';
|
6
6
|
import { ActionPattern } from '../components/lists/VcsActionList.vue';
|
7
7
|
|
8
|
+
/**
|
9
|
+
* @param {number} weightA
|
10
|
+
* @param {number} weightB
|
11
|
+
* @returns {number}
|
12
|
+
*/
|
13
|
+
export function sortByWeight(weightA, weightB) {
|
14
|
+
return weightB - weightA;
|
15
|
+
}
|
16
|
+
|
8
17
|
/**
|
9
18
|
* @typedef ButtonComponentOptions
|
10
19
|
* @property {string} [id] Optional ID, If not provided an uuid will be generated.
|
11
20
|
* @property {VcsAction} action Action performed by button.
|
21
|
+
* @property {number} [weight=0] Optional weight affecting the displaying order
|
12
22
|
*/
|
13
23
|
|
14
24
|
/**
|
@@ -16,6 +26,7 @@ import { ActionPattern } from '../components/lists/VcsActionList.vue';
|
|
16
26
|
* @property {string} id
|
17
27
|
* @property {string|vcsAppSymbol} owner
|
18
28
|
* @property {VcsAction} action
|
29
|
+
* @property {number} weight
|
19
30
|
*/
|
20
31
|
|
21
32
|
/**
|
@@ -86,6 +97,7 @@ class ButtonManager {
|
|
86
97
|
*/
|
87
98
|
add(buttonComponentOptions, owner) {
|
88
99
|
checkMaybe(buttonComponentOptions.id, String);
|
100
|
+
checkMaybe(buttonComponentOptions.weight, Number);
|
89
101
|
check(buttonComponentOptions.action, ActionPattern);
|
90
102
|
check(owner, [String, vcsAppSymbol]);
|
91
103
|
|
@@ -109,6 +121,9 @@ class ButtonManager {
|
|
109
121
|
get action() {
|
110
122
|
return reactive(buttonComponentOptions.action);
|
111
123
|
},
|
124
|
+
get weight() {
|
125
|
+
return buttonComponentOptions.weight || 0;
|
126
|
+
},
|
112
127
|
};
|
113
128
|
|
114
129
|
this._buttonComponents.set(id, buttonComponent);
|
@@ -1,47 +1,42 @@
|
|
1
1
|
<template>
|
2
|
-
<v-expansion-panel
|
3
|
-
<v-expansion-panel-header hide-actions>
|
2
|
+
<v-expansion-panel @change="active = !active">
|
3
|
+
<v-expansion-panel-header hide-actions class="px-2">
|
4
4
|
<template #default="{ open }">
|
5
5
|
<div class="d-flex justify-space-between">
|
6
6
|
<div class="d-flex align-center">
|
7
7
|
<v-icon class="mr-1" :class="{ rotate: !open }">
|
8
8
|
mdi-chevron-down
|
9
9
|
</v-icon>
|
10
|
-
{{ $t(
|
10
|
+
{{ $t(title) }}
|
11
11
|
</div>
|
12
|
-
<VcsActionButtonList
|
13
|
-
v-if="category.actions?.length > 0"
|
14
|
-
:actions="category.actions"
|
15
|
-
small
|
16
|
-
class="float-end"
|
17
|
-
/>
|
12
|
+
<VcsActionButtonList v-if="actions?.length > 0" :actions="actions" />
|
18
13
|
</div>
|
19
14
|
</template>
|
20
15
|
</v-expansion-panel-header>
|
21
16
|
<v-expansion-panel-content class="pb-1">
|
22
17
|
<vcs-list
|
23
|
-
:items="
|
24
|
-
:draggable="
|
25
|
-
:selectable="
|
26
|
-
:single-select="
|
18
|
+
:items="items.slice(0, 10)"
|
19
|
+
:draggable="draggable"
|
20
|
+
:selectable="selectable"
|
21
|
+
:single-select="singleSelect"
|
27
22
|
v-model="selection"
|
28
23
|
:show-title="false"
|
29
|
-
@
|
24
|
+
@item-moved="move"
|
30
25
|
/>
|
31
|
-
<v-sheet v-if="
|
32
|
-
<VcsButton @click="
|
33
|
-
{{ $t('
|
26
|
+
<v-sheet v-if="items.length > 10" class="ma-2 pl-2">
|
27
|
+
<VcsButton @click="openCollectionComponentList">
|
28
|
+
{{ $t('collectionManager.more') }}
|
34
29
|
</VcsButton>
|
35
30
|
</v-sheet>
|
36
|
-
<v-sheet v-else-if="
|
37
|
-
{{ $t('
|
31
|
+
<v-sheet v-else-if="items.length === 0" class="ma-2 pl-2">
|
32
|
+
{{ $t('collectionManager.empty') }}
|
38
33
|
</v-sheet>
|
39
34
|
</v-expansion-panel-content>
|
40
35
|
</v-expansion-panel>
|
41
36
|
</template>
|
42
37
|
|
43
38
|
<script>
|
44
|
-
import {
|
39
|
+
import { inject, ref } from 'vue';
|
45
40
|
import {
|
46
41
|
VIcon,
|
47
42
|
VExpansionPanel,
|
@@ -54,11 +49,15 @@
|
|
54
49
|
import VcsActionButtonList from '../../components/buttons/VcsActionButtonList.vue';
|
55
50
|
import VcsButton from '../../components/buttons/VcsButton.vue';
|
56
51
|
import { vcsAppSymbol } from '../../pluginHelper.js';
|
57
|
-
import CategoryComponentList from './CategoryComponentList.vue';
|
58
52
|
import { WindowSlot } from '../window/windowManager.js';
|
53
|
+
import CollectionComponentList from './CollectionComponentList.vue';
|
59
54
|
|
55
|
+
/**
|
56
|
+
* Renders the first ten items of a collectionComponent in a List. Uses CollectionComponentList to render more items.
|
57
|
+
* The collectionComponent must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
58
|
+
*/
|
60
59
|
export default {
|
61
|
-
name: '
|
60
|
+
name: 'CollectionComponent',
|
62
61
|
components: {
|
63
62
|
VcsActionButtonList,
|
64
63
|
VcsButton,
|
@@ -69,45 +68,37 @@
|
|
69
68
|
VSheet,
|
70
69
|
VIcon,
|
71
70
|
},
|
72
|
-
|
73
|
-
category: {
|
74
|
-
type: Object,
|
75
|
-
required: true,
|
76
|
-
},
|
77
|
-
},
|
78
|
-
setup(props) {
|
71
|
+
setup() {
|
79
72
|
/** @type {VcsUiApp} */
|
80
73
|
const app = inject('vcsApp');
|
81
|
-
const windowId = `${props.category.id}-category-list`;
|
82
|
-
const active = ref(false);
|
83
|
-
|
84
|
-
const selection = computed({
|
85
|
-
get() {
|
86
|
-
return props.category.selection;
|
87
|
-
},
|
88
|
-
set(value) {
|
89
|
-
// eslint-disable-next-line vue/no-mutating-props
|
90
|
-
props.category.selection = value;
|
91
|
-
},
|
92
|
-
});
|
93
|
-
|
94
|
-
const { collection } = app.categories.getByKey(
|
95
|
-
props.category.categoryName,
|
96
|
-
);
|
97
74
|
/**
|
98
|
-
*
|
99
|
-
* @type {ComputedRef<number>}
|
75
|
+
* @type {CollectionComponent}
|
100
76
|
*/
|
101
|
-
const
|
102
|
-
|
103
|
-
|
104
|
-
);
|
105
|
-
});
|
77
|
+
const collectionComponent = inject('collectionComponent');
|
78
|
+
const windowId = `${collectionComponent.id}-list`;
|
79
|
+
const active = ref(false);
|
106
80
|
|
107
81
|
return {
|
108
|
-
|
82
|
+
title: collectionComponent.title,
|
83
|
+
items: collectionComponent.items,
|
84
|
+
selection: collectionComponent.selection,
|
85
|
+
draggable: collectionComponent.draggable,
|
86
|
+
selectable: collectionComponent.selectable,
|
87
|
+
singleSelect: collectionComponent.singleSelect,
|
88
|
+
actions: collectionComponent.getActions(),
|
89
|
+
move({ item, targetIndex }) {
|
90
|
+
if (collectionComponent.collection instanceof IndexedCollection) {
|
91
|
+
const collectionItem = collectionComponent.collection.getByKey(
|
92
|
+
item.name,
|
93
|
+
);
|
94
|
+
collectionComponent.collection.moveTo(
|
95
|
+
collectionItem,
|
96
|
+
targetIndex, // collectionItemOffset.value for paginated lists?
|
97
|
+
);
|
98
|
+
}
|
99
|
+
},
|
109
100
|
active,
|
110
|
-
|
101
|
+
openCollectionComponentList() {
|
111
102
|
if (app.windowManager.has(windowId)) {
|
112
103
|
setTimeout(() => {
|
113
104
|
app.windowManager.bringWindowToTop(windowId);
|
@@ -116,13 +107,12 @@
|
|
116
107
|
app.windowManager.add(
|
117
108
|
{
|
118
109
|
id: windowId,
|
119
|
-
component:
|
110
|
+
component: CollectionComponentList,
|
120
111
|
props: {
|
121
|
-
category: props.category,
|
122
112
|
windowId,
|
123
113
|
},
|
124
114
|
provides: {
|
125
|
-
|
115
|
+
collectionComponent,
|
126
116
|
},
|
127
117
|
slot: WindowSlot.DYNAMIC_LEFT,
|
128
118
|
},
|
@@ -130,15 +120,6 @@
|
|
130
120
|
);
|
131
121
|
}
|
132
122
|
},
|
133
|
-
move({ item, targetIndex }) {
|
134
|
-
if (collection instanceof IndexedCollection) {
|
135
|
-
const collectionItem = collection.getByKey(item.id);
|
136
|
-
collection.moveTo(
|
137
|
-
collectionItem,
|
138
|
-
targetIndex + collectionItemOffset.value,
|
139
|
-
);
|
140
|
-
}
|
141
|
-
},
|
142
123
|
};
|
143
124
|
},
|
144
125
|
};
|
@@ -148,4 +129,14 @@
|
|
148
129
|
.rotate {
|
149
130
|
transform: rotate(-90deg);
|
150
131
|
}
|
132
|
+
.v-icon {
|
133
|
+
font-size: 16px;
|
134
|
+
}
|
135
|
+
::v-deep {
|
136
|
+
.v-list {
|
137
|
+
.v-list-item {
|
138
|
+
padding: 4px 8px 4px 28px;
|
139
|
+
}
|
140
|
+
}
|
141
|
+
}
|
151
142
|
</style>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<template>
|
2
|
+
<vcs-list
|
3
|
+
:items="items"
|
4
|
+
:draggable="draggable"
|
5
|
+
:selectable="selectable"
|
6
|
+
:single-select="singleSelect"
|
7
|
+
v-model="selection"
|
8
|
+
:title="title"
|
9
|
+
@item-moved="move"
|
10
|
+
/>
|
11
|
+
</template>
|
12
|
+
|
13
|
+
<script>
|
14
|
+
import { inject } from 'vue';
|
15
|
+
import { IndexedCollection } from '@vcmap/core';
|
16
|
+
import VcsList from '../../components/lists/VcsList.vue';
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Renders the items of a CollectionComponent in a List.
|
20
|
+
* The collectionComponent must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
21
|
+
*/
|
22
|
+
export default {
|
23
|
+
name: 'CollectionComponentList',
|
24
|
+
components: {
|
25
|
+
VcsList,
|
26
|
+
},
|
27
|
+
props: {
|
28
|
+
windowId: {
|
29
|
+
type: String,
|
30
|
+
required: true,
|
31
|
+
},
|
32
|
+
},
|
33
|
+
setup() {
|
34
|
+
/**
|
35
|
+
* @type {CollectionComponent}
|
36
|
+
*/
|
37
|
+
const collectionComponent = inject('collectionComponent');
|
38
|
+
|
39
|
+
return {
|
40
|
+
title: collectionComponent.title,
|
41
|
+
items: collectionComponent.items,
|
42
|
+
selection: collectionComponent.selection,
|
43
|
+
draggable: collectionComponent.draggable,
|
44
|
+
selectable: collectionComponent.selectable,
|
45
|
+
singleSelect: collectionComponent.singleSelect,
|
46
|
+
move({ item, targetIndex }) {
|
47
|
+
if (collectionComponent.collection instanceof IndexedCollection) {
|
48
|
+
const collectionItem = collectionComponent.collection.getByKey(
|
49
|
+
item.id,
|
50
|
+
);
|
51
|
+
collectionComponent.collection.moveTo(
|
52
|
+
collectionItem,
|
53
|
+
targetIndex, // collectionItemOffset.value for paginated lists?
|
54
|
+
);
|
55
|
+
}
|
56
|
+
},
|
57
|
+
};
|
58
|
+
},
|
59
|
+
};
|
60
|
+
</script>
|
61
|
+
|
62
|
+
<style lang="scss" scoped></style>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="w-full">
|
3
|
+
<slot>
|
4
|
+
<collection-component />
|
5
|
+
</slot>
|
6
|
+
</div>
|
7
|
+
</template>
|
8
|
+
|
9
|
+
<script>
|
10
|
+
import { inject, provide } from 'vue';
|
11
|
+
import CollectionComponent from './CollectionComponent.vue';
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Provides a CollectionComponent of a CollectionManager.
|
15
|
+
* The collectionManager must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
16
|
+
* @vue-data {slot} [#default] - Slot rendering collection component.
|
17
|
+
*/
|
18
|
+
export default {
|
19
|
+
name: 'CollectionManagerProvider',
|
20
|
+
components: {
|
21
|
+
CollectionComponent,
|
22
|
+
},
|
23
|
+
props: {
|
24
|
+
componentId: {
|
25
|
+
type: String,
|
26
|
+
required: true,
|
27
|
+
},
|
28
|
+
},
|
29
|
+
setup(props) {
|
30
|
+
/**
|
31
|
+
* @type {CollectionManager}
|
32
|
+
*/
|
33
|
+
const collectionManager = inject('collectionManager');
|
34
|
+
const collectionComponent = collectionManager.get(props.componentId);
|
35
|
+
provide('collectionComponent', collectionComponent);
|
36
|
+
},
|
37
|
+
};
|
38
|
+
</script>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<template>
|
2
|
+
<v-container class="pa-0">
|
3
|
+
<v-expansion-panels
|
4
|
+
accordion
|
5
|
+
multiple
|
6
|
+
v-if="componentIds.length > 0"
|
7
|
+
class="rounded-0"
|
8
|
+
>
|
9
|
+
<collection-component-provider
|
10
|
+
v-for="componentId in componentIds"
|
11
|
+
:component-id="componentId"
|
12
|
+
:key="componentId"
|
13
|
+
/>
|
14
|
+
</v-expansion-panels>
|
15
|
+
</v-container>
|
16
|
+
</template>
|
17
|
+
|
18
|
+
<script>
|
19
|
+
import { inject, ref } from 'vue';
|
20
|
+
import { VExpansionPanels, VContainer } from 'vuetify/lib';
|
21
|
+
import CollectionComponentProvider from './CollectionComponentProvider.vue';
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Renders the all managed CollectionComponents of a CollectionManager.
|
25
|
+
* The collectionManager must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
26
|
+
*/
|
27
|
+
export default {
|
28
|
+
name: 'CollectionManager',
|
29
|
+
components: {
|
30
|
+
VExpansionPanels,
|
31
|
+
VContainer,
|
32
|
+
CollectionComponentProvider,
|
33
|
+
},
|
34
|
+
setup() {
|
35
|
+
const collectionManager = inject('collectionManager');
|
36
|
+
const componentIds = ref(collectionManager.componentIds);
|
37
|
+
|
38
|
+
return {
|
39
|
+
componentIds,
|
40
|
+
};
|
41
|
+
},
|
42
|
+
};
|
43
|
+
</script>
|
@@ -0,0 +1,83 @@
|
|
1
|
+
import { moduleIdSymbol } from '@vcmap/core';
|
2
|
+
import { vcsAppSymbol } from '../../pluginHelper.js';
|
3
|
+
import CollectionManager from './collectionManager.js';
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Manages all requested category collections.
|
7
|
+
* Provides an API to add/remove collectionsComponents.
|
8
|
+
* @implements {VcsComponentManager<CollectionComponent, CollectionComponentOptions>}
|
9
|
+
* @extends CollectionManager
|
10
|
+
*/
|
11
|
+
class CategoryManager extends CollectionManager {
|
12
|
+
/**
|
13
|
+
* @param {import("@vcmap/ui").VcsUiApp} app
|
14
|
+
*/
|
15
|
+
/**
|
16
|
+
* @param {import("@vcmap/ui").VcsUiApp} app
|
17
|
+
*/
|
18
|
+
constructor(app) {
|
19
|
+
super();
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @type {import("@vcmap/ui").VcsUiApp}
|
23
|
+
* @private
|
24
|
+
*/
|
25
|
+
this._app = app;
|
26
|
+
/**
|
27
|
+
* @type {string}
|
28
|
+
* @private
|
29
|
+
*/
|
30
|
+
this._dynamicModuleId = this._app.dynamicModuleId;
|
31
|
+
|
32
|
+
this._dynamicModuleIdFilter = (item) =>
|
33
|
+
item[moduleIdSymbol] === this._dynamicModuleId;
|
34
|
+
|
35
|
+
this.addFilterFunction(this._dynamicModuleIdFilter, vcsAppSymbol);
|
36
|
+
|
37
|
+
this._categoryListeners = [
|
38
|
+
this._app.dynamicModuleIdChanged.addEventListener((id) => {
|
39
|
+
this._dynamicModuleId = id;
|
40
|
+
this.reset();
|
41
|
+
}),
|
42
|
+
this._app.categories.removed.addEventListener((category) => {
|
43
|
+
const collectionComponents = this.getCollection(category.collection);
|
44
|
+
collectionComponents.forEach(({ id }) => this.remove(id));
|
45
|
+
}),
|
46
|
+
];
|
47
|
+
}
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Requests a new or existing category and adds its collection to this manager.
|
51
|
+
* The collectionComponent's id is always the category's name.
|
52
|
+
* Returns requested category and its corresponding collectionComponent.
|
53
|
+
* @param {import("@vcmap/core").CategoryOptions} options
|
54
|
+
* @param {string|symbol} owner
|
55
|
+
* @param {CollectionComponentUiOptions} collectionComponentOptions
|
56
|
+
* @return {{ collectionComponent:CollectionComponent,category:import("@vcmap/core").Category }}
|
57
|
+
*/
|
58
|
+
async requestCategory(options, owner, collectionComponentOptions = {}) {
|
59
|
+
const category = await this._app.categories.requestCategory(options);
|
60
|
+
const id = category.name;
|
61
|
+
if (this.has(id)) {
|
62
|
+
const collectionComponent = this.get(id);
|
63
|
+
return { collectionComponent, category };
|
64
|
+
}
|
65
|
+
const collectionComponent = this.add(
|
66
|
+
{
|
67
|
+
...collectionComponentOptions,
|
68
|
+
id,
|
69
|
+
title: collectionComponentOptions.title ?? category.title ?? id,
|
70
|
+
collection: category.collection,
|
71
|
+
},
|
72
|
+
owner,
|
73
|
+
);
|
74
|
+
return { collectionComponent, category };
|
75
|
+
}
|
76
|
+
|
77
|
+
destroy() {
|
78
|
+
super.destroy();
|
79
|
+
this._categoryListeners.forEach((cb) => cb());
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
export default CategoryManager;
|