From 4c7847969693de6548b384a73f518c85df4b9c43 Mon Sep 17 00:00:00 2001 From: Carifio24 Date: Tue, 24 Jun 2025 13:19:31 -0400 Subject: [PATCH 1/9] Add folder view component. --- package.json | 1 + src/components/FolderView.vue | 199 ++++++++++++++++++++++++++++++++++ src/types.ts | 14 +++ yarn.lock | 3 +- 4 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 src/components/FolderView.vue diff --git a/package.json b/package.json index 1757fcd2..6cc2e178 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@kyvg/vue3-notification": "^2.9.1", "@mdi/font": "^7.4.47", "@vueuse/core": "^13.1.0", + "@wwtelescope/engine": "^7.30.1", "@wwtelescope/engine-pinia": "^0.9.0", "leaflet": "^1.9.4", "pinia": "~2.1.7", diff --git a/src/components/FolderView.vue b/src/components/FolderView.vue new file mode 100644 index 00000000..3ae9493a --- /dev/null +++ b/src/components/FolderView.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/src/types.ts b/src/types.ts index cac41def..ee7a8590 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,6 @@ import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; import { CircleMarkerOptions, TileLayerOptions } from "leaflet"; +import { Folder } from "@wwtelescope/engine"; import { engineStore } from "@wwtelescope/engine-pinia"; import { MapBoxFeatureCollection } from "./mapbox"; @@ -394,3 +395,16 @@ export interface ShareButtonProps { /** The ARIA label for the button */ ariaLabel?: string; } + +export interface FolderViewProps { + rootFolder: Folder; + flexDirection: "row" | "column"; + gap?: string; + backgroundColor?: string; + thumbnailColor?: string; + highlightColor?: string; + textColor?: string; + startExpanded?: boolean; +} + +export type ItemSelectionType = "click" | "dblclick" | "keyup" | "folder"; diff --git a/yarn.lock b/yarn.lock index d62959ed..3f24bc14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -555,6 +555,7 @@ __metadata: "@vue/eslint-config-typescript": ^12.0.0 "@vueuse/core": ^13.1.0 "@wdns/vue-code-block": ^2.3.5 + "@wwtelescope/engine": ^7.30.1 "@wwtelescope/engine-pinia": ^0.9.0 copy-webpack-plugin: ^12.0.2 css-loader: ^7.1.1 @@ -3001,7 +3002,7 @@ __metadata: languageName: node linkType: hard -"@wwtelescope/engine@npm:^7.29.1": +"@wwtelescope/engine@npm:^7.29.1, @wwtelescope/engine@npm:^7.30.1": version: 7.30.1 resolution: "@wwtelescope/engine@npm:7.30.1" dependencies: From f5fba90e611742a00609549ef70839fdd3bacb11 Mon Sep 17 00:00:00 2001 From: Carifio24 Date: Tue, 24 Jun 2025 14:01:11 -0400 Subject: [PATCH 2/9] Add Storybook story for folder view. --- src/index.ts | 2 ++ src/stories/FolderView.stories.ts | 53 +++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/stories/FolderView.stories.ts diff --git a/src/index.ts b/src/index.ts index 5917d6e9..b67a74d7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,7 @@ import { useWWTKeyboardControls } from "./composables/wwtKeyboard"; import CreditLogos from "./components/CreditLogos.vue"; import DateTimePicker from "./components/DateTimePicker.vue"; +import FolderView from "./components/FolderView.vue"; import FundingAcknowledgement from "./components/FundingAcknowledgement.vue"; import Gallery from "./components/Gallery.vue"; import GeolocationButton from "./components/GeolocationButton.vue"; @@ -38,6 +39,7 @@ export { CreditLogos, DateTimePicker, + FolderView, FundingAcknowledgement, Gallery, GeolocationButton, diff --git a/src/stories/FolderView.stories.ts b/src/stories/FolderView.stories.ts new file mode 100644 index 00000000..453dbbd2 --- /dev/null +++ b/src/stories/FolderView.stories.ts @@ -0,0 +1,53 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + +import { Meta, StoryContext, StoryObj } from "@storybook/vue3"; +import { FolderView, FolderViewProps } from ".."; +import { Folder } from "@wwtelescope/engine"; +import { engineStore } from "@wwtelescope/engine-pinia"; + +interface LoadedData { + loaded: { + folder: Folder; + } +} + +const meta: Meta = { + component: FolderView, + tags: ["autodocs"], + title: "Vue Toolkit/Components/Folder View", +}; + +export default meta; +type Story = StoryObj; +type Context = StoryContext; + +const store = engineStore(); + +export const Primary: Story = { + loaders: [ + async() => ({ + folder: await store.loadImageCollection({ + url: "https://data1.wwtassets.org/packages/2022/07_jwst/smacs0723/jwst_smacs0723.wtml", + loadChildFolders: false, + }) + }) + ], + render: async (args: FolderViewProps, context: Context) => { + return { + components: { FolderView }, + template: ``, + setup() { + return { args, folder: context.loaded.folder }; + } + }; + }, + args: { + flexDirection: "column", + gap: "10px", + backgroundColor: "black", + thumbnailColor: "black", + highlightColor: "dodgerblue", + textColor: "white", + startExpanded: true, + } +}; From dabdd5bde7374dd6965e958f1e8c30ee9b4b2b69 Mon Sep 17 00:00:00 2001 From: Carifio24 Date: Mon, 30 Jun 2025 02:44:13 -0400 Subject: [PATCH 3/9] Fix some issues with folder navigation functionality. Allow specifying folder via a URL prop. --- src/components/FolderView.vue | 91 ++++++++++++++++++++++++++----- src/stories/FolderView.stories.ts | 34 +++++++----- src/types.ts | 8 ++- 3 files changed, 103 insertions(+), 30 deletions(-) diff --git a/src/components/FolderView.vue b/src/components/FolderView.vue index 3ae9493a..0249114d 100644 --- a/src/components/FolderView.vue +++ b/src/components/FolderView.vue @@ -30,8 +30,7 @@ :select-item="selectItem" >
- -
+ +
{{item.get_name()}}
@@ -55,9 +54,10 @@