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:
@@ -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: {
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
|
|
||||||
interface HeaderProps {
|
interface HeaderProps {
|
||||||
extraMargin?: number;
|
extraMargin?: number;
|
||||||
subtext?: React.ReactNode;
|
subtext?: React.ReactNode;
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import { withProperties } from '../../../utils/typeHelpers';
|
import { withProperties } from '../../../utils/typeHelpers';
|
||||||
|
|
||||||
interface ListItemProps {
|
interface ListItemProps {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import type {
|
import type {
|
||||||
MovieResult,
|
MovieResult,
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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 = ({
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useRef } from 'react';
|
import { useEffect, useRef } from 'react';
|
||||||
|
|
||||||
interface ProgressCircleProps {
|
interface ProgressCircleProps {
|
||||||
className?: string;
|
className?: string;
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import { withProperties } from '../../../utils/typeHelpers';
|
import { withProperties } from '../../../utils/typeHelpers';
|
||||||
|
|
||||||
type TBodyProps = {
|
type TBodyProps = {
|
||||||
|
|||||||
36
src/components/Common/Tooltip/index.tsx
Normal file
36
src/components/Common/Tooltip/index.tsx
Normal 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;
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import type {
|
import type {
|
||||||
MovieResult,
|
MovieResult,
|
||||||
TvResult,
|
TvResult,
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import Transition from '../Transition';
|
import Transition from '../Transition';
|
||||||
import CreateIssueModal from './CreateIssueModal';
|
import CreateIssueModal from './CreateIssueModal';
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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, {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import type { NotificationItem } from '..';
|
import type { NotificationItem } from '..';
|
||||||
import { hasNotificationType } from '..';
|
import { hasNotificationType } from '..';
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
|
|
||||||
interface PWAHeaderProps {
|
interface PWAHeaderProps {
|
||||||
applicationTitle?: string;
|
applicationTitle?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import React from 'react';
|
|
||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
import type {
|
import type {
|
||||||
TvResult,
|
TvResult,
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user