
* Add tabs to apps page * Detect app in tunnel * Disable manifest install if Saleor Apps context * Show only app origin instead full manifest * Add copy manifest feature * Update tests * Add ENV with marketplace endpoint for fetching saleor apps * Fetch Saleor apps for Marketplace and display them in the tab, otherwise hide * Code review fixes * Extract translation messages * Update tests
72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
import { Typography } from "@material-ui/core";
|
|
import { CopyIcon, makeStyles, Tooltip } from "@saleor/macaw-ui";
|
|
import clsx from "clsx";
|
|
import React, { useState } from "react";
|
|
|
|
const useStyles = makeStyles(
|
|
theme => ({
|
|
"@keyframes pulse": {
|
|
from: { transform: "scale(1)" },
|
|
to: { transform: "scale(1.2)" },
|
|
},
|
|
manifestText: {
|
|
color: theme.palette.text.secondary,
|
|
"&:hover svg": {
|
|
visibility: "visible",
|
|
},
|
|
},
|
|
copyIcon: {
|
|
marginRight: theme.spacing(1),
|
|
visibility: "hidden",
|
|
verticalAlign: "middle",
|
|
transition: "0.2s",
|
|
},
|
|
copyIconColorful: {
|
|
color: theme.palette.primary.main,
|
|
animation: "$pulse 0.2s",
|
|
},
|
|
}),
|
|
{ name: "AppManifestTableDisplay" },
|
|
);
|
|
|
|
interface AppManifestTableDisplayProps {
|
|
manifestUrl: string;
|
|
}
|
|
|
|
const getAppDomainFromManifest = (manifest: string) => new URL(manifest).host;
|
|
|
|
export const AppManifestTableDisplay = ({
|
|
manifestUrl,
|
|
}: AppManifestTableDisplayProps) => {
|
|
const styles = useStyles();
|
|
const [copied, setCopied] = useState(false);
|
|
|
|
return (
|
|
<Tooltip placement="top" title={manifestUrl} header="App Manifest URL">
|
|
<Typography
|
|
onMouseOut={() => setCopied(false)}
|
|
className={styles.manifestText}
|
|
onClick={e => {
|
|
try {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
|
|
navigator.clipboard.writeText(manifestUrl);
|
|
setCopied(true);
|
|
} catch (e) {
|
|
// Copy not supported, ignore
|
|
}
|
|
}}
|
|
>
|
|
{!!navigator.clipboard && (
|
|
<CopyIcon
|
|
className={clsx(styles.copyIcon, {
|
|
[styles.copyIconColorful]: copied,
|
|
})}
|
|
/>
|
|
)}
|
|
{getAppDomainFromManifest(manifestUrl)}
|
|
</Typography>
|
|
</Tooltip>
|
|
);
|
|
};
|