refactor: replace relative paths with absolute ones in import statements
This commit is contained in:
parent
20418b4c1f
commit
505ff4d839
37 changed files with 153 additions and 183 deletions
|
@ -1,7 +1,6 @@
|
||||||
import { useContext } from 'react';
|
import { useContext } from 'react';
|
||||||
import { themeContext } from '../../context/theme-context';
|
import { themeContext } from 'src/context/theme-context';
|
||||||
|
import styles from 'src/styles/modules/components/buttons/themeToggler.module.scss';
|
||||||
import styles from '../../styles/modules/components/buttons/themeToggler.module.scss';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
className: string;
|
className: string;
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import Layout from '../../layouts/Layout';
|
import Layout from 'src/layouts/Layout';
|
||||||
import Meta from '../meta/Meta';
|
import Meta from 'src/components/meta/Meta';
|
||||||
|
import styles from 'src/styles/modules/components/error/error-info.module.scss';
|
||||||
import styles from '../../styles/modules/components/error/error-info.module.scss';
|
|
||||||
|
|
||||||
// for details regarding the svg, go to sadgnu.svg file
|
// for details regarding the svg, go to sadgnu.svg file
|
||||||
// description copied verbatim from https://www.gnu.org/graphics/sventsitsky-sadgnu.html
|
// description copied verbatim from https://www.gnu.org/graphics/sventsitsky-sadgnu.html
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Companies } from '../../interfaces/shared/search';
|
import { Companies } from 'src/interfaces/shared/search';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
|
||||||
import styles from '../../styles/modules/components/find/company.module.scss';
|
import styles from 'src/styles/modules/components/find/company.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
company: Companies[0];
|
company: Companies[0];
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import { Keywords } from '../../interfaces/shared/search';
|
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import { Keywords } from 'src/interfaces/shared/search';
|
||||||
import styles from '../../styles/modules/components/find/keyword.module.scss';
|
import styles from 'src/styles/modules/components/find/keyword.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
keyword: Keywords[0];
|
keyword: Keywords[0];
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { People } from '../../interfaces/shared/search';
|
|
||||||
import Image from 'next/future/image';
|
import Image from 'next/future/image';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { modifyIMDbImg } from '../../utils/helpers';
|
import { People } from 'src/interfaces/shared/search';
|
||||||
import styles from '../../styles/modules/components/find/person.module.scss';
|
import { modifyIMDbImg } from 'src/utils/helpers';
|
||||||
|
import styles from 'src/styles/modules/components/find/person.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
person: People[0];
|
person: People[0];
|
||||||
|
@ -21,7 +21,7 @@ const Person = ({ person }: Props) => {
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<svg className={styles.imgNA}>
|
<svg className={styles.imgNA}>
|
||||||
<use href="/svg/sprite.svg#icon-image-slash" />
|
<use href='/svg/sprite.svg#icon-image-slash' />
|
||||||
</svg>
|
</svg>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -32,7 +32,7 @@ const Person = ({ person }: Props) => {
|
||||||
{person.aka && <p>{person.aka}</p>}
|
{person.aka && <p>{person.aka}</p>}
|
||||||
{person.jobCateogry && <p>{person.jobCateogry}</p>}
|
{person.jobCateogry && <p>{person.jobCateogry}</p>}
|
||||||
{(person.knownForTitle || person.knownInYear) && (
|
{(person.knownForTitle || person.knownInYear) && (
|
||||||
<ul className={styles.basicInfo} aria-label="quick facts">
|
<ul className={styles.basicInfo} aria-label='quick facts'>
|
||||||
{person.knownForTitle && <li>{person.knownForTitle}</li>}
|
{person.knownForTitle && <li>{person.knownForTitle}</li>}
|
||||||
{person.knownInYear && <li>{person.knownInYear}</li>}
|
{person.knownInYear && <li>{person.knownInYear}</li>}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import { Titles } from '../../interfaces/shared/search';
|
|
||||||
import Image from 'next/future/image';
|
import Image from 'next/future/image';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { modifyIMDbImg } from '../../utils/helpers';
|
import { Titles } from 'src/interfaces/shared/search';
|
||||||
|
import { modifyIMDbImg } from 'src/utils/helpers';
|
||||||
import styles from '../../styles/modules/components/find/title.module.scss';
|
import styles from 'src/styles/modules/components/find/title.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
title: Titles[0];
|
title: Titles[0];
|
||||||
|
@ -22,7 +21,7 @@ const Title = ({ title }: Props) => {
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<svg className={styles.imgNA}>
|
<svg className={styles.imgNA}>
|
||||||
<use href="/svg/sprite.svg#icon-image-slash" />
|
<use href='/svg/sprite.svg#icon-image-slash' />
|
||||||
</svg>
|
</svg>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -30,7 +29,7 @@ const Title = ({ title }: Props) => {
|
||||||
<Link href={`/title/${title.id}`}>
|
<Link href={`/title/${title.id}`}>
|
||||||
<a className={`heading ${styles.heading}`}>{title.name}</a>
|
<a className={`heading ${styles.heading}`}>{title.name}</a>
|
||||||
</Link>
|
</Link>
|
||||||
<ul aria-label="quick facts" className={styles.basicInfo}>
|
<ul aria-label='quick facts' className={styles.basicInfo}>
|
||||||
{title.type && <li>{title.type}</li>}
|
{title.type && <li>{title.type}</li>}
|
||||||
{title.sAndE && <li>{title.sAndE}</li>}
|
{title.sAndE && <li>{title.sAndE}</li>}
|
||||||
{title.releaseYear && <li>{title.releaseYear}</li>}
|
{title.releaseYear && <li>{title.releaseYear}</li>}
|
||||||
|
@ -42,11 +41,11 @@ const Title = ({ title }: Props) => {
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
{title.seriesId && (
|
{title.seriesId && (
|
||||||
<ul aria-label="quick series facts" className={styles.seriesInfo}>
|
<ul aria-label='quick series facts' className={styles.seriesInfo}>
|
||||||
{title.seriesType && <li>{title.seriesType}</li>}
|
{title.seriesType && <li>{title.seriesType}</li>}
|
||||||
<li>
|
<li>
|
||||||
<Link href={`/title/${title.seriesId}`}>
|
<Link href={`/title/${title.seriesId}`}>
|
||||||
<a className="link">{title.seriesName}</a>
|
<a className='link'>{title.seriesName}</a>
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
{title.seriesReleaseYear && <li>{title.seriesReleaseYear}</li>}
|
{title.seriesReleaseYear && <li>{title.seriesReleaseYear}</li>}
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import Find from '../../interfaces/shared/search';
|
|
||||||
import Company from './Company';
|
import Company from './Company';
|
||||||
import Person from './Person';
|
import Person from './Person';
|
||||||
import Title from './Title';
|
import Title from './Title';
|
||||||
|
|
||||||
import styles from '../../styles/modules/components/find/results.module.scss';
|
|
||||||
import Keyword from './Keyword';
|
import Keyword from './Keyword';
|
||||||
import { getResTitleTypeHeading } from '../../utils/helpers';
|
import Find from 'src/interfaces/shared/search';
|
||||||
|
import { getResTitleTypeHeading } from 'src/utils/helpers';
|
||||||
|
import styles from 'src/styles/modules/components/find/results.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
results: Find | null;
|
results: Find | null;
|
||||||
|
@ -43,11 +42,11 @@ const Results = ({ results, className, title }: Props) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<article className={`${className} ${styles.results}`}>
|
<article className={`${className} ${styles.results}`}>
|
||||||
<h1 className="heading heading__primary">Results for '{title}'</h1>
|
<h1 className='heading heading__primary'>Results for '{title}'</h1>
|
||||||
<div className={styles.results__list}>
|
<div className={styles.results__list}>
|
||||||
{!!titles.length && (
|
{!!titles.length && (
|
||||||
<section className={styles.titles}>
|
<section className={styles.titles}>
|
||||||
<h2 className="heading heading__secondary">
|
<h2 className='heading heading__secondary'>
|
||||||
{titlesSectionHeading}
|
{titlesSectionHeading}
|
||||||
</h2>
|
</h2>
|
||||||
<ul className={styles.titles__list}>
|
<ul className={styles.titles__list}>
|
||||||
|
@ -59,7 +58,7 @@ const Results = ({ results, className, title }: Props) => {
|
||||||
)}
|
)}
|
||||||
{!!people.length && (
|
{!!people.length && (
|
||||||
<section className={styles.people}>
|
<section className={styles.people}>
|
||||||
<h2 className="heading heading__secondary">People</h2>
|
<h2 className='heading heading__secondary'>People</h2>
|
||||||
<ul className={styles.people__list}>
|
<ul className={styles.people__list}>
|
||||||
{people.map(person => (
|
{people.map(person => (
|
||||||
<Person person={person} key={person.id} />
|
<Person person={person} key={person.id} />
|
||||||
|
@ -69,7 +68,7 @@ const Results = ({ results, className, title }: Props) => {
|
||||||
)}
|
)}
|
||||||
{!!companies.length && (
|
{!!companies.length && (
|
||||||
<section className={styles.people}>
|
<section className={styles.people}>
|
||||||
<h2 className="heading heading__secondary">Companies</h2>
|
<h2 className='heading heading__secondary'>Companies</h2>
|
||||||
<ul className={styles.people__list}>
|
<ul className={styles.people__list}>
|
||||||
{companies.map(company => (
|
{companies.map(company => (
|
||||||
<Company company={company} key={company.id} />
|
<Company company={company} key={company.id} />
|
||||||
|
@ -79,7 +78,7 @@ const Results = ({ results, className, title }: Props) => {
|
||||||
)}
|
)}
|
||||||
{!!keywords.length && (
|
{!!keywords.length && (
|
||||||
<section className={styles.people}>
|
<section className={styles.people}>
|
||||||
<h2 className="heading heading__secondary">Keywords</h2>
|
<h2 className='heading heading__secondary'>Keywords</h2>
|
||||||
<ul className={styles.people__list}>
|
<ul className={styles.people__list}>
|
||||||
{keywords.map(keyword => (
|
{keywords.map(keyword => (
|
||||||
<Keyword keyword={keyword} key={keyword.id} />
|
<Keyword keyword={keyword} key={keyword.id} />
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
import { useRouter } from 'next/router';
|
|
||||||
import { ChangeEventHandler, FormEventHandler, useRef, useState } from 'react';
|
import { ChangeEventHandler, FormEventHandler, useRef, useState } from 'react';
|
||||||
import { cleanQueryStr } from '../../../utils/helpers';
|
import { useRouter } from 'next/router';
|
||||||
import { resultTypes, resultTitleTypes } from '../../../utils/constants/find';
|
import { cleanQueryStr } from 'src/utils/helpers';
|
||||||
|
import { QueryTypes } from 'src/interfaces/shared/search';
|
||||||
import styles from '../../../styles/modules/components/form/find.module.scss';
|
import { resultTypes, resultTitleTypes } from 'src/utils/constants/find';
|
||||||
import { QueryTypes } from '../../../interfaces/shared/search';
|
import styles from 'src/styles/modules/components/form/find.module.scss';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* helper function to render similar radio btns. saves from boilerplate.
|
* helper function to render similar radio btns. saves from boilerplate.
|
||||||
|
@ -19,11 +18,11 @@ const renderRadioBtns = (
|
||||||
return data.types.map(({ name, val }) => (
|
return data.types.map(({ name, val }) => (
|
||||||
<p className={parentClass} key={val}>
|
<p className={parentClass} key={val}>
|
||||||
<input
|
<input
|
||||||
type="radio"
|
type='radio'
|
||||||
name={data.key}
|
name={data.key}
|
||||||
id={`${data.key}:${val}`}
|
id={`${data.key}:${val}`}
|
||||||
value={val}
|
value={val}
|
||||||
className="visually-hidden"
|
className='visually-hidden'
|
||||||
/>
|
/>
|
||||||
<label htmlFor={`${data.key}:${val}`}>{name}</label>
|
<label htmlFor={`${data.key}:${val}`}>{name}</label>
|
||||||
</p>
|
</p>
|
||||||
|
@ -66,30 +65,30 @@ const Form = ({ className }: Props) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form
|
<form
|
||||||
action="/find"
|
action='/find'
|
||||||
onSubmit={submitHandler}
|
onSubmit={submitHandler}
|
||||||
ref={formRef}
|
ref={formRef}
|
||||||
className={`${className} ${styles.form}`}
|
className={`${className} ${styles.form}`}
|
||||||
>
|
>
|
||||||
<p className="heading heading__primary">Search</p>
|
<p className='heading heading__primary'>Search</p>
|
||||||
|
|
||||||
<p className={styles.searchbar}>
|
<p className={styles.searchbar}>
|
||||||
<svg
|
<svg
|
||||||
className={`icon ${styles.searchbar__icon}`}
|
className={`icon ${styles.searchbar__icon}`}
|
||||||
focusable="false"
|
focusable='false'
|
||||||
aria-hidden="true"
|
aria-hidden='true'
|
||||||
role="img"
|
role='img'
|
||||||
>
|
>
|
||||||
<use href="/svg/sprite.svg#icon-search"></use>
|
<use href='/svg/sprite.svg#icon-search'></use>
|
||||||
</svg>
|
</svg>
|
||||||
<input
|
<input
|
||||||
id="searchbar"
|
id='searchbar'
|
||||||
type="search"
|
type='search'
|
||||||
name="q"
|
name='q'
|
||||||
placeholder="movies, people..."
|
placeholder='movies, people...'
|
||||||
className={styles.searchbar__input}
|
className={styles.searchbar__input}
|
||||||
/>
|
/>
|
||||||
<label className="visually-hidden" htmlFor="searchbar">
|
<label className='visually-hidden' htmlFor='searchbar'>
|
||||||
Search for anything
|
Search for anything
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
|
@ -106,14 +105,14 @@ const Form = ({ className }: Props) => {
|
||||||
{renderRadioBtns(resultTitleTypes, styles.titleType)}
|
{renderRadioBtns(resultTitleTypes, styles.titleType)}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<p className={styles.exact}>
|
<p className={styles.exact}>
|
||||||
<label htmlFor="exact">Exact Matches</label>
|
<label htmlFor='exact'>Exact Matches</label>
|
||||||
<input type="checkbox" name="exact" id="exact" value="true" />
|
<input type='checkbox' name='exact' id='exact' value='true' />
|
||||||
</p>
|
</p>
|
||||||
<div className={styles.buttons}>
|
<div className={styles.buttons}>
|
||||||
<button type="reset" className={styles.button}>
|
<button type='reset' className={styles.button}>
|
||||||
Clear
|
Clear
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" className={styles.button}>
|
<button type='submit' className={styles.button}>
|
||||||
Submit
|
Submit
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import styles from '../../styles/modules/components/loaders/progress-bar.module.scss';
|
import styles from 'src/styles/modules/components/loaders/progress-bar.module.scss';
|
||||||
|
|
||||||
const ProgressBar = () => {
|
const ProgressBar = () => {
|
||||||
return <span className={styles.progress} role='progressbar'></span>;
|
return <span className={styles.progress} role='progressbar'></span>;
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
import { Fragment } from 'react';
|
import { Fragment } from 'react';
|
||||||
import Image from 'next/future/image';
|
import Image from 'next/future/image';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import { Basic } from 'src/interfaces/shared/title';
|
||||||
import {
|
import {
|
||||||
formatNumber,
|
formatNumber,
|
||||||
formatTime,
|
formatTime,
|
||||||
getProxiedIMDbImgUrl,
|
getProxiedIMDbImgUrl,
|
||||||
modifyIMDbImg,
|
modifyIMDbImg,
|
||||||
} from '../../utils/helpers';
|
} from 'src/utils/helpers';
|
||||||
import { Basic } from '../../interfaces/shared/title';
|
import styles from 'src/styles/modules/components/title/basic.module.scss';
|
||||||
import styles from '../../styles/modules/components/title/basic.module.scss';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
className: string;
|
className: string;
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import Image from 'next/future/image';
|
import Image from 'next/future/image';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { Cast } from '../../interfaces/shared/title';
|
import { Cast } from 'src/interfaces/shared/title';
|
||||||
import { modifyIMDbImg } from '../../utils/helpers';
|
import { modifyIMDbImg } from 'src/utils/helpers';
|
||||||
|
import styles from 'src/styles/modules/components/title/cast.module.scss';
|
||||||
import styles from '../../styles/modules/components/title/cast.module.scss';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
className: string;
|
className: string;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { Fragment } from 'react';
|
import { DidYouKnow } from 'src/interfaces/shared/title';
|
||||||
import { DidYouKnow } from '../../interfaces/shared/title';
|
import styles from 'src/styles/modules/components/title/did-you-know.module.scss';
|
||||||
import styles from '../../styles/modules/components/title/did-you-know.module.scss';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
data: DidYouKnow;
|
data: DidYouKnow;
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
import { Info } from '../../interfaces/shared/title';
|
import { Info } from 'src/interfaces/shared/title';
|
||||||
import { formatMoney, formatTime } from '../../utils/helpers';
|
import { formatMoney, formatTime } from 'src/utils/helpers';
|
||||||
|
import styles from 'src/styles/modules/components/title/info.module.scss';
|
||||||
import styles from '../../styles/modules/components/title/info.module.scss';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
info: Info;
|
info: Info;
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import Image from 'next/future/image';
|
import Image from 'next/future/image';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { Media } from '../../interfaces/shared/title';
|
import { Media } from 'src/interfaces/shared/title';
|
||||||
import { getProxiedIMDbImgUrl, modifyIMDbImg } from '../../utils/helpers';
|
import { getProxiedIMDbImgUrl, modifyIMDbImg } from 'src/utils/helpers';
|
||||||
|
import styles from 'src/styles/modules/components/title/media.module.scss';
|
||||||
import styles from '../../styles/modules/components/title/media.module.scss';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
className: string;
|
className: string;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import Image from 'next/future/image';
|
import Image from 'next/future/image';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { MoreLikeThis } from '../../interfaces/shared/title';
|
import { MoreLikeThis } from 'src/interfaces/shared/title';
|
||||||
import { formatNumber, modifyIMDbImg } from '../../utils/helpers';
|
import { formatNumber, modifyIMDbImg } from 'src/utils/helpers';
|
||||||
import styles from '../../styles/modules/components/title/more-like-this.module.scss';
|
import styles from 'src/styles/modules/components/title/more-like-this.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
className: string;
|
className: string;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { Reviews } from '../../interfaces/shared/title';
|
import { Reviews } from 'src/interfaces/shared/title';
|
||||||
import { formatNumber } from '../../utils/helpers';
|
import { formatNumber } from 'src/utils/helpers';
|
||||||
import styles from '../../styles/modules/components/title/reviews.module.scss';
|
import styles from 'src/styles/modules/components/title/reviews.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
reviews: Reviews;
|
reviews: Reviews;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import React, { useState, createContext, ReactNode } from 'react';
|
import React, { useState, createContext, ReactNode } from 'react';
|
||||||
import { isLocalStorageAvailable } from '../utils/helpers';
|
import { isLocalStorageAvailable } from 'src/utils/helpers';
|
||||||
|
|
||||||
const getInitialTheme = () => {
|
const getInitialTheme = () => {
|
||||||
// for server-side rendering, as window isn't availabe there
|
// for server-side rendering, as window isn't availabe there
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
import { ResultMetaTitleTypes, ResultMetaTypes } from '../shared/search';
|
import {
|
||||||
|
ResultMetaTitleTypes,
|
||||||
|
ResultMetaTypes,
|
||||||
|
} from 'src/interfaces/shared/search';
|
||||||
|
|
||||||
export default interface RawFind {
|
export default interface RawFind {
|
||||||
props: {
|
props: {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import cleanFind from '../../utils/cleaners/find';
|
import cleanFind from 'src/utils/cleaners/find';
|
||||||
import { resultTitleTypes, resultTypes } from '../../utils/constants/find';
|
import { resultTitleTypes, resultTypes } from 'src/utils/constants/find';
|
||||||
|
|
||||||
type BasicSearch = ReturnType<typeof cleanFind>;
|
type BasicSearch = ReturnType<typeof cleanFind>;
|
||||||
export type { BasicSearch as default };
|
export type { BasicSearch as default };
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import cleanTitle from '../../utils/cleaners/title';
|
import cleanTitle from 'src/utils/cleaners/title';
|
||||||
import title from '../../utils/fetchers/title';
|
import title from 'src/utils/fetchers/title';
|
||||||
|
|
||||||
export type AxiosTitleRes = Awaited<ReturnType<typeof title>>;
|
export type AxiosTitleRes = Awaited<ReturnType<typeof title>>;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
import { FC } from 'react';
|
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
|
|
||||||
import styles from '../styles/modules/layout/footer.module.scss';
|
import styles from '../styles/modules/layout/footer.module.scss';
|
||||||
|
|
||||||
const Footer: FC = () => {
|
const Footer = () => {
|
||||||
const { pathname } = useRouter();
|
const { pathname } = useRouter();
|
||||||
const className = (link: string) =>
|
const className = (link: string) =>
|
||||||
pathname === link ? styles.nav__linkActive : styles.nav__link;
|
pathname === link ? styles.nav__linkActive : styles.nav__link;
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import ThemeToggler from '../components/buttons/ThemeToggler';
|
import ThemeToggler from 'src/components/buttons/ThemeToggler';
|
||||||
|
import styles from 'src/styles/modules/layout/header.module.scss';
|
||||||
import styles from '../styles/modules/layout/header.module.scss';
|
|
||||||
|
|
||||||
type Props = { full?: boolean; children?: ReactNode };
|
type Props = { full?: boolean; children?: ReactNode };
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import ErrorInfo from '../components/error/ErrorInfo';
|
import ErrorInfo from 'src/components/error/ErrorInfo';
|
||||||
|
|
||||||
const Error404 = () => {
|
const Error404 = () => {
|
||||||
return <ErrorInfo message='Not found, sorry.' statusCode={404} />;
|
return <ErrorInfo message='Not found, sorry.' statusCode={404} />;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import ErrorInfo from '../components/error/ErrorInfo';
|
import ErrorInfo from 'src/components/error/ErrorInfo';
|
||||||
|
|
||||||
const Error500 = () => {
|
const Error500 = () => {
|
||||||
return <ErrorInfo message='Server messed up, sorry.' statusCode={500} />;
|
return <ErrorInfo message='Server messed up, sorry.' statusCode={500} />;
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
import type { AppProps } from 'next/app';
|
import { AppProps } from 'next/app';
|
||||||
import usePageLoading from '../hooks/usePageLoading';
|
import ProgressBar from 'src/components/loaders/ProgressBar';
|
||||||
import ProgressBar from '../components/loaders/ProgressBar';
|
import ErrorBoundary from 'src/components/error/ErrorBoundary';
|
||||||
import ErrorBoundary from '../components/error/ErrorBoundary';
|
import ThemeProvider from 'src/context/theme-context';
|
||||||
import ThemeProvider from '../context/theme-context';
|
import usePageLoading from 'src/hooks/usePageLoading';
|
||||||
|
import 'src/styles/main.scss';
|
||||||
import '../styles/main.scss';
|
|
||||||
|
|
||||||
const ModifiedApp = ({ Component, pageProps }: AppProps) => {
|
const ModifiedApp = ({ Component, pageProps }: AppProps) => {
|
||||||
const { isPageLoading, key } = usePageLoading();
|
const { isPageLoading, key } = usePageLoading();
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
/* eslint-disable react/no-unescaped-entities */
|
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import Meta from '../../components/meta/Meta';
|
import Meta from 'src/components/meta/Meta';
|
||||||
import Layout from '../../layouts/Layout';
|
import Layout from 'src/layouts/Layout';
|
||||||
|
import styles from 'src/styles/modules/pages/about/about.module.scss';
|
||||||
import styles from '../../styles/modules/pages/about/about.module.scss';
|
|
||||||
|
|
||||||
const About = () => {
|
const About = () => {
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { NextApiRequest, NextApiResponse } from 'next';
|
import { NextApiRequest, NextApiResponse } from 'next';
|
||||||
import redis from '../../utils/redis';
|
import redis from 'src/utils/redis';
|
||||||
import axiosInstance from '../../utils/axiosInstance';
|
import axiosInstance from 'src/utils/axiosInstance';
|
||||||
|
|
||||||
const getCleanReqHeaders = (headers: NextApiRequest['headers']) => ({
|
const getCleanReqHeaders = (headers: NextApiRequest['headers']) => ({
|
||||||
...(headers.accept && { accept: headers.accept }),
|
...(headers.accept && { accept: headers.accept }),
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import Meta from '../../components/meta/Meta';
|
import Meta from 'src/components/meta/Meta';
|
||||||
import Layout from '../../layouts/Layout';
|
import Layout from 'src/layouts/Layout';
|
||||||
|
import styles from 'src/styles/modules/pages/contact/contact.module.scss';
|
||||||
import styles from '../../styles/modules/pages/contact/contact.module.scss';
|
|
||||||
|
|
||||||
const Contact = () => {
|
const Contact = () => {
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
import { GetServerSideProps } from 'next';
|
import { GetServerSideProps } from 'next';
|
||||||
|
import Layout from 'src/layouts/Layout';
|
||||||
import Layout from '../../layouts/Layout';
|
import ErrorInfo from 'src/components/error/ErrorInfo';
|
||||||
import ErrorInfo from '../../components/error/ErrorInfo';
|
import Meta from 'src/components/meta/Meta';
|
||||||
import Meta from '../../components/meta/Meta';
|
import Results from 'src/components/find';
|
||||||
import Results from '../../components/find';
|
import Form from 'src/components/forms/find';
|
||||||
import basicSearch from '../../utils/fetchers/basicSearch';
|
import Find, { FindQueryParams } from 'src/interfaces/shared/search';
|
||||||
import Form from '../../components/forms/find';
|
import { AppError } from 'src/interfaces/shared/error';
|
||||||
|
import basicSearch from 'src/utils/fetchers/basicSearch';
|
||||||
import Find, { FindQueryParams } from '../../interfaces/shared/search';
|
import { cleanQueryStr } from 'src/utils/helpers';
|
||||||
import { AppError } from '../../interfaces/shared/error';
|
import styles from 'src/styles/modules/pages/find/find.module.scss';
|
||||||
import { cleanQueryStr } from '../../utils/helpers';
|
|
||||||
|
|
||||||
import styles from '../../styles/modules/pages/find/find.module.scss';
|
|
||||||
|
|
||||||
type Props =
|
type Props =
|
||||||
| { data: { title: string; results: Find }; error: null }
|
| { data: { title: string; results: Find }; error: null }
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import Meta from '../../components/meta/Meta';
|
import Meta from 'src/components/meta/Meta';
|
||||||
import Layout from '../../layouts/Layout';
|
import Layout from 'src/layouts/Layout';
|
||||||
import packageInfo from '../../../package.json';
|
import packageInfo from 'src/../package.json';
|
||||||
import styles from '../../styles/modules/pages/privacy/privacy.module.scss';
|
import styles from 'src/styles/modules/pages/privacy/privacy.module.scss';
|
||||||
|
|
||||||
const Privacy = () => {
|
const Privacy = () => {
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -1,27 +1,16 @@
|
||||||
// external
|
// external
|
||||||
import { GetServerSideProps, GetStaticProps, GetStaticPaths } from 'next'
|
import { GetServerSideProps, GetStaticProps, GetStaticPaths } from 'next';
|
||||||
import Head from 'next/head';
|
import Head from 'next/head';
|
||||||
import { useRouter } from 'next/router';
|
import Meta from 'src/components/meta/Meta';
|
||||||
// local
|
import Layout from 'src/layouts/Layout';
|
||||||
import Meta from '../../../components/meta/Meta';
|
import ErrorInfo from 'src/components/error/ErrorInfo';
|
||||||
import Layout from '../../../layouts/Layout';
|
// prettier-ignore
|
||||||
import ErrorInfo from '../../../components/error/ErrorInfo';
|
import { Basic, Cast, DidYouKnow, Info, Media, MoreLikeThis, Reviews } from 'src/components/title';
|
||||||
import {
|
import Title from 'src/interfaces/shared/title';
|
||||||
Basic,
|
import { AppError } from 'src/interfaces/shared/error';
|
||||||
Cast,
|
import title from 'src/utils/fetchers/title';
|
||||||
DidYouKnow,
|
import { getProxiedIMDbImgUrl } from 'src/utils/helpers';
|
||||||
Info,
|
import styles from 'src/styles/modules/pages/title/title.module.scss';
|
||||||
Media,
|
|
||||||
MoreLikeThis,
|
|
||||||
Reviews,
|
|
||||||
} from '../../../components/title';
|
|
||||||
// misc
|
|
||||||
import Title from '../../../interfaces/shared/title';
|
|
||||||
import { AppError } from '../../../interfaces/shared/error';
|
|
||||||
import title from '../../../utils/fetchers/title';
|
|
||||||
import { getProxiedIMDbImgUrl } from '../../../utils/helpers';
|
|
||||||
// styles
|
|
||||||
import styles from '../../../styles/modules/pages/title/title.module.scss';
|
|
||||||
|
|
||||||
type Props = { data: Title; error: null } | { error: AppError; data: null };
|
type Props = { data: Title; error: null } | { error: AppError; data: null };
|
||||||
|
|
||||||
|
@ -49,7 +38,7 @@ const TitleInfo = ({ data, error }: Props) => {
|
||||||
/>
|
/>
|
||||||
<Head>
|
<Head>
|
||||||
<meta
|
<meta
|
||||||
title="og:image"
|
title='og:image'
|
||||||
content={
|
content={
|
||||||
data.basic.poster?.url
|
data.basic.poster?.url
|
||||||
? getProxiedIMDbImgUrl(data.basic.poster?.url)
|
? getProxiedIMDbImgUrl(data.basic.poster?.url)
|
||||||
|
@ -73,23 +62,23 @@ const TitleInfo = ({ data, error }: Props) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// TO-DO: make a getServerSideProps wrapper for handling errors
|
// TO-DO: make a getServerSideProps wrapper for handling errors
|
||||||
export const getServerSideProps: GetServerSideProps = async (ctx) => {
|
export const getServerSideProps: GetServerSideProps = async ctx => {
|
||||||
const titleId = ctx.params!.titleId as string
|
const titleId = ctx.params!.titleId as string;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = await title(titleId)
|
const data = await title(titleId);
|
||||||
|
|
||||||
return { props: { data, error: null } }
|
return { props: { data, error: null } };
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
const { message, statusCode } = error
|
const { message, statusCode } = error;
|
||||||
ctx.res.statusCode = statusCode
|
ctx.res.statusCode = statusCode;
|
||||||
ctx.res.statusMessage = message
|
ctx.res.statusMessage = message;
|
||||||
|
|
||||||
return { props: { error: { message, statusCode }, data: null } }
|
return { props: { error: { message, statusCode }, data: null } };
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export default TitleInfo
|
export default TitleInfo;
|
||||||
|
|
||||||
// could've used getStaticProps instead of getServerSideProps, but meh.
|
// could've used getStaticProps instead of getServerSideProps, but meh.
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import RawFind from '../../interfaces/misc/rawFind';
|
import RawFind from 'src/interfaces/misc/rawFind';
|
||||||
|
|
||||||
const formatSAndE = (
|
const formatSAndE = (
|
||||||
season: string | undefined,
|
season: string | undefined,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import RawTitle from '../../interfaces/misc/rawTitle';
|
import RawTitle from 'src/interfaces/misc/rawTitle';
|
||||||
import { formatDate } from '../helpers';
|
import { formatDate } from 'src/utils/helpers';
|
||||||
|
|
||||||
const cleanTitle = (rawData: RawTitle) => {
|
const cleanTitle = (rawData: RawTitle) => {
|
||||||
const {
|
const {
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
// external deps
|
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
// local files
|
import RawFind from 'src/interfaces/misc/rawFind';
|
||||||
import axiosInstance from '../axiosInstance';
|
import axiosInstance from 'src/utils/axiosInstance';
|
||||||
import { AppError } from '../helpers';
|
import { AppError } from 'src/utils/helpers';
|
||||||
import RawFind from '../../interfaces/misc/rawFind';
|
import cleanFind from 'src/utils/cleaners/find';
|
||||||
import cleanFind from '../cleaners/find';
|
|
||||||
|
|
||||||
const basicSearch = async (queryStr: string) => {
|
const basicSearch = async (queryStr: string) => {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
// external deps
|
|
||||||
import * as cheerio from 'cheerio';
|
import * as cheerio from 'cheerio';
|
||||||
// local files
|
import RawTitle from 'src/interfaces/misc/rawTitle';
|
||||||
import axiosInstance from '../axiosInstance';
|
import axiosInstance from 'src/utils/axiosInstance';
|
||||||
import cleanTitle from '../cleaners/title';
|
import cleanTitle from 'src/utils/cleaners/title';
|
||||||
import { AppError } from '../helpers';
|
import { AppError } from 'src/utils/helpers';
|
||||||
// interfaces
|
|
||||||
import RawTitle from '../../interfaces/misc/rawTitle';
|
|
||||||
|
|
||||||
const title = async (titleId: string) => {
|
const title = async (titleId: string) => {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import {
|
import {
|
||||||
ResultMetaTitleTypes,
|
ResultMetaTitleTypes,
|
||||||
ResultMetaTypes,
|
ResultMetaTypes,
|
||||||
} from '../interfaces/shared/search';
|
} from 'src/interfaces/shared/search';
|
||||||
import { resultTitleTypes } from './constants/find';
|
import { resultTitleTypes } from './constants/find';
|
||||||
|
|
||||||
export const formatTime = (timeInSecs: number) => {
|
export const formatTime = (timeInSecs: number) => {
|
||||||
|
|
|
@ -13,7 +13,11 @@
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"jsx": "preserve",
|
"jsx": "preserve",
|
||||||
"incremental": true
|
"incremental": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"src": ["src/*"]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||||
"exclude": ["node_modules", "dev"]
|
"exclude": ["node_modules", "dev"]
|
||||||
|
|
Loading…
Reference in a new issue