mirror of
https://github.com/maputnik/editor.git
synced 2025-12-07 14:50:02 +00:00
## Launch Checklist This adds the ability to edit the global state. I think it deserves a modal of its own since I don't think it should be part of other modals... Here are some images: <img width="1274" height="254" alt="image" src="https://github.com/user-attachments/assets/4b6f2564-6c71-47da-9f8c-3bd2b97e1163" /> Initial dialog with no variable: <img width="640" height="254" alt="image" src="https://github.com/user-attachments/assets/b813b540-cae9-4c80-b2c0-4d965c022cb8" /> After you click add a few times: <img width="640" height="254" alt="image" src="https://github.com/user-attachments/assets/125cb978-90dc-4047-9694-b0ffc6eaa469" /> The state is updated as you change thing in the dialog. I didn't complicated it to select the type of the variable, but this can be added later of if there's a requirement to do so, I meant to keep it simple for now. - [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. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
106 lines
3.0 KiB
TypeScript
106 lines
3.0 KiB
TypeScript
import React from "react";
|
|
|
|
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'>{doc}</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>
|
|
}
|
|
</>
|
|
);
|
|
}
|
|
}
|