import { useIsAnyMutationRunning, useLanguageProfiles } from "@/apis/hooks"; import { GetItemId } from "@/utilities"; import { faCheck, faUndo } from "@fortawesome/free-solid-svg-icons"; import { uniqBy } from "lodash"; import { useCallback, useMemo, useState } from "react"; import { Container, Dropdown, Row } from "react-bootstrap"; import { UseMutationResult } from "react-query"; import { useNavigate } from "react-router-dom"; import { Column, useRowSelect } from "react-table"; import { ContentHeader, SimpleTable } from "."; import { useCustomSelection } from "./tables/plugins"; interface MassEditorProps { columns: Column[]; data: T[]; mutation: UseMutationResult; } function MassEditor(props: MassEditorProps) { const { columns, data: raw, mutation } = props; const [selections, setSelections] = useState([]); const [dirties, setDirties] = useState([]); const hasTask = useIsAnyMutationRunning(); const { data: profiles } = useLanguageProfiles(); const navigate = useNavigate(); const onEnded = useCallback(() => navigate(".."), [navigate]); const data = useMemo( () => uniqBy([...dirties, ...(raw ?? [])], GetItemId), [dirties, raw] ); const profileOptions = useMemo(() => { const items: JSX.Element[] = []; if (profiles) { items.push( Clear Profile ); items.push(); items.push( ...profiles.map((v) => ( {v.name} )) ); } return items; }, [profiles]); const { mutateAsync } = mutation; const save = useCallback(() => { const form: FormType.ModifyItem = { id: [], profileid: [], }; dirties.forEach((v) => { const id = GetItemId(v); if (id) { form.id.push(id); form.profileid.push(v.profileId); } }); return mutateAsync(form); }, [dirties, mutateAsync]); const setProfiles = useCallback( (key: Nullable) => { const id = key ? parseInt(key) : null; const newItems = selections.map((v) => ({ ...v, profileId: id })); setDirties((dirty) => { return uniqBy([...newItems, ...dirty], GetItemId); }); }, [selections] ); return ( Change Profile {profileOptions} Cancel Save ); } export default MassEditor;