diff --git a/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx b/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx index 8f1957322..18d824e2c 100644 --- a/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx +++ b/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx @@ -27,6 +27,7 @@ import { StudioSelect, Icon, LoadingIndicator, + URLField, } from "src/components/Shared"; import { useToast } from "src/hooks"; import { useFormik } from "formik"; @@ -384,21 +385,6 @@ export const GalleryEditPanel: React.FC< } } - function maybeRenderScrapeButton() { - if (!formik.values.url || !urlScrapable(formik.values.url)) { - return undefined; - } - return ( - - ); - } - function renderTextField(field: string, title: string, placeholder?: string) { return ( @@ -461,15 +447,12 @@ export const GalleryEditPanel: React.FC< -
- {maybeRenderScrapeButton()} -
- diff --git a/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx b/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx index 97ddcc267..e07e8bf3c 100644 --- a/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx +++ b/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx @@ -10,19 +10,12 @@ import { import { LoadingIndicator, StudioSelect, - Icon, DetailsEditNavbar, DurationInput, + URLField, } from "src/components/Shared"; import { useToast } from "src/hooks"; -import { - Modal as BSModal, - Form, - Button, - Col, - Row, - InputGroup, -} from "react-bootstrap"; +import { Modal as BSModal, Form, Button, Col, Row } from "react-bootstrap"; import { DurationUtils, FormUtils, ImageUtils } from "src/utils"; import { RatingStars } from "src/components/Scenes/SceneDetails/RatingStars"; import { useFormik } from "formik"; @@ -257,21 +250,6 @@ export const MovieEditPanel: React.FC = ({ ); } - function maybeRenderScrapeButton() { - const { url } = formik.values; - if (!url || !urlScrapable(url)) { - return undefined; - } - return ( - - ); - } - function maybeRenderScrapeDialog() { if (!scrapedMovie) { return; @@ -468,14 +446,11 @@ export const MovieEditPanel: React.FC = ({ title: intl.formatMessage({ id: "url" }), })} - - - {maybeRenderScrapeButton()} - +
diff --git a/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx b/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx index 3ca0b01c0..9a803b942 100644 --- a/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx +++ b/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx @@ -1,13 +1,5 @@ import React, { useEffect, useState } from "react"; -import { - Button, - Form, - Col, - InputGroup, - Row, - Badge, - Dropdown, -} from "react-bootstrap"; +import { Button, Form, Col, Row, Badge, Dropdown } from "react-bootstrap"; import { FormattedMessage, useIntl } from "react-intl"; import Mousetrap from "mousetrap"; import * as GQL from "src/core/generated-graphql"; @@ -28,6 +20,7 @@ import { CollapseButton, Modal, TagSelect, + URLField, } from "src/components/Shared"; import { ImageUtils, getStashIDs } from "src/utils"; import { getCountryByISO } from "src/utils/country"; @@ -662,19 +655,6 @@ export const PerformerEditPanel: React.FC = ({ setScraper(undefined); } - function maybeRenderScrapeButton() { - return ( - - ); - } - function renderButtons() { return ( @@ -963,14 +943,11 @@ export const PerformerEditPanel: React.FC = ({ - - - {maybeRenderScrapeButton()} - + diff --git a/ui/v2.5/src/components/Scenes/SceneDetails/SceneEditPanel.tsx b/ui/v2.5/src/components/Scenes/SceneDetails/SceneEditPanel.tsx index 9eb3ee488..37ac8cbf1 100644 --- a/ui/v2.5/src/components/Scenes/SceneDetails/SceneEditPanel.tsx +++ b/ui/v2.5/src/components/Scenes/SceneDetails/SceneEditPanel.tsx @@ -28,6 +28,7 @@ import { Icon, LoadingIndicator, ImageInput, + URLField, } from "src/components/Shared"; import { useToast } from "src/hooks"; import { ImageUtils, FormUtils, TextUtils, getStashIDs } from "src/utils"; @@ -574,21 +575,6 @@ export const SceneEditPanel: React.FC = ({ } } - function maybeRenderScrapeButton() { - if (!formik.values.url || !urlScrapable(formik.values.url)) { - return undefined; - } - return ( - - ); - } - function renderTextField(field: string, title: string, placeholder?: string) { return ( @@ -652,15 +638,12 @@ export const SceneEditPanel: React.FC = ({ -
- {maybeRenderScrapeButton()} -
- diff --git a/ui/v2.5/src/components/Scenes/styles.scss b/ui/v2.5/src/components/Scenes/styles.scss index c8bcc4979..d6549d252 100644 --- a/ui/v2.5/src/components/Scenes/styles.scss +++ b/ui/v2.5/src/components/Scenes/styles.scss @@ -500,15 +500,6 @@ input[type="range"].blue-slider { font-size: 1.3em; height: calc(1.5em + 0.75rem + 2px); } - - .scrape-button-container { - margin-right: -15px; - } - - .scrape-url-button { - color: $text-color; - margin-right: 0; - } } .scene-markers-panel { diff --git a/ui/v2.5/src/components/Shared/URLField.tsx b/ui/v2.5/src/components/Shared/URLField.tsx new file mode 100644 index 000000000..cc233f9d9 --- /dev/null +++ b/ui/v2.5/src/components/Shared/URLField.tsx @@ -0,0 +1,44 @@ +import React from "react"; +import { useIntl } from "react-intl"; +import { Button, InputGroup, Form } from "react-bootstrap"; +import { Icon } from "src/components/Shared"; +import { FormikHandlers } from "formik"; + +interface IProps { + value: string; + name: string; + onChange: FormikHandlers["handleChange"]; + onBlur: FormikHandlers["handleBlur"]; + onScrapeClick(): void; + urlScrapable(url: string): boolean; + isInvalid?: boolean; +} + +export const URLField: React.FC = (props: IProps) => { + const intl = useIntl(); + + return ( + + + + + + + ); +}; diff --git a/ui/v2.5/src/components/Shared/index.ts b/ui/v2.5/src/components/Shared/index.ts index 84a943751..d388a45ca 100644 --- a/ui/v2.5/src/components/Shared/index.ts +++ b/ui/v2.5/src/components/Shared/index.ts @@ -19,4 +19,5 @@ export { ExportDialog } from "./ExportDialog"; export { default as DeleteEntityDialog } from "./DeleteEntityDialog"; export { IndeterminateCheckbox } from "./IndeterminateCheckbox"; export { OperationButton } from "./OperationButton"; +export { URLField } from "./URLField"; export const TITLE_SUFFIX = " | Stash"; diff --git a/ui/v2.5/src/locales/en-GB.json b/ui/v2.5/src/locales/en-GB.json index 3d1447c79..46fd33457 100644 --- a/ui/v2.5/src/locales/en-GB.json +++ b/ui/v2.5/src/locales/en-GB.json @@ -64,6 +64,7 @@ "save_delete_settings": "Use these options by default when deleting", "save_filter": "Save filter", "scan": "Scan", + "scrape": "Scrape", "scrape_with": "Scrape with…", "scrape_query": "Scrape query", "scrape_scene_fragment": "Scrape by fragment",