blob: a9b5b7be98bc5426be4232a675494632c8168e0d [file]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import React from 'react';
import databaseData from '../../data/databases.json';
import type { DatabaseData } from './types';
const typedData = databaseData as DatabaseData;
const seenLogos = new Set<string>();
const databases = Object.entries(typedData.databases)
.filter(([, db]) => db.documentation?.logo && db.documentation?.homepage_url)
.sort(([a], [b]) => a.localeCompare(b))
.filter(([, db]) => {
const logo = db.documentation.logo!;
if (seenLogos.has(logo)) return false;
seenLogos.add(logo);
return true;
})
.map(([name, db]) => ({
name,
logo: db.documentation.logo!,
docPath: `/user-docs/databases/supported/${name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')}`,
}));
export default function DatabaseLogoWall(): React.JSX.Element {
return (
<div
style={{
display: 'flex',
flexWrap: 'wrap',
justifyContent: 'center',
alignItems: 'center',
gap: '12px',
margin: '20px auto',
maxWidth: 900,
}}
>
{databases.map(({ name, logo, docPath }) => (
<a
key={name}
href={docPath}
title={name}
style={{ display: 'inline-flex', alignItems: 'center', height: 40 }}
>
<img
src={`/img/databases/${logo}`}
alt={name}
className="database-logo"
style={{ height: 36, maxWidth: 120 }}
/>
</a>
))}
</div>
);
}