Skip to content

Commit 16864ba

Browse files
sorting languages (graphql#1422)
1 parent 94d09d2 commit 16864ba

File tree

3 files changed

+95
-16
lines changed

3 files changed

+95
-16
lines changed

src/assets/css/_css/code.less

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,27 @@
9494
}
9595
}
9696
}
97+
.sortByContainer{
98+
display: flex;
99+
flex-flow: row wrap;
100+
gap: 1rem;
101+
align-items: center;
102+
.sortBy{
103+
font-weight: 500;
104+
}
105+
.inputContainer{
106+
display: flex;
107+
align-items: center;
108+
gap:0.25rem;
109+
cursor: pointer;
110+
input{
111+
accent-color: #e10098;
112+
}
113+
label{
114+
cursor: pointer;
115+
}
116+
}
117+
}
97118
.tools-title {
98119
margin: 0;
99120
}

src/components/BackToTop/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ const BackToTop: React.FC<Props> = ({ scrollThreshold }) => {
1111
const handleScroll = () => {
1212
const pageHeight = document.body.scrollHeight
1313
const currentPosition = window.pageYOffset
14-
console.log(pageHeight, currentPosition)
1514
if (pageHeight < 6000) {
1615
setIsVisible(false)
1716
} else {

src/pages/code.tsx

Lines changed: 74 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -182,24 +182,68 @@ export function ToolsList({ pageContext, type }: ToolsListProps) {
182182
<h3 id={type} className="library-category-title">
183183
{type === "GatewaysAndSupergraphs" ? "Gateways / Supergraphs" : type}
184184
</h3>
185-
{pageContext.toolList.map(
186-
tool => (
187-
console.log(tool.categoryMap, tool.name),
188-
(
189-
<div key={tool.name} id={toSlug(tool.name)}>
190-
{Object.entries(tool.categoryMap).map(
191-
([categoryName, data]) =>
192-
categoryName === type && <LibraryList data={data} />
193-
)}
194-
</div>
195-
)
196-
)
197-
)}
185+
{pageContext.toolList.map(tool => (
186+
<div key={tool.name} id={toSlug(tool.name)}>
187+
{Object.entries(tool.categoryMap).map(
188+
([categoryName, data]) =>
189+
categoryName === type && <LibraryList data={data} />
190+
)}
191+
</div>
192+
))}
198193
</>
199194
)
200195
}
196+
const sortLanguageList = (sortConfig: {
197+
sortType?: "popularity" | "alphabetical"
198+
data: Language[]
199+
}) => {
200+
const { sortType = "popularity", data } = sortConfig
201+
const _data = [...data]
202+
if (sortType === "popularity") return _data
203+
_data?.sort((a, b) => {
204+
if (a.name > b.name) {
205+
return 1
206+
}
207+
if (a.name < b.name) {
208+
return -1
209+
}
210+
return 0
211+
})
212+
return _data
213+
}
201214

215+
const SortInput = (props: {
216+
isChecked: boolean
217+
onChange: (e: any) => unknown
218+
value: string
219+
label: string
220+
}) => {
221+
const { isChecked, onChange, value, label } = props
222+
return (
223+
<div className="inputContainer">
224+
<input
225+
type="radio"
226+
name="sort"
227+
id={label}
228+
value={value}
229+
onChange={onChange}
230+
checked={isChecked}
231+
/>
232+
<label htmlFor={label}>{label}</label>
233+
</div>
234+
)
235+
}
202236
export default ({ pageContext }: PageProps<{}, PageContext>) => {
237+
const [sortBy, setSortBy] = useState<"popularity" | "alphabetical">(
238+
"popularity"
239+
)
240+
const sortedLanguageList = sortLanguageList({
241+
sortType: sortBy,
242+
data: pageContext.languageList,
243+
})
244+
const handleInputChange = (e: any) => {
245+
setSortBy(e.target.value)
246+
}
203247
return (
204248
<Layout className="code" pageContext={pageContext}>
205249
<div className="code-hero">
@@ -235,8 +279,23 @@ export default ({ pageContext }: PageProps<{}, PageContext>) => {
235279
<p id="language-support" className="languages-title">
236280
Language Support
237281
</p>
282+
<div className="sortByContainer">
283+
<p className="sortBy">Sort By:</p>
284+
<SortInput
285+
onChange={handleInputChange}
286+
value="popularity"
287+
label="Popularity"
288+
isChecked={sortBy === "popularity"}
289+
/>
290+
<SortInput
291+
onChange={handleInputChange}
292+
value="alphabetical"
293+
label="Alphabetical"
294+
isChecked={sortBy === "alphabetical"}
295+
/>
296+
</div>
238297
<div className="language-boxes">
239-
{pageContext.languageList
298+
{sortedLanguageList
240299
?.map(language => language?.name!)
241300
.filter(Boolean)
242301
.map(languageName => {
@@ -253,7 +312,7 @@ export default ({ pageContext }: PageProps<{}, PageContext>) => {
253312
})}
254313
</div>
255314
<div className="languages-content">
256-
{pageContext.languageList.map(lang => {
315+
{sortedLanguageList.map(lang => {
257316
const languageName = lang.name
258317
const libraryCategories = lang.categoryMap
259318
const filteredCategorySlugMap = categorySlugMap.filter(

0 commit comments

Comments
 (0)