/* GoToSocial Copyright (C) GoToSocial Authors admin@gotosocial.org SPDX-License-Identifier: AGPL-3.0-or-later This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import React from "react"; import { memo, useMemo, useCallback, useEffect } from "react"; import { isValidDomainPermission, hasBetterScope } from "../../../lib/util/domain-permission"; import { useTextInput, useBoolInput, useRadioInput, useCheckListInput, } from "../../../lib/form"; import { Select, TextArea, RadioGroup, Checkbox, TextInput, } from "../../../components/form/inputs"; import useFormSubmit from "../../../lib/form/submit"; import CheckList from "../../../components/check-list"; import MutationButton from "../../../components/form/mutation-button"; import FormWithData from "../../../lib/form/form-with-data"; import { useImportDomainPermsMutation } from "../../../lib/query/admin/domain-permissions/import"; import { useDomainAllowsQuery, useDomainBlocksQuery } from "../../../lib/query/admin/domain-permissions/get"; import type { DomainPerm, MappedDomainPerms } from "../../../lib/types/domain-permission"; import type { ChecklistInputHook, RadioFormInputHook } from "../../../lib/form/types"; export interface ProcessImportProps { list: DomainPerm[], permType: RadioFormInputHook, } export const ProcessImport = memo( function ProcessImport({ list, permType }: ProcessImportProps) { return ( ); } ); export interface ImportListProps { list: Array, data: MappedDomainPerms, permType: RadioFormInputHook, } function ImportList({ list, data: domainPerms, permType }: ImportListProps) { const hasComment = useMemo(() => { let hasPublic = false; let hasPrivate = false; list.some((entry) => { if (entry.public_comment) { hasPublic = true; } if (entry.private_comment) { hasPrivate = true; } return hasPublic && hasPrivate; }); if (hasPublic && hasPrivate) { return { both: true }; } else if (hasPublic) { return { type: "public_comment" }; } else if (hasPrivate) { return { type: "private_comment" }; } else { return {}; } }, [list]); const showComment = useTextInput("showComment", { defaultValue: hasComment.type ?? "public_comment" }); const form = { domains: useCheckListInput("domains", { entries: list }), // DomainPerm is actually also a Checkable. obfuscate: useBoolInput("obfuscate"), privateComment: useTextInput("private_comment", { defaultValue: `Imported on ${new Date().toLocaleString()}` }), privateCommentBehavior: useRadioInput("private_comment_behavior", { defaultValue: "append", options: { append: "Append to", replace: "Replace" } }), publicComment: useTextInput("public_comment"), publicCommentBehavior: useRadioInput("public_comment_behavior", { defaultValue: "append", options: { append: "Append to", replace: "Replace" } }), permType: permType, }; const [importDomains, importResult] = useFormSubmit(form, useImportDomainPermsMutation(), { changedOnly: false }); return ( <>
{list.length} domain{list.length != 1 ? "s" : ""} in this list {hasComment.both &&