(
documentsQuery,
{
organizationId,
},
{ fetchPolicy: "network-only" },
);
const { data, loadNext, hasNext, isLoadingNext } = usePaginationFragment(
documentsFragment,
query.organization as LinkedDocumentsDialogFragment$key,
);
const { __ } = useTranslate();
const [search, setSearch] = useState("");
const documents = useMemo(
() => data.documents?.edges?.map(edge => edge.node) ?? [],
[data.documents],
);
const linkedIds = useMemo(() => {
return new Set(props.linkedDocuments?.map(m => m.id) ?? []);
}, [props.linkedDocuments]);
const filteredDocuments = useMemo(() => {
return documents.filter(document =>
document.title.toLowerCase().includes(search.toLowerCase()),
);
}, [documents, search]);
return (
<>
{filteredDocuments.map(document => (
))}
{hasNext && (
loadNext(20)}
/>
)}
>
);
}
type Document = NodeOf;
type RowProps = {
document: Document;
linkedDocuments: Set;
disabled?: boolean;
onLink: (documentId: string) => void;
onUnlink: (documentId: string) => void;
};
function DocumentRow(props: RowProps) {
const { __ } = useTranslate();
const isLinked = props.linkedDocuments.has(props.document.id);
const onClick = isLinked ? props.onUnlink : props.onLink;
const IconComponent = isLinked ? IconTrashCan : IconPlusLarge;
return (
);
}