diff --git a/ui/v2.5/src/components/Tagger/tags/StashSearchResult.tsx b/ui/v2.5/src/components/Tagger/tags/StashSearchResult.tsx index 55b86c931..4ca7fd22a 100644 --- a/ui/v2.5/src/components/Tagger/tags/StashSearchResult.tsx +++ b/ui/v2.5/src/components/Tagger/tags/StashSearchResult.tsx @@ -7,8 +7,10 @@ import TagModal from "./TagModal"; import { faTags } from "@fortawesome/free-solid-svg-icons"; import { useIntl } from "react-intl"; import { mergeTagStashIDs } from "../utils"; +import { TagOperation } from "../constants"; import { useTagCreate } from "src/core/StashService"; import { apolloError } from "src/utils"; +import { uniq } from "lodash-es"; interface IStashSearchResultProps { tag: GQL.TagListDataFragment; @@ -19,6 +21,7 @@ interface IStashSearchResultProps { Partial> ) => void; excludedTagFields: string[]; + tagOperation: TagOperation; } const StashSearchResult: React.FC = ({ @@ -27,6 +30,7 @@ const StashSearchResult: React.FC = ({ onTagTagged, excludedTagFields, endpoint, + tagOperation, }) => { const intl = useIntl(); @@ -89,6 +93,15 @@ const StashSearchResult: React.FC = ({ input.stash_ids ?? [] ); + if (input.aliases) { + if (tagOperation === "merge") { + const existingAliases = tag.aliases ?? []; + updateData.aliases = uniq(existingAliases.concat(input.aliases)); + } else { + updateData.aliases = input.aliases; + } + } + const res = await updateTag(updateData); if (!res?.data?.tagUpdate) { diff --git a/ui/v2.5/src/components/Tagger/tags/TagTagger.tsx b/ui/v2.5/src/components/Tagger/tags/TagTagger.tsx index cb2d20590..95bc1f7e7 100644 --- a/ui/v2.5/src/components/Tagger/tags/TagTagger.tsx +++ b/ui/v2.5/src/components/Tagger/tags/TagTagger.tsx @@ -17,7 +17,7 @@ import { useConfigurationContext } from "src/hooks/Config"; import StashSearchResult from "./StashSearchResult"; import TaggerConfig, { ConfigButton } from "../TaggerConfig"; -import { ITaggerConfig, TAG_FIELDS } from "../constants"; +import { ITaggerConfig, TAG_FIELDS, TagOperation } from "../constants"; import { useUpdateTag } from "../queries"; import { ExternalLink } from "src/components/Shared/ExternalLink"; import { mergeTagStashIDs } from "../utils"; @@ -247,6 +247,15 @@ const TagTaggerList: React.FC = ({ input.stash_ids ?? [] ); + if (input.aliases) { + if (config.tagOperation === "merge") { + const existingAliases = existingTag.aliases ?? []; + updateData.aliases = uniq(existingAliases.concat(input.aliases)); + } else { + updateData.aliases = input.aliases; + } + } + const res = await updateTag(updateData); if (!res?.data?.tagUpdate) handleSaveError(tagID, tag.name ?? "", res?.errors?.[0]?.message ?? ""); @@ -394,6 +403,7 @@ const TagTaggerList: React.FC = ({ endpoint={selectedEndpoint.endpoint} onTagTagged={handleTaggedTag} excludedTagFields={config.excludedTagFields ?? []} + tagOperation={config.tagOperation} /> ); } @@ -481,6 +491,7 @@ interface ITaggerProps { } export const TagTagger: React.FC = ({ tags }) => { + const intl = useIntl(); const jobsSubscribe = useJobsSubscribe(); const { configuration: stashConfig } = useConfigurationContext(); const { config, setConfig } = useTaggerConfig(); @@ -668,26 +679,53 @@ export const TagTagger: React.FC = ({ tags }) => { fields={TAG_FIELDS} entityName="tags" extraConfig={ - - - } - checked={config.createParentTags} - onChange={(e: React.ChangeEvent) => - setConfig({ - ...config, - createParentTags: e.currentTarget.checked, - }) - } - /> - - - - + <> + + + } + checked={config.createParentTags} + onChange={(e: React.ChangeEvent) => + setConfig({ + ...config, + createParentTags: e.currentTarget.checked, + }) + } + /> + + + + + +
+ + + + + setConfig({ + ...config, + tagOperation: e.currentTarget.value as TagOperation, + }) + } + > + + + +
+
+ } />