1.1.13 • Published 7 months ago

@sankei-arc-shared-components/feature_article-body v1.1.13

Weekly downloads
68
License
ISC
Repository
github
Last release
7 months ago

Article Body Components

How do I use it?

This is a collection of components used to build the body for an article.

This is an example of how you could use these components.

import React from 'react';
import { useBrowserSize } from '@sankei-arc-shared-components/tools_general-helpers';
import { getContentElements } from '@sankei-arc-shared-components/utils_ans-helpers';
import { useFusionContext } from 'fusion:context';
import Layout from "@sankei-arc-shared-components/element_layout";
import {
  Oembed,
  ArticleImage,
  GalleryEmbed,
  InterstitialLink,
  Headline,
  Text,
  HeadlineImage,
  AdHeadline,
  ArticleAd,
} from '@sankei-arc-shared-components/feature_article-body';

const ArcAd = () => {
  /* Ad implementation that will be added to the article ads */
};

const ArticleBody = ({ customFields }) => {
  const { globalContent, isAdmin, arcSite } = useFusionContext();
  const browserSize = useBrowserSize(false);

  const contentElements = getContentElements(globalContent);

  const siteUrl = get(globalContent, 'website_url');
  const promoItems = get(globalContent, 'promo_items', {});

  const articleSubtype = get(globalContent, 'subtype', 'none');
  const { meta = {} } = globalContent;

  const articleAd = new ArticleAd({
    meta,
    adCharacterCount: 0,
    arcAd: ArcAd,
    browserSize,
  });

  return (
    <Layout className="article-body clearfix">
      <AdHeadline
        promoItems={promoItems}
        ArcAd={ArcAd}
        browserSize={browserSize}
      />
      {contentElements.map((item, index) => {
        const { _id: id, type } = item;

        switch (type) {
          case 'text':
            articleAd.incrementAdCharacterCount(item.content.length);
            articleAd.setAds(index);

            return (
              <Fragment key={id} >
                {articleAd.inreadAd}<Text className={`article-text ${item.alignment ? `text-align-${item.alignment}` : ''}`} element={item} />{articleAd.inlineAd}
              </Fragment>
            );
          case 'image':
            return <ArticleImage key={id} element={item}
              contentIndex={index} url={siteUrl} arcSite={arcSite} />;
          case 'oembed_response':
            return <Oembed key={id} element={item} className={`article-${item.subtype} width-full relative clear`} />;
          case 'interstitial_link':
            return <InterstitialLink className="article-interstitial" key={id} element={item} />;
          case 'header':
            return <Headline className={`article-middle-headline headline-size_${item.level} block font-bold overflow-auto padding-left-sm`} key={id} element={item} />;
          case 'gallery':
            return <GalleryEmbed
              key={id}
              element={item}
              index={index}
              arcSite={arcSite}
            />;
          default:
            return (
              <AdminMessage key={id} isAdmin={isAdmin} type="error">
                <p>{`No element of of type ${type} found.`}</p>
              </AdminMessage>
            );
        }
      })}
    </Layout>
  );
};

export default ArticleBody;

Take a look in the src/index.mdx file to see suggested implementations.

1.1.12

7 months ago

1.1.13

7 months ago

1.1.11

2 years ago

1.1.10

3 years ago

1.1.9

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago