Skip to content

Commit 40432ca

Browse files
authored
Merge pull request #305 from UW-Macrostrat/search
Lex expansion
2 parents 9d1981e + 5c96129 commit 40432ca

File tree

32 files changed

+754
-44
lines changed

32 files changed

+754
-44
lines changed

pages/lex/+Page.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ export function Page() {
7777
{ href: "/lex/lithology", title: "Lithologies" },
7878
"Names of geologic materials"
7979
),
80+
h(
81+
LinkCard,
82+
{ href: "/lex/lith-atts", title: "Lithology attributes" },
83+
"Names and descriptions of lithology attributes"
84+
),
8085
h(
8186
LinkCard,
8287
{ href: "/lex/environments", title: "Environments" },
@@ -87,6 +92,16 @@ export function Page() {
8792
{ href: "/lex/economics", title: "Economics" },
8893
"Economic uses of geologic materials"
8994
),
95+
h(
96+
LinkCard,
97+
{ href: "/lex/minerals", title: "Minerals" },
98+
"Mineral names and formulas"
99+
),
100+
h(
101+
LinkCard,
102+
{ href: "/lex/structures", title: "Structures" },
103+
"Names and descriptions of geologic structures"
104+
),
90105

91106
h("p", [
92107
h("strong", h("a", { href: "/sift" }, "Sift")),
@@ -139,12 +154,12 @@ function SearchResults({ data }) {
139154
"lithologies",
140155
// "lithology_types",
141156
// "lithology_classes",
142-
// "lithology_attributes",
157+
"lithology_attributes",
143158
"projects",
144159
"strat_name_concepts",
145160
// "strat_name_orphans",
146-
// "structures",
147-
// "minerals",
161+
"structures",
162+
"minerals",
148163
];
149164

150165
return h.if(Object.keys(data).length > 0)("div.search-results", [
@@ -157,7 +172,10 @@ function SearchResults({ data }) {
157172
category === "lithologies" ?
158173
"lithology" :
159174
category === "strat_name_concepts" ?
160-
"strat-name-concepts" : category
175+
"strat-name-concepts" :
176+
category === "lithology_attributes" ?
177+
"lith-atts" :
178+
category
161179

162180
return h("div.search-category", [
163181
h("h3.category", (category.charAt(0).toUpperCase() + category.slice(1)).replace(/_/g, " ")),

pages/lex/economics/@id/+Page.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import {
66
Charts,
77
PrevalentTaxa,
88
Timescales,
9+
Units,
10+
Fossils,
911
} from "~/components/lex";
1012

1113
export function Page() {
12-
const { resData, colData, taxaData, refs } = useData();
14+
const { resData, colData, taxaData, refs, unitsData, fossilsData } = useData();
1315

1416
const id = resData.econ_id;
1517
const features = colData?.features || [];
@@ -23,6 +25,8 @@ export function Page() {
2325
h(Charts, { features }),
2426
h(PrevalentTaxa, { taxaData }),
2527
h(Timescales, { timescales }),
28+
h(Units, { unitsData }),
29+
h(Fossils, { fossilsData }),
2630
];
2731

2832
return LexItemPage({ children, id, refs, resData, siftLink: "economic" });

pages/lex/economics/@id/+data.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ export async function data(pageContext) {
55
const econ_id = parseInt(pageContext.urlParsed.pathname.split("/")[3]);
66

77
// Await all API calls
8-
const [resData, colData, refs1, refs2] = await Promise.all([
8+
const [resData, colData, unitsData, fossilsData, refs1, refs2] = await Promise.all([
99
fetchAPIData("/defs/econs", { econ_id }),
1010
fetchAPIData("/columns", { econ_id, response: "long", format: "geojson" }),
11+
fetchAPIData("/units", { econ_id }),
12+
fetchAPIData("/fossils", { econ_id }),
1113
fetchAPIRefs("/fossils", { econ_id }),
1214
fetchAPIRefs("/columns", { econ_id }),
1315
]);
@@ -28,5 +30,5 @@ export async function data(pageContext) {
2830
taxaData = await response.json();
2931
}
3032

31-
return { resData: resData[0], colData, taxaData, refs };
33+
return { resData: resData[0], colData, taxaData, refs, unitsData, fossilsData };
3234
}

pages/lex/environments/@id/+Page.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import {
66
Charts,
77
PrevalentTaxa,
88
Timescales,
9+
Units,
10+
Fossils
911
} from "~/components/lex";
1012

1113
export function Page() {
12-
const { resData, colData, taxaData, refs } = useData();
14+
const { resData, colData, taxaData, refs, unitsData, fossilsData } = useData();
1315

1416
const id = resData.environ_id;
1517
const features = colData?.features || [];
@@ -23,6 +25,8 @@ export function Page() {
2325
h(Charts, { features }),
2426
h(PrevalentTaxa, { taxaData }),
2527
h(Timescales, { timescales }),
28+
h(Units, { unitsData }),
29+
h(Fossils, { fossilsData })
2630
];
2731

2832
return LexItemPage({ children, id, refs, resData, siftLink: "environment" });

pages/lex/environments/@id/+data.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ export async function data(pageContext) {
55
const environ_id = parseInt(pageContext.urlParsed.pathname.split("/")[3]);
66

77
// Await all API calls
8-
const [resData, colData, refs1, refs2] = await Promise.all([
8+
const [resData, colData, unitsData, fossilsData, refs1, refs2] = await Promise.all([
99
fetchAPIData("/defs/environments", { environ_id }),
1010
fetchAPIData("/columns", {
1111
environ_id,
1212
response: "long",
1313
format: "geojson",
1414
}),
15+
fetchAPIData("/units", { environ_id }),
16+
fetchAPIData("/fossils", { environ_id }),
1517
fetchAPIRefs("/fossils", { environ_id }),
1618
fetchAPIRefs("/columns", { environ_id }),
1719
]);
@@ -32,5 +34,5 @@ export async function data(pageContext) {
3234
taxaData = await response.json();
3335
}
3436

35-
return { resData: resData[0], colData, taxaData, refs };
37+
return { resData: resData[0], colData, taxaData, refs, unitsData, fossilsData };
3638
}

pages/lex/intervals/@id/+Page.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import {
77
Charts,
88
PrevalentTaxa,
99
Timescales,
10+
Units,
11+
Fossils,
1012
} from "~/components/lex";
1113

1214
export function Page() {
13-
const { resData, colData, taxaData, refs } = useData();
15+
const { resData, colData, taxaData, refs, unitsData, fossilsData } = useData();
1416

1517
const id = resData.int_id;
1618
const features = colData?.features || [];
@@ -25,6 +27,8 @@ export function Page() {
2527
h(Charts, { features }),
2628
h(PrevalentTaxa, { taxaData }),
2729
h(Timescales, { timescales }),
30+
h(Units, { unitsData }),
31+
h(Fossils, { fossilsData }),
2832
];
2933

3034
return LexItemPage({ children, id, refs, resData, siftLink: "interval" });

pages/lex/intervals/@id/+data.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ export async function data(pageContext) {
55
const int_id = parseInt(pageContext.urlParsed.pathname.split("/")[3]);
66

77
// Await all API calls
8-
const [resData, colData, refs1, refs2] = await Promise.all([
8+
const [resData, colData, unitsData, fossilsData, refs1, refs2] = await Promise.all([
99
fetchAPIData("/defs/intervals", { int_id }),
1010
fetchAPIData("/columns", { int_id, response: "long", format: "geojson" }),
11+
fetchAPIData("/units", { int_id }),
12+
fetchAPIData("/fossils", { int_id }),
1113
fetchAPIRefs("/fossils", { int_id }),
1214
fetchAPIRefs("/columns", { int_id }),
1315
]);
@@ -28,5 +30,5 @@ export async function data(pageContext) {
2830
taxaData = await response.json();
2931
}
3032

31-
return { resData: resData[0], colData, taxaData, refs };
33+
return { resData: resData[0], colData, taxaData, refs, unitsData, fossilsData };
3234
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import h from "@macrostrat/hyper";
2+
import { LinkCard, PageBreadcrumbs, StickyHeader } from "~/components";
3+
import { useState } from "react";
4+
import { ContentPage } from "~/layouts";
5+
import { useData } from "vike-react/useData";
6+
import { SearchBar } from "~/components/general";
7+
8+
export function Page() {
9+
const [input, setInput] = useState("");
10+
const { res } = useData();
11+
12+
const handleChange = (event) => {
13+
setInput(event.toLowerCase());
14+
};
15+
16+
const filtered = res.filter((d) => {
17+
const name = d.name.toLowerCase();
18+
const type = d.type ? d.type.toLowerCase() : "";
19+
return (
20+
name.includes(input) || type.includes(input)
21+
);
22+
});
23+
24+
const grouped = groupByType(filtered);
25+
26+
return h(ContentPage, { className: "econ-list-page" }, [
27+
h(StickyHeader, [
28+
h(PageBreadcrumbs, { title: "Lithology Attributes" }),
29+
h(SearchBar, {
30+
placeHolder: "Search lithology attributes...",
31+
onChange: handleChange,
32+
}),
33+
]),
34+
h(
35+
"div.econ-list",
36+
Object.entries(grouped).map(([className, types]) =>
37+
h("div.econ-class-group", [
38+
h("h2", UpperCase(className)),
39+
h(
40+
"div.econ-items",
41+
types?.map((d) => h(LinkCard, { href: `/lex/lith-atts/${d.lith_att_id}` }, UpperCase(d.name)))
42+
),
43+
])
44+
)
45+
),
46+
])
47+
}
48+
49+
function groupByType(items) {
50+
return items.reduce((acc, item) => {
51+
const type = item.type.toLowerCase();
52+
if (!acc[type]) {
53+
acc[type] = [];
54+
}
55+
acc[type].push(item);
56+
return acc;
57+
}, {});
58+
}
59+
60+
function UpperCase(str) {
61+
return str.charAt(0).toUpperCase() + str.slice(1);
62+
}

pages/lex/lith-atts/+data.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { fetchAPIData } from "~/_utils";
2+
3+
export async function data() {
4+
const res = await fetchAPIData(`/defs/lithology_attributes`, { all: true });
5+
6+
return { res };
7+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { useData } from "vike-react/useData";
2+
import h from "@macrostrat/hyper";
3+
import { LexItemPage, Units } from "~/components/lex";
4+
5+
export function Page() {
6+
const { resData, unitsData } = useData();
7+
8+
console.log("Lithology Attribute Page", unitsData);
9+
10+
const id = resData.lith_att_id;
11+
12+
const children = [
13+
h(LithologyAttributeDetails, { resData }),
14+
h(Units, { unitsData }),
15+
];
16+
17+
return LexItemPage({ children, id, refs: [], resData, siftLink: "" });
18+
}
19+
20+
function LithologyAttributeDetails({ resData }) {
21+
const { type, t_units } = resData;
22+
23+
return h("div", { class: "lith-att-details" }, [
24+
h("p", `Type: ${type}`),
25+
h("p", `Type Units: ${t_units}`),
26+
]);
27+
}

0 commit comments

Comments
 (0)