## Description Rename `design-system` package to `@appsmith/ads` ## Automation /ok-to-test tags="@tag.All" ### 🔍 Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/10319507327> > Commit: 65d9664dd75b750496458a6e1652e0da858e1fc6 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10319507327&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Fri, 09 Aug 2024 13:47:50 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No
95 lines
2.3 KiB
TypeScript
95 lines
2.3 KiB
TypeScript
import React from "react";
|
|
import copy from "copy-to-clipboard";
|
|
import { createMessage, IN_APP_EMBED_SETTING } from "ee/constants/messages";
|
|
import styled from "styled-components";
|
|
import { Icon, Text, toast } from "@appsmith/ads";
|
|
|
|
const StyledText = styled(Text)``;
|
|
|
|
const EmbedSnippetContainer = styled.div`
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
background-color: var(--ads-v2-color-bg-subtle);
|
|
border-radius: var(--ads-v2-border-radius);
|
|
padding: 0.5rem;
|
|
gap: 1.5rem;
|
|
`;
|
|
|
|
interface EmbedCodeSnippetProps {
|
|
snippet: string;
|
|
isAppSettings?: boolean;
|
|
}
|
|
|
|
interface SnippetProps {
|
|
onCopy: () => void;
|
|
snippet: string;
|
|
}
|
|
|
|
function AppSettings(props: SnippetProps) {
|
|
return (
|
|
<>
|
|
<div className="flex justify-between">
|
|
<Text>{createMessage(IN_APP_EMBED_SETTING.embedSnippetTitle)}</Text>
|
|
<Icon
|
|
className="cursor-pointer"
|
|
name="duplicate"
|
|
onClick={props.onCopy}
|
|
size="md"
|
|
/>
|
|
</div>
|
|
<EmbedSnippetContainer data-testid="t--embed-snippet">
|
|
<StyledText
|
|
className="break-all max-h-32 overflow-y-auto"
|
|
kind="action-m"
|
|
>
|
|
{props.snippet}
|
|
</StyledText>
|
|
</EmbedSnippetContainer>
|
|
</>
|
|
);
|
|
}
|
|
|
|
function ShareModal(props: SnippetProps) {
|
|
return (
|
|
<>
|
|
<Text>{createMessage(IN_APP_EMBED_SETTING.embedSnippetTitle)}</Text>
|
|
<EmbedSnippetContainer data-testid="t--embed-snippet">
|
|
<StyledText
|
|
className="break-all max-h-32 overflow-y-auto"
|
|
kind="action-m"
|
|
>
|
|
{props.snippet}
|
|
</StyledText>
|
|
<Icon
|
|
className="cursor-pointer"
|
|
name="duplicate"
|
|
onClick={props.onCopy}
|
|
size="md"
|
|
/>
|
|
</EmbedSnippetContainer>
|
|
</>
|
|
);
|
|
}
|
|
|
|
function EmbedCodeSnippet(props: EmbedCodeSnippetProps) {
|
|
const onCopy = () => {
|
|
copy(props.snippet);
|
|
toast.show(createMessage(IN_APP_EMBED_SETTING.copiedEmbedCode), {
|
|
kind: "success",
|
|
});
|
|
};
|
|
|
|
return (
|
|
<div className="flex flex-col gap-2">
|
|
{props.isAppSettings ? (
|
|
<AppSettings onCopy={onCopy} snippet={props.snippet} />
|
|
) : (
|
|
<ShareModal onCopy={onCopy} snippet={props.snippet} />
|
|
)}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default EmbedCodeSnippet;
|