From 751434d2e7e8e065024dcead87a8f41f8b373a47 Mon Sep 17 00:00:00 2001 From: Meng Zhu Date: Mon, 22 Aug 2022 12:59:59 +0200 Subject: [PATCH] slett datasett modal --- .gitattributes | 1 + components/dataproducts/dataset/dataset.tsx | 7 ++- .../dataproducts/dataset/datasetOwnerMenu.tsx | 45 +++++++++++++-- components/lib/deleteModal.tsx | 4 +- lib/queries/dataset/deleteDataset.ts | 7 +++ lib/schema/graphql.ts | 57 +++++++++++++++++++ pages/dataproduct/[id]/[slug]/[[...page]].tsx | 3 +- pages/story/[id]/index.tsx | 1 + 8 files changed, 116 insertions(+), 9 deletions(-) create mode 100644 .gitattributes create mode 100644 lib/queries/dataset/deleteDataset.ts diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..176a458f --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/components/dataproducts/dataset/dataset.tsx b/components/dataproducts/dataset/dataset.tsx index 627dbf1c..87ac1d72 100644 --- a/components/dataproducts/dataset/dataset.tsx +++ b/components/dataproducts/dataset/dataset.tsx @@ -1,7 +1,7 @@ import { Heading, Link, Alert, Modal } from "@navikt/ds-react"; import { isAfter, parseISO } from "date-fns"; import humanizeDate from "../../../lib/humanizeDate"; -import { NewAccessRequest, SubjectType, UserInfoDetailsQuery } from "../../../lib/schema/graphql"; +import { DataproductQuery, NewAccessRequest, SubjectType, UserInfoDetailsQuery } from "../../../lib/schema/graphql"; import DatasetTableSchema from "./datasetTableSchema"; import Explore from "../../../components/dataproducts/explore"; import BigQueryLogo from "../../lib/icons/bigQueryLogo"; @@ -34,11 +34,12 @@ interface EntryProps { dataset: DatasetQuery userInfo: UserInfoDetailsQuery['userInfo'] | undefined isOwner: boolean + product: DataproductQuery | undefined } -const Dataset = ({dataset, userInfo, isOwner}: EntryProps) => { +const Dataset = ({dataset, userInfo, isOwner, product}: EntryProps) => { const accessType = findAccessType(userInfo?.groups, dataset, isOwner) const [accessRequested, setAccessRequested] = useState(false); @@ -71,7 +72,7 @@ const Dataset = ({dataset, userInfo, isOwner}: EntryProps) => { {dataset.name} - {isOwner && } + {isOwner && } {dataset.pii ? Inneholder persondata diff --git a/components/dataproducts/dataset/datasetOwnerMenu.tsx b/components/dataproducts/dataset/datasetOwnerMenu.tsx index bd754a32..77690acb 100644 --- a/components/dataproducts/dataset/datasetOwnerMenu.tsx +++ b/components/dataproducts/dataset/datasetOwnerMenu.tsx @@ -1,27 +1,62 @@ import { EllipsisCircleH } from "@navikt/ds-icons" import { Button } from "@navikt/ds-react" import { Divider, Dropdown, DropdownContext } from "@navikt/ds-react-internal" +import { useRouter } from "next/router" import { useState } from "react" import styled from "styled-components" +import { GET_DATAPRODUCT } from "../../../lib/queries/dataproduct/dataproduct" +import { DataproductQuery, useDeleteDatasetMutation } from "../../../lib/schema/graphql" +import DeleteModal from "../../lib/deleteModal" const MenuButton = styled(Button)` min-width: unset; padding: 0; border-radius: 50%; ` +interface IDatasetOwnerMenuProps{ + datasetName: string; + datasetId: string; + dataproduct: DataproductQuery | undefined; +} -const DatasetOwnerMenu = () => { +const DatasetOwnerMenu = ({datasetName, datasetId, dataproduct}: IDatasetOwnerMenuProps) => { const [isOpen, setIsOpen] = useState(false) const [anchorEl, setAnchorEl] = useState(null) + const [showDelete, setShowDelete] = useState(false) + const [deleteError, setDeleteError] = useState('') + const router= useRouter() + const handleMenuButtonClick = (e: React.MouseEvent) => { setAnchorEl(e.currentTarget) setIsOpen(!isOpen) } + const [deleteDataset] = useDeleteDatasetMutation({ + variables: { id: datasetId }, + awaitRefetchQueries: true, + refetchQueries: [ + { + query: GET_DATAPRODUCT, + variables: { + id: dataproduct?.dataproduct.id + } + }, + ], + }) + const onDelete = async () => { + try { + await deleteDataset() + await router.push(`/dataproduct/${dataproduct?.dataproduct.id}/${dataproduct?.dataproduct.slug}/info`) + } catch (e: any) { + setDeleteError(e.toString()) + } + } - return ( + return ( + <> + @@ -30,10 +65,12 @@ const DatasetOwnerMenu = () => { Endre datasett - Slett datasett + setShowDelete(true)}>Slett datasett - ) + + setShowDelete(false)} onConfirm = {onDelete}> + ) } export default DatasetOwnerMenu; \ No newline at end of file diff --git a/components/lib/deleteModal.tsx b/components/lib/deleteModal.tsx index cac8dfc2..c2652539 100644 --- a/components/lib/deleteModal.tsx +++ b/components/lib/deleteModal.tsx @@ -7,6 +7,7 @@ interface DeleteModalProps { onConfirm: () => void name: string error: string + resource: "dataprodukt" | "datasett" } export const DeleteModal = ({ open, @@ -14,11 +15,12 @@ export const DeleteModal = ({ onConfirm, name, error, + resource }: DeleteModalProps) => { return ( - Slette dataprodukt + Slette {resource}

Er du sikker på at du vil slette {name}?