Skip to content

Commit 88f7093

Browse files
committed
add environment filter
1 parent b8fa129 commit 88f7093

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

pages/tools/components/Sidebar.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export default function Sidebar({
2929
{ label: 'Language', accessorKey: 'languages' },
3030
{ label: 'Dialect', accessorKey: 'drafts' },
3131
{ label: 'Tooling Type', accessorKey: 'toolingTypes' },
32+
{ label: 'Environment', accessorKey: 'environments' },
3233
{ label: 'License', accessorKey: 'licenses' },
3334
];
3435

@@ -50,6 +51,9 @@ export default function Sidebar({
5051
toolingTypes: formData
5152
.getAll('toolingTypes')
5253
.map((value) => value as string),
54+
environments: formData
55+
.getAll('environments')
56+
.map((value) => value as string),
5357
};
5458
postAnalytics({ eventType: 'query', eventPayload: newTransform });
5559
return newTransform;

pages/tools/hooks/useToolsTransform.tsx

+19-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export interface Transform {
1414
languages: string[];
1515
drafts: JSONSchemaDraft[];
1616
toolingTypes: string[];
17+
environments: string[];
1718
}
1819

1920
export type TransformUpdate =
@@ -34,6 +35,7 @@ const buildQueryString = (transform: Transform) => {
3435
languages: transform.languages.join(','),
3536
drafts: transform.drafts.join(','),
3637
toolingTypes: transform.toolingTypes.join(','),
38+
environments: transform.environments.join(','),
3739
}).toString();
3840
};
3941

@@ -50,6 +52,7 @@ export default function useToolsTransform(tools: JSONSchemaTool[]) {
5052
licenses: [],
5153
drafts: [],
5254
toolingTypes: [],
55+
environments: [],
5356
});
5457

5558
useEffect(() => {
@@ -78,6 +81,9 @@ export default function useToolsTransform(tools: JSONSchemaTool[]) {
7881
toolingTypes: parseArrayParam(
7982
query.toolingTypes,
8083
) as Transform['toolingTypes'],
84+
environments: parseArrayParam(
85+
query.environments,
86+
) as Transform['environments'],
8187
};
8288

8389
const queryString = buildQueryString(updatedTransform);
@@ -124,6 +130,7 @@ export default function useToolsTransform(tools: JSONSchemaTool[]) {
124130
licenses: [],
125131
drafts: [],
126132
toolingTypes: [],
133+
environments: [],
127134
};
128135

129136
const queryString = buildQueryString(initialTransform);
@@ -183,6 +190,7 @@ const filterTools = (
183190
languages: lowerCaseArray(transform.languages),
184191
licenses: lowerCaseArray(transform.licenses),
185192
toolingTypes: lowerCaseArray(transform.toolingTypes),
193+
environments: lowerCaseArray(transform.environments),
186194
drafts: transform.drafts,
187195
};
188196

@@ -204,14 +212,24 @@ const filterTools = (
204212
lowerCaseTransform.toolingTypes.includes(type.toLowerCase()),
205213
);
206214

215+
const matchesEnvironment =
216+
!lowerCaseTransform.environments.length ||
217+
(tool.environments || []).some((environment) =>
218+
lowerCaseTransform.environments.includes(environment.toLowerCase()),
219+
);
220+
207221
const matchesDraft =
208222
!lowerCaseTransform.drafts.length ||
209223
(tool.supportedDialects?.draft || []).some((draft) =>
210224
lowerCaseTransform.drafts.includes(draft),
211225
);
212226

213227
return (
214-
matchesLanguage && matchesLicense && matchesToolingType && matchesDraft
228+
matchesLanguage &&
229+
matchesLicense &&
230+
matchesToolingType &&
231+
matchesEnvironment &&
232+
matchesDraft
215233
);
216234
});
217235
};

pages/tools/index.page.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ export type FilterCriteriaFields =
2121
| 'languages'
2222
| 'drafts'
2323
| 'toolingTypes'
24-
| 'licenses';
24+
| 'licenses'
25+
| 'environments';
2526

2627
export async function getStaticProps() {
2728
const toolingData = yaml.load(
@@ -55,6 +56,7 @@ export async function getStaticProps() {
5556
]) as JSONSchemaDraft[],
5657
toolingTypes: getDistinctEntries(toolingData, '$..toolingTypes[*]'),
5758
licenses: getDistinctEntries(toolingData, '$..license'),
59+
environments: getDistinctEntries(toolingData, '$..environments[*]'),
5860
};
5961

6062
filterCriteria.drafts.sort((a, b) => {

0 commit comments

Comments
 (0)