Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add footer to the stories #297

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,9 @@
},
"peerDependencies": {
"react": ">=16.8.2"
},
"dependencies": {
"@babel/plugin-proposal-class-properties": "^7.18.6",
"clsx": "^2.0.0"
}
}
5 changes: 5 additions & 0 deletions src/.eslintrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
{
"settings": {
"react": {
"version": "detect"
}
},
"env": {
"jest": true
}
Expand Down
22 changes: 22 additions & 0 deletions src/components/Footer.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import React, { CSSProperties } from 'react';
import { FooterProps } from '../interfaces';
import clsx from 'clsx';

export function Footer ({footerElement , isOuterContainer} : FooterProps ) {
return (
<div className={clsx([styles.footer_wrapper , {position : isOuterContainer ? 'absolute' : 'static'}])} >
{footerElement}
</div>
);
};



const styles: Record<string, CSSProperties> = {
footer_wrapper: {
width: '100%',
bottom: 0,
left: 0,
},

};
5 changes: 4 additions & 1 deletion src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { getRenderer } from './util/renderers'
import { renderers as defaultRenderers } from './renderers/index';
import withHeader from './renderers/wrappers/withHeader'
import withSeeMore from './renderers/wrappers/withSeeMore'
import {WithFooterHOC} from './renderers/wrappers/WithFooter'

const ReactInstaStories = function (props: ReactInstaStoriesProps) {
let renderers = props.renderers ? props.renderers.concat(defaultRenderers) : defaultRenderers;
Expand Down Expand Up @@ -49,7 +50,7 @@ const ReactInstaStories = function (props: ReactInstaStoriesProps) {
}

const generateStories = (stories: Story[], renderers: { renderer: Renderer, tester: Tester }[]) => {
return stories.map(s => {
return stories && stories.map(s => {
let story: Story = {};

if (typeof s === 'string') {
Expand All @@ -64,6 +65,7 @@ const generateStories = (stories: Story[], renderers: { renderer: Renderer, test
story.content = renderer;
return story
})

};

ReactInstaStories.defaultProps = {
Expand All @@ -75,5 +77,6 @@ ReactInstaStories.defaultProps = {

export const WithHeader = withHeader;
export const WithSeeMore = withSeeMore;
export const withFooterHOC = WithFooterHOC;

export default ReactInstaStories
15 changes: 8 additions & 7 deletions src/interfaces.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ export type Renderer = React.FC<{
height?: NumberOrString;
loader?: JSX.Element;
header?: Function;
footer?: FooterProps;
storyStyles?: Object;
};
messageHandler: (type: string, data: any) => { ack: "OK" | "ERROR" };
Expand Down Expand Up @@ -112,7 +113,8 @@ export interface Story {
toggleMore: (show: boolean) => void;
action: Action;
}>;
header?: Header;
header?: HeaderProps;
footer?: FooterProps;
type?: string;
duration?: number;
styles?: object;
Expand All @@ -122,12 +124,6 @@ export interface Story {
preloadResource?: boolean;
}

export interface Header {
heading: string;
subheading: string;
profileImage: string;
}

export interface SeeMoreProps {
seeMoreContent: Function;
showContent: boolean;
Expand All @@ -145,6 +141,11 @@ export interface HeaderProps {
subheading: string;
}

export interface FooterProps {
footerElement?: React.ReactElement;
isOuterContainer?: boolean;
}

export interface ProgressProps {
width: number;
active: number;
Expand Down
56 changes: 30 additions & 26 deletions src/renderers/Image.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Spinner from "../components/Spinner";
import { Renderer, Tester } from "./../interfaces";
import WithHeader from "./wrappers/withHeader";
import WithSeeMore from "./wrappers/withSeeMore";
import { WithFooterHOC } from "./wrappers/WithFooter";

export const renderer: Renderer = ({ story, action, isPaused, config }) => {
const [loaded, setLoaded] = React.useState(false);
Expand All @@ -17,32 +18,35 @@ export const renderer: Renderer = ({ story, action, isPaused, config }) => {
action("play");
};
return (
<WithHeader {...{ story, globalHeader: config.header }}>
<WithSeeMore {...{ story, action }}>
<div>
<img style={computedStyles} src={story.url} onLoad={imageLoaded} />
{!loaded && (
<div
style={{
width: width,
height: height,
position: "absolute",
left: 0,
top: 0,
background: "rgba(0, 0, 0, 0.9)",
zIndex: 9,
display: "flex",
justifyContent: "center",
alignItems: "center",
color: "#ccc",
}}
>
{loader || <Spinner />}
</div>
)}
</div>
</WithSeeMore>
</WithHeader>
<WithFooterHOC footerElement={config?.footer?.footerElement} isOuterContainer={config?.footer?.isOuterContainer}>
<WithHeader {...{ story, globalHeader: config.header }}>
<WithSeeMore {...{ story, action }}>
<div>
<img style={computedStyles} src={story.url} onLoad={imageLoaded} />
{!loaded && (
<div
style={{
width: width,
height: height,
position: "absolute",
left: 0,
top: 0,
background: "rgba(0, 0, 0, 0.9)",
zIndex: 9,
display: "flex",
justifyContent: "center",
alignItems: "center",
color: "#ccc",
}}
>
{loader || <Spinner />}
</div>
)}
</div>
</WithSeeMore>
</WithHeader>
</WithFooterHOC>

);
};

Expand Down
79 changes: 41 additions & 38 deletions src/renderers/Video.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Spinner from "../components/Spinner";
import { Renderer, Tester } from "./../interfaces";
import WithHeader from "./wrappers/withHeader";
import WithSeeMore from "./wrappers/withSeeMore";
import { WithFooterHOC } from "./wrappers/WithFooter";

export const renderer: Renderer = ({
story,
Expand Down Expand Up @@ -57,44 +58,46 @@ export const renderer: Renderer = ({
};

return (
<WithHeader {...{ story, globalHeader: config.header }}>
<WithSeeMore {...{ story, action }}>
<div style={styles.videoContainer}>
<video
ref={vid}
style={computedStyles}
src={story.url}
controls={false}
onLoadedData={videoLoaded}
playsInline
onWaiting={onWaiting}
onPlaying={onPlaying}
muted={muted}
autoPlay
webkit-playsinline="true"
/>
{!loaded && (
<div
style={{
width: width,
height: height,
position: "absolute",
left: 0,
top: 0,
background: "rgba(0, 0, 0, 0.9)",
zIndex: 9,
display: "flex",
justifyContent: "center",
alignItems: "center",
color: "#ccc",
}}
>
{loader || <Spinner />}
</div>
)}
</div>
</WithSeeMore>
</WithHeader>
<WithFooterHOC footerElement={config?.footer?.footerElement} isOuterContainer={config?.footer?.isOuterContainer}>
<WithHeader {...{ story, globalHeader: config.header }}>
<WithSeeMore {...{ story, action }}>
<div style={styles.videoContainer}>
<video
ref={vid}
style={computedStyles}
src={story.url}
controls={false}
onLoadedData={videoLoaded}
playsInline
onWaiting={onWaiting}
onPlaying={onPlaying}
muted={muted}
autoPlay
webkit-playsinline="true"
/>
{!loaded && (
<div
style={{
width: width,
height: height,
position: "absolute",
left: 0,
top: 0,
background: "rgba(0, 0, 0, 0.9)",
zIndex: 9,
display: "flex",
justifyContent: "center",
alignItems: "center",
color: "#ccc",
}}
>
{loader || <Spinner />}
</div>
)}
</div>
</WithSeeMore>
</WithHeader>
</WithFooterHOC>
);
};

Expand Down
17 changes: 17 additions & 0 deletions src/renderers/wrappers/WithFooter.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import React from 'react';
import { Footer } from '../../components/Footer';
import { FooterProps } from '../../interfaces';

interface Props extends FooterProps {
children : React.ReactElement;

}

export function WithFooterHOC({children , footerElement , isOuterContainer} : Props){
return (
<>
{children}
{footerElement && <Footer footerElement={footerElement} isOuterContainer={isOuterContainer} />}
</>
);
};
1 change: 0 additions & 1 deletion src/util/use-is-mounted.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { useCallback, useEffect, useRef } from "react";

function useIsMounted() {
const isMounted = useRef(false);

useEffect(() => {
isMounted.current = true;

Expand Down
7 changes: 6 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
"experimentalDecorators": true,
"declaration": true,
"declarationDir": "dist",
"moduleResolution": "node"
"moduleResolution": "node",
"paths" : {
"@/*" : [
"./src/components"
]
}
}
}