saleor-apps-redis_apl/packages/ui/src/text-link.tsx

77 lines
1.7 KiB
TypeScript
Raw Normal View History

import { actions, useAppBridge } from "@saleor/app-sdk/app-bridge";
import { Text, TextProps } from "@saleor/macaw-ui/next";
import { useRouter } from "next/router";
export interface TextLinkProps extends TextProps {
href: string;
newTab?: boolean;
}
const BaseTextLink = (props: TextLinkProps) => {
return (
2023-05-17 16:53:49 +00:00
<Text target="_blank" as={"a"} textDecoration={"none"} rel="noopener noreferrer" {...props}>
<Text
2023-05-17 16:53:49 +00:00
transition={"ease"}
variant={"bodyStrong"}
CMS App v2 (#721) * initial setup * GRaphql setup * [skip ci] * Manifest and register endpoints * Add config schemas * contentful client * contentful client * [skip ci] trpc setup * metadata manager and contentful router * Configuration config * contentful config - adding providers * add provider page * wip contentful form * contentful form * list providrs * edit contentful form * [skip ci] * [skip ci] replace contentful sdk * replace contentful lib * Delete contetnful provider feature * variant created webhook draft * channel provider connection model * Channel connections ui * adding new connection * connections ui (adding) * [skip ci] wip edit conn * removing connection * rebuild modal * refactor providers * implement update product webhook * add deleting product * [skip ci] wip * refactor contentful router * refactor wip * refactor config * webhooks processor * webhook delegations * bulk sync section * bulk sync page * gql for imports * [skip ci] bulk import contentful * temp variant sync list with rate limiters * wip * wip * wip * new frontend for uploading * update zod * print config keys * wip * [skip ci] datocms init * dato add provdier page * dato form skeleton * dato display content type select * full dato form * ButtonsBox extraction * edit dato config form * update product in dato * [skip ci] * extract bulk sync processor * dato bulk update * [skip ci] product updated webhook * product webhook * crud operations router * update cruds * refactor webhook operations * refactors * refactors * helper texts * [skip ci] deps * Init * fix macaw icon * unify app skd * unify nextjs * strapi setup * fix strapi types * strapi upload product * strapi delete product * strapi product updated webhook * processor for bulk sync strapi * shared add provider page * refactors * refactors * wrap providers into folder * refactors * refactors * refactors * pnpm lock * add logs * name configuration mapping name * form configurable side notes * remove commentns * wip providers resolver working * central config for providers resolving * tests wip * remove vscode condig * cleanup * provider meta extract * some tests for contentufl * contentful client test * more tests for contentful * strapi helper texts * builderio setup * builderio form * builderio client draft * validate connection modal * Add sending product to builderio * rename builder field * add public api key for read access * update products * Builder.io - bulk sync * Fix manifest * cr fixes * Make strapi to work with multiple products * Github actions
2023-07-18 08:19:21 +00:00
size={props.size}
2023-05-17 16:53:49 +00:00
color={{
default: "text3Decorative",
hover: "text1Decorative",
}}
>
{props.children}
</Text>
</Text>
);
};
export const TextLink = ({ href, newTab = false, children, ...props }: TextLinkProps) => {
const { appBridge } = useAppBridge();
const { push } = useRouter();
const onNewTabClick = (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {
event.preventDefault();
if (!appBridge) {
console.warn(
"App bridge is not initialized, TextLink cannot be used with external links without it."
);
}
appBridge?.dispatch(
actions.Redirect({
to: href,
newContext: true,
})
);
if (props.onClick) {
props.onClick(event);
}
};
const onInternalClick = (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {
event.preventDefault();
push(href);
if (props.onClick) {
props.onClick(event);
}
};
if (newTab) {
return (
<BaseTextLink href={href} onClick={onNewTabClick} {...props}>
{children}
</BaseTextLink>
);
} else {
return (
<BaseTextLink href={href} onClick={onInternalClick} {...props}>
{children}
</BaseTextLink>
);
}
};