mirror of
https://github.com/maputnik/editor.git
synced 2025-12-07 14:50:02 +00:00
## Launch Checklist This improves how the docs are being presented, since we added some markdown in the docs it is better to have full support for this here as well Before: <img width="645" height="254" alt="image" src="https://github.com/user-attachments/assets/ce099ab9-eabd-4721-9550-5ea251439d93" /> After: <img width="645" height="254" alt="image" src="https://github.com/user-attachments/assets/884d1d69-4238-412e-b620-f9c0640723ca" /> The table below that is also stretched is fixes in the following PR: https://github.com/maplibre/maputnik/pull/1377/files#diff-8d22a87c6893aa31e22f1db0804e1fe93534f38d9fb4433e71cd3878f8daa954 - [x] Briefly describe the changes in this PR. - [x] Include before/after visuals or gifs if this PR includes visual changes. - [x] Write tests for all new functionality. - [x] Add an entry to `CHANGELOG.md` under the `## main` section.
111 lines
3.2 KiB
TypeScript
111 lines
3.2 KiB
TypeScript
import React from "react";
|
|
import Markdown from "react-markdown";
|
|
|
|
const headers = {
|
|
js: "JS",
|
|
android: "Android",
|
|
ios: "iOS"
|
|
};
|
|
|
|
type DocProps = {
|
|
fieldSpec: {
|
|
doc?: string
|
|
values?: {
|
|
[key: string]: {
|
|
doc?: string
|
|
}
|
|
}
|
|
"sdk-support"?: {
|
|
[key: string]: typeof headers
|
|
}
|
|
docUrl?: string,
|
|
docUrlLinkText?: string
|
|
}
|
|
};
|
|
|
|
export default class Doc extends React.Component<DocProps> {
|
|
render () {
|
|
const {fieldSpec} = this.props;
|
|
|
|
const {doc, values, docUrl, docUrlLinkText} = fieldSpec;
|
|
const sdkSupport = fieldSpec["sdk-support"];
|
|
|
|
const renderValues = (
|
|
!!values &&
|
|
// HACK: Currently we merge additional values into the style spec, so this is required
|
|
// See <https://github.com/maplibre/maputnik/blob/main/src/components/PropertyGroup.jsx#L16>
|
|
!Array.isArray(values)
|
|
);
|
|
|
|
const sdkSupportToJsx = (value: string) => {
|
|
const supportValue = value.toLowerCase();
|
|
if (supportValue.startsWith("https://")) {
|
|
return <a href={supportValue} target="_blank" rel="noreferrer">{"#" + supportValue.split("/").pop()}</a>;
|
|
}
|
|
return value;
|
|
};
|
|
|
|
return (
|
|
<>
|
|
{doc &&
|
|
<div className="SpecDoc">
|
|
<div className="SpecDoc__doc" data-wd-key='spec-field-doc'>
|
|
<Markdown components={{
|
|
a: ({node: _node, href, children, ...props}) => <a href={href} target="_blank" {...props}>{children}</a>,
|
|
}}>{doc}</Markdown>
|
|
</div>
|
|
{renderValues &&
|
|
<ul className="SpecDoc__values">
|
|
{Object.entries(values).map(([key, value]) => {
|
|
return (
|
|
<li key={key}>
|
|
<code>{JSON.stringify(key)}</code>
|
|
<div>{value.doc}</div>
|
|
</li>
|
|
);
|
|
})}
|
|
</ul>
|
|
}
|
|
</div>
|
|
}
|
|
{sdkSupport &&
|
|
<div className="SpecDoc__sdk-support">
|
|
<table className="SpecDoc__sdk-support__table">
|
|
<thead>
|
|
<tr>
|
|
<th></th>
|
|
{Object.values(headers).map(header => {
|
|
return <th key={header}>{header}</th>;
|
|
})}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{Object.entries(sdkSupport).map(([key, supportObj]) => {
|
|
return (
|
|
<tr key={key}>
|
|
<td>{key}</td>
|
|
{Object.keys(headers).map((k) => {
|
|
if (Object.prototype.hasOwnProperty.call(supportObj, k)) {
|
|
return <td key={k}>{sdkSupportToJsx(supportObj[k as keyof typeof headers])}</td>;
|
|
}
|
|
else {
|
|
return <td key={k}>no</td>;
|
|
}
|
|
})}
|
|
</tr>
|
|
);
|
|
})}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
}
|
|
{docUrl && docUrlLinkText &&
|
|
<div className="SpecDoc__learn-more">
|
|
<a href={docUrl} target="_blank" rel="noreferrer">{docUrlLinkText}</a>
|
|
</div>
|
|
}
|
|
</>
|
|
);
|
|
}
|
|
}
|