feat: tooltip foundation (#2950)

* feat: add foundation for tooltips

* fix: add lang

* refactor: remove React import where no longer necessary
This commit is contained in:
Ryan Cohen
2022-08-19 19:35:50 +09:00
committed by GitHub
parent 36d17fed6e
commit 16545eec22
241 changed files with 315 additions and 273 deletions

View File

@@ -7,6 +7,7 @@ module.exports = {
'plugin:jsx-a11y/recommended', 'plugin:jsx-a11y/recommended',
'plugin:react/recommended', 'plugin:react/recommended',
'plugin:react-hooks/recommended', 'plugin:react-hooks/recommended',
'plugin:react/jsx-runtime',
'prettier', 'prettier',
], ],
parserOptions: { parserOptions: {

View File

@@ -72,6 +72,7 @@
"react-intersection-observer": "9.4.0", "react-intersection-observer": "9.4.0",
"react-intl": "6.0.5", "react-intl": "6.0.5",
"react-markdown": "8.0.3", "react-markdown": "8.0.3",
"react-popper-tooltip": "^4.4.2",
"react-select": "5.4.0", "react-select": "5.4.0",
"react-spring": "9.5.2", "react-spring": "9.5.2",
"react-toast-notifications": "2.5.1", "react-toast-notifications": "2.5.1",

View File

@@ -27,7 +27,7 @@ class PGPEncryptor extends Transform {
// just save the whole message // just save the whole message
_transform = ( _transform = (
chunk: any, chunk: Uint8Array,
_encoding: BufferEncoding, _encoding: BufferEncoding,
callback: TransformCallback callback: TransformCallback
): void => { ): void => {
@@ -185,6 +185,9 @@ class PGPEncryptor extends Transform {
} }
export const openpgpEncrypt = (options: EncryptorOptions) => { export const openpgpEncrypt = (options: EncryptorOptions) => {
// Disabling this line because I don't want to fix it but I am tired
// of seeing the lint warning
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return function (mail: any, callback: () => unknown): void { return function (mail: any, callback: () => unknown): void {
if (!options.encryptionKeys.length) { if (!options.encryptionKeys.length) {
setImmediate(callback); setImmediate(callback);

View File

@@ -11,7 +11,7 @@ interface GotifyPayload {
title: string; title: string;
message: string; message: string;
priority: number; priority: number;
extras: any; extras: Record<string, unknown>;
} }
class GotifyAgent class GotifyAgent

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import Alert from '../Common/Alert'; import Alert from '../Common/Alert';

View File

@@ -2,7 +2,8 @@ import { DownloadIcon } from '@heroicons/react/outline';
import { uniq } from 'lodash'; import { uniq } from 'lodash';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useState } from 'react';
import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import { MediaStatus } from '../../../server/constants/media'; import { MediaStatus } from '../../../server/constants/media';

View File

@@ -1,9 +1,9 @@
import * as React from 'react'; import type * as React from 'react';
import { useState } from 'react'; import { useState } from 'react';
import AnimateHeight from 'react-animate-height'; import AnimateHeight from 'react-animate-height';
export interface AccordionProps { export interface AccordionProps {
children: (args: AccordionChildProps) => React.ReactElement<any, any> | null; children: (args: AccordionChildProps) => JSX.Element;
/** If true, only one accordion item can be open at any time */ /** If true, only one accordion item can be open at any time */
single?: boolean; single?: boolean;
/** If true, at least one accordion item will always be open */ /** If true, at least one accordion item will always be open */
@@ -13,7 +13,7 @@ export interface AccordionProps {
export interface AccordionChildProps { export interface AccordionChildProps {
openIndexes: number[]; openIndexes: number[];
handleClick(index: number): void; handleClick(index: number): void;
AccordionContent: any; AccordionContent: typeof AccordionContent;
} }
type AccordionContentProps = { type AccordionContentProps = {

View File

@@ -3,7 +3,6 @@ import {
InformationCircleIcon, InformationCircleIcon,
XCircleIcon, XCircleIcon,
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import React from 'react';
interface AlertProps { interface AlertProps {
title?: React.ReactNode; title?: React.ReactNode;

View File

@@ -1,5 +1,4 @@
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
interface BadgeProps { interface BadgeProps {
badgeType?: 'default' | 'primary' | 'danger' | 'warning' | 'success'; badgeType?: 'default' | 'primary' | 'danger' | 'warning' | 'success';

View File

@@ -1,5 +1,5 @@
import type { ForwardedRef } from 'react';
import React from 'react'; import React from 'react';
import type { ForwardedRef } from 'react';
export type ButtonType = export type ButtonType =
| 'default' | 'default'

View File

@@ -1,10 +1,6 @@
import { ChevronDownIcon } from '@heroicons/react/solid'; import { ChevronDownIcon } from '@heroicons/react/solid';
import type { import type { AnchorHTMLAttributes, ButtonHTMLAttributes } from 'react';
AnchorHTMLAttributes, import { useRef, useState } from 'react';
ButtonHTMLAttributes,
ReactNode,
} from 'react';
import React, { useRef, useState } from 'react';
import useClickOutside from '../../../hooks/useClickOutside'; import useClickOutside from '../../../hooks/useClickOutside';
import { withProperties } from '../../../utils/typeHelpers'; import { withProperties } from '../../../utils/typeHelpers';
import Transition from '../../Transition'; import Transition from '../../Transition';
@@ -41,8 +37,8 @@ const DropdownItem = ({
interface ButtonWithDropdownProps interface ButtonWithDropdownProps
extends ButtonHTMLAttributes<HTMLButtonElement> { extends ButtonHTMLAttributes<HTMLButtonElement> {
text: ReactNode; text: React.ReactNode;
dropdownIcon?: ReactNode; dropdownIcon?: React.ReactNode;
buttonType?: 'primary' | 'ghost'; buttonType?: 'primary' | 'ghost';
} }

View File

@@ -1,6 +1,6 @@
import type { ImageProps } from 'next/image'; import type { ImageProps } from 'next/image';
import Image from 'next/image'; import Image from 'next/image';
import React from 'react';
import useSettings from '../../../hooks/useSettings'; import useSettings from '../../../hooks/useSettings';
/** /**

View File

@@ -1,4 +1,4 @@
import React, { useRef, useState } from 'react'; import { useRef, useState } from 'react';
import useClickOutside from '../../../hooks/useClickOutside'; import useClickOutside from '../../../hooks/useClickOutside';
import Button from '../Button'; import Button from '../Button';

View File

@@ -1,5 +1,3 @@
import React from 'react';
interface HeaderProps { interface HeaderProps {
extraMargin?: number; extraMargin?: number;
subtext?: React.ReactNode; subtext?: React.ReactNode;

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { withProperties } from '../../../utils/typeHelpers'; import { withProperties } from '../../../utils/typeHelpers';
interface ListItemProps { interface ListItemProps {

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import type { import type {
MovieResult, MovieResult,

View File

@@ -1,5 +1,3 @@
import React from 'react';
export const SmallLoadingSpinner = () => { export const SmallLoadingSpinner = () => {
return ( return (
<div className="inset-0 flex h-full w-full items-center justify-center text-gray-200"> <div className="inset-0 flex h-full w-full items-center justify-center text-gray-200">

View File

@@ -1,5 +1,5 @@
import type { MouseEvent, ReactNode } from 'react'; import type { MouseEvent } from 'react';
import React, { useRef } from 'react'; import { useRef } from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import useClickOutside from '../../../hooks/useClickOutside'; import useClickOutside from '../../../hooks/useClickOutside';
@@ -30,10 +30,10 @@ interface ModalProps {
tertiaryButtonType?: ButtonType; tertiaryButtonType?: ButtonType;
disableScrollLock?: boolean; disableScrollLock?: boolean;
backgroundClickable?: boolean; backgroundClickable?: boolean;
iconSvg?: ReactNode; iconSvg?: React.ReactNode;
loading?: boolean; loading?: boolean;
backdrop?: string; backdrop?: string;
children?: ReactNode; children?: React.ReactNode;
} }
const Modal = ({ const Modal = ({

View File

@@ -1,4 +1,3 @@
import React from 'react';
import useSettings from '../../../hooks/useSettings'; import useSettings from '../../../hooks/useSettings';
import Head from 'next/head'; import Head from 'next/head';

View File

@@ -1,5 +1,3 @@
import type { ReactNode } from 'react';
import React from 'react';
import ButtonWithDropdown from '../ButtonWithDropdown'; import ButtonWithDropdown from '../ButtonWithDropdown';
interface PlayButtonProps { interface PlayButtonProps {
@@ -9,7 +7,7 @@ interface PlayButtonProps {
export interface PlayButtonLink { export interface PlayButtonLink {
text: string; text: string;
url: string; url: string;
svg: ReactNode; svg: React.ReactNode;
} }
const PlayButton = ({ links }: PlayButtonProps) => { const PlayButton = ({ links }: PlayButtonProps) => {

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
interface ProgressCircleProps { interface ProgressCircleProps {
className?: string; className?: string;

View File

@@ -1,6 +1,7 @@
import { EyeIcon, EyeOffIcon } from '@heroicons/react/solid'; import { EyeIcon, EyeOffIcon } from '@heroicons/react/solid';
import { Field } from 'formik'; import { Field } from 'formik';
import React, { useState } from 'react';
import { useState } from 'react';
interface CustomInputProps extends React.ComponentProps<'input'> { interface CustomInputProps extends React.ComponentProps<'input'> {
as?: 'input'; as?: 'input';

View File

@@ -1,6 +1,6 @@
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React from 'react';
import type { Permission } from '../../../../server/lib/permissions'; import type { Permission } from '../../../../server/lib/permissions';
import { hasPermission } from '../../../../server/lib/permissions'; import { hasPermission } from '../../../../server/lib/permissions';
import { useUser } from '../../../hooks/useUser'; import { useUser } from '../../../hooks/useUser';

View File

@@ -1,6 +1,7 @@
/* eslint-disable jsx-a11y/click-events-have-key-events */ /* eslint-disable jsx-a11y/click-events-have-key-events */
import { XIcon } from '@heroicons/react/outline'; import { XIcon } from '@heroicons/react/outline';
import React, { useEffect, useRef, useState } from 'react';
import { useEffect, useRef, useState } from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import { useLockBodyScroll } from '../../../hooks/useLockBodyScroll'; import { useLockBodyScroll } from '../../../hooks/useLockBodyScroll';
import Transition from '../../Transition'; import Transition from '../../Transition';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { withProperties } from '../../../utils/typeHelpers'; import { withProperties } from '../../../utils/typeHelpers';
type TBodyProps = { type TBodyProps = {

View File

@@ -0,0 +1,36 @@
import { usePopperTooltip } from 'react-popper-tooltip';
import type { Config } from 'react-popper-tooltip';
type TooltipProps = {
content: React.ReactNode;
children: React.ReactNode;
tooltipConfig?: Config;
};
const Tooltip = ({ children, content, tooltipConfig }: TooltipProps) => {
const { getTooltipProps, setTooltipRef, setTriggerRef, visible } =
usePopperTooltip({
followCursor: true,
placement: 'left-end',
...tooltipConfig,
});
return (
<>
<div ref={setTriggerRef}>{children}</div>
{visible && (
<div
ref={setTooltipRef}
{...getTooltipProps({
className:
'bg-gray-800 px-2 py-1 rounded border border-gray-600 shadow text-gray-100',
})}
>
{content}
</div>
)}
</>
);
};
export default Tooltip;

View File

@@ -1,5 +1,5 @@
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
interface CompanyCardProps { interface CompanyCardProps {
name: string; name: string;

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { MovieResult } from '../../../../server/models/Search'; import type { MovieResult } from '../../../../server/models/Search';
import ListView from '../../Common/ListView'; import ListView from '../../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { MovieResult } from '../../../../server/models/Search'; import type { MovieResult } from '../../../../server/models/Search';
import ListView from '../../Common/ListView'; import ListView from '../../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { MovieResult } from '../../../server/models/Search'; import type { MovieResult } from '../../../server/models/Search';
import ListView from '../Common/ListView'; import ListView from '../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { TvResult } from '../../../../server/models/Search'; import type { TvResult } from '../../../../server/models/Search';
import ListView from '../../Common/ListView'; import ListView from '../../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { MovieResult } from '../../../../server/models/Search'; import type { MovieResult } from '../../../../server/models/Search';
import ListView from '../../Common/ListView'; import ListView from '../../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { TvResult } from '../../../server/models/Search'; import type { TvResult } from '../../../server/models/Search';
import ListView from '../Common/ListView'; import ListView from '../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { TvResult } from '../../../../server/models/Search'; import type { TvResult } from '../../../../server/models/Search';
import ListView from '../../Common/ListView'; import ListView from '../../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { TvResult } from '../../../../server/models/Search'; import type { TvResult } from '../../../../server/models/Search';
import ListView from '../../Common/ListView'; import ListView from '../../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { TvResult } from '../../../server/models/Search'; import type { TvResult } from '../../../server/models/Search';
import ListView from '../Common/ListView'; import ListView from '../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces'; import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces';

View File

@@ -1,6 +1,7 @@
import React from 'react';
import { ArrowCircleRightIcon } from '@heroicons/react/outline'; import { ArrowCircleRightIcon } from '@heroicons/react/outline';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces'; import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import CompanyCard from '../../CompanyCard'; import CompanyCard from '../../CompanyCard';
import Slider from '../../Slider'; import Slider from '../../Slider';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import CompanyCard from '../../CompanyCard'; import CompanyCard from '../../CompanyCard';
import Slider from '../../Slider'; import Slider from '../../Slider';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { import type {
MovieResult, MovieResult,
TvResult, TvResult,

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces'; import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces';

View File

@@ -1,6 +1,7 @@
import React from 'react';
import { ArrowCircleRightIcon } from '@heroicons/react/outline'; import { ArrowCircleRightIcon } from '@heroicons/react/outline';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces'; import type { GenreSliderItem } from '../../../../server/interfaces/api/discoverInterfaces';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { MovieResult } from '../../../server/models/Search'; import type { MovieResult } from '../../../server/models/Search';
import ListView from '../Common/ListView'; import ListView from '../Common/ListView';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';

View File

@@ -1,6 +1,6 @@
import { ArrowCircleRightIcon } from '@heroicons/react/outline'; import { ArrowCircleRightIcon } from '@heroicons/react/outline';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { MediaResultsResponse } from '../../../server/interfaces/api/mediaInterfaces'; import type { MediaResultsResponse } from '../../../server/interfaces/api/mediaInterfaces';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
import type { DownloadingItem } from '../../../server/lib/downloadtracker'; import type { DownloadingItem } from '../../../server/lib/downloadtracker';
import Badge from '../Common/Badge'; import Badge from '../Common/Badge';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { MediaType } from '../../../server/constants/media'; import { MediaType } from '../../../server/constants/media';
import ImdbLogo from '../../assets/services/imdb.svg'; import ImdbLogo from '../../assets/services/imdb.svg';
import PlexLogo from '../../assets/services/plex.svg'; import PlexLogo from '../../assets/services/plex.svg';

View File

@@ -1,5 +1,5 @@
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import { withProperties } from '../../utils/typeHelpers'; import { withProperties } from '../../utils/typeHelpers';
import CachedImage from '../Common/CachedImage'; import CachedImage from '../Common/CachedImage';

View File

@@ -5,7 +5,7 @@ import {
UserIcon, UserIcon,
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import type Issue from '../../../server/entity/Issue'; import type Issue from '../../../server/entity/Issue';
import { useUser } from '../../hooks/useUser'; import { useUser } from '../../hooks/useUser';

View File

@@ -4,7 +4,7 @@ import { DotsVerticalIcon } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import * as Yup from 'yup'; import * as Yup from 'yup';

View File

@@ -1,7 +1,7 @@
import { Menu, Transition } from '@headlessui/react'; import { Menu, Transition } from '@headlessui/react';
import { DotsVerticalIcon } from '@heroicons/react/solid'; import { DotsVerticalIcon } from '@heroicons/react/solid';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import React, { Fragment, useState } from 'react'; import { Fragment, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import { Permission, useUser } from '../../../hooks/useUser'; import { Permission, useUser } from '../../../hooks/useUser';

View File

@@ -10,7 +10,7 @@ import axios from 'axios';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr'; import useSWR from 'swr';

View File

@@ -1,6 +1,6 @@
import { EyeIcon } from '@heroicons/react/solid'; import { EyeIcon } from '@heroicons/react/solid';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { useInView } from 'react-intersection-observer'; import { useInView } from 'react-intersection-observer';
import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';

View File

@@ -5,7 +5,8 @@ import {
SortDescendingIcon, SortDescendingIcon,
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useEffect, useState } from 'react';
import { useEffect, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { IssueResultsResponse } from '../../../server/interfaces/api/issueInterfaces'; import type { IssueResultsResponse } from '../../../server/interfaces/api/issueInterfaces';

View File

@@ -4,7 +4,7 @@ import { ArrowCircleRightIcon } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import { Field, Formik } from 'formik'; import { Field, Formik } from 'formik';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr'; import useSWR from 'swr';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import Transition from '../Transition'; import Transition from '../Transition';
import CreateIssueModal from './CreateIssueModal'; import CreateIssueModal from './CreateIssueModal';

View File

@@ -1,5 +1,5 @@
import type { HTMLAttributes } from 'react'; import type { HTMLAttributes } from 'react';
import React from 'react';
import AceEditor from 'react-ace'; import AceEditor from 'react-ace';
import 'ace-builds/src-noconflict/mode-json'; import 'ace-builds/src-noconflict/mode-json';
import 'ace-builds/src-noconflict/theme-dracula'; import 'ace-builds/src-noconflict/theme-dracula';

View File

@@ -1,5 +1,5 @@
import { sortBy } from 'lodash'; import { sortBy } from 'lodash';
import React, { useMemo } from 'react'; import { useMemo } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import type { CSSObjectWithLabel } from 'react-select'; import type { CSSObjectWithLabel } from 'react-select';
import Select from 'react-select'; import Select from 'react-select';

View File

@@ -1,5 +1,5 @@
import { TranslateIcon } from '@heroicons/react/solid'; import { TranslateIcon } from '@heroicons/react/solid';
import React, { useRef, useState } from 'react'; import { useRef, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import type { AvailableLocale } from '../../../context/LanguageContext'; import type { AvailableLocale } from '../../../context/LanguageContext';
import { availableLanguages } from '../../../context/LanguageContext'; import { availableLanguages } from '../../../context/LanguageContext';

View File

@@ -1,5 +1,4 @@
import { BellIcon } from '@heroicons/react/outline'; import { BellIcon } from '@heroicons/react/outline';
import React from 'react';
const Notifications = () => { const Notifications = () => {
return ( return (

View File

@@ -1,6 +1,6 @@
import { XCircleIcon } from '@heroicons/react/outline'; import { XCircleIcon } from '@heroicons/react/outline';
import { SearchIcon } from '@heroicons/react/solid'; import { SearchIcon } from '@heroicons/react/solid';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSearchInput from '../../../hooks/useSearchInput'; import useSearchInput from '../../../hooks/useSearchInput';

View File

@@ -8,8 +8,7 @@ import {
} from '@heroicons/react/outline'; } from '@heroicons/react/outline';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import type { ReactNode } from 'react'; import { useRef } from 'react';
import React, { useRef } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useClickOutside from '../../../hooks/useClickOutside'; import useClickOutside from '../../../hooks/useClickOutside';
import { Permission, useUser } from '../../../hooks/useUser'; import { Permission, useUser } from '../../../hooks/useUser';
@@ -31,7 +30,7 @@ interface SidebarProps {
interface SidebarLinkProps { interface SidebarLinkProps {
href: string; href: string;
svgIcon: ReactNode; svgIcon: React.ReactNode;
messagesKey: keyof typeof messages; messagesKey: keyof typeof messages;
activeRegExp: RegExp; activeRegExp: RegExp;
as?: string; as?: string;

View File

@@ -2,7 +2,7 @@ import { LogoutIcon } from '@heroicons/react/outline';
import { CogIcon, UserIcon } from '@heroicons/react/solid'; import { CogIcon, UserIcon } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import Link from 'next/link'; import Link from 'next/link';
import React, { useRef, useState } from 'react'; import { useRef, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useClickOutside from '../../../hooks/useClickOutside'; import useClickOutside from '../../../hooks/useClickOutside';
import { useUser } from '../../../hooks/useUser'; import { useUser } from '../../../hooks/useUser';

View File

@@ -5,7 +5,7 @@ import {
ServerIcon, ServerIcon,
} from '@heroicons/react/outline'; } from '@heroicons/react/outline';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { StatusResponse } from '../../../../server/interfaces/api/settingsInterfaces'; import type { StatusResponse } from '../../../../server/interfaces/api/settingsInterfaces';

View File

@@ -1,7 +1,8 @@
import { MenuAlt2Icon } from '@heroicons/react/outline'; import { MenuAlt2Icon } from '@heroicons/react/outline';
import { ArrowLeftIcon } from '@heroicons/react/solid'; import { ArrowLeftIcon } from '@heroicons/react/solid';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useEffect, useState } from 'react';
import { useEffect, useState } from 'react';
import type { AvailableLocale } from '../../context/LanguageContext'; import type { AvailableLocale } from '../../context/LanguageContext';
import useLocale from '../../hooks/useLocale'; import useLocale from '../../hooks/useLocale';
import useSettings from '../../hooks/useSettings'; import useSettings from '../../hooks/useSettings';

View File

@@ -2,7 +2,7 @@ import { LoginIcon, SupportIcon } from '@heroicons/react/outline';
import axios from 'axios'; import axios from 'axios';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import * as Yup from 'yup'; import * as Yup from 'yup';
import useSettings from '../../hooks/useSettings'; import useSettings from '../../hooks/useSettings';

View File

@@ -1,7 +1,7 @@
import { XCircleIcon } from '@heroicons/react/solid'; import { XCircleIcon } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import { useRouter } from 'next/dist/client/router'; import { useRouter } from 'next/dist/client/router';
import React, { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import useSettings from '../../hooks/useSettings'; import useSettings from '../../hooks/useSettings';

View File

@@ -2,7 +2,7 @@ import { ServerIcon, ViewListIcon } from '@heroicons/react/outline';
import { CheckCircleIcon, DocumentRemoveIcon } from '@heroicons/react/solid'; import { CheckCircleIcon, DocumentRemoveIcon } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import Link from 'next/link'; import Link from 'next/link';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import { IssueStatus } from '../../../server/constants/issue'; import { IssueStatus } from '../../../server/constants/issue';

View File

@@ -1,6 +1,6 @@
import { ArrowCircleRightIcon } from '@heroicons/react/solid'; import { ArrowCircleRightIcon } from '@heroicons/react/solid';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
const messages = defineMessages({ const messages = defineMessages({

View File

@@ -1,6 +1,6 @@
import { ArrowCircleRightIcon } from '@heroicons/react/outline'; import { ArrowCircleRightIcon } from '@heroicons/react/outline';
import Link from 'next/link'; import Link from 'next/link';
import React, { useEffect } from 'react'; import { useEffect } from 'react';
import useSWRInfinite from 'swr/infinite'; import useSWRInfinite from 'swr/infinite';
import { MediaStatus } from '../../../server/constants/media'; import { MediaStatus } from '../../../server/constants/media';
import type { import type {

View File

@@ -1,6 +1,6 @@
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { MovieDetails } from '../../../../server/models/Movie'; import type { MovieDetails } from '../../../../server/models/Movie';

View File

@@ -1,6 +1,6 @@
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { MovieDetails } from '../../../../server/models/Movie'; import type { MovieDetails } from '../../../../server/models/Movie';

View File

@@ -1,6 +1,6 @@
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { MovieDetails } from '../../../server/models/Movie'; import type { MovieDetails } from '../../../server/models/Movie';

View File

@@ -1,6 +1,6 @@
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { MovieDetails } from '../../../server/models/Movie'; import type { MovieDetails } from '../../../server/models/Movie';

View File

@@ -16,7 +16,8 @@ import 'country-flag-icons/3x2/flags.css';
import { uniqBy } from 'lodash'; import { uniqBy } from 'lodash';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useEffect, useMemo, useState } from 'react';
import { useEffect, useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { RTRating } from '../../../server/api/rottentomatoes'; import type { RTRating } from '../../../server/api/rottentomatoes';
@@ -40,6 +41,7 @@ import LoadingSpinner from '../Common/LoadingSpinner';
import PageTitle from '../Common/PageTitle'; import PageTitle from '../Common/PageTitle';
import type { PlayButtonLink } from '../Common/PlayButton'; import type { PlayButtonLink } from '../Common/PlayButton';
import PlayButton from '../Common/PlayButton'; import PlayButton from '../Common/PlayButton';
import Tooltip from '../Common/Tooltip';
import ExternalLinkBlock from '../ExternalLinkBlock'; import ExternalLinkBlock from '../ExternalLinkBlock';
import IssueModal from '../IssueModal'; import IssueModal from '../IssueModal';
import ManageSlideOver from '../ManageSlideOver'; import ManageSlideOver from '../ManageSlideOver';
@@ -74,6 +76,9 @@ const messages = defineMessages({
streamingproviders: 'Currently Streaming On', streamingproviders: 'Currently Streaming On',
productioncountries: productioncountries:
'Production {countryCount, plural, one {Country} other {Countries}}', 'Production {countryCount, plural, one {Country} other {Countries}}',
theatricalrelease: 'Theatrical Release',
digitalrelease: 'Digital Release',
physicalrelease: 'Physical Release',
}); });
interface MovieDetailsProps { interface MovieDetailsProps {
@@ -548,12 +553,25 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => {
> >
{r.type === 3 ? ( {r.type === 3 ? (
// Theatrical // Theatrical
<Tooltip
content={intl.formatMessage(
messages.theatricalrelease
)}
>
<TicketIcon className="h-4 w-4" /> <TicketIcon className="h-4 w-4" />
</Tooltip>
) : r.type === 4 ? ( ) : r.type === 4 ? (
// Digital // Digital
<Tooltip
content={intl.formatMessage(messages.digitalrelease)}
>
<CloudIcon className="h-4 w-4" /> <CloudIcon className="h-4 w-4" />
</Tooltip>
) : ( ) : (
// Physical // Physical
<Tooltip
content={intl.formatMessage(messages.physicalrelease)}
>
<svg <svg
className="h-4 w-4" className="h-4 w-4"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@@ -564,6 +582,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => {
fill="currentColor" fill="currentColor"
/> />
</svg> </svg>
</Tooltip>
)} )}
<span className="ml-1.5"> <span className="ml-1.5">
{intl.formatDate(r.release_date, { {intl.formatDate(r.release_date, {

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { NotificationItem } from '..'; import type { NotificationItem } from '..';
import { hasNotificationType } from '..'; import { hasNotificationType } from '..';

View File

@@ -1,5 +1,5 @@
import { sortBy } from 'lodash'; import { sortBy } from 'lodash';
import React, { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSettings from '../../hooks/useSettings'; import useSettings from '../../hooks/useSettings';
import type { User } from '../../hooks/useUser'; import type { User } from '../../hooks/useUser';

View File

@@ -1,5 +1,3 @@
import React from 'react';
interface PWAHeaderProps { interface PWAHeaderProps {
applicationTitle?: string; applicationTitle?: string;
} }

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import type { User } from '../../hooks/useUser'; import type { User } from '../../hooks/useUser';
import { Permission } from '../../hooks/useUser'; import { Permission } from '../../hooks/useUser';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { hasPermission } from '../../../server/lib/permissions'; import { hasPermission } from '../../../server/lib/permissions';
import useSettings from '../../hooks/useSettings'; import useSettings from '../../hooks/useSettings';
import type { User } from '../../hooks/useUser'; import type { User } from '../../hooks/useUser';

View File

@@ -1,6 +1,6 @@
import { UserCircleIcon } from '@heroicons/react/solid'; import { UserCircleIcon } from '@heroicons/react/solid';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import CachedImage from '../Common/CachedImage'; import CachedImage from '../Common/CachedImage';
interface PersonCardProps { interface PersonCardProps {

View File

@@ -1,6 +1,6 @@
import { groupBy } from 'lodash'; import { groupBy } from 'lodash';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import TruncateMarkup from 'react-truncate-markup'; import TruncateMarkup from 'react-truncate-markup';
import useSWR from 'swr'; import useSWR from 'swr';

View File

@@ -1,5 +1,5 @@
import { LoginIcon } from '@heroicons/react/outline'; import { LoginIcon } from '@heroicons/react/outline';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import globalMessages from '../../i18n/globalMessages'; import globalMessages from '../../i18n/globalMessages';
import PlexOAuth from '../../utils/plex'; import PlexOAuth from '../../utils/plex';

View File

@@ -3,7 +3,7 @@ import { CheckIcon, ChevronDownIcon } from '@heroicons/react/solid';
import { hasFlag } from 'country-flag-icons'; import { hasFlag } from 'country-flag-icons';
import 'country-flag-icons/3x2/flags.css'; import 'country-flag-icons/3x2/flags.css';
import { sortBy } from 'lodash'; import { sortBy } from 'lodash';
import React, { useEffect, useMemo, useState } from 'react'; import { useEffect, useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { Region } from '../../../server/lib/settings'; import type { Region } from '../../../server/lib/settings';

View File

@@ -9,7 +9,7 @@ import {
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { MediaRequestStatus } from '../../../server/constants/media'; import { MediaRequestStatus } from '../../../server/constants/media';
import type { MediaRequest } from '../../../server/entity/MediaRequest'; import type { MediaRequest } from '../../../server/entity/MediaRequest';

View File

@@ -5,7 +5,8 @@ import {
XIcon, XIcon,
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import React, { useMemo, useState } from 'react';
import { useMemo, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { import {
MediaRequestStatus, MediaRequestStatus,

View File

@@ -7,7 +7,7 @@ import {
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import Link from 'next/link'; import Link from 'next/link';
import React, { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useInView } from 'react-intersection-observer'; import { useInView } from 'react-intersection-observer';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';

View File

@@ -7,7 +7,7 @@ import {
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import { useInView } from 'react-intersection-observer'; import { useInView } from 'react-intersection-observer';
import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';

View File

@@ -6,7 +6,8 @@ import {
} from '@heroicons/react/solid'; } from '@heroicons/react/solid';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useEffect, useState } from 'react';
import { useEffect, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { RequestResultsResponse } from '../../../server/interfaces/api/requestInterfaces'; import type { RequestResultsResponse } from '../../../server/interfaces/api/requestInterfaces';

View File

@@ -3,7 +3,7 @@ import { Listbox, Transition } from '@headlessui/react';
import { AdjustmentsIcon } from '@heroicons/react/outline'; import { AdjustmentsIcon } from '@heroicons/react/outline';
import { CheckIcon, ChevronDownIcon } from '@heroicons/react/solid'; import { CheckIcon, ChevronDownIcon } from '@heroicons/react/solid';
import { isEqual } from 'lodash'; import { isEqual } from 'lodash';
import React, { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import Select from 'react-select'; import Select from 'react-select';
import useSWR from 'swr'; import useSWR from 'swr';

View File

@@ -1,6 +1,7 @@
import { DownloadIcon } from '@heroicons/react/outline'; import { DownloadIcon } from '@heroicons/react/outline';
import axios from 'axios'; import axios from 'axios';
import React, { useCallback, useEffect, useState } from 'react';
import { useCallback, useEffect, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR from 'swr'; import useSWR from 'swr';

View File

@@ -1,6 +1,7 @@
import { DownloadIcon } from '@heroicons/react/outline'; import { DownloadIcon } from '@heroicons/react/outline';
import axios from 'axios'; import axios from 'axios';
import React, { useCallback, useEffect, useState } from 'react';
import { useCallback, useEffect, useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR, { mutate } from 'swr'; import useSWR, { mutate } from 'swr';

View File

@@ -1,6 +1,7 @@
import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/solid'; import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/solid';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react';
import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import type { QuotaStatus } from '../../../../server/interfaces/api/userInterfaces'; import type { QuotaStatus } from '../../../../server/interfaces/api/userInterfaces';
import ProgressCircle from '../../Common/ProgressCircle'; import ProgressCircle from '../../Common/ProgressCircle';

View File

@@ -1,5 +1,5 @@
import { DownloadIcon } from '@heroicons/react/outline'; import { DownloadIcon } from '@heroicons/react/outline';
import React from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr'; import useSWR from 'swr';
import type { SonarrSeries } from '../../../../server/api/servarr/sonarr'; import type { SonarrSeries } from '../../../../server/api/servarr/sonarr';

View File

@@ -1,6 +1,7 @@
import { DownloadIcon } from '@heroicons/react/outline'; import { DownloadIcon } from '@heroicons/react/outline';
import axios from 'axios'; import axios from 'axios';
import React, { useState } from 'react';
import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useSWR, { mutate } from 'swr'; import useSWR, { mutate } from 'swr';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import type { MediaStatus } from '../../../server/constants/media'; import type { MediaStatus } from '../../../server/constants/media';
import type { MediaRequest } from '../../../server/entity/MediaRequest'; import type { MediaRequest } from '../../../server/entity/MediaRequest';
import Transition from '../Transition'; import Transition from '../Transition';

View File

@@ -2,7 +2,7 @@ import { ArrowLeftIcon, MailIcon } from '@heroicons/react/solid';
import axios from 'axios'; import axios from 'axios';
import { Field, Form, Formik } from 'formik'; import { Field, Form, Formik } from 'formik';
import Link from 'next/link'; import Link from 'next/link';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import * as Yup from 'yup'; import * as Yup from 'yup';
import Button from '../Common/Button'; import Button from '../Common/Button';

View File

@@ -3,7 +3,7 @@ import axios from 'axios';
import { Form, Formik } from 'formik'; import { Form, Formik } from 'formik';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React, { useState } from 'react'; import { useState } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import * as Yup from 'yup'; import * as Yup from 'yup';
import globalMessages from '../../i18n/globalMessages'; import globalMessages from '../../i18n/globalMessages';

View File

@@ -1,4 +1,3 @@
import React from 'react';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import type { import type {
TvResult, TvResult,

View File

@@ -1,5 +1,5 @@
import { ClipboardCopyIcon } from '@heroicons/react/solid'; import { ClipboardCopyIcon } from '@heroicons/react/solid';
import React, { useEffect } from 'react'; import { useEffect } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { useToasts } from 'react-toast-notifications'; import { useToasts } from 'react-toast-notifications';
import useClipboard from 'react-use-clipboard'; import useClipboard from 'react-use-clipboard';

Some files were not shown because too many files have changed in this diff Show More