@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @generated SignedSource<<bc0fdc02fb8b596386e290ae0cf0b8b8>>
|
||||
* @generated SignedSource<<e7dfc0de7524eaa22ca235ac0b6e3011>>
|
||||
* @lightSyntaxTransform
|
||||
* @nogrep
|
||||
*/
|
||||
@@ -11,7 +11,7 @@
|
||||
import { ConcreteRequest } from 'relay-runtime';
|
||||
import { FragmentRefs } from "relay-runtime";
|
||||
export type OrderDirection = "ASC" | "DESC";
|
||||
export type PeopleOrderField = "CREATED_AT" | "FULL_NAME";
|
||||
export type PeopleOrderField = "CREATED_AT" | "FULL_NAME" | "KIND";
|
||||
export type PeopleOrder = {
|
||||
direction: OrderDirection;
|
||||
field: PeopleOrderField;
|
||||
|
||||
@@ -26,8 +26,13 @@ import { Navigate, Outlet, useNavigate, useParams } from "react-router";
|
||||
import { useOrganizationId } from "/hooks/useOrganizationId";
|
||||
import type { FrameworkGraphNodeQuery } from "/hooks/graph/__generated__/FrameworkGraphNodeQuery.graphql";
|
||||
import type { FrameworkDetailPageFragment$key } from "./__generated__/FrameworkDetailPageFragment.graphql";
|
||||
import type {
|
||||
FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation,
|
||||
FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation$data,
|
||||
} from "./__generated__/FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation.graphql";
|
||||
import { FrameworkFormDialog } from "./dialogs/FrameworkFormDialog";
|
||||
import { FrameworkControlDialog } from "./dialogs/FrameworkControlDialog";
|
||||
import { useMutationWithToasts } from "/hooks/useMutationWithToasts";
|
||||
|
||||
const frameworkDetailFragment = graphql`
|
||||
fragment FrameworkDetailPageFragment on Framework {
|
||||
@@ -47,6 +52,18 @@ const frameworkDetailFragment = graphql`
|
||||
}
|
||||
`;
|
||||
|
||||
const generateFrameworkStateOfApplicabilityMutation = graphql`
|
||||
mutation FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation(
|
||||
$frameworkId: ID!
|
||||
) {
|
||||
generateFrameworkStateOfApplicability(
|
||||
input: { frameworkId: $frameworkId }
|
||||
) {
|
||||
downloadUrl
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
type Props = {
|
||||
queryRef: PreloadedQuery<FrameworkGraphNodeQuery>;
|
||||
};
|
||||
@@ -71,6 +88,16 @@ export default function FrameworkDetailPage(props: Props) {
|
||||
ConnectionHandler.getConnectionID(organizationId, connectionListKey)!
|
||||
);
|
||||
|
||||
const [generateFrameworkStateOfApplicability] =
|
||||
useMutationWithToasts<FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation>(
|
||||
generateFrameworkStateOfApplicabilityMutation,
|
||||
{
|
||||
errorMessage: "Failed to generate framework state of applicability",
|
||||
successMessage:
|
||||
"Framework state of applicability generated successfully",
|
||||
}
|
||||
);
|
||||
|
||||
usePageTitle(`${framework.name} | ${selectedControl?.sectionTitle}`);
|
||||
const onDelete = () => {
|
||||
deleteFramework({
|
||||
@@ -107,6 +134,29 @@ export default function FrameworkDetailPage(props: Props) {
|
||||
</Button>
|
||||
</FrameworkFormDialog>
|
||||
<ActionDropdown variant="secondary">
|
||||
<DropdownItem
|
||||
variant="primary"
|
||||
onClick={() => {
|
||||
generateFrameworkStateOfApplicability({
|
||||
variables: { frameworkId: framework.id },
|
||||
onCompleted: (
|
||||
data: FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation$data
|
||||
) => {
|
||||
if (data.generateFrameworkStateOfApplicability.downloadUrl) {
|
||||
const link = document.createElement("a");
|
||||
link.href =
|
||||
data.generateFrameworkStateOfApplicability.downloadUrl;
|
||||
link.download = `${framework.name}-SOA.pdf`; // You can adjust the filename as needed
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
}
|
||||
},
|
||||
});
|
||||
}}
|
||||
>
|
||||
{__("Download SOA")}
|
||||
</DropdownItem>
|
||||
<DropdownItem icon={IconTrashCan} variant="danger" onClick={onDelete}>
|
||||
{__("Delete")}
|
||||
</DropdownItem>
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* @generated SignedSource<<bcdaed0c84805f387ee7d1de8ece0068>>
|
||||
* @lightSyntaxTransform
|
||||
* @nogrep
|
||||
*/
|
||||
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck
|
||||
|
||||
import { ConcreteRequest } from 'relay-runtime';
|
||||
export type FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation$variables = {
|
||||
frameworkId: string;
|
||||
};
|
||||
export type FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation$data = {
|
||||
readonly generateFrameworkStateOfApplicability: {
|
||||
readonly downloadUrl: string;
|
||||
};
|
||||
};
|
||||
export type FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation = {
|
||||
response: FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation$data;
|
||||
variables: FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation$variables;
|
||||
};
|
||||
|
||||
const node: ConcreteRequest = (function(){
|
||||
var v0 = [
|
||||
{
|
||||
"defaultValue": null,
|
||||
"kind": "LocalArgument",
|
||||
"name": "frameworkId"
|
||||
}
|
||||
],
|
||||
v1 = [
|
||||
{
|
||||
"alias": null,
|
||||
"args": [
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"kind": "Variable",
|
||||
"name": "frameworkId",
|
||||
"variableName": "frameworkId"
|
||||
}
|
||||
],
|
||||
"kind": "ObjectValue",
|
||||
"name": "input"
|
||||
}
|
||||
],
|
||||
"concreteType": "GenerateFrameworkStateOfApplicabilityPayload",
|
||||
"kind": "LinkedField",
|
||||
"name": "generateFrameworkStateOfApplicability",
|
||||
"plural": false,
|
||||
"selections": [
|
||||
{
|
||||
"alias": null,
|
||||
"args": null,
|
||||
"kind": "ScalarField",
|
||||
"name": "downloadUrl",
|
||||
"storageKey": null
|
||||
}
|
||||
],
|
||||
"storageKey": null
|
||||
}
|
||||
];
|
||||
return {
|
||||
"fragment": {
|
||||
"argumentDefinitions": (v0/*: any*/),
|
||||
"kind": "Fragment",
|
||||
"metadata": null,
|
||||
"name": "FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation",
|
||||
"selections": (v1/*: any*/),
|
||||
"type": "Mutation",
|
||||
"abstractKey": null
|
||||
},
|
||||
"kind": "Request",
|
||||
"operation": {
|
||||
"argumentDefinitions": (v0/*: any*/),
|
||||
"kind": "Operation",
|
||||
"name": "FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation",
|
||||
"selections": (v1/*: any*/)
|
||||
},
|
||||
"params": {
|
||||
"cacheID": "338cbffe84fb19cdf46c97b739216342",
|
||||
"id": null,
|
||||
"metadata": {},
|
||||
"name": "FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation",
|
||||
"operationKind": "mutation",
|
||||
"text": "mutation FrameworkDetailPageGenerateFrameworkStateOfApplicabilityMutation(\n $frameworkId: ID!\n) {\n generateFrameworkStateOfApplicability(input: {frameworkId: $frameworkId}) {\n downloadUrl\n }\n}\n"
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
(node as any).hash = "f5c0a7d2bebedecc3de7d55d52f06cd8";
|
||||
|
||||
export default node;
|
||||
Reference in New Issue
Block a user