All files / publisher/pages/Publicise Publicise.tsx

53.33% Statements 8/15
71.42% Branches 15/21
66.66% Functions 2/3
53.33% Lines 8/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112                                            6x   6x                             6x 6x       6x 6x           6x   6x                                                                                                                    
import { useParams, NavLink } from "react-router-dom";
import { useQuery } from "react-query";
import {
  Row,
  Col,
  SideNavigation,
  Strip,
  Notification,
} from "@canonical/react-components";
 
import PubliciseButtons from "./PubliciseButtons";
import PubliciseBadges from "./PubliciseBadges";
import PubliciseCards from "./PubliciseCards";
 
import { setPageTitle } from "../../utils";
import Loader from "../../components/Loader";
 
type Props = {
  view?: undefined | "badges" | "cards";
};
 
function Publicise({ view }: Props): React.JSX.Element {
  const { snapId } = useParams();
 
  const { data, isLoading, isFetched } = useQuery({
    queryKey: ["publiciseData", snapId],
    queryFn: async () => {
      const response = await fetch(`/api/${snapId}/publicise`);
 
      if (!response.ok) {
        throw new Error("There was a problem loading publicise data");
      }
 
      const data = await response.json();
 
      return data.data;
    },
  });
 
  const disableView = () => {
    Iif (data.private) {
      return true;
    }
 
    Eif (!data.is_released) {
      return true;
    }
 
    return false;
  };
 
  setPageTitle(`Publicise ${snapId}`);
 
  return (
    <>
      {isLoading && <Loader />}
 
      {isFetched && data && (
        <Strip shallow>
          {disableView() && (
            <Notification severity="information">
              When your snap is public and has a release, you'll be able to
              share it using Store buttons, badges and embeddable cards. Make
              your snap public in its{" "}
              <a href={`/${snapId}/settings`}>settings page</a>.
            </Notification>
          )}
          <Row className={data.private ? "u-disabled" : ""}>
            <Col size={3}>
              <SideNavigation
                items={[
                  {
                    items: [
                      {
                        "aria-current": !view,
                        label: "Snap Store buttons",
                        to: `/${snapId}/publicise`,
                        component: NavLink,
                      },
                      {
                        "aria-current": view === "badges",
                        label: "GitHub badges",
                        to: `/${snapId}/publicise/badges`,
                        component: NavLink,
                      },
                      {
                        "aria-current": view === "cards",
                        label: "Embeddable cards",
                        to: `/${snapId}/publicise/cards`,
                        component: NavLink,
                      },
                    ],
                  },
                ]}
              />
            </Col>
            <Col size={9}>
              {!view && <PubliciseButtons />}
              {view === "badges" && (
                <PubliciseBadges trending={data.trending} />
              )}
              {view === "cards" && <PubliciseCards />}
            </Col>
          </Row>
        </Strip>
      )}
    </>
  );
}
 
export default Publicise;