nextstrain / nextstrain.org

The Nextstrain website
https://nextstrain.org
GNU Affero General Public License v3.0
87 stars 49 forks source link

Port new resource-listing “cards” UI for use to display datasets on /groups and /community #870

Open genehack opened 1 month ago

genehack commented 1 month ago

Work breakdown:

victorlin commented 1 month ago

FYI I'm planning to make some edits to static-site/src/components/ListResources/Showcase.jsx proposed in https://github.com/nextstrain/nextstrain.org/issues/849#issuecomment-2121064824.

We may run into conflicts here, but I suspect that as long as you use the Showcase component just like this in the other pages, it should be trivial to resolve.

https://github.com/nextstrain/nextstrain.org/blob/61c0419da4dfb823ea081a65c2d4ad82b245b3cd/static-site/src/components/ListResources/index.jsx#L64

jameshadfield commented 1 month ago

@genehack happy to talk through any design questions you have here (as they arise). Perhaps a couple of points as to what I was thinking:

genehack commented 1 month ago

@genehack happy to talk through any design questions you have here

Thanks, I was gonna use our 1:1 time today to get a bootstrapping brain dump from you on this. :grin:

genehack commented 3 weeks ago

Noting that Heroku deployment is currently blocked on making eslint aware of TypeScript.

jameshadfield commented 3 weeks ago

Noting that Heroku deployment is currently blocked on https://github.com/nextstrain/nextstrain.org/issues/905.

I mean, we could just fix the linting errors highlighted by the failing build step (which you can run locally as well), which'll let this PR be built as a Heroku review app and even merged. Not a great long term state, but doesn't seem like something that should block this work.

genehack commented 3 weeks ago

Noting that Heroku deployment is currently blocked on #905.

I mean, we could just fix the linting errors highlighted by the failing build step (which you can run locally as well), which'll let this PR be built as a Heroku review app and even merged. Not a great long term state, but doesn't seem like something that should block this work.

One of the linting errors is ESLint claiming the variable in a function type isn't being used — that is, the linting errors are because we're linting Typescript code with a linter that doesn't understand Typescript.

Screenshot 2024-06-07 at 11 19 24

I don't know how to fix that without fixing the linting — maybe I'm missing some angle?

tsibley commented 3 weeks ago

You can fix the warning by adding the dependency to useEffect and suppress the two errors arising from the lack of TypeScript parsing.

diff --git a/static-site/src/components/ListResources/index.tsx b/static-site/src/components/ListResources/index.tsx
index 467dec9d..d0443f97 100644
--- a/static-site/src/components/ListResources/index.tsx
+++ b/static-site/src/components/ListResources/index.tsx
@@ -123,6 +123,8 @@ interface ListResourcesResponsiveProps {
   defaultGroupLinks: boolean
   groupDisplayNames: GroupDisplayNames
   showcase: Card[]
+  // <https://github.com/nextstrain/nextstrain.org/issues/905>
+  // eslint-disable-next-line no-unused-vars
   parserCallBackFxn: (response: Response) => Promise<{ pathPrefix: string; pathVersions: PathVersions; }>;
 }

diff --git a/static-site/src/components/ListResources/useDataFetch.ts b/static-site/src/components/ListResources/useDataFetch.ts
index 49b9634e..372d30a9 100644
--- a/static-site/src/components/ListResources/useDataFetch.ts
+++ b/static-site/src/components/ListResources/useDataFetch.ts
@@ -20,6 +20,8 @@ export function useDataFetch(
   versioned: boolean,
   defaultGroupLinks: boolean,
   groupDisplayNames: GroupDisplayNames,
+  // <https://github.com/nextstrain/nextstrain.org/issues/905>
+  // eslint-disable-next-line no-unused-vars
   parserCallBack: (response: Response) => Promise<{ pathPrefix:string, pathVersions:PathVersions }>
 ) : {groups: Group[] | undefined, dataFetchError: boolean | undefined} {
   const [groups, setGroups] = useState<Group[]>();
@@ -66,7 +68,7 @@ export function useDataFetch(
     }

     fetchAndParse();
-  }, [sourceId, versioned, defaultGroupLinks, groupDisplayNames]);
+  }, [sourceId, versioned, defaultGroupLinks, groupDisplayNames, parserCallBack]);
   return {groups, dataFetchError}
 }
genehack commented 3 weeks ago

You can fix the warning by adding the dependency to useEffect and suppress the two errors arising from the lack of TypeScript parsing.

Added the dep to useEffect; suppressing the two errors feels counter-productive, as I'll just have to take the disable statements back out once the linting fix lands.

genehack commented 2 weeks ago

Canary version