Fix typo on measure

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2025-04-30 14:07:14 -07:00
parent 29a40f5792
commit 1cac29f8ef
100 changed files with 7289 additions and 2664 deletions

View File

@@ -134,10 +134,10 @@ export function NavMain() {
function getNavItems(organizationId?: string): NavItem[] {
return [
{
title: "Mesures",
title: "Measures",
icon: ClipboardList,
url: organizationId
? `/organizations/${organizationId}/mesures`
? `/organizations/${organizationId}/measures`
: undefined,
},
{

View File

@@ -69,7 +69,7 @@ const SidebarProvider = React.forwardRef<
const [openMobile, setOpenMobile] = React.useState(false);
// This is the internal state of the sidebar.
// We use openProp and setOpenProp for mesure from outside the component.
// We use openProp and setOpenProp for measure from outside the component.
const [_open, _setOpen] = React.useState(defaultOpen);
const open = openProp ?? _open;
const setOpen = React.useCallback(

View File

@@ -2,5 +2,5 @@ import { Navigate, useParams } from "react-router";
export default function HomePage() {
const { organizationId } = useParams();
return <Navigate to={`/organizations/${organizationId}/mesures`} />;
return <Navigate to={`/organizations/${organizationId}/measures`} />;
}

View File

@@ -16,7 +16,7 @@ import { OrganizationBreadcrumbBreadcrumbPeopleOverviewQuery } from "./__generat
import { OrganizationBreadcrumbBreadcrumbPolicyOverviewQuery } from "./__generated__/OrganizationBreadcrumbBreadcrumbPolicyOverviewQuery.graphql";
import { OrganizationBreadcrumbBreadcrumbVendorOverviewQuery } from "./__generated__/OrganizationBreadcrumbBreadcrumbVendorOverviewQuery.graphql";
import { OrganizationBreadcrumbOrganizationQuery } from "./__generated__/OrganizationBreadcrumbOrganizationQuery.graphql";
import { OrganizationBreadcrumbBreadcrumbMesureViewQuery } from "./__generated__/OrganizationBreadcrumbBreadcrumbMesureViewQuery.graphql";
import { OrganizationBreadcrumbBreadcrumbMeasureViewQuery } from "./__generated__/OrganizationBreadcrumbBreadcrumbMeasureViewQuery.graphql";
import { OrganizationBreadcrumbBreadcrumbControlQuery } from "./__generated__/OrganizationBreadcrumbBreadcrumbControlQuery.graphql";
import { OrganizationBreadcrumbBreadcrumbRiskShowQuery } from "./__generated__/OrganizationBreadcrumbBreadcrumbRiskShowQuery.graphql";
import ErrorBoundary from "@/components/ErrorBoundary";
@@ -314,15 +314,15 @@ function BreadcrumbPolicyOverview() {
);
}
function BreadcrumbMesureList() {
function BreadcrumbMeasureList() {
const { organizationId } = useParams();
return (
<>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbNavLink to={`/organizations/${organizationId}/mesures`}>
Mesures
<BreadcrumbNavLink to={`/organizations/${organizationId}/measures`}>
Measures
</BreadcrumbNavLink>
</BreadcrumbItem>
<Outlet />
@@ -330,22 +330,22 @@ function BreadcrumbMesureList() {
);
}
function BreadcrumbMesureView() {
const { organizationId, mesureId } = useParams();
function BreadcrumbMeasureView() {
const { organizationId, measureId } = useParams();
const data =
useLazyLoadQuery<OrganizationBreadcrumbBreadcrumbMesureViewQuery>(
useLazyLoadQuery<OrganizationBreadcrumbBreadcrumbMeasureViewQuery>(
graphql`
query OrganizationBreadcrumbBreadcrumbMesureViewQuery($mesureId: ID!) {
mesure: node(id: $mesureId) {
query OrganizationBreadcrumbBreadcrumbMeasureViewQuery($measureId: ID!) {
measure: node(id: $measureId) {
id
... on Mesure {
... on Measure {
name
category
}
}
}
`,
{ mesureId: mesureId! }
{ measureId: measureId! }
);
return (
@@ -353,17 +353,17 @@ function BreadcrumbMesureView() {
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbNavLink
to={`/organizations/${organizationId}/mesures#${data.mesure.category}`}
to={`/organizations/${organizationId}/measures#${data.measure.category}`}
>
{data.mesure.category}
{data.measure.category}
</BreadcrumbNavLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbNavLink
to={`/organizations/${organizationId}/mesures/${mesureId}`}
to={`/organizations/${organizationId}/measures/${measureId}`}
>
{data.mesure.name}
{data.measure.name}
</BreadcrumbNavLink>
</BreadcrumbItem>
<Outlet />
@@ -461,13 +461,13 @@ export function BreadCrumb() {
</ErrorBoundary>
}
>
<Route path="mesures" element={<BreadcrumbMesureList />}>
<Route path="measures" element={<BreadcrumbMeasureList />}>
<Route path="new" element={<New />} />
<Route
path=":mesureId"
path=":measureId"
element={
<Suspense>
<BreadcrumbMesureView />
<BreadcrumbMeasureView />
</Suspense>
}
>

View File

@@ -11,10 +11,10 @@ import { FrameworkListPage } from "./frameworks/FrameworkListPage";
import { FrameworkPage } from "./frameworks/FrameworkPage";
import { NewFrameworkPage } from "./frameworks/NewFrameworkPage";
import { ControlPage } from "./frameworks/controls/ControlPage";
import { EditMesurePage } from "./mesures/EditMesurePage";
import { MesureListPage } from "./mesures/MesureListPage";
import { MesurePage } from "./mesures/MesurePage";
import { NewMesurePage } from "./mesures/NewMesurePage";
import { EditMeasurePage } from "./measures/EditMeasurePage";
import { MeasureListPage } from "./measures/MeasureListPage";
import { MeasurePage } from "./measures/MeasurePage";
import { NewMeasurePage } from "./measures/NewMeasurePage";
import { NewPeoplePage } from "./people/NewPeoplePage";
import { PeopleListPage } from "./people/PeopleListPage";
import { PeoplePage } from "./people/PeoplePage";
@@ -47,10 +47,10 @@ export function OrganizationsRoutes() {
<Route path="edit" element={<EditFrameworkPage />} />
<Route path="*" element={<NotFoundPage />} />
</Route>
<Route path="mesures" element={<MesureListPage />} />
<Route path="mesures/new" element={<NewMesurePage />} />
<Route path="mesures/:mesureId" element={<MesurePage />} />
<Route path="mesures/:mesureId/edit" element={<EditMesurePage />} />
<Route path="measures" element={<MeasureListPage />} />
<Route path="measures/new" element={<NewMeasurePage />} />
<Route path="measures/:measureId" element={<MeasurePage />} />
<Route path="measures/:measureId/edit" element={<EditMeasurePage />} />
<Route path="vendors/:vendorId" element={<VendorPage />} />
<Route path="policies" element={<PolicyListPage />} />
<Route path="policies/:policyId" element={<ShowPolicyPage />} />

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<a8e66e7606187f54d173cddac8bcd316>>
* @generated SignedSource<<e85f30bc133288dc152ea3f46ced461e>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,19 +9,19 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type OrganizationBreadcrumbBreadcrumbMesureViewQuery$variables = {
mesureId: string;
export type OrganizationBreadcrumbBreadcrumbMeasureViewQuery$variables = {
measureId: string;
};
export type OrganizationBreadcrumbBreadcrumbMesureViewQuery$data = {
readonly mesure: {
export type OrganizationBreadcrumbBreadcrumbMeasureViewQuery$data = {
readonly measure: {
readonly category?: string;
readonly id: string;
readonly name?: string;
};
};
export type OrganizationBreadcrumbBreadcrumbMesureViewQuery = {
response: OrganizationBreadcrumbBreadcrumbMesureViewQuery$data;
variables: OrganizationBreadcrumbBreadcrumbMesureViewQuery$variables;
export type OrganizationBreadcrumbBreadcrumbMeasureViewQuery = {
response: OrganizationBreadcrumbBreadcrumbMeasureViewQuery$data;
variables: OrganizationBreadcrumbBreadcrumbMeasureViewQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -29,14 +29,14 @@ var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "mesureId"
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "mesureId"
"variableName": "measureId"
}
],
v2 = {
@@ -64,7 +64,7 @@ v3 = {
"storageKey": null
}
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
};
return {
@@ -72,10 +72,10 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "OrganizationBreadcrumbBreadcrumbMesureViewQuery",
"name": "OrganizationBreadcrumbBreadcrumbMeasureViewQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -95,10 +95,10 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "OrganizationBreadcrumbBreadcrumbMesureViewQuery",
"name": "OrganizationBreadcrumbBreadcrumbMeasureViewQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -120,16 +120,16 @@ return {
]
},
"params": {
"cacheID": "f6183e3013438a1cff8e91c6ff80f452",
"cacheID": "3c48e17cf1b1191df67348c4b3fd09e4",
"id": null,
"metadata": {},
"name": "OrganizationBreadcrumbBreadcrumbMesureViewQuery",
"name": "OrganizationBreadcrumbBreadcrumbMeasureViewQuery",
"operationKind": "query",
"text": "query OrganizationBreadcrumbBreadcrumbMesureViewQuery(\n $mesureId: ID!\n) {\n mesure: node(id: $mesureId) {\n __typename\n id\n ... on Mesure {\n name\n category\n }\n }\n}\n"
"text": "query OrganizationBreadcrumbBreadcrumbMeasureViewQuery(\n $measureId: ID!\n) {\n measure: node(id: $measureId) {\n __typename\n id\n ... on Measure {\n name\n category\n }\n }\n}\n"
}
};
})();
(node as any).hash = "67fd3d426bbfcbe90457c3033dade1b3";
(node as any).hash = "41cebf479daa730843b47f2f9fb46a10";
export default node;

View File

@@ -10,7 +10,7 @@ export function NewFrameworkViewSkeleton() {
return (
<PageTemplateSkeleton
title="Create Framework"
description="Create a new framework to organize your mesures"
description="Create a new framework to organize your measures"
>
<div className="max-w-2xl aspect-square bg-subtle-bg rounded-xl animate-pulse" />
</PageTemplateSkeleton>

View File

@@ -170,7 +170,7 @@ function NewFrameworkViewContent() {
return (
<PageTemplate
title="Create Framework"
description="Create a new framework to organize your mesures"
description="Create a new framework to organize your measures"
>
<Card className="max-w-2xl">
<form onSubmit={handleSubmit} className="p-6 space-y-6">

View File

@@ -26,13 +26,13 @@ import {
} from "react-relay";
import { useParams, Link } from "react-router";
import {
ControlLinkedMesuresQuery$data,
ControlLinkedMesuresQuery,
} from "./__generated__/ControlLinkedMesuresQuery.graphql";
ControlLinkedMeasuresQuery$data,
ControlLinkedMeasuresQuery,
} from "./__generated__/ControlLinkedMeasuresQuery.graphql";
import {
ControlOrganizationMesuresQuery$data,
ControlOrganizationMesuresQuery,
} from "./__generated__/ControlOrganizationMesuresQuery.graphql";
ControlOrganizationMeasuresQuery$data,
ControlOrganizationMeasuresQuery,
} from "./__generated__/ControlOrganizationMeasuresQuery.graphql";
import { ControlFragment_Control$key } from "./__generated__/ControlFragment_Control.graphql";
import {
ControlLinkedPoliciesQuery$data,
@@ -52,13 +52,13 @@ const controlFragment = graphql`
}
`;
// New query to fetch linked mesures
const linkedMesuresQuery = graphql`
query ControlLinkedMesuresQuery($controlId: ID!) {
// New query to fetch linked measures
const linkedMeasuresQuery = graphql`
query ControlLinkedMeasuresQuery($controlId: ID!) {
control: node(id: $controlId) {
id
... on Control {
mesures(first: 100) @connection(key: "Control__mesures") {
measures(first: 100) @connection(key: "Control__measures") {
edges {
node {
id
@@ -74,13 +74,13 @@ const linkedMesuresQuery = graphql`
}
`;
// Query to fetch all mesures for the organization
const organizationMesuresQuery = graphql`
query ControlOrganizationMesuresQuery($organizationId: ID!) {
// Query to fetch all measures for the organization
const organizationMeasuresQuery = graphql`
query ControlOrganizationMeasuresQuery($organizationId: ID!) {
organization: node(id: $organizationId) {
id
... on Organization {
mesures(first: 100) @connection(key: "Organization__mesures") {
measures(first: 100) @connection(key: "Organization__measures") {
edges {
node {
id
@@ -150,23 +150,23 @@ const organizationPoliciesQuery = graphql`
}
`;
// Mutation to create a mapping between a control and a mesure
const createMesureMappingMutation = graphql`
mutation ControlCreateMesureMappingMutation(
$input: CreateControlMesureMappingInput!
// Mutation to create a mapping between a control and a measure
const createMeasureMappingMutation = graphql`
mutation ControlCreateMeasureMappingMutation(
$input: CreateControlMeasureMappingInput!
) {
createControlMesureMapping(input: $input) {
createControlMeasureMapping(input: $input) {
success
}
}
`;
// Mutation to delete a mapping between a control and a mesure
const deleteMesureMappingMutation = graphql`
mutation ControlDeleteMesureMappingMutation(
$input: DeleteControlMesureMappingInput!
// Mutation to delete a mapping between a control and a measure
const deleteMeasureMappingMutation = graphql`
mutation ControlDeleteMeasureMappingMutation(
$input: DeleteControlMeasureMappingInput!
) {
deleteControlMesureMapping(input: $input) {
deleteControlMeasureMapping(input: $input) {
success
}
}
@@ -207,17 +207,17 @@ export function Control({
const { toast } = useToast();
const environment = useRelayEnvironment();
// State for mesure mapping
const [isMesureMappingDialogOpen, setIsMesureMappingDialogOpen] =
// State for measure mapping
const [isMeasureMappingDialogOpen, setIsMeasureMappingDialogOpen] =
useState(false);
const [linkedMesuresData, setLinkedMesuresData] =
useState<ControlLinkedMesuresQuery$data | null>(null);
const [organizationMesuresData, setOrganizationMesuresData] =
useState<ControlOrganizationMesuresQuery$data | null>(null);
const [mesureSearchQuery, setMesureSearchQuery] = useState("");
const [isLoadingMesures, setIsLoadingMesures] = useState(false);
const [isLinkingMesure, setIsLinkingMesure] = useState(false);
const [isUnlinkingMesure, setIsUnlinkingMesure] = useState(false);
const [linkedMeasuresData, setLinkedMeasuresData] =
useState<ControlLinkedMeasuresQuery$data | null>(null);
const [organizationMeasuresData, setOrganizationMeasuresData] =
useState<ControlOrganizationMeasuresQuery$data | null>(null);
const [measureSearchQuery, setMeasureSearchQuery] = useState("");
const [isLoadingMeasures, setIsLoadingMeasures] = useState(false);
const [isLinkingMeasure, setIsLinkingMeasure] = useState(false);
const [isUnlinkingMeasure, setIsUnlinkingMeasure] = useState(false);
const [categoryFilter, setCategoryFilter] = useState<string | null>(null);
// Policy state
@@ -233,73 +233,73 @@ export function Control({
const [isUnlinkingPolicy, setIsUnlinkingPolicy] = useState(false);
// Create mutation hooks
const [commitCreateMesureMapping] = useMutation(createMesureMappingMutation);
const [commitDeleteMesureMapping] = useMutation(deleteMesureMappingMutation);
const [commitCreateMeasureMapping] = useMutation(createMeasureMappingMutation);
const [commitDeleteMeasureMapping] = useMutation(deleteMeasureMappingMutation);
const [commitCreatePolicyMapping] = useMutation(createPolicyMappingMutation);
const [commitDeletePolicyMapping] = useMutation(deletePolicyMappingMutation);
// Load initial linked mesures data
// Load initial linked measures data
useEffect(() => {
if (control.id) {
setIsLoadingMesures(true);
fetchQuery<ControlLinkedMesuresQuery>(environment, linkedMesuresQuery, {
setIsLoadingMeasures(true);
fetchQuery<ControlLinkedMeasuresQuery>(environment, linkedMeasuresQuery, {
controlId: control.id,
}).subscribe({
next: (data) => {
setLinkedMesuresData(data);
setIsLoadingMesures(false);
setLinkedMeasuresData(data);
setIsLoadingMeasures(false);
},
error: (error: Error) => {
console.error("Error loading initial mesures:", error);
setIsLoadingMesures(false);
console.error("Error loading initial measures:", error);
setIsLoadingMeasures(false);
},
});
}
}, [control.id, environment]);
// Load mesures data
const loadMesuresData = useCallback(() => {
// Load measures data
const loadMeasuresData = useCallback(() => {
if (!organizationId || !control.id) return;
setIsLoadingMesures(true);
setIsLoadingMeasures(true);
// Fetch all mesures for the organization
fetchQuery<ControlOrganizationMesuresQuery>(
// Fetch all measures for the organization
fetchQuery<ControlOrganizationMeasuresQuery>(
environment,
organizationMesuresQuery,
organizationMeasuresQuery,
{
organizationId,
}
).subscribe({
next: (data) => {
setOrganizationMesuresData(data);
setOrganizationMeasuresData(data);
},
complete: () => {
// Fetch linked mesures for this control
fetchQuery<ControlLinkedMesuresQuery>(environment, linkedMesuresQuery, {
// Fetch linked measures for this control
fetchQuery<ControlLinkedMeasuresQuery>(environment, linkedMeasuresQuery, {
controlId: control.id,
}).subscribe({
next: (data) => {
setLinkedMesuresData(data);
setIsLoadingMesures(false);
setLinkedMeasuresData(data);
setIsLoadingMeasures(false);
},
error: (error: Error) => {
console.error("Error fetching linked mesures:", error);
setIsLoadingMesures(false);
console.error("Error fetching linked measures:", error);
setIsLoadingMeasures(false);
toast({
title: "Error",
description: "Failed to load linked mesures.",
description: "Failed to load linked measures.",
variant: "destructive",
});
},
});
},
error: (error: Error) => {
console.error("Error fetching organization mesures:", error);
setIsLoadingMesures(false);
console.error("Error fetching organization measures:", error);
setIsLoadingMeasures(false);
toast({
title: "Error",
description: "Failed to load mesures.",
description: "Failed to load measures.",
variant: "destructive",
});
},
@@ -307,190 +307,190 @@ export function Control({
}, [control.id, environment, organizationId, toast]);
// Helper functions
const getMesures = useCallback(() => {
if (!organizationMesuresData?.organization?.mesures?.edges) return [];
return organizationMesuresData.organization.mesures.edges.map(
const getMeasures = useCallback(() => {
if (!organizationMeasuresData?.organization?.measures?.edges) return [];
return organizationMeasuresData.organization.measures.edges.map(
(edge) => edge.node
);
}, [organizationMesuresData]);
}, [organizationMeasuresData]);
const getLinkedMesures = useCallback(() => {
if (!linkedMesuresData?.control?.mesures?.edges) return [];
return linkedMesuresData.control.mesures.edges.map((edge) => edge.node);
}, [linkedMesuresData]);
const getLinkedMeasures = useCallback(() => {
if (!linkedMeasuresData?.control?.measures?.edges) return [];
return linkedMeasuresData.control.measures.edges.map((edge) => edge.node);
}, [linkedMeasuresData]);
const isMesureLinked = useCallback(
(mesureId: string) => {
const linkedMesures = getLinkedMesures();
return linkedMesures.some((mesure) => mesure.id === mesureId);
const isMeasureLinked = useCallback(
(measureId: string) => {
const linkedMeasures = getLinkedMeasures();
return linkedMeasures.some((measure) => measure.id === measureId);
},
[getLinkedMesures]
[getLinkedMeasures]
);
const getMesureCategories = useCallback(() => {
const mesures = getMesures();
const getMeasureCategories = useCallback(() => {
const measures = getMeasures();
const categories = new Set<string>();
mesures.forEach((mesure) => {
if (mesure.category) {
categories.add(mesure.category);
measures.forEach((measure) => {
if (measure.category) {
categories.add(measure.category);
}
});
return Array.from(categories).sort();
}, [getMesures]);
}, [getMeasures]);
const filteredMesures = useCallback(() => {
const mesures = getMesures();
if (!mesureSearchQuery && !categoryFilter) return mesures;
const filteredMeasures = useCallback(() => {
const measures = getMeasures();
if (!measureSearchQuery && !categoryFilter) return measures;
return mesures.filter((mesure) => {
return measures.filter((measure) => {
// Filter by search query
const matchesSearch =
!mesureSearchQuery ||
mesure.name.toLowerCase().includes(mesureSearchQuery.toLowerCase()) ||
(mesure.description &&
mesure.description
!measureSearchQuery ||
measure.name.toLowerCase().includes(measureSearchQuery.toLowerCase()) ||
(measure.description &&
measure.description
.toLowerCase()
.includes(mesureSearchQuery.toLowerCase()));
.includes(measureSearchQuery.toLowerCase()));
// Filter by category
const matchesCategory =
!categoryFilter ||
categoryFilter === "all" ||
mesure.category === categoryFilter;
measure.category === categoryFilter;
return matchesSearch && matchesCategory;
});
}, [categoryFilter, getMesures, mesureSearchQuery]);
}, [categoryFilter, getMeasures, measureSearchQuery]);
// Handle link/unlink functions
const handleLinkMesure = useCallback(
(mesureId: string) => {
const handleLinkMeasure = useCallback(
(measureId: string) => {
if (!control.id) return;
setIsLinkingMesure(true);
setIsLinkingMeasure(true);
commitCreateMesureMapping({
commitCreateMeasureMapping({
variables: {
input: {
controlId: control.id,
mesureId: mesureId,
measureId: measureId,
},
},
onCompleted: (_, errors) => {
setIsLinkingMesure(false);
setIsLinkingMeasure(false);
if (errors) {
console.error("Error linking mesure:", errors);
console.error("Error linking measure:", errors);
toast({
title: "Error",
description: "Failed to link mesure. Please try again.",
description: "Failed to link measure. Please try again.",
variant: "destructive",
});
return;
}
// Refresh linked mesures data
fetchQuery<ControlLinkedMesuresQuery>(
// Refresh linked measures data
fetchQuery<ControlLinkedMeasuresQuery>(
environment,
linkedMesuresQuery,
linkedMeasuresQuery,
{
controlId: control.id,
}
).subscribe({
next: (data) => {
setLinkedMesuresData(data);
setLinkedMeasuresData(data);
},
error: (error: Error) => {
console.error("Error refreshing linked mesures:", error);
console.error("Error refreshing linked measures:", error);
},
});
toast({
title: "Success",
description: "Mesure successfully linked to control.",
description: "Measure successfully linked to control.",
});
},
onError: (error) => {
setIsLinkingMesure(false);
console.error("Error linking mesure:", error);
setIsLinkingMeasure(false);
console.error("Error linking measure:", error);
toast({
title: "Error",
description: "Failed to link mesure. Please try again.",
description: "Failed to link measure. Please try again.",
variant: "destructive",
});
},
});
},
[commitCreateMesureMapping, control.id, environment, toast]
[commitCreateMeasureMapping, control.id, environment, toast]
);
const handleUnlinkMesure = useCallback(
(mesureId: string) => {
const handleUnlinkMeasure = useCallback(
(measureId: string) => {
if (!control.id) return;
setIsUnlinkingMesure(true);
setIsUnlinkingMeasure(true);
commitDeleteMesureMapping({
commitDeleteMeasureMapping({
variables: {
input: {
controlId: control.id,
mesureId: mesureId,
measureId: measureId,
},
},
onCompleted: (_, errors) => {
setIsUnlinkingMesure(false);
setIsUnlinkingMeasure(false);
if (errors) {
console.error("Error unlinking mesure:", errors);
console.error("Error unlinking measure:", errors);
toast({
title: "Error",
description: "Failed to unlink mesure. Please try again.",
description: "Failed to unlink measure. Please try again.",
variant: "destructive",
});
return;
}
// Refresh linked mesures data
fetchQuery<ControlLinkedMesuresQuery>(
// Refresh linked measures data
fetchQuery<ControlLinkedMeasuresQuery>(
environment,
linkedMesuresQuery,
linkedMeasuresQuery,
{
controlId: control.id,
}
).subscribe({
next: (data) => {
setLinkedMesuresData(data);
setLinkedMeasuresData(data);
},
error: (error: Error) => {
console.error("Error refreshing linked mesures:", error);
console.error("Error refreshing linked measures:", error);
},
});
toast({
title: "Success",
description: "Mesure successfully unlinked from control.",
description: "Measure successfully unlinked from control.",
});
},
onError: (error) => {
setIsUnlinkingMesure(false);
console.error("Error unlinking mesure:", error);
setIsUnlinkingMeasure(false);
console.error("Error unlinking measure:", error);
toast({
title: "Error",
description: "Failed to unlink mesure. Please try again.",
description: "Failed to unlink measure. Please try again.",
variant: "destructive",
});
},
});
},
[commitDeleteMesureMapping, control.id, environment, toast]
[commitDeleteMeasureMapping, control.id, environment, toast]
);
const handleOpenMesureMappingDialog = useCallback(() => {
loadMesuresData();
setIsMesureMappingDialogOpen(true);
}, [loadMesuresData]);
const handleOpenMeasureMappingDialog = useCallback(() => {
loadMeasuresData();
setIsMeasureMappingDialogOpen(true);
}, [loadMeasuresData]);
// Load initial linked policies data
useEffect(() => {
@@ -778,10 +778,10 @@ export function Control({
{/* Security Measures Section */}
<div className="mt-8">
{/* Mesure Mapping Dialog */}
{/* Measure Mapping Dialog */}
<Dialog
open={isMesureMappingDialogOpen}
onOpenChange={setIsMesureMappingDialogOpen}
open={isMeasureMappingDialogOpen}
onOpenChange={setIsMeasureMappingDialogOpen}
>
<DialogContent className="max-w-3xl max-h-[80vh] overflow-hidden flex flex-col">
<DialogHeader>
@@ -798,8 +798,8 @@ export function Control({
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-tertiary" />
<Input
placeholder="Search security measures by name or description..."
value={mesureSearchQuery}
onChange={(e) => setMesureSearchQuery(e.target.value)}
value={measureSearchQuery}
onChange={(e) => setMeasureSearchQuery(e.target.value)}
className="w-full pl-10"
/>
</div>
@@ -816,7 +816,7 @@ export function Control({
</SelectTrigger>
<SelectContent>
<SelectItem value="all">All categories</SelectItem>
{getMesureCategories().map((category) => (
{getMeasureCategories().map((category) => (
<SelectItem key={category} value={category}>
{category}
</SelectItem>
@@ -827,14 +827,14 @@ export function Control({
</div>
<div className="flex-1 overflow-hidden">
{isLoadingMesures ? (
{isLoadingMeasures ? (
<div className="flex items-center justify-center h-full">
<Loader2 className="w-8 h-8 animate-spin text-info" />
<span className="ml-2">Loading security measures...</span>
</div>
) : (
<div className="max-h-[50vh] overflow-y-auto pr-2">
{filteredMesures().length === 0 ? (
{filteredMeasures().length === 0 ? (
<div className="text-center py-8 text-secondary">
No security measures found. Try adjusting your search or
select a different category.
@@ -851,30 +851,30 @@ export function Control({
</tr>
</thead>
<tbody>
{filteredMesures().map((mesure) => {
const isLinked = isMesureLinked(mesure.id);
{filteredMeasures().map((measure) => {
const isLinked = isMeasureLinked(measure.id);
return (
<tr
key={mesure.id}
key={measure.id}
className="border-b hover:bg-invert-bg"
>
<td className="py-3 px-4">
<div className="font-medium">
{mesure.name}
{measure.name}
</div>
{mesure.description && (
{measure.description && (
<div className="text-xs text-secondary line-clamp-1 mt-0.5">
{mesure.description}
{measure.description}
</div>
)}
</td>
<td className="py-3 px-4">
<div
className={`px-2 py-0.5 rounded-full text-xs ${getStateColor(
mesure.state
measure.state
)} inline-block`}
>
{formatState(mesure.state)}
{formatState(measure.state)}
</div>
</td>
<td className="py-3 px-4 text-right whitespace-nowrap">
@@ -883,12 +883,12 @@ export function Control({
variant="outline"
size="sm"
onClick={() =>
handleUnlinkMesure(mesure.id)
handleUnlinkMeasure(measure.id)
}
disabled={isUnlinkingMesure}
disabled={isUnlinkingMeasure}
className="text-xs h-7 text-danger border-danger-b hover:bg-h-danger-bg"
>
{isUnlinkingMesure ? (
{isUnlinkingMeasure ? (
<Loader2 className="w-4 h-4 animate-spin" />
) : (
<X className="w-4 h-4" />
@@ -900,12 +900,12 @@ export function Control({
variant="secondary"
size="sm"
onClick={() =>
handleLinkMesure(mesure.id)
handleLinkMeasure(measure.id)
}
disabled={isLinkingMesure}
disabled={isLinkingMeasure}
className="text-xs h-7 text-info border-info-b hover:bg-h-info-bg"
>
{isLinkingMesure ? (
{isLinkingMeasure ? (
<Loader2 className="w-4 h-4 animate-spin" />
) : (
<LinkIcon className="w-4 h-4" />
@@ -925,14 +925,14 @@ export function Control({
</div>
<DialogFooter className="mt-4">
<Button onClick={() => setIsMesureMappingDialogOpen(false)}>
<Button onClick={() => setIsMeasureMappingDialogOpen(false)}>
Close
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
{/* Linked Mesures List */}
{/* Linked Measures List */}
<div>
<div className="flex justify-between items-center mb-4">
<h3 className="text-xl font-medium text-secondary">
@@ -942,20 +942,20 @@ export function Control({
variant="outline"
size="sm"
className="flex items-center gap-1"
onClick={handleOpenMesureMappingDialog}
onClick={handleOpenMeasureMappingDialog}
>
<LinkIcon className="w-4 h-4" />
<span>Link Security Measures</span>
</Button>
</div>
{isLoadingMesures ? (
{isLoadingMeasures ? (
<div className="flex items-center justify-center h-24">
<Loader2 className="w-6 h-6 animate-spin text-info" />
<span className="ml-2">Loading security measures...</span>
</div>
) : linkedMesuresData?.control?.mesures?.edges &&
linkedMesuresData.control.mesures.edges.length > 0 ? (
) : linkedMeasuresData?.control?.measures?.edges &&
linkedMeasuresData.control.measures.edges.length > 0 ? (
<div className="overflow-x-auto border rounded-md">
<table className="w-full">
<thead>
@@ -968,26 +968,26 @@ export function Control({
</tr>
</thead>
<tbody>
{getLinkedMesures().map((mesure) => (
{getLinkedMeasures().map((measure) => (
<tr
key={mesure.id}
key={measure.id}
className="border-b hover:bg-invert-bg"
>
<td className="py-3 px-4">
<div className="font-medium">{mesure.name}</div>
{mesure.description && (
<div className="font-medium">{measure.name}</div>
{measure.description && (
<div className="text-xs text-secondary line-clamp-1 mt-0.5">
{mesure.description}
{measure.description}
</div>
)}
</td>
<td className="py-3 px-4">
<div
className={`px-2 py-0.5 rounded-full text-xs ${getStateColor(
mesure.state
measure.state
)} inline-block`}
>
{formatState(mesure.state)}
{formatState(measure.state)}
</div>
</td>
<td className="py-3 px-4 text-right whitespace-nowrap">
@@ -999,7 +999,7 @@ export function Control({
className="text-xs h-7"
>
<Link
to={`/organizations/${organizationId}/mesures/${mesure.id}`}
to={`/organizations/${organizationId}/measures/${measure.id}`}
>
View
</Link>
@@ -1007,8 +1007,8 @@ export function Control({
<Button
variant="outline"
size="sm"
onClick={() => handleUnlinkMesure(mesure.id)}
disabled={isUnlinkingMesure}
onClick={() => handleUnlinkMeasure(measure.id)}
disabled={isUnlinkingMeasure}
className="text-xs h-7 text-danger border-danger-b hover:bg-h-danger-bg"
>
Unlink

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<b2d5c0102cdcaff05ca490a75b797625>>
* @generated SignedSource<<369cb72e422d254a5e4956d17c47a8ae>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,21 +9,21 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type CreateRiskMesureMappingInput = {
mesureId: string;
riskId: string;
export type CreateControlMeasureMappingInput = {
controlId: string;
measureId: string;
};
export type ShowRiskViewCreateRiskMesureMappingMutation$variables = {
input: CreateRiskMesureMappingInput;
export type ControlCreateMeasureMappingMutation$variables = {
input: CreateControlMeasureMappingInput;
};
export type ShowRiskViewCreateRiskMesureMappingMutation$data = {
readonly createRiskMesureMapping: {
export type ControlCreateMeasureMappingMutation$data = {
readonly createControlMeasureMapping: {
readonly success: boolean;
};
};
export type ShowRiskViewCreateRiskMesureMappingMutation = {
response: ShowRiskViewCreateRiskMesureMappingMutation$data;
variables: ShowRiskViewCreateRiskMesureMappingMutation$variables;
export type ControlCreateMeasureMappingMutation = {
response: ControlCreateMeasureMappingMutation$data;
variables: ControlCreateMeasureMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -44,9 +44,9 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "CreateRiskMesureMappingPayload",
"concreteType": "CreateControlMeasureMappingPayload",
"kind": "LinkedField",
"name": "createRiskMesureMapping",
"name": "createControlMeasureMapping",
"plural": false,
"selections": [
{
@@ -65,7 +65,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ShowRiskViewCreateRiskMesureMappingMutation",
"name": "ControlCreateMeasureMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -74,20 +74,20 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ShowRiskViewCreateRiskMesureMappingMutation",
"name": "ControlCreateMeasureMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "f7d34307825549877c07678c77ca17c6",
"cacheID": "5ff3b52a5f40607556617a17e44dc3b1",
"id": null,
"metadata": {},
"name": "ShowRiskViewCreateRiskMesureMappingMutation",
"name": "ControlCreateMeasureMappingMutation",
"operationKind": "mutation",
"text": "mutation ShowRiskViewCreateRiskMesureMappingMutation(\n $input: CreateRiskMesureMappingInput!\n) {\n createRiskMesureMapping(input: $input) {\n success\n }\n}\n"
"text": "mutation ControlCreateMeasureMappingMutation(\n $input: CreateControlMeasureMappingInput!\n) {\n createControlMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();
(node as any).hash = "e1d7cdd482d6658c2befddd478a3397d";
(node as any).hash = "2c0061b6e180971d0e0f8b8b5c44d566";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<0fc791ecc00bfd6b1aa3a8da262df36c>>
* @generated SignedSource<<6208e6173d03bbf497b38e0f8dece2a7>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,21 +9,21 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteRiskMesureMappingInput = {
mesureId: string;
riskId: string;
export type DeleteControlMeasureMappingInput = {
controlId: string;
measureId: string;
};
export type ShowRiskViewDeleteRiskMesureMappingMutation$variables = {
input: DeleteRiskMesureMappingInput;
export type ControlDeleteMeasureMappingMutation$variables = {
input: DeleteControlMeasureMappingInput;
};
export type ShowRiskViewDeleteRiskMesureMappingMutation$data = {
readonly deleteRiskMesureMapping: {
export type ControlDeleteMeasureMappingMutation$data = {
readonly deleteControlMeasureMapping: {
readonly success: boolean;
};
};
export type ShowRiskViewDeleteRiskMesureMappingMutation = {
response: ShowRiskViewDeleteRiskMesureMappingMutation$data;
variables: ShowRiskViewDeleteRiskMesureMappingMutation$variables;
export type ControlDeleteMeasureMappingMutation = {
response: ControlDeleteMeasureMappingMutation$data;
variables: ControlDeleteMeasureMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -44,9 +44,9 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "DeleteRiskMesureMappingPayload",
"concreteType": "DeleteControlMeasureMappingPayload",
"kind": "LinkedField",
"name": "deleteRiskMesureMapping",
"name": "deleteControlMeasureMapping",
"plural": false,
"selections": [
{
@@ -65,7 +65,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ShowRiskViewDeleteRiskMesureMappingMutation",
"name": "ControlDeleteMeasureMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -74,20 +74,20 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ShowRiskViewDeleteRiskMesureMappingMutation",
"name": "ControlDeleteMeasureMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "d46920306e833fb33b4f10dca6aa1c5a",
"cacheID": "446e0d6cc32e0c0dfc4f5e74e11bdb84",
"id": null,
"metadata": {},
"name": "ShowRiskViewDeleteRiskMesureMappingMutation",
"name": "ControlDeleteMeasureMappingMutation",
"operationKind": "mutation",
"text": "mutation ShowRiskViewDeleteRiskMesureMappingMutation(\n $input: DeleteRiskMesureMappingInput!\n) {\n deleteRiskMesureMapping(input: $input) {\n success\n }\n}\n"
"text": "mutation ControlDeleteMeasureMappingMutation(\n $input: DeleteControlMeasureMappingInput!\n) {\n deleteControlMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();
(node as any).hash = "e55c8d6490fbcfe0d287053200b6347d";
(node as any).hash = "f6a94c260a98dffe7d48e4aa9e690845";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<94f5c5a041ae3730b8f4a71ad63530a8>>
* @generated SignedSource<<968e00428300c564a03ee9a4b98eed90>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,29 +9,29 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ControlLinkedMesuresQuery$variables = {
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ControlLinkedMeasuresQuery$variables = {
controlId: string;
};
export type ControlLinkedMesuresQuery$data = {
export type ControlLinkedMeasuresQuery$data = {
readonly control: {
readonly id: string;
readonly mesures?: {
readonly measures?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MesureState;
readonly state: MeasureState;
};
}>;
};
};
};
export type ControlLinkedMesuresQuery = {
response: ControlLinkedMesuresQuery$data;
variables: ControlLinkedMesuresQuery$variables;
export type ControlLinkedMeasuresQuery = {
response: ControlLinkedMeasuresQuery$data;
variables: ControlLinkedMeasuresQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -67,7 +67,7 @@ v4 = [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -75,7 +75,7 @@ v4 = [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -161,7 +161,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ControlLinkedMesuresQuery",
"name": "ControlLinkedMeasuresQuery",
"selections": [
{
"alias": "control",
@@ -176,11 +176,11 @@ return {
"kind": "InlineFragment",
"selections": [
{
"alias": "mesures",
"alias": "measures",
"args": null,
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "__Control__mesures_connection",
"name": "__Control__measures_connection",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": null
@@ -200,7 +200,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ControlLinkedMesuresQuery",
"name": "ControlLinkedMeasuresQuery",
"selections": [
{
"alias": "control",
@@ -218,21 +218,21 @@ return {
{
"alias": null,
"args": (v5/*: any*/),
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": "mesures(first:100)"
"storageKey": "measures(first:100)"
},
{
"alias": null,
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "Control__mesures",
"key": "Control__measures",
"kind": "LinkedHandle",
"name": "mesures"
"name": "measures"
}
],
"type": "Control",
@@ -244,7 +244,7 @@ return {
]
},
"params": {
"cacheID": "b29cb1662103fc42abf16fa6b3458a68",
"cacheID": "1b64a54214517bf3d4555ada606c7e1c",
"id": null,
"metadata": {
"connection": [
@@ -254,18 +254,18 @@ return {
"direction": "forward",
"path": [
"control",
"mesures"
"measures"
]
}
]
},
"name": "ControlLinkedMesuresQuery",
"name": "ControlLinkedMeasuresQuery",
"operationKind": "query",
"text": "query ControlLinkedMesuresQuery(\n $controlId: ID!\n) {\n control: node(id: $controlId) {\n __typename\n id\n ... on Control {\n mesures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query ControlLinkedMeasuresQuery(\n $controlId: ID!\n) {\n control: node(id: $controlId) {\n __typename\n id\n ... on Control {\n measures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "e42a48d7b21eaa5c42331377b6a9bc9c";
(node as any).hash = "168cf7c175bd5abf756edada5c8bd533";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<862b2210a9d569a05063cebc805bdd01>>
* @generated SignedSource<<b9bcf1b3144ca9e18e7e7c3513dfbd73>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,29 +9,29 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ControlOrganizationMesuresQuery$variables = {
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ControlOrganizationMeasuresQuery$variables = {
organizationId: string;
};
export type ControlOrganizationMesuresQuery$data = {
export type ControlOrganizationMeasuresQuery$data = {
readonly organization: {
readonly id: string;
readonly mesures?: {
readonly measures?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MesureState;
readonly state: MeasureState;
};
}>;
};
};
};
export type ControlOrganizationMesuresQuery = {
response: ControlOrganizationMesuresQuery$data;
variables: ControlOrganizationMesuresQuery$variables;
export type ControlOrganizationMeasuresQuery = {
response: ControlOrganizationMeasuresQuery$data;
variables: ControlOrganizationMeasuresQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -67,7 +67,7 @@ v4 = [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -75,7 +75,7 @@ v4 = [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -161,7 +161,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ControlOrganizationMesuresQuery",
"name": "ControlOrganizationMeasuresQuery",
"selections": [
{
"alias": "organization",
@@ -176,11 +176,11 @@ return {
"kind": "InlineFragment",
"selections": [
{
"alias": "mesures",
"alias": "measures",
"args": null,
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "__Organization__mesures_connection",
"name": "__Organization__measures_connection",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": null
@@ -200,7 +200,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ControlOrganizationMesuresQuery",
"name": "ControlOrganizationMeasuresQuery",
"selections": [
{
"alias": "organization",
@@ -218,21 +218,21 @@ return {
{
"alias": null,
"args": (v5/*: any*/),
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": "mesures(first:100)"
"storageKey": "measures(first:100)"
},
{
"alias": null,
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "Organization__mesures",
"key": "Organization__measures",
"kind": "LinkedHandle",
"name": "mesures"
"name": "measures"
}
],
"type": "Organization",
@@ -244,7 +244,7 @@ return {
]
},
"params": {
"cacheID": "bb1066800bfa28aaa64a2fd1f12c5924",
"cacheID": "9d2ddaaceb1b73e3c7b967e2d2a1b86b",
"id": null,
"metadata": {
"connection": [
@@ -254,18 +254,18 @@ return {
"direction": "forward",
"path": [
"organization",
"mesures"
"measures"
]
}
]
},
"name": "ControlOrganizationMesuresQuery",
"name": "ControlOrganizationMeasuresQuery",
"operationKind": "query",
"text": "query ControlOrganizationMesuresQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n mesures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query ControlOrganizationMeasuresQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n measures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "5f1d6b11af3d92bec1c4d37ceb12b7c3";
(node as any).hash = "6f5efd4dbac9bdc9b32ed8c155edf1e7";
export default node;

View File

@@ -4,26 +4,26 @@ import { lazy } from "@probo/react-lazy";
import { useLocation } from "react-router";
import { ErrorBoundaryWithLocation } from "../ErrorBoundary";
const NewMesureView = lazy(() => import("./NewMesureView"));
const EditMeasureView = lazy(() => import("./EditMeasureView"));
export function NewMesureViewSkeleton() {
export function EditMeasureViewSkeleton() {
return (
<PageTemplateSkeleton
title="New Mesure"
description="Add a new mesure. You will be able to link it to control and risks"
title="Edit Measure"
description="Edit a Measure. You will be able to link it to control and risks"
>
<div className="max-w-2xl aspect-square bg-subtle-bg rounded-xl animate-pulse" />
</PageTemplateSkeleton>
);
}
export function NewMesurePage() {
export function EditMeasurePage() {
const location = useLocation();
return (
<Suspense key={location.pathname} fallback={<NewMesureViewSkeleton />}>
<Suspense key={location.pathname} fallback={<EditMeasureViewSkeleton />}>
<ErrorBoundaryWithLocation>
<NewMesureView />
<EditMeasureView />
</ErrorBoundaryWithLocation>
</Suspense>
);

View File

@@ -9,19 +9,19 @@ import {
import { useParams, useNavigate } from "react-router";
import { PageTemplate } from "@/components/PageTemplate";
import { useToast } from "@/hooks/use-toast";
import { EditMesureViewUpdateMesureMutation } from "./__generated__/EditMesureViewUpdateMesureMutation.graphql";
import { EditMeasureViewUpdateMeasureMutation } from "./__generated__/EditMeasureViewUpdateMeasureMutation.graphql";
import { EditableField } from "@/components/EditableField";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import { Label } from "@/components/ui/label";
import { cn } from "@/lib/utils";
import { EditMesureViewSkeleton } from "./EditMesurePage";
import { EditMesureViewQuery } from "./__generated__/EditMesureViewQuery.graphql";
import { EditMeasureViewSkeleton } from "./EditMeasurePage";
import { EditMeasureViewQuery } from "./__generated__/EditMeasureViewQuery.graphql";
const editMesureQuery = graphql`
query EditMesureViewQuery($mesureId: ID!) {
node(id: $mesureId) {
... on Mesure {
const editMeasureQuery = graphql`
query EditMeasureViewQuery($measureId: ID!) {
node(id: $measureId) {
... on Measure {
id
name
description
@@ -31,10 +31,10 @@ const editMesureQuery = graphql`
}
`;
const updateMesureMutation = graphql`
mutation EditMesureViewUpdateMesureMutation($input: UpdateMesureInput!) {
updateMesure(input: $input) {
mesure {
const updateMeasureMutation = graphql`
mutation EditMeasureViewUpdateMeasureMutation($input: UpdateMeasureInput!) {
updateMeasure(input: $input) {
measure {
id
name
description
@@ -43,26 +43,26 @@ const updateMesureMutation = graphql`
}
`;
function EditMesureViewContent({
function EditMeasureViewContent({
queryRef,
}: {
queryRef: PreloadedQuery<EditMesureViewQuery>;
queryRef: PreloadedQuery<EditMeasureViewQuery>;
}) {
const { organizationId } = useParams<{
organizationId: string;
}>();
const { mesureId } = useParams();
const { measureId } = useParams();
const navigate = useNavigate();
const { toast } = useToast();
const { node: mesure } = usePreloadedQuery(editMesureQuery, queryRef);
const { node: measure } = usePreloadedQuery(editMeasureQuery, queryRef);
const [formData, setFormData] = useState({
name: mesure.name ?? "",
description: mesure.description ?? "",
category: mesure.category ?? ""
name: measure.name ?? "",
description: measure.description ?? "",
category: measure.category ?? ""
});
const [commit, isInFlight] =
useMutation<EditMesureViewUpdateMesureMutation>(updateMesureMutation);
useMutation<EditMeasureViewUpdateMeasureMutation>(updateMeasureMutation);
const handleFieldChange = (field: keyof typeof formData, value: unknown) => {
setFormData((prev) => ({
@@ -86,7 +86,7 @@ function EditMesureViewContent({
commit({
variables: {
input: {
id: mesureId!,
id: measureId!,
name: formData.name,
description: formData.description,
category: formData.category
@@ -96,7 +96,7 @@ function EditMesureViewContent({
if (errors) {
toast({
title: "Error",
description: errors[0]?.message || "Failed to update mesure",
description: errors[0]?.message || "Failed to update measure",
variant: "destructive",
});
return;
@@ -104,10 +104,10 @@ function EditMesureViewContent({
toast({
title: "Success",
description: "Mesure updated successfully",
description: "Measure updated successfully",
});
navigate(`/organizations/${organizationId}/mesures/${mesureId}`);
navigate(`/organizations/${organizationId}/measures/${measureId}`);
},
onError(error) {
toast({
@@ -121,8 +121,8 @@ function EditMesureViewContent({
return (
<PageTemplate
title="Edit Mesure"
description="Edit a mesure. You will be able to link it to control and risks"
title="Edit Measure"
description="Edit a measure. You will be able to link it to control and risks"
>
<Card className="max-w-2xl">
<form onSubmit={handleSubmit} className="p-6 space-y-6">
@@ -139,7 +139,7 @@ function EditMesureViewContent({
onChange={(value) => handleFieldChange("description", value)}
required
multiline
helpText="Provide a detailed description of the mesure"
helpText="Provide a detailed description of the measure"
/>
<EditableField
@@ -154,13 +154,13 @@ function EditMesureViewContent({
type="button"
variant="outline"
onClick={() =>
navigate(`/organizations/${organizationId}/mesures/${mesureId}`)
navigate(`/organizations/${organizationId}/measures/${measureId}`)
}
>
Cancel
</Button>
<Button type="submit" disabled={isInFlight}>
{isInFlight ? "Updating..." : "Update Mesure"}
{isInFlight ? "Updating..." : "Update Measure"}
</Button>
</div>
</form>
@@ -169,24 +169,24 @@ function EditMesureViewContent({
);
}
export default function EditMesureView() {
const { mesureId } = useParams();
export default function EditMeasureView() {
const { measureId } = useParams();
const [queryRef, loadQuery] =
useQueryLoader<EditMesureViewQuery>(editMesureQuery);
useQueryLoader<EditMeasureViewQuery>(editMeasureQuery);
useEffect(() => {
if (mesureId) {
loadQuery({ mesureId });
if (measureId) {
loadQuery({ measureId });
}
}, [mesureId, loadQuery]);
}, [measureId, loadQuery]);
if (!queryRef) {
return <EditMesureViewSkeleton />;
return <EditMeasureViewSkeleton />;
}
return (
<Suspense fallback={<EditMesureViewSkeleton />}>
<EditMesureViewContent queryRef={queryRef} />
<Suspense fallback={<EditMeasureViewSkeleton />}>
<EditMeasureViewContent queryRef={queryRef} />
</Suspense>
);
}

View File

@@ -4,13 +4,13 @@ import { lazy } from "@probo/react-lazy";
import { useLocation } from "react-router";
import { ErrorBoundaryWithLocation } from "../ErrorBoundary";
const MesureListView = lazy(() => import("./MesureListView"));
const MeasureListView = lazy(() => import("./MeasureListView"));
export function MesureListViewSkeleton() {
export function MeasureListViewSkeleton() {
return (
<PageTemplateSkeleton
title="Mesures"
description="Mesures are actions taken to reduce the risk of a risk."
title="Measures"
description="Measures are actions taken to reduce the risk of a risk."
>
<div className="space-y-6">
<div className="h-[72px] bg-subtle-bg animate-pulse rounded-xl" />
@@ -31,13 +31,13 @@ export function MesureListViewSkeleton() {
);
}
export function MesureListPage() {
export function MeasureListPage() {
const location = useLocation();
return (
<Suspense key={location.pathname} fallback={<MesureListViewSkeleton />}>
<Suspense key={location.pathname} fallback={<MeasureListViewSkeleton />}>
<ErrorBoundaryWithLocation>
<MesureListView />
<MeasureListView />
</ErrorBoundaryWithLocation>
</Suspense>
);

View File

@@ -21,11 +21,11 @@ import {
} from "lucide-react";
import { PageTemplate } from "@/components/PageTemplate";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { MesureListViewQuery as MesureListViewQueryType } from "./__generated__/MesureListViewQuery.graphql";
import { MesureListViewSkeleton } from "./MesureListPage";
import { MeasureListViewQuery as MeasureListViewQueryType } from "./__generated__/MeasureListViewQuery.graphql";
import { MeasureListViewSkeleton } from "./MeasureListPage";
import { Button } from "@/components/ui/button";
import { useToast } from "@/hooks/use-toast";
import { MesureListViewImportMesureMutation as MesureListViewImportMesureMutationType } from "./__generated__/MesureListViewImportMesureMutation.graphql";
import { MeasureListViewImportMeasureMutation as MeasureListViewImportMeasureMutationType } from "./__generated__/MeasureListViewImportMeasureMutation.graphql";
import {
Tooltip,
TooltipContent,
@@ -38,12 +38,12 @@ import {
PopoverTrigger,
} from "@/components/ui/popover";
const mesureListViewQuery = graphql`
query MesureListViewQuery($organizationId: ID!, $first: Int) {
const measureListViewQuery = graphql`
query MeasureListViewQuery($organizationId: ID!, $first: Int) {
organization: node(id: $organizationId) {
id
... on Organization {
mesures(first: $first) @connection(key: "MesureListView_mesures") {
measures(first: $first) @connection(key: "MeasureListView_measures") {
edges {
node {
id
@@ -61,13 +61,13 @@ const mesureListViewQuery = graphql`
}
`;
const importMesureMutation = graphql`
mutation MesureListViewImportMesureMutation(
$input: ImportMesureInput!
const importMeasureMutation = graphql`
mutation MeasureListViewImportMeasureMutation(
$input: ImportMeasureInput!
$connections: [ID!]!
) {
importMesure(input: $input) {
mesureEdges @appendEdge(connections: $connections) {
importMeasure(input: $input) {
measureEdges @appendEdge(connections: $connections) {
node {
id
name
@@ -82,7 +82,7 @@ const importMesureMutation = graphql`
}
`;
interface Mesure {
interface Measure {
id?: string;
name?: string;
description?: string;
@@ -98,7 +98,7 @@ interface Category {
name: string;
description: string;
progress: number;
mesures: Mesure[];
measures: Measure[];
doneCount: number;
totalCount: number;
}
@@ -106,21 +106,21 @@ interface Category {
interface OrganizationData {
organization: {
id: string;
mesures?: {
measures?: {
edges: Array<{
node: Mesure;
node: Measure;
}>;
};
};
}
function MesureListContent({
function MeasureListContent({
queryRef,
}: {
queryRef: PreloadedQuery<MesureListViewQueryType>;
queryRef: PreloadedQuery<MeasureListViewQueryType>;
}) {
const data = usePreloadedQuery<MesureListViewQueryType>(
mesureListViewQuery,
const data = usePreloadedQuery<MeasureListViewQueryType>(
measureListViewQuery,
queryRef
) as unknown as OrganizationData;
@@ -129,8 +129,8 @@ function MesureListContent({
const [isImporting, setIsImporting] = useState(false);
const { toast } = useToast();
const [importMesure] =
useMutation<MesureListViewImportMesureMutationType>(importMesureMutation);
const [importMeasure] =
useMutation<MeasureListViewImportMeasureMutationType>(importMeasureMutation);
// Monitor URL hash for changes and update state accordingly
const [initialHashCategory] = useState(() =>
@@ -175,10 +175,10 @@ function MesureListContent({
};
}, [expandedCategories]);
const mesures =
data.organization.mesures?.edges.map((edge) => edge.node) ?? [];
const measures =
data.organization.measures?.edges.map((edge) => edge.node) ?? [];
// Map mesure state to status for the new design
// Map measure state to status for the new design
const mapStateToStatus = (state?: string): string => {
if (!state) return "incomplete";
switch (state) {
@@ -195,48 +195,48 @@ function MesureListContent({
}
};
const processedMesures = mesures.map((mesure: Mesure) => ({
...mesure,
status: mapStateToStatus(mesure.state),
const processedMeasures = measures.map((measure: Measure) => ({
...measure,
status: mapStateToStatus(measure.state),
}));
// Calculate global progress
const implementedCount = processedMesures.filter(
(mesure: Mesure) => mesure.status === "complete"
const implementedCount = processedMeasures.filter(
(measure: Measure) => measure.status === "complete"
).length;
const notApplicableCount = processedMesures.filter(
(mesure: Mesure) => mesure.status === "not-applicable"
const notApplicableCount = processedMeasures.filter(
(measure: Measure) => measure.status === "not-applicable"
).length;
const totalMesures = processedMesures.length;
const totalMeasures = processedMeasures.length;
// Include not-applicable as effectively "complete" for progress percentage
const effectiveCompletedCount = implementedCount + notApplicableCount;
const globalProgress = totalMesures
? Math.round((effectiveCompletedCount / totalMesures) * 100)
const globalProgress = totalMeasures
? Math.round((effectiveCompletedCount / totalMeasures) * 100)
: 0;
// Get global status counts
const globalStatusCounts = processedMesures.reduce(
(acc: Record<string, number>, mesure: Mesure) => {
if (mesure.status) {
acc[mesure.status] = (acc[mesure.status] || 0) + 1;
const globalStatusCounts = processedMeasures.reduce(
(acc: Record<string, number>, measure: Measure) => {
if (measure.status) {
acc[measure.status] = (acc[measure.status] || 0) + 1;
}
return acc;
},
{} as Record<string, number>
);
// Group mesures by category
const mesuresByCategory = processedMesures.reduce(
(acc: Record<string, Mesure[]>, mesure: Mesure) => {
if (!mesure?.category) return acc;
if (!acc[mesure.category]) {
acc[mesure.category] = [];
// Group measures by category
const measuresByCategory = processedMeasures.reduce(
(acc: Record<string, Measure[]>, measure: Measure) => {
if (!measure?.category) return acc;
if (!acc[measure.category]) {
acc[measure.category] = [];
}
acc[mesure.category].push(mesure);
acc[measure.category].push(measure);
return acc;
},
{} as Record<string, Mesure[]>
{} as Record<string, Measure[]>
);
// Function to toggle a category's expanded state
@@ -250,17 +250,17 @@ function MesureListContent({
});
};
const categories: Category[] = Object.entries(mesuresByCategory)
.map(([categoryName, categoryMesures]: [string, Mesure[]]) => {
const catImplementedCount = categoryMesures.filter(
(mesure) => mesure.status === "complete"
const categories: Category[] = Object.entries(measuresByCategory)
.map(([categoryName, categoryMeasures]: [string, Measure[]]) => {
const catImplementedCount = categoryMeasures.filter(
(measure) => measure.status === "complete"
).length;
const catNotApplicableCount = categoryMesures.filter(
(mesure) => mesure.status === "not-applicable"
const catNotApplicableCount = categoryMeasures.filter(
(measure) => measure.status === "not-applicable"
).length;
// Consider both "complete" and "not-applicable" as done for category progress
const catDoneCount = catImplementedCount + catNotApplicableCount;
const catTotalCount = categoryMesures.length;
const catTotalCount = categoryMeasures.length;
const progress = catTotalCount
? Math.round((catDoneCount / catTotalCount) * 100)
: 0;
@@ -268,16 +268,16 @@ function MesureListContent({
return {
id: categoryName,
name: categoryName,
description: `Mesures related to ${categoryName.toLowerCase()}`,
description: `Measures related to ${categoryName.toLowerCase()}`,
progress: progress,
mesures: categoryMesures.sort((a, b) =>
measures: categoryMeasures.sort((a, b) =>
(a.name || "").localeCompare(b.name || "")
),
doneCount: catDoneCount,
totalCount: catTotalCount,
};
})
.filter((category) => category.mesures.length > 0)
.filter((category) => category.measures.length > 0)
.sort((a, b) => a.name.localeCompare(b.name));
const getStatusIcon = (status: string) => {
@@ -303,12 +303,12 @@ function MesureListContent({
setIsImporting(true);
importMesure({
importMeasure({
variables: {
connections: [
ConnectionHandler.getConnectionID(
data.organization.id,
"MesureListView_mesures"
"MeasureListView_measures"
),
],
input: {
@@ -322,8 +322,8 @@ function MesureListContent({
onCompleted: () => {
setIsImporting(false);
toast({
title: "Mesures imported",
description: "Mesures have been imported successfully.",
title: "Measures imported",
description: "Measures have been imported successfully.",
variant: "default",
});
if (fileInputRef.current) {
@@ -333,7 +333,7 @@ function MesureListContent({
onError: (error) => {
setIsImporting(false);
toast({
title: "Error importing mesures",
title: "Error importing measures",
description: error.message,
variant: "destructive",
});
@@ -343,8 +343,8 @@ function MesureListContent({
return (
<PageTemplate
title="Mesures"
description="Mesures are actions taken to reduce the risk. Add them to track their implementation status."
title="Measures"
description="Measures are actions taken to reduce the risk. Add them to track their implementation status."
actions={
<div className="flex gap-4">
<Button
@@ -352,17 +352,17 @@ function MesureListContent({
onClick={() => fileInputRef.current?.click()}
disabled={isImporting}
>
{isImporting ? "Importing..." : "Import Mesures"}
{isImporting ? "Importing..." : "Import Measures"}
</Button>
<Button asChild>
<Link to={`/organizations/${organizationId}/mesures/new`}>
New Mesure
<Link to={`/organizations/${organizationId}/measures/new`}>
New Measure
</Link>
</Button>
</div>
}
>
{/* Hidden file input for mesure import */}
{/* Hidden file input for measure import */}
<input
type="file"
ref={fileInputRef}
@@ -374,7 +374,7 @@ function MesureListContent({
{/* Global Progress Summary */}
<div className="mb-8">
<div className="flex items-center justify-between mb-1">
<h3 className="text-lg font-medium">Mesure Implementation</h3>
<h3 className="text-lg font-medium">Measure Implementation</h3>
<span className="text-sm text-tertiary">
{globalProgress}% complete
</span>
@@ -390,7 +390,7 @@ function MesureListContent({
className="bg-green-500 h-full"
style={{
width: `${
(globalStatusCounts.complete / totalMesures) * 100
(globalStatusCounts.complete / totalMeasures) * 100
}%`,
}}
/>
@@ -401,7 +401,7 @@ function MesureListContent({
className="bg-blue-500 h-full"
style={{
width: `${
(globalStatusCounts["in-progress"] / totalMesures) * 100
(globalStatusCounts["in-progress"] / totalMeasures) * 100
}%`,
}}
/>
@@ -412,7 +412,7 @@ function MesureListContent({
className="bg-red-500 h-full"
style={{
width: `${
(globalStatusCounts.incomplete / totalMesures) * 100
(globalStatusCounts.incomplete / totalMeasures) * 100
}%`,
}}
/>
@@ -423,7 +423,7 @@ function MesureListContent({
className="bg-primary-bg h-full"
style={{
width: `${
(globalStatusCounts["not-applicable"] / totalMesures) * 100
(globalStatusCounts["not-applicable"] / totalMeasures) * 100
}%`,
}}
/>
@@ -434,7 +434,7 @@ function MesureListContent({
className="bg-secondary h-full"
style={{
width: `${
(globalStatusCounts["not-started"] / totalMesures) * 100
(globalStatusCounts["not-started"] / totalMeasures) * 100
}%`,
}}
/>
@@ -514,7 +514,7 @@ function MesureListContent({
{isExpanded && (
<CardContent className="p-0">
{category.mesures.length > 0 ? (
{category.measures.length > 0 ? (
<div className="w-full">
<table className="w-full">
<thead>
@@ -522,19 +522,19 @@ function MesureListContent({
<th className="w-24 px-4 py-2 text-left">
Status
</th>
<th className="px-4 py-2 text-left">Mesure</th>
<th className="px-4 py-2 text-left">Measure</th>
</tr>
</thead>
<tbody className="divide-y">
{category.mesures.map((mesure) => (
{category.measures.map((measure) => (
<tr
key={mesure.id || Math.random().toString()}
key={measure.id || Math.random().toString()}
className="hover:bg-h-subtle-bg cursor-pointer"
>
<td className="w-24 px-4 py-3 align-middle">
<div className="flex items-center justify-center">
{mesure.status
? getStatusIcon(mesure.status)
{measure.status
? getStatusIcon(measure.status)
: null}
</div>
</td>
@@ -544,11 +544,11 @@ function MesureListContent({
<Tooltip>
<TooltipTrigger asChild>
<Link
to={`/organizations/${organizationId}/mesures/${mesure.id}`}
to={`/organizations/${organizationId}/measures/${measure.id}`}
className="font-medium group flex items-center relative"
>
<span className="mr-1">
{mesure.name}
{measure.name}
</span>
<span className="absolute bottom-0 left-0 w-full h-0.5 bg-primary-bg scale-x-0 group-hover:scale-x-100 transition-transform"></span>
</Link>
@@ -567,7 +567,7 @@ function MesureListContent({
<Button
variant="ghost"
className="p-0 h-6 w-6 rounded-full hover:bg-primary-bg"
aria-label="Learn more about this mesure"
aria-label="Learn more about this measure"
>
<HelpCircle className="h-5 w-5 text-primary hover:text-primary" />
</Button>
@@ -580,20 +580,20 @@ function MesureListContent({
<div className="space-y-3">
<div className="flex justify-between items-start">
<h4 className="font-bold text-md">
{mesure.name}
{measure.name}
</h4>
</div>
{mesure.description && (
{measure.description && (
<div className="text-sm">
<p className="font-semibold mb-1">
Why is this important:
</p>
<p>
{mesure.description.startsWith(
{measure.description.startsWith(
"##"
)
? mesure.description
? measure.description
.split("\n")
.find((line) =>
line.startsWith(
@@ -603,15 +603,15 @@ function MesureListContent({
?.replace("## Why?", "")
?.replace("## Why", "")
?.trim() ||
mesure.description.split(
measure.description.split(
"\n"
)[1] ||
""
: mesure.description.substring(
: measure.description.substring(
0,
180
) +
(mesure.description.length >
(measure.description.length >
180
? "..."
: "")}
@@ -627,7 +627,7 @@ function MesureListContent({
asChild
>
<Link
to={`/organizations/${organizationId}/mesures/${mesure.id}`}
to={`/organizations/${organizationId}/measures/${measure.id}`}
>
<span>
Implementation guide
@@ -648,7 +648,7 @@ function MesureListContent({
</div>
) : (
<div className="flex items-center justify-center p-6 text-center text-tertiary">
No mesures in this category
No measures in this category
</div>
)}
</CardContent>
@@ -662,9 +662,9 @@ function MesureListContent({
);
}
export default function MesureListView() {
export default function MeasureListView() {
const [queryRef, loadQuery] =
useQueryLoader<MesureListViewQueryType>(mesureListViewQuery);
useQueryLoader<MeasureListViewQueryType>(measureListViewQuery);
const { organizationId } = useParams();
@@ -676,12 +676,12 @@ export default function MesureListView() {
}, [loadQuery, organizationId]);
if (!queryRef) {
return <MesureListViewSkeleton />;
return <MeasureListViewSkeleton />;
}
return (
<Suspense fallback={<MesureListViewSkeleton />}>
<MesureListContent queryRef={queryRef} />
<Suspense fallback={<MeasureListViewSkeleton />}>
<MeasureListContent queryRef={queryRef} />
</Suspense>
);
}

View File

@@ -5,9 +5,9 @@ import { lazy } from "@probo/react-lazy";
import { useLocation } from "react-router";
import { ErrorBoundaryWithLocation } from "../ErrorBoundary";
const MesureView = lazy(() => import("./MesureView"));
const MeasureView = lazy(() => import("./MeasureView"));
export function MesureViewSkeleton() {
export function MeasureViewSkeleton() {
return (
<PageTemplateSkeleton
actions={
@@ -32,13 +32,13 @@ export function MesureViewSkeleton() {
);
}
export function MesurePage() {
export function MeasurePage() {
const location = useLocation();
return (
<Suspense key={location.pathname} fallback={<MesureViewSkeleton />}>
<Suspense key={location.pathname} fallback={<MeasureViewSkeleton />}>
<ErrorBoundaryWithLocation>
<MesureView />
<MeasureView />
</ErrorBoundaryWithLocation>
</Suspense>
);

View File

@@ -80,34 +80,34 @@ import {
import { Badge } from "@/components/ui/badge";
import { PageTemplate } from "@/components/PageTemplate";
import { MesureViewSkeleton } from "./MesurePage";
import { MesureViewUpdateTaskStateMutation as MesureViewUpdateTaskStateMutationType } from "./__generated__/MesureViewUpdateTaskStateMutation.graphql";
import { MesureViewCreateTaskMutation as MesureViewCreateTaskMutationType } from "./__generated__/MesureViewCreateTaskMutation.graphql";
import { MesureViewDeleteTaskMutation as MesureViewDeleteTaskMutationType } from "./__generated__/MesureViewDeleteTaskMutation.graphql";
import { MesureViewDeleteEvidenceMutation as MesureViewDeleteEvidenceMutationType } from "./__generated__/MesureViewDeleteEvidenceMutation.graphql";
import { MesureViewAssignTaskMutation as MesureViewAssignTaskMutationType } from "./__generated__/MesureViewAssignTaskMutation.graphql";
import { MesureViewUnassignTaskMutation as MesureViewUnassignTaskMutationType } from "./__generated__/MesureViewUnassignTaskMutation.graphql";
import { MesureViewUpdateMesureStateMutation as MesureViewUpdateMesureStateMutationType } from "./__generated__/MesureViewUpdateMesureStateMutation.graphql";
import { MesureViewQuery as MesureViewQueryType } from "./__generated__/MesureViewQuery.graphql";
import { MeasureViewSkeleton } from "./MeasurePage";
import { MeasureViewUpdateTaskStateMutation as MeasureViewUpdateTaskStateMutationType } from "./__generated__/MeasureViewUpdateTaskStateMutation.graphql";
import { MeasureViewCreateTaskMutation as MeasureViewCreateTaskMutationType } from "./__generated__/MeasureViewCreateTaskMutation.graphql";
import { MeasureViewDeleteTaskMutation as MeasureViewDeleteTaskMutationType } from "./__generated__/MeasureViewDeleteTaskMutation.graphql";
import { MeasureViewDeleteEvidenceMutation as MeasureViewDeleteEvidenceMutationType } from "./__generated__/MeasureViewDeleteEvidenceMutation.graphql";
import { MeasureViewAssignTaskMutation as MeasureViewAssignTaskMutationType } from "./__generated__/MeasureViewAssignTaskMutation.graphql";
import { MeasureViewUnassignTaskMutation as MeasureViewUnassignTaskMutationType } from "./__generated__/MeasureViewUnassignTaskMutation.graphql";
import { MeasureViewUpdateMeasureStateMutation as MeasureViewUpdateMeasureStateMutationType } from "./__generated__/MeasureViewUpdateMeasureStateMutation.graphql";
import { MeasureViewQuery as MeasureViewQueryType } from "./__generated__/MeasureViewQuery.graphql";
import {
MesureViewOrganizationQuery,
MesureViewOrganizationQuery$data,
} from "./__generated__/MesureViewOrganizationQuery.graphql";
MeasureViewOrganizationQuery,
MeasureViewOrganizationQuery$data,
} from "./__generated__/MeasureViewOrganizationQuery.graphql";
import {
MesureViewFrameworksQuery,
MesureViewFrameworksQuery$data,
} from "./__generated__/MesureViewFrameworksQuery.graphql";
MeasureViewFrameworksQuery,
MeasureViewFrameworksQuery$data,
} from "./__generated__/MeasureViewFrameworksQuery.graphql";
import {
MesureViewLinkedControlsQuery,
MesureViewLinkedControlsQuery$data,
} from "./__generated__/MesureViewLinkedControlsQuery.graphql";
import { MesureViewCreateEvidenceMutation as MesureViewCreateEvidenceMutationType } from "./__generated__/MesureViewCreateEvidenceMutation.graphql";
import { MesureViewFulfillEvidenceMutation as MesureViewFulfillEvidenceMutationType } from "./__generated__/MesureViewFulfillEvidenceMutation.graphql";
import { MesureViewCreateControlMappingMutation } from "./__generated__/MesureViewCreateControlMappingMutation.graphql";
import { MesureViewDeleteControlMappingMutation } from "./__generated__/MesureViewDeleteControlMappingMutation.graphql";
import { MesureViewRisksQuery$data } from "./__generated__/MesureViewRisksQuery.graphql";
import { MesureViewRisksQuery } from "./__generated__/MesureViewRisksQuery.graphql";
import { MesureViewDeleteMesureMutation } from "./__generated__/MesureViewDeleteMesureMutation.graphql";
MeasureViewLinkedControlsQuery,
MeasureViewLinkedControlsQuery$data,
} from "./__generated__/MeasureViewLinkedControlsQuery.graphql";
import { MeasureViewCreateEvidenceMutation as MeasureViewCreateEvidenceMutationType } from "./__generated__/MeasureViewCreateEvidenceMutation.graphql";
import { MeasureViewFulfillEvidenceMutation as MeasureViewFulfillEvidenceMutationType } from "./__generated__/MeasureViewFulfillEvidenceMutation.graphql";
import { MeasureViewCreateControlMappingMutation } from "./__generated__/MeasureViewCreateControlMappingMutation.graphql";
import { MeasureViewDeleteControlMappingMutation } from "./__generated__/MeasureViewDeleteControlMappingMutation.graphql";
import { MeasureViewRisksQuery$data } from "./__generated__/MeasureViewRisksQuery.graphql";
import { MeasureViewRisksQuery } from "./__generated__/MeasureViewRisksQuery.graphql";
import { MeasureViewDeleteMeasureMutation } from "./__generated__/MeasureViewDeleteMeasureMutation.graphql";
// Function to format ISO8601 duration to human-readable format
const formatDuration = (isoDuration: string): string => {
@@ -146,16 +146,16 @@ const formatDuration = (isoDuration: string): string => {
}
};
const mesureViewQuery = graphql`
query MesureViewQuery($mesureId: ID!) {
mesure: node(id: $mesureId) {
const measureViewQuery = graphql`
query MeasureViewQuery($measureId: ID!) {
measure: node(id: $measureId) {
id
... on Mesure {
... on Measure {
name
description
state
category
tasks(first: 100) @connection(key: "MesureView_tasks") {
tasks(first: 100) @connection(key: "MeasureView_tasks") {
__id
edges {
node {
@@ -169,7 +169,7 @@ const mesureViewQuery = graphql`
fullName
primaryEmailAddress
}
evidences(first: 50) @connection(key: "MesureView_evidences") {
evidences(first: 50) @connection(key: "MeasureView_evidences") {
__id
edges {
node {
@@ -194,7 +194,7 @@ const mesureViewQuery = graphql`
`;
const updateTaskStateMutation = graphql`
mutation MesureViewUpdateTaskStateMutation($input: UpdateTaskInput!) {
mutation MeasureViewUpdateTaskStateMutation($input: UpdateTaskInput!) {
updateTask(input: $input) {
task {
id
@@ -206,7 +206,7 @@ const updateTaskStateMutation = graphql`
`;
const createTaskMutation = graphql`
mutation MesureViewCreateTaskMutation(
mutation MeasureViewCreateTaskMutation(
$input: CreateTaskInput!
$connections: [ID!]!
) {
@@ -230,7 +230,7 @@ const createTaskMutation = graphql`
`;
const deleteTaskMutation = graphql`
mutation MesureViewDeleteTaskMutation(
mutation MeasureViewDeleteTaskMutation(
$input: DeleteTaskInput!
$connections: [ID!]!
) {
@@ -241,7 +241,7 @@ const deleteTaskMutation = graphql`
`;
const createEvidenceMutation = graphql`
mutation MesureViewCreateEvidenceMutation(
mutation MeasureViewCreateEvidenceMutation(
$input: CreateEvidenceInput!
$connections: [ID!]!
) {
@@ -265,7 +265,7 @@ const createEvidenceMutation = graphql`
`;
const deleteEvidenceMutation = graphql`
mutation MesureViewDeleteEvidenceMutation(
mutation MeasureViewDeleteEvidenceMutation(
$input: DeleteEvidenceInput!
$connections: [ID!]!
) {
@@ -277,7 +277,7 @@ const deleteEvidenceMutation = graphql`
// Add a GraphQL query to fetch the fileUrl for an evidence item
const getEvidenceFileUrlQuery = graphql`
query MesureViewGetEvidenceFileUrlQuery($evidenceId: ID!) {
query MeasureViewGetEvidenceFileUrlQuery($evidenceId: ID!) {
node(id: $evidenceId) {
... on Evidence {
id
@@ -288,7 +288,7 @@ const getEvidenceFileUrlQuery = graphql`
`;
const assignTaskMutation = graphql`
mutation MesureViewAssignTaskMutation($input: AssignTaskInput!) {
mutation MeasureViewAssignTaskMutation($input: AssignTaskInput!) {
assignTask(input: $input) {
task {
id
@@ -303,7 +303,7 @@ const assignTaskMutation = graphql`
`;
const unassignTaskMutation = graphql`
mutation MesureViewUnassignTaskMutation($input: UnassignTaskInput!) {
mutation MeasureViewUnassignTaskMutation($input: UnassignTaskInput!) {
unassignTask(input: $input) {
task {
id
@@ -317,10 +317,10 @@ const unassignTaskMutation = graphql`
}
`;
const updateMesureStateMutation = graphql`
mutation MesureViewUpdateMesureStateMutation($input: UpdateMesureInput!) {
updateMesure(input: $input) {
mesure {
const updateMeasureStateMutation = graphql`
mutation MeasureViewUpdateMeasureStateMutation($input: UpdateMeasureInput!) {
updateMeasure(input: $input) {
measure {
id
state
}
@@ -328,24 +328,24 @@ const updateMesureStateMutation = graphql`
}
`;
const deleteMesureMutation = graphql`
mutation MesureViewDeleteMesureMutation(
$input: DeleteMesureInput!
const deleteMeasureMutation = graphql`
mutation MeasureViewDeleteMeasureMutation(
$input: DeleteMeasureInput!
$connections: [ID!]!
) {
deleteMesure(input: $input) {
deletedMesureId @deleteEdge(connections: $connections)
deleteMeasure(input: $input) {
deletedMeasureId @deleteEdge(connections: $connections)
}
}
`;
const organizationQuery = graphql`
query MesureViewOrganizationQuery($organizationId: ID!) {
query MeasureViewOrganizationQuery($organizationId: ID!) {
organization: node(id: $organizationId) {
id
... on Organization {
peoples(first: 100, orderBy: { direction: ASC, field: FULL_NAME })
@connection(key: "MesureView_peoples") {
@connection(key: "MeasureView_peoples") {
edges {
node {
id
@@ -361,7 +361,7 @@ const organizationQuery = graphql`
// New queries and mutations for Control Mapping
const frameworksQuery = graphql`
query MesureViewFrameworksQuery($organizationId: ID!) {
query MeasureViewFrameworksQuery($organizationId: ID!) {
organization: node(id: $organizationId) {
id
... on Organization {
@@ -389,11 +389,11 @@ const frameworksQuery = graphql`
`;
const linkedControlsQuery = graphql`
query MesureViewLinkedControlsQuery($mesureId: ID!) {
mesure: node(id: $mesureId) {
query MeasureViewLinkedControlsQuery($measureId: ID!) {
measure: node(id: $measureId) {
id
... on Mesure {
controls(first: 100) @connection(key: "MesureView_controls") {
... on Measure {
controls(first: 100) @connection(key: "MeasureView_controls") {
edges {
node {
id
@@ -409,20 +409,20 @@ const linkedControlsQuery = graphql`
`;
const createControlMappingMutation = graphql`
mutation MesureViewCreateControlMappingMutation(
$input: CreateControlMesureMappingInput!
mutation MeasureViewCreateControlMappingMutation(
$input: CreateControlMeasureMappingInput!
) {
createControlMesureMapping(input: $input) {
createControlMeasureMapping(input: $input) {
success
}
}
`;
const deleteControlMappingMutation = graphql`
mutation MesureViewDeleteControlMappingMutation(
$input: DeleteControlMesureMappingInput!
mutation MeasureViewDeleteControlMappingMutation(
$input: DeleteControlMeasureMappingInput!
) {
deleteControlMesureMapping(input: $input) {
deleteControlMeasureMapping(input: $input) {
success
}
}
@@ -430,7 +430,7 @@ const deleteControlMappingMutation = graphql`
// Add a mutation to fulfill evidence
const fulfillEvidenceMutation = graphql`
mutation MesureViewFulfillEvidenceMutation(
mutation MeasureViewFulfillEvidenceMutation(
$input: FulfillEvidenceInput!
$connections: [ID!]!
) {
@@ -453,13 +453,13 @@ const fulfillEvidenceMutation = graphql`
}
`;
// Add query to fetch risks linked to a mesure
const mesureRisksQuery = graphql`
query MesureViewRisksQuery($mesureId: ID!) {
mesure: node(id: $mesureId) {
// Add query to fetch risks linked to a measure
const measureRisksQuery = graphql`
query MeasureViewRisksQuery($measureId: ID!) {
measure: node(id: $measureId) {
id
... on Mesure {
risks(first: 100) @connection(key: "MesureView_risks") {
... on Measure {
risks(first: 100) @connection(key: "MeasureView_risks") {
edges {
node {
id
@@ -481,25 +481,25 @@ const mesureRisksQuery = graphql`
}
`;
function MesureViewContent({
function MeasureViewContent({
queryRef,
}: {
queryRef: PreloadedQuery<MesureViewQueryType>;
queryRef: PreloadedQuery<MeasureViewQueryType>;
}) {
const data = usePreloadedQuery<MesureViewQueryType>(
mesureViewQuery,
const data = usePreloadedQuery<MeasureViewQueryType>(
measureViewQuery,
queryRef
);
const navigate = useNavigate();
const { toast } = useToast();
const { organizationId, mesureId } = useParams<{
const { organizationId, measureId } = useParams<{
organizationId: string;
mesureId: string;
measureId: string;
}>();
const environment = useRelayEnvironment();
const [commitDeleteMesure, isDeletingMesure] = useMutation<MesureViewDeleteMesureMutation>(deleteMesureMutation);
const [isDeleteMesureOpen, setIsDeleteMesureOpen] = useState(false);
const [commitDeleteMeasure, isDeletingMeasure] = useMutation<MeasureViewDeleteMeasureMutation>(deleteMeasureMutation);
const [isDeleteMeasureOpen, setIsDeleteMeasureOpen] = useState(false);
// Add state for main content tabs
const [mainContentTab, setMainContentTab] = useState<string>("tasks");
@@ -510,15 +510,15 @@ function MesureViewContent({
// Load organization data for people selector
const [organizationData, setOrganizationData] =
useState<MesureViewOrganizationQuery$data | null>(null);
useState<MeasureViewOrganizationQuery$data | null>(null);
// Control mapping state
const [isControlMappingDialogOpen, setIsControlMappingDialogOpen] =
useState(false);
const [frameworksData, setFrameworksData] =
useState<MesureViewFrameworksQuery$data | null>(null);
useState<MeasureViewFrameworksQuery$data | null>(null);
const [linkedControlsData, setLinkedControlsData] =
useState<MesureViewLinkedControlsQuery$data | null>(null);
useState<MeasureViewLinkedControlsQuery$data | null>(null);
const [controlSearchQuery, setControlSearchQuery] = useState("");
const [selectedFrameworkId, setSelectedFrameworkId] = useState<string | null>(
null
@@ -529,17 +529,17 @@ function MesureViewContent({
// Create mutation hooks for control mapping
const [commitCreateControlMapping] =
useMutation<MesureViewCreateControlMappingMutation>(
useMutation<MeasureViewCreateControlMappingMutation>(
createControlMappingMutation
);
const [commitDeleteControlMapping] =
useMutation<MesureViewDeleteControlMappingMutation>(
useMutation<MeasureViewDeleteControlMappingMutation>(
deleteControlMappingMutation
);
useEffect(() => {
if (organizationId) {
fetchQuery<MesureViewOrganizationQuery>(environment, organizationQuery, {
fetchQuery<MeasureViewOrganizationQuery>(environment, organizationQuery, {
organizationId,
}).subscribe({
next: (data) => {
@@ -554,11 +554,11 @@ function MesureViewContent({
// Load linked controls when component mounts
useEffect(() => {
if (mesureId) {
fetchQuery<MesureViewLinkedControlsQuery>(
if (measureId) {
fetchQuery<MeasureViewLinkedControlsQuery>(
environment,
linkedControlsQuery,
{ mesureId }
{ measureId }
).subscribe({
next: (data) => {
setLinkedControlsData(data);
@@ -568,18 +568,18 @@ function MesureViewContent({
},
});
}
}, [environment, mesureId]);
}, [environment, measureId]);
// Add state for risks data
const [risksData, setRisksData] = useState<MesureViewRisksQuery$data | null>(
const [risksData, setRisksData] = useState<MeasureViewRisksQuery$data | null>(
null
);
// Load risks data when component mounts
useEffect(() => {
if (mesureId) {
fetchQuery<MesureViewRisksQuery>(environment, mesureRisksQuery, {
mesureId,
if (measureId) {
fetchQuery<MeasureViewRisksQuery>(environment, measureRisksQuery, {
measureId,
}).subscribe({
next: (data) => {
setRisksData(data);
@@ -589,7 +589,7 @@ function MesureViewContent({
},
});
}
}, [environment, mesureId]);
}, [environment, measureId]);
const formatState = (state: string | undefined): string => {
if (!state) return "";
@@ -618,30 +618,30 @@ function MesureViewContent({
return "bg-secondary-bg text-primary";
};
const [updateTask] = useMutation<MesureViewUpdateTaskStateMutationType>(
const [updateTask] = useMutation<MeasureViewUpdateTaskStateMutationType>(
updateTaskStateMutation
);
const [createTask] =
useMutation<MesureViewCreateTaskMutationType>(createTaskMutation);
useMutation<MeasureViewCreateTaskMutationType>(createTaskMutation);
const [deleteTask] =
useMutation<MesureViewDeleteTaskMutationType>(deleteTaskMutation);
const [createEvidence] = useMutation<MesureViewCreateEvidenceMutationType>(
useMutation<MeasureViewDeleteTaskMutationType>(deleteTaskMutation);
const [createEvidence] = useMutation<MeasureViewCreateEvidenceMutationType>(
createEvidenceMutation
);
const [deleteEvidence] = useMutation<MesureViewDeleteEvidenceMutationType>(
const [deleteEvidence] = useMutation<MeasureViewDeleteEvidenceMutationType>(
deleteEvidenceMutation
);
const [assignTask] =
useMutation<MesureViewAssignTaskMutationType>(assignTaskMutation);
useMutation<MeasureViewAssignTaskMutationType>(assignTaskMutation);
const [unassignTask] =
useMutation<MesureViewUnassignTaskMutationType>(unassignTaskMutation);
const [fulfillEvidence] = useMutation<MesureViewFulfillEvidenceMutationType>(
useMutation<MeasureViewUnassignTaskMutationType>(unassignTaskMutation);
const [fulfillEvidence] = useMutation<MeasureViewFulfillEvidenceMutationType>(
fulfillEvidenceMutation
);
const [updateMesureState] =
useMutation<MesureViewUpdateMesureStateMutationType>(
updateMesureStateMutation
const [updateMeasureState] =
useMutation<MeasureViewUpdateMeasureStateMutationType>(
updateMeasureStateMutation
);
const [isCreateTaskOpen, setIsCreateTaskOpen] = useState(false);
@@ -724,7 +724,7 @@ function MesureViewContent({
// Track if task panel is open
const [isTaskPanelOpen, setIsTaskPanelOpen] = useState(false);
const tasks = data.mesure.tasks?.edges.map((edge) => edge.node) || [];
const tasks = data.measure.tasks?.edges.map((edge) => edge.node) || [];
// Add useEffect to handle URL parameters for task selection
useEffect(() => {
@@ -866,10 +866,10 @@ function MesureViewContent({
return;
}
if (!data.mesure.id) {
if (!data.measure.id) {
toast({
title: "Error creating task",
description: "Mesure ID is missing",
description: "Measure ID is missing",
variant: "destructive",
});
return;
@@ -879,9 +879,9 @@ function MesureViewContent({
createTask({
variables: {
connections: [`${data.mesure.tasks?.__id}`],
connections: [`${data.measure.tasks?.__id}`],
input: {
mesureId: data.mesure.id,
measureId: data.measure.id,
name: newTaskName,
description: newTaskDescription,
timeEstimate: isoTimeEstimate === "" ? null : isoTimeEstimate,
@@ -919,7 +919,7 @@ function MesureViewContent({
deleteTask({
variables: {
connections: [`${data.mesure.tasks?.__id}`],
connections: [`${data.measure.tasks?.__id}`],
input: {
taskId: taskToDelete.id,
},
@@ -942,8 +942,8 @@ function MesureViewContent({
});
};
const handleEditMesure = () => {
navigate(`/organizations/${organizationId}/mesures/${mesureId}/edit`);
const handleEditMeasure = () => {
navigate(`/organizations/${organizationId}/measures/${measureId}/edit`);
};
const handleCreateEvidence = (taskId: string, taskName: string) => {
@@ -1415,12 +1415,12 @@ function MesureViewContent({
});
};
// Function to handle mesure state change
const handleMesureStateChange = (newState: string) => {
updateMesureState({
// Function to handle measure state change
const handleMeasureStateChange = (newState: string) => {
updateMeasureState({
variables: {
input: {
id: data.mesure.id,
id: data.measure.id,
state: newState as
| "NOT_STARTED"
| "IN_PROGRESS"
@@ -1430,15 +1430,15 @@ function MesureViewContent({
},
onCompleted: () => {
toast({
title: "Mesure state updated",
description: `Mesure state has been updated to ${formatState(
title: "Measure state updated",
description: `Measure state has been updated to ${formatState(
newState
)}.`,
});
},
onError: (error) => {
toast({
title: "Error updating mesure state",
title: "Error updating measure state",
description: error.message,
variant: "destructive",
});
@@ -1569,12 +1569,12 @@ function MesureViewContent({
// Control mapping functions
const loadFrameworksAndControls = useCallback(() => {
if (!organizationId || !mesureId) return;
if (!organizationId || !measureId) return;
setIsLoadingControls(true);
// Fetch all frameworks and their controls
fetchQuery<MesureViewFrameworksQuery>(environment, frameworksQuery, {
fetchQuery<MeasureViewFrameworksQuery>(environment, frameworksQuery, {
organizationId,
}).subscribe({
next: (data) => {
@@ -1592,12 +1592,12 @@ function MesureViewContent({
}
},
complete: () => {
// Fetch already linked controls for this mesure
fetchQuery<MesureViewLinkedControlsQuery>(
// Fetch already linked controls for this measure
fetchQuery<MeasureViewLinkedControlsQuery>(
environment,
linkedControlsQuery,
{
mesureId,
measureId,
}
).subscribe({
next: (data) => {
@@ -1625,7 +1625,7 @@ function MesureViewContent({
});
},
});
}, [environment, mesureId, organizationId, selectedFrameworkId, toast]);
}, [environment, measureId, organizationId, selectedFrameworkId, toast]);
const getControls = useCallback(() => {
if (!frameworksData?.organization?.frameworks?.edges) return [];
@@ -1649,8 +1649,8 @@ function MesureViewContent({
}, [frameworksData, selectedFrameworkId]);
const getLinkedControls = useCallback(() => {
if (!linkedControlsData?.mesure?.controls?.edges) return [];
return (linkedControlsData.mesure.controls.edges || []).map(
if (!linkedControlsData?.measure?.controls?.edges) return [];
return (linkedControlsData.measure.controls.edges || []).map(
(edge) => edge.node
);
}, [linkedControlsData]);
@@ -1665,7 +1665,7 @@ function MesureViewContent({
const handleLinkControl = useCallback(
(controlId: string) => {
if (!mesureId) return;
if (!measureId) return;
setIsLinkingControl(true);
@@ -1673,7 +1673,7 @@ function MesureViewContent({
variables: {
input: {
controlId,
mesureId,
measureId,
},
},
onCompleted: (_, errors) => {
@@ -1690,11 +1690,11 @@ function MesureViewContent({
}
// Refresh linked controls data
fetchQuery<MesureViewLinkedControlsQuery>(
fetchQuery<MeasureViewLinkedControlsQuery>(
environment,
linkedControlsQuery,
{
mesureId,
measureId,
}
).subscribe({
next: (data) => {
@@ -1707,7 +1707,7 @@ function MesureViewContent({
toast({
title: "Success",
description: "Control successfully linked to mesure.",
description: "Control successfully linked to measure.",
});
},
onError: (error) => {
@@ -1721,12 +1721,12 @@ function MesureViewContent({
},
});
},
[commitCreateControlMapping, environment, mesureId, toast]
[commitCreateControlMapping, environment, measureId, toast]
);
const handleUnlinkControl = useCallback(
(controlId: string) => {
if (!mesureId) return;
if (!measureId) return;
setIsUnlinkingControl(true);
@@ -1734,7 +1734,7 @@ function MesureViewContent({
variables: {
input: {
controlId,
mesureId,
measureId,
},
},
onCompleted: (_, errors) => {
@@ -1752,10 +1752,10 @@ function MesureViewContent({
// Refresh linked controls data
fetchQuery(environment, linkedControlsQuery, {
mesureId,
measureId,
}).subscribe({
next: (data: unknown) => {
setLinkedControlsData(data as MesureViewLinkedControlsQuery$data);
setLinkedControlsData(data as MeasureViewLinkedControlsQuery$data);
},
error: (error: Error) => {
console.error("Error refreshing linked controls:", error);
@@ -1764,7 +1764,7 @@ function MesureViewContent({
toast({
title: "Success",
description: "Control successfully unlinked from mesure.",
description: "Control successfully unlinked from measure.",
});
},
onError: (error) => {
@@ -1778,7 +1778,7 @@ function MesureViewContent({
},
});
},
[commitDeleteControlMapping, environment, mesureId, toast]
[commitDeleteControlMapping, environment, measureId, toast]
);
const handleOpenControlMappingDialog = useCallback(() => {
@@ -1834,33 +1834,33 @@ function MesureViewContent({
return "Very High";
};
const handleDeleteMesure = () => {
setIsDeleteMesureOpen(true);
const handleDeleteMeasure = () => {
setIsDeleteMeasureOpen(true);
};
const confirmDeleteMesure = () => {
const confirmDeleteMeasure = () => {
const connectionId = ConnectionHandler.getConnectionID(
organizationId!,
"MesureListView_mesures"
"MeasureListView_measures"
);
commitDeleteMesure({
commitDeleteMeasure({
variables: {
connections: [connectionId],
input: {
mesureId: mesureId!,
measureId: measureId!,
},
},
onCompleted: () => {
toast({
title: "Mesure deleted",
description: "Mesure has been deleted successfully.",
title: "Measure deleted",
description: "Measure has been deleted successfully.",
});
navigate(`/organizations/${organizationId}/mesures`);
navigate(`/organizations/${organizationId}/measures`);
},
onError: (error) => {
toast({
title: "Error deleting mesure",
title: "Error deleting measure",
description: error.message,
variant: "destructive",
});
@@ -1870,19 +1870,19 @@ function MesureViewContent({
return (
<PageTemplate
title={data.mesure?.name || "Mesure"}
description={data.mesure?.description}
title={data.measure?.name || "Measure"}
description={data.measure?.description}
actions={
<div className="flex gap-2">
<Button
variant="outline"
onClick={handleEditMesure}
onClick={handleEditMeasure}
>
Edit
</Button>
<select
value={data.mesure?.state || ""}
onChange={(e) => handleMesureStateChange(e.target.value)}
value={data.measure?.state || ""}
onChange={(e) => handleMeasureStateChange(e.target.value)}
className="rounded-full cursor-pointer inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-active-b disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-low-b hover:bg-h-tertiary-bg active:bg-p-tertiary-bg focus:bg-tertiary-bg shadow-xs px-2"
>
<option value="">Select state</option>
@@ -1893,10 +1893,10 @@ function MesureViewContent({
</select>
<Button
variant="destructive"
onClick={() => handleDeleteMesure()}
disabled={isDeletingMesure}
onClick={() => handleDeleteMeasure()}
disabled={isDeletingMeasure}
>
{isDeletingMesure ? "Deleting..." : "Delete"}
{isDeletingMeasure ? "Deleting..." : "Delete"}
</Button>
</div>
}
@@ -1905,7 +1905,7 @@ function MesureViewContent({
<Card className="mt-4">
<CardContent className="pt-6">
<div className="prose prose-gray prose-sm md:prose-base text-secondary max-w-3xl">
<ReactMarkdown>{data.mesure.description}</ReactMarkdown>
<ReactMarkdown>{data.measure.description}</ReactMarkdown>
</div>
</CardContent>
</Card>
@@ -1931,20 +1931,20 @@ function MesureViewContent({
<TabsTrigger value="controls" className="flex items-center gap-2">
<ShieldCheck className="w-4 h-4" />
Controls
{linkedControlsData?.mesure?.controls?.edges &&
linkedControlsData.mesure.controls.edges.length > 0 && (
{linkedControlsData?.measure?.controls?.edges &&
linkedControlsData.measure.controls.edges.length > 0 && (
<span className="ml-1.5 bg-blue-100 text-blue-800 rounded-full text-xs px-2 py-0.5">
{linkedControlsData.mesure.controls.edges.length}
{linkedControlsData.measure.controls.edges.length}
</span>
)}
</TabsTrigger>
<TabsTrigger value="risks" className="flex items-center gap-2">
<AlertTriangle className="w-4 h-4" />
Risks
{risksData?.mesure?.risks?.edges &&
risksData.mesure.risks.edges.length > 0 && (
{risksData?.measure?.risks?.edges &&
risksData.measure.risks.edges.length > 0 && (
<span className="ml-1.5 bg-blue-100 text-blue-800 rounded-full text-xs px-2 py-0.5">
{risksData.mesure.risks.edges.length}
{risksData.measure.risks.edges.length}
</span>
)}
</TabsTrigger>
@@ -1973,10 +1973,10 @@ function MesureViewContent({
>
<DialogContent className="max-w-3xl max-h-[80vh] overflow-hidden flex flex-col">
<DialogHeader>
<DialogTitle>Map Mesure to Controls</DialogTitle>
<DialogTitle>Map Measure to Controls</DialogTitle>
<DialogDescription>
Search and select controls to link to this mesure. This
helps track which controls are addressed by this mesure.
Search and select controls to link to this measure. This
helps track which controls are addressed by this measure.
</DialogDescription>
</DialogHeader>
@@ -2125,8 +2125,8 @@ function MesureViewContent({
{/* Linked Controls List */}
<Card>
<CardContent className="p-4">
{linkedControlsData?.mesure?.controls?.edges &&
linkedControlsData.mesure.controls.edges.length > 0 ? (
{linkedControlsData?.measure?.controls?.edges &&
linkedControlsData.measure.controls.edges.length > 0 ? (
<div className="overflow-x-auto">
<table className="w-full">
<thead>
@@ -2174,7 +2174,7 @@ function MesureViewContent({
</div>
) : (
<div className="text-center py-8 text-secondary">
No controls linked to this mesure yet. Click &quot;Map to
No controls linked to this measure yet. Click &quot;Map to
Controls&quot; to link controls.
</div>
)}
@@ -2207,7 +2207,7 @@ function MesureViewContent({
<DialogHeader>
<DialogTitle>Create New Task</DialogTitle>
<DialogDescription>
Add a new task to this mesure. Click save when
Add a new task to this measure. Click save when
you&apos;re done.
</DialogDescription>
</DialogHeader>
@@ -2792,8 +2792,8 @@ function MesureViewContent({
<Card>
<CardContent className="p-4">
{risksData?.mesure?.risks?.edges &&
risksData.mesure.risks.edges.length > 0 ? (
{risksData?.measure?.risks?.edges &&
risksData.measure.risks.edges.length > 0 ? (
<div className="overflow-x-auto">
<table className="w-full">
<thead>
@@ -2813,7 +2813,7 @@ function MesureViewContent({
</tr>
</thead>
<tbody>
{risksData.mesure.risks.edges.map(({ node }) => (
{risksData.measure.risks.edges.map(({ node }) => (
<tr
key={node.id}
className="border-b hover:bg-invert-bg"
@@ -2853,7 +2853,7 @@ function MesureViewContent({
</div>
) : (
<div className="text-center py-8 text-secondary">
No risks linked to this mesure yet.
No risks linked to this measure yet.
</div>
)}
</CardContent>
@@ -3654,28 +3654,28 @@ function MesureViewContent({
</DialogContent>
</Dialog>
{/* Delete Mesure Confirmation Dialog */}
<Dialog open={isDeleteMesureOpen} onOpenChange={setIsDeleteMesureOpen}>
{/* Delete Measure Confirmation Dialog */}
<Dialog open={isDeleteMeasureOpen} onOpenChange={setIsDeleteMeasureOpen}>
<DialogContent>
<DialogHeader>
<DialogTitle>Delete Mesure</DialogTitle>
<DialogTitle>Delete Measure</DialogTitle>
<DialogDescription>
Are you sure you want to delete this mesure? This action cannot be undone.
Are you sure you want to delete this measure? This action cannot be undone.
</DialogDescription>
</DialogHeader>
<DialogFooter>
<Button
variant="outline"
onClick={() => setIsDeleteMesureOpen(false)}
onClick={() => setIsDeleteMeasureOpen(false)}
>
Cancel
</Button>
<Button
variant="destructive"
onClick={confirmDeleteMesure}
disabled={isDeletingMesure}
onClick={confirmDeleteMeasure}
disabled={isDeletingMeasure}
>
{isDeletingMesure ? "Deleting..." : "Delete"}
{isDeletingMeasure ? "Deleting..." : "Delete"}
</Button>
</DialogFooter>
</DialogContent>
@@ -3684,24 +3684,24 @@ function MesureViewContent({
);
}
export default function MesureView() {
const { mesureId } = useParams();
export default function MeasureView() {
const { measureId } = useParams();
const [queryRef, loadQuery] =
useQueryLoader<MesureViewQueryType>(mesureViewQuery);
useQueryLoader<MeasureViewQueryType>(measureViewQuery);
useEffect(() => {
if (mesureId) {
loadQuery({ mesureId });
if (measureId) {
loadQuery({ measureId });
}
}, [mesureId, loadQuery]);
}, [measureId, loadQuery]);
if (!queryRef) {
return <MesureViewSkeleton />;
return <MeasureViewSkeleton />;
}
return (
<Suspense fallback={<MesureViewSkeleton />}>
<MesureViewContent queryRef={queryRef} />
<Suspense fallback={<MeasureViewSkeleton />}>
<MeasureViewContent queryRef={queryRef} />
</Suspense>
);
}

View File

@@ -4,26 +4,26 @@ import { lazy } from "@probo/react-lazy";
import { useLocation } from "react-router";
import { ErrorBoundaryWithLocation } from "../ErrorBoundary";
const EditMesureView = lazy(() => import("./EditMesureView"));
const NewMeasureView = lazy(() => import("./NewMeasureView"));
export function EditMesureViewSkeleton() {
export function NewMeasureViewSkeleton() {
return (
<PageTemplateSkeleton
title="Edit Mesure"
description="Edit a Mesure. You will be able to link it to control and risks"
title="New Measure"
description="Add a new measure. You will be able to link it to control and risks"
>
<div className="max-w-2xl aspect-square bg-subtle-bg rounded-xl animate-pulse" />
</PageTemplateSkeleton>
);
}
export function EditMesurePage() {
export function NewMeasurePage() {
const location = useLocation();
return (
<Suspense key={location.pathname} fallback={<EditMesureViewSkeleton />}>
<Suspense key={location.pathname} fallback={<NewMeasureViewSkeleton />}>
<ErrorBoundaryWithLocation>
<EditMesureView />
<NewMeasureView />
</ErrorBoundaryWithLocation>
</Suspense>
);

View File

@@ -3,20 +3,20 @@ import { ConnectionHandler, graphql, useMutation } from "react-relay";
import { useParams, useNavigate } from "react-router";
import { PageTemplate } from "@/components/PageTemplate";
import { useToast } from "@/hooks/use-toast";
import { NewMesureViewCreateMesureMutation } from "./__generated__/NewMesureViewCreateMesureMutation.graphql";
import { NewMeasureViewCreateMeasureMutation } from "./__generated__/NewMeasureViewCreateMeasureMutation.graphql";
import { EditableField } from "@/components/EditableField";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import { Label } from "@/components/ui/label";
import { cn } from "@/lib/utils";
const createMesureMutation = graphql`
mutation NewMesureViewCreateMesureMutation(
$input: CreateMesureInput!
const createMeasureMutation = graphql`
mutation NewMeasureViewCreateMeasureMutation(
$input: CreateMeasureInput!
$connections: [ID!]!
) {
createMesure(input: $input) {
mesureEdge @prependEdge(connections: $connections) {
createMeasure(input: $input) {
measureEdge @prependEdge(connections: $connections) {
node {
id
name
@@ -27,7 +27,7 @@ const createMesureMutation = graphql`
}
`;
export default function NewMesureView() {
export default function NewMeasureView() {
const { organizationId } = useParams<{
organizationId: string;
}>();
@@ -40,7 +40,7 @@ export default function NewMesureView() {
});
const [commit, isInFlight] =
useMutation<NewMesureViewCreateMesureMutation>(createMesureMutation);
useMutation<NewMeasureViewCreateMeasureMutation>(createMeasureMutation);
const handleFieldChange = (field: keyof typeof formData, value: unknown) => {
setFormData((prev) => ({
@@ -63,7 +63,7 @@ export default function NewMesureView() {
const connectionId = ConnectionHandler.getConnectionID(
organizationId!,
"MesureListView_mesures"
"MeasureListView_measures"
);
commit({
@@ -80,7 +80,7 @@ export default function NewMesureView() {
if (errors) {
toast({
title: "Error",
description: errors[0]?.message || "Failed to create mesure",
description: errors[0]?.message || "Failed to create measure",
variant: "destructive",
});
return;
@@ -88,17 +88,17 @@ export default function NewMesureView() {
toast({
title: "Success",
description: "Mesure created successfully",
description: "Measure created successfully",
});
navigate(
`/organizations/${organizationId}/mesures/${data.createMesure.mesureEdge.node.id}`
`/organizations/${organizationId}/measures/${data.createMeasure.measureEdge.node.id}`
);
},
onError(error) {
toast({
title: "Error",
description: error.message || "Failed to create mesure",
description: error.message || "Failed to create measure",
variant: "destructive",
});
},
@@ -107,8 +107,8 @@ export default function NewMesureView() {
return (
<PageTemplate
title="New Mesure"
description="Add a new mesure. You will be able to link it to control and risks"
title="New Measure"
description="Add a new measure. You will be able to link it to control and risks"
>
<Card className="max-w-2xl">
<form onSubmit={handleSubmit} className="p-6 space-y-6">
@@ -125,7 +125,7 @@ export default function NewMesureView() {
onChange={(value) => handleFieldChange("description", value)}
required
multiline
helpText="Provide a detailed description of the mesure"
helpText="Provide a detailed description of the measure"
/>
<EditableField
@@ -140,13 +140,13 @@ export default function NewMesureView() {
type="button"
variant="outline"
onClick={() =>
navigate(`/organizations/${organizationId}/mesures`)
navigate(`/organizations/${organizationId}/measures`)
}
>
Cancel
</Button>
<Button type="submit" disabled={isInFlight}>
{isInFlight ? "Creating..." : "Create Mesure"}
{isInFlight ? "Creating..." : "Create Measure"}
</Button>
</div>
</form>

View File

@@ -0,0 +1,154 @@
/**
* @generated SignedSource<<ad4cacf2bf1c3df7af8ba9c1418c1503>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type EditMeasureViewQuery$variables = {
measureId: string;
};
export type EditMeasureViewQuery$data = {
readonly node: {
readonly category?: string;
readonly description?: string;
readonly id?: string;
readonly name?: string;
};
};
export type EditMeasureViewQuery = {
response: EditMeasureViewQuery$data;
variables: EditMeasureViewQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "measureId"
}
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
v4 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
v5 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "category",
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "EditMeasureViewQuery",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"kind": "InlineFragment",
"selections": [
(v2/*: any*/),
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/)
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "EditMeasureViewQuery",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/)
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "d6f22b2f42b5f32ff8a0d199c4cbf1e1",
"id": null,
"metadata": {},
"name": "EditMeasureViewQuery",
"operationKind": "query",
"text": "query EditMeasureViewQuery(\n $measureId: ID!\n) {\n node(id: $measureId) {\n __typename\n ... on Measure {\n id\n name\n description\n category\n }\n id\n }\n}\n"
}
};
})();
(node as any).hash = "8aba2561c9078eb149952e1300311516";
export default node;

View File

@@ -0,0 +1,126 @@
/**
* @generated SignedSource<<baa13bd4048002970217bfb1e8017e05>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type UpdateMeasureInput = {
category?: string | null | undefined;
description?: string | null | undefined;
id: string;
name?: string | null | undefined;
state?: MeasureState | null | undefined;
};
export type EditMeasureViewUpdateMeasureMutation$variables = {
input: UpdateMeasureInput;
};
export type EditMeasureViewUpdateMeasureMutation$data = {
readonly updateMeasure: {
readonly measure: {
readonly description: string;
readonly id: string;
readonly name: string;
};
};
};
export type EditMeasureViewUpdateMeasureMutation = {
response: EditMeasureViewUpdateMeasureMutation$data;
variables: EditMeasureViewUpdateMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "UpdateMeasurePayload",
"kind": "LinkedField",
"name": "updateMeasure",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Measure",
"kind": "LinkedField",
"name": "measure",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "EditMeasureViewUpdateMeasureMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "EditMeasureViewUpdateMeasureMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "0d6bab0c03a2c72635e1e42fe69c9551",
"id": null,
"metadata": {},
"name": "EditMeasureViewUpdateMeasureMutation",
"operationKind": "mutation",
"text": "mutation EditMeasureViewUpdateMeasureMutation(\n $input: UpdateMeasureInput!\n) {\n updateMeasure(input: $input) {\n measure {\n id\n name\n description\n }\n }\n}\n"
}
};
})();
(node as any).hash = "1b91ac6890f48a7f536adcba303f1718";
export default node;

View File

@@ -9,10 +9,10 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type EditMesureViewQuery$variables = {
mesureId: string;
export type EditMeasureViewQuery$variables = {
measureId: string;
};
export type EditMesureViewQuery$data = {
export type EditMeasureViewQuery$data = {
readonly node: {
readonly category?: string;
readonly description?: string;
@@ -20,9 +20,9 @@ export type EditMesureViewQuery$data = {
readonly name?: string;
};
};
export type EditMesureViewQuery = {
response: EditMesureViewQuery$data;
variables: EditMesureViewQuery$variables;
export type EditMeasureViewQuery = {
response: EditMeasureViewQuery$data;
variables: EditMeasureViewQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -30,14 +30,14 @@ var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "mesureId"
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "mesureId"
"variableName": "measureId"
}
],
v2 = {
@@ -73,7 +73,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "EditMesureViewQuery",
"name": "EditMeasureViewQuery",
"selections": [
{
"alias": null,
@@ -91,7 +91,7 @@ return {
(v4/*: any*/),
(v5/*: any*/)
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -105,7 +105,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "EditMesureViewQuery",
"name": "EditMeasureViewQuery",
"selections": [
{
"alias": null,
@@ -130,7 +130,7 @@ return {
(v4/*: any*/),
(v5/*: any*/)
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -142,9 +142,9 @@ return {
"cacheID": "3dbf7d90b0ae49ce617abdf063f6b908",
"id": null,
"metadata": {},
"name": "EditMesureViewQuery",
"name": "EditMeasureViewQuery",
"operationKind": "query",
"text": "query EditMesureViewQuery(\n $mesureId: ID!\n) {\n node(id: $mesureId) {\n __typename\n ... on Mesure {\n id\n name\n description\n category\n }\n id\n }\n}\n"
"text": "query EditMeasureViewQuery(\n $measureId: ID!\n) {\n node(id: $measureId) {\n __typename\n ... on Measure {\n id\n name\n description\n category\n }\n id\n }\n}\n"
}
};
})();

View File

@@ -9,29 +9,29 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type UpdateMesureInput = {
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type UpdateMeasureInput = {
category?: string | null | undefined;
description?: string | null | undefined;
id: string;
name?: string | null | undefined;
state?: MesureState | null | undefined;
state?: MeasureState | null | undefined;
};
export type EditMesureViewUpdateMesureMutation$variables = {
input: UpdateMesureInput;
export type EditMeasureViewUpdateMeasureMutation$variables = {
input: UpdateMeasureInput;
};
export type EditMesureViewUpdateMesureMutation$data = {
readonly updateMesure: {
readonly mesure: {
export type EditMeasureViewUpdateMeasureMutation$data = {
readonly updateMeasure: {
readonly measure: {
readonly description: string;
readonly id: string;
readonly name: string;
};
};
};
export type EditMesureViewUpdateMesureMutation = {
response: EditMesureViewUpdateMesureMutation$data;
variables: EditMesureViewUpdateMesureMutation$variables;
export type EditMeasureViewUpdateMeasureMutation = {
response: EditMeasureViewUpdateMeasureMutation$data;
variables: EditMeasureViewUpdateMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -52,17 +52,17 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "UpdateMesurePayload",
"concreteType": "UpdateMeasurePayload",
"kind": "LinkedField",
"name": "updateMesure",
"name": "updateMeasure",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "mesure",
"name": "measure",
"plural": false,
"selections": [
{
@@ -98,7 +98,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "EditMesureViewUpdateMesureMutation",
"name": "EditMeasureViewUpdateMeasureMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -107,16 +107,16 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "EditMesureViewUpdateMesureMutation",
"name": "EditMeasureViewUpdateMeasureMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "ab674147338f145102c150b220578304",
"id": null,
"metadata": {},
"name": "EditMesureViewUpdateMesureMutation",
"name": "EditMeasureViewUpdateMeasureMutation",
"operationKind": "mutation",
"text": "mutation EditMesureViewUpdateMesureMutation(\n $input: UpdateMesureInput!\n) {\n updateMesure(input: $input) {\n mesure {\n id\n name\n description\n }\n }\n}\n"
"text": "mutation EditMeasureViewUpdateMeasureMutation(\n $input: UpdateMeasureInput!\n) {\n updateMeasure(input: $input) {\n measure {\n id\n name\n description\n }\n }\n}\n"
}
};
})();

View File

@@ -0,0 +1,208 @@
/**
* @generated SignedSource<<a93137ce93688a2c3c0986437bf3f4c5>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ImportMeasureInput = {
file: any;
organizationId: string;
};
export type MeasureListViewImportMeasureMutation$variables = {
connections: ReadonlyArray<string>;
input: ImportMeasureInput;
};
export type MeasureListViewImportMeasureMutation$data = {
readonly importMeasure: {
readonly measureEdges: ReadonlyArray<{
readonly node: {
readonly category: string;
readonly createdAt: string;
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MeasureState;
readonly updatedAt: string;
};
}>;
};
};
export type MeasureListViewImportMeasureMutation = {
response: MeasureListViewImportMeasureMutation$data;
variables: MeasureListViewImportMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "measureEdges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "category",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "updatedAt",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureListViewImportMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "ImportMeasurePayload",
"kind": "LinkedField",
"name": "importMeasure",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureListViewImportMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "ImportMeasurePayload",
"kind": "LinkedField",
"name": "importMeasure",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "appendEdge",
"key": "",
"kind": "LinkedHandle",
"name": "measureEdges",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "d257f6fad6ab4c82d2295b7a0342c91b",
"id": null,
"metadata": {},
"name": "MeasureListViewImportMeasureMutation",
"operationKind": "mutation",
"text": "mutation MeasureListViewImportMeasureMutation(\n $input: ImportMeasureInput!\n) {\n importMeasure(input: $input) {\n measureEdges {\n node {\n id\n name\n description\n category\n state\n createdAt\n updatedAt\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "6649f536c35390d081835f70d1534847";
export default node;

View File

@@ -0,0 +1,297 @@
/**
* @generated SignedSource<<fcaed74e4a3e71ef452df09877a2b95c>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type MeasureListViewQuery$variables = {
first?: number | null | undefined;
organizationId: string;
};
export type MeasureListViewQuery$data = {
readonly organization: {
readonly id: string;
readonly measures?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;
readonly createdAt: string;
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MeasureState;
readonly updatedAt: string;
};
}>;
};
};
};
export type MeasureListViewQuery = {
response: MeasureListViewQuery$data;
variables: MeasureListViewQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "first"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "organizationId"
},
v2 = [
{
"kind": "Variable",
"name": "id",
"variableName": "organizationId"
}
],
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v4 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
v5 = [
{
"alias": null,
"args": null,
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "category",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "updatedAt",
"storageKey": null
},
(v4/*: any*/)
],
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "cursor",
"storageKey": null
}
],
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "PageInfo",
"kind": "LinkedField",
"name": "pageInfo",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endCursor",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "hasNextPage",
"storageKey": null
}
],
"storageKey": null
}
],
v6 = [
{
"kind": "Variable",
"name": "first",
"variableName": "first"
}
];
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureListViewQuery",
"selections": [
{
"alias": "organization",
"args": (v2/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v3/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": "measures",
"args": null,
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "__MeasureListView_measures_connection",
"plural": false,
"selections": (v5/*: any*/),
"storageKey": null
}
],
"type": "Organization",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureListViewQuery",
"selections": [
{
"alias": "organization",
"args": (v2/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v4/*: any*/),
(v3/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": null,
"args": (v6/*: any*/),
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "measures",
"plural": false,
"selections": (v5/*: any*/),
"storageKey": null
},
{
"alias": null,
"args": (v6/*: any*/),
"filters": null,
"handle": "connection",
"key": "MeasureListView_measures",
"kind": "LinkedHandle",
"name": "measures"
}
],
"type": "Organization",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "4d9ad175699f51e62db8923f1dd44ed2",
"id": null,
"metadata": {
"connection": [
{
"count": "first",
"cursor": null,
"direction": "forward",
"path": [
"organization",
"measures"
]
}
]
},
"name": "MeasureListViewQuery",
"operationKind": "query",
"text": "query MeasureListViewQuery(\n $organizationId: ID!\n $first: Int\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n measures(first: $first) {\n edges {\n node {\n id\n name\n description\n category\n state\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "2ad3d938b17d57e015272d4296b41f1f";
export default node;

View File

@@ -0,0 +1,138 @@
/**
* @generated SignedSource<<132e5315003576c357d64d6aaee4b657>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type AssignTaskInput = {
assignedToId: string;
taskId: string;
};
export type MeasureViewAssignTaskMutation$variables = {
input: AssignTaskInput;
};
export type MeasureViewAssignTaskMutation$data = {
readonly assignTask: {
readonly task: {
readonly assignedTo: {
readonly fullName: string;
readonly id: string;
readonly primaryEmailAddress: string;
} | null | undefined;
readonly id: string;
};
};
};
export type MeasureViewAssignTaskMutation = {
response: MeasureViewAssignTaskMutation$data;
variables: MeasureViewAssignTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v2 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "AssignTaskPayload",
"kind": "LinkedField",
"name": "assignTask",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Task",
"kind": "LinkedField",
"name": "task",
"plural": false,
"selections": [
(v1/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "People",
"kind": "LinkedField",
"name": "assignedTo",
"plural": false,
"selections": [
(v1/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fullName",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "primaryEmailAddress",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewAssignTaskMutation",
"selections": (v2/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewAssignTaskMutation",
"selections": (v2/*: any*/)
},
"params": {
"cacheID": "ef8536df8f9a92dba371a0f0802d900f",
"id": null,
"metadata": {},
"name": "MeasureViewAssignTaskMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewAssignTaskMutation(\n $input: AssignTaskInput!\n) {\n assignTask(input: $input) {\n task {\n id\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "47ff4e30fd09d661f7dabfd2289bab17";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<aad63785dac93ad7f8db05ee4f219109>>
* @generated SignedSource<<441cfaaf785e0628a8c954249ef87bdf>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,21 +9,21 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type CreateControlMesureMappingInput = {
export type CreateControlMeasureMappingInput = {
controlId: string;
mesureId: string;
measureId: string;
};
export type ControlCreateMesureMappingMutation$variables = {
input: CreateControlMesureMappingInput;
export type MeasureViewCreateControlMappingMutation$variables = {
input: CreateControlMeasureMappingInput;
};
export type ControlCreateMesureMappingMutation$data = {
readonly createControlMesureMapping: {
export type MeasureViewCreateControlMappingMutation$data = {
readonly createControlMeasureMapping: {
readonly success: boolean;
};
};
export type ControlCreateMesureMappingMutation = {
response: ControlCreateMesureMappingMutation$data;
variables: ControlCreateMesureMappingMutation$variables;
export type MeasureViewCreateControlMappingMutation = {
response: MeasureViewCreateControlMappingMutation$data;
variables: MeasureViewCreateControlMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -44,9 +44,9 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "CreateControlMesureMappingPayload",
"concreteType": "CreateControlMeasureMappingPayload",
"kind": "LinkedField",
"name": "createControlMesureMapping",
"name": "createControlMeasureMapping",
"plural": false,
"selections": [
{
@@ -65,7 +65,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ControlCreateMesureMappingMutation",
"name": "MeasureViewCreateControlMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -74,20 +74,20 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ControlCreateMesureMappingMutation",
"name": "MeasureViewCreateControlMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "589fad9dec58fb2efe52e8e587c8ce85",
"cacheID": "ea74e0148d320dbfb79859bb6286427b",
"id": null,
"metadata": {},
"name": "ControlCreateMesureMappingMutation",
"name": "MeasureViewCreateControlMappingMutation",
"operationKind": "mutation",
"text": "mutation ControlCreateMesureMappingMutation(\n $input: CreateControlMesureMappingInput!\n) {\n createControlMesureMapping(input: $input) {\n success\n }\n}\n"
"text": "mutation MeasureViewCreateControlMappingMutation(\n $input: CreateControlMeasureMappingInput!\n) {\n createControlMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();
(node as any).hash = "8974d4f4025f6e1eaba2a6b30e357486";
(node as any).hash = "dfe964679c82f9c47d418122595989a8";
export default node;

View File

@@ -0,0 +1,237 @@
/**
* @generated SignedSource<<e5042f900955d846dd86ad6b78d60518>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type EvidenceState = "FULFILLED" | "REQUESTED";
export type EvidenceType = "FILE" | "LINK";
export type CreateEvidenceInput = {
description: string;
file?: any | null | undefined;
name: string;
taskId: string;
type: EvidenceType;
url?: string | null | undefined;
};
export type MeasureViewCreateEvidenceMutation$variables = {
connections: ReadonlyArray<string>;
input: CreateEvidenceInput;
};
export type MeasureViewCreateEvidenceMutation$data = {
readonly createEvidence: {
readonly evidenceEdge: {
readonly node: {
readonly createdAt: string;
readonly description: string;
readonly fileUrl: string | null | undefined;
readonly filename: string;
readonly id: string;
readonly mimeType: string;
readonly size: number;
readonly state: EvidenceState;
readonly type: EvidenceType;
readonly url: string | null | undefined;
};
};
};
};
export type MeasureViewCreateEvidenceMutation = {
response: MeasureViewCreateEvidenceMutation$data;
variables: MeasureViewCreateEvidenceMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"concreteType": "EvidenceEdge",
"kind": "LinkedField",
"name": "evidenceEdge",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Evidence",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "filename",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fileUrl",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "mimeType",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "type",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "url",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "size",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewCreateEvidenceMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateEvidencePayload",
"kind": "LinkedField",
"name": "createEvidence",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureViewCreateEvidenceMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateEvidencePayload",
"kind": "LinkedField",
"name": "createEvidence",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "appendEdge",
"key": "",
"kind": "LinkedHandle",
"name": "evidenceEdge",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "25b9947aa09d7b4c60886f149b06cc6e",
"id": null,
"metadata": {},
"name": "MeasureViewCreateEvidenceMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewCreateEvidenceMutation(\n $input: CreateEvidenceInput!\n) {\n createEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n description\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "bc59ec67230776eeb60a389a8360b0af";
export default node;

View File

@@ -0,0 +1,227 @@
/**
* @generated SignedSource<<f037ead461a7a59d39f2e98140e4c72f>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type TaskState = "DONE" | "TODO";
export type CreateTaskInput = {
assignedToId?: string | null | undefined;
description: string;
measureId: string;
name: string;
timeEstimate?: any | null | undefined;
};
export type MeasureViewCreateTaskMutation$variables = {
connections: ReadonlyArray<string>;
input: CreateTaskInput;
};
export type MeasureViewCreateTaskMutation$data = {
readonly createTask: {
readonly taskEdge: {
readonly node: {
readonly assignedTo: {
readonly fullName: string;
readonly id: string;
readonly primaryEmailAddress: string;
} | null | undefined;
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: TaskState;
readonly timeEstimate: any | null | undefined;
};
};
};
};
export type MeasureViewCreateTaskMutation = {
response: MeasureViewCreateTaskMutation$data;
variables: MeasureViewCreateTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v4 = {
"alias": null,
"args": null,
"concreteType": "TaskEdge",
"kind": "LinkedField",
"name": "taskEdge",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Task",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "timeEstimate",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "People",
"kind": "LinkedField",
"name": "assignedTo",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fullName",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "primaryEmailAddress",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewCreateTaskMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateTaskPayload",
"kind": "LinkedField",
"name": "createTask",
"plural": false,
"selections": [
(v4/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureViewCreateTaskMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateTaskPayload",
"kind": "LinkedField",
"name": "createTask",
"plural": false,
"selections": [
(v4/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "prependEdge",
"key": "",
"kind": "LinkedHandle",
"name": "taskEdge",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "53b934e0e7a3d4abf8789ad8672687df",
"id": null,
"metadata": {},
"name": "MeasureViewCreateTaskMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewCreateTaskMutation(\n $input: CreateTaskInput!\n) {\n createTask(input: $input) {\n taskEdge {\n node {\n id\n name\n description\n timeEstimate\n state\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "0df98f5aee4233dc4ffedcff8256891a";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<272b7b4a8bc0c81baa4a8d8f3656be0c>>
* @generated SignedSource<<9136dd4c154f9e4b2ba8b91316edbf4a>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,21 +9,21 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteControlMesureMappingInput = {
export type DeleteControlMeasureMappingInput = {
controlId: string;
mesureId: string;
measureId: string;
};
export type ControlDeleteMesureMappingMutation$variables = {
input: DeleteControlMesureMappingInput;
export type MeasureViewDeleteControlMappingMutation$variables = {
input: DeleteControlMeasureMappingInput;
};
export type ControlDeleteMesureMappingMutation$data = {
readonly deleteControlMesureMapping: {
export type MeasureViewDeleteControlMappingMutation$data = {
readonly deleteControlMeasureMapping: {
readonly success: boolean;
};
};
export type ControlDeleteMesureMappingMutation = {
response: ControlDeleteMesureMappingMutation$data;
variables: ControlDeleteMesureMappingMutation$variables;
export type MeasureViewDeleteControlMappingMutation = {
response: MeasureViewDeleteControlMappingMutation$data;
variables: MeasureViewDeleteControlMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -44,9 +44,9 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "DeleteControlMesureMappingPayload",
"concreteType": "DeleteControlMeasureMappingPayload",
"kind": "LinkedField",
"name": "deleteControlMesureMapping",
"name": "deleteControlMeasureMapping",
"plural": false,
"selections": [
{
@@ -65,7 +65,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ControlDeleteMesureMappingMutation",
"name": "MeasureViewDeleteControlMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -74,20 +74,20 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ControlDeleteMesureMappingMutation",
"name": "MeasureViewDeleteControlMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "66b2b12e57f8a150825f0e3f25494093",
"cacheID": "8e779137f0502f324968a4c414bff2e6",
"id": null,
"metadata": {},
"name": "ControlDeleteMesureMappingMutation",
"name": "MeasureViewDeleteControlMappingMutation",
"operationKind": "mutation",
"text": "mutation ControlDeleteMesureMappingMutation(\n $input: DeleteControlMesureMappingInput!\n) {\n deleteControlMesureMapping(input: $input) {\n success\n }\n}\n"
"text": "mutation MeasureViewDeleteControlMappingMutation(\n $input: DeleteControlMeasureMappingInput!\n) {\n deleteControlMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();
(node as any).hash = "64e6f03a12a22a87e4893a335e58379b";
(node as any).hash = "7c74e8e787022c1c51fbfc38388445e4";
export default node;

View File

@@ -0,0 +1,132 @@
/**
* @generated SignedSource<<a930baf9c7542b375151433ec7a0bf90>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteEvidenceInput = {
evidenceId: string;
};
export type MeasureViewDeleteEvidenceMutation$variables = {
connections: ReadonlyArray<string>;
input: DeleteEvidenceInput;
};
export type MeasureViewDeleteEvidenceMutation$data = {
readonly deleteEvidence: {
readonly deletedEvidenceId: string;
};
};
export type MeasureViewDeleteEvidenceMutation = {
response: MeasureViewDeleteEvidenceMutation$data;
variables: MeasureViewDeleteEvidenceMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "deletedEvidenceId",
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewDeleteEvidenceMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteEvidencePayload",
"kind": "LinkedField",
"name": "deleteEvidence",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureViewDeleteEvidenceMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteEvidencePayload",
"kind": "LinkedField",
"name": "deleteEvidence",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "deleteEdge",
"key": "",
"kind": "ScalarHandle",
"name": "deletedEvidenceId",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "db4b5b4eed57d1361acff9696e8b6667",
"id": null,
"metadata": {},
"name": "MeasureViewDeleteEvidenceMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewDeleteEvidenceMutation(\n $input: DeleteEvidenceInput!\n) {\n deleteEvidence(input: $input) {\n deletedEvidenceId\n }\n}\n"
}
};
})();
(node as any).hash = "4281f93d92eb942cd3d0ebbd05d8bd5d";
export default node;

View File

@@ -0,0 +1,132 @@
/**
* @generated SignedSource<<eabf44008fc79a4bdd03259111bbf097>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteMeasureInput = {
measureId: string;
};
export type MeasureViewDeleteMeasureMutation$variables = {
connections: ReadonlyArray<string>;
input: DeleteMeasureInput;
};
export type MeasureViewDeleteMeasureMutation$data = {
readonly deleteMeasure: {
readonly deletedMeasureId: string;
};
};
export type MeasureViewDeleteMeasureMutation = {
response: MeasureViewDeleteMeasureMutation$data;
variables: MeasureViewDeleteMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "deletedMeasureId",
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewDeleteMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteMeasurePayload",
"kind": "LinkedField",
"name": "deleteMeasure",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureViewDeleteMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteMeasurePayload",
"kind": "LinkedField",
"name": "deleteMeasure",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "deleteEdge",
"key": "",
"kind": "ScalarHandle",
"name": "deletedMeasureId",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "8369c20d01874393d53f4bcb29b43821",
"id": null,
"metadata": {},
"name": "MeasureViewDeleteMeasureMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewDeleteMeasureMutation(\n $input: DeleteMeasureInput!\n) {\n deleteMeasure(input: $input) {\n deletedMeasureId\n }\n}\n"
}
};
})();
(node as any).hash = "e82e708b1d2a39ae3faf6a7be8692b7d";
export default node;

View File

@@ -0,0 +1,132 @@
/**
* @generated SignedSource<<cd8088494f7f5f88d006d90ef72ca8a9>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteTaskInput = {
taskId: string;
};
export type MeasureViewDeleteTaskMutation$variables = {
connections: ReadonlyArray<string>;
input: DeleteTaskInput;
};
export type MeasureViewDeleteTaskMutation$data = {
readonly deleteTask: {
readonly deletedTaskId: string;
};
};
export type MeasureViewDeleteTaskMutation = {
response: MeasureViewDeleteTaskMutation$data;
variables: MeasureViewDeleteTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "deletedTaskId",
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewDeleteTaskMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteTaskPayload",
"kind": "LinkedField",
"name": "deleteTask",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureViewDeleteTaskMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteTaskPayload",
"kind": "LinkedField",
"name": "deleteTask",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "deleteEdge",
"key": "",
"kind": "ScalarHandle",
"name": "deletedTaskId",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "f92703409a953a1fea728aeba622c6d5",
"id": null,
"metadata": {},
"name": "MeasureViewDeleteTaskMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewDeleteTaskMutation(\n $input: DeleteTaskInput!\n) {\n deleteTask(input: $input) {\n deletedTaskId\n }\n}\n"
}
};
})();
(node as any).hash = "dd4f89809cfda8e99ea1a66641c658cb";
export default node;

View File

@@ -0,0 +1,364 @@
/**
* @generated SignedSource<<f3d959452f28259f74fc44f4c1eedcb2>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureViewFrameworksQuery$variables = {
organizationId: string;
};
export type MeasureViewFrameworksQuery$data = {
readonly organization: {
readonly frameworks?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly controls: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly description: string;
readonly id: string;
readonly name: string;
readonly referenceId: string;
};
}>;
};
readonly id: string;
readonly name: string;
};
}>;
};
readonly id: string;
};
};
export type MeasureViewFrameworksQuery = {
response: MeasureViewFrameworksQuery$data;
variables: MeasureViewFrameworksQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "organizationId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "organizationId"
}
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
v4 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
v5 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "cursor",
"storageKey": null
},
v6 = {
"alias": null,
"args": null,
"concreteType": "PageInfo",
"kind": "LinkedField",
"name": "pageInfo",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endCursor",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "hasNextPage",
"storageKey": null
}
],
"storageKey": null
},
v7 = [
{
"alias": null,
"args": null,
"concreteType": "ControlEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Control",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "referenceId",
"storageKey": null
},
(v3/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
(v4/*: any*/)
],
"storageKey": null
},
(v5/*: any*/)
],
"storageKey": null
},
(v6/*: any*/)
],
v8 = [
{
"kind": "Literal",
"name": "first",
"value": 100
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewFrameworksQuery",
"selections": [
{
"alias": "organization",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": "frameworks",
"args": null,
"concreteType": "FrameworkConnection",
"kind": "LinkedField",
"name": "__Organization__frameworks_connection",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "FrameworkEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Framework",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
{
"alias": "controls",
"args": null,
"concreteType": "ControlConnection",
"kind": "LinkedField",
"name": "__Framework__controls_connection",
"plural": false,
"selections": (v7/*: any*/),
"storageKey": null
},
(v4/*: any*/)
],
"storageKey": null
},
(v5/*: any*/)
],
"storageKey": null
},
(v6/*: any*/)
],
"storageKey": null
}
],
"type": "Organization",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewFrameworksQuery",
"selections": [
{
"alias": "organization",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v4/*: any*/),
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": null,
"args": (v8/*: any*/),
"concreteType": "FrameworkConnection",
"kind": "LinkedField",
"name": "frameworks",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "FrameworkEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Framework",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
{
"alias": null,
"args": (v8/*: any*/),
"concreteType": "ControlConnection",
"kind": "LinkedField",
"name": "controls",
"plural": false,
"selections": (v7/*: any*/),
"storageKey": "controls(first:100)"
},
{
"alias": null,
"args": (v8/*: any*/),
"filters": null,
"handle": "connection",
"key": "Framework__controls",
"kind": "LinkedHandle",
"name": "controls"
},
(v4/*: any*/)
],
"storageKey": null
},
(v5/*: any*/)
],
"storageKey": null
},
(v6/*: any*/)
],
"storageKey": "frameworks(first:100)"
},
{
"alias": null,
"args": (v8/*: any*/),
"filters": null,
"handle": "connection",
"key": "Organization__frameworks",
"kind": "LinkedHandle",
"name": "frameworks"
}
],
"type": "Organization",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "f32215939196e9e13f1347b57111f5cb",
"id": null,
"metadata": {
"connection": [
{
"count": null,
"cursor": null,
"direction": "forward",
"path": null
},
{
"count": null,
"cursor": null,
"direction": "forward",
"path": [
"organization",
"frameworks"
]
}
]
},
"name": "MeasureViewFrameworksQuery",
"operationKind": "query",
"text": "query MeasureViewFrameworksQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n frameworks(first: 100) {\n edges {\n node {\n id\n name\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "f1183b14c80a91b160f222af00d49b6f";
export default node;

View File

@@ -0,0 +1,235 @@
/**
* @generated SignedSource<<73ac433b0ba8e4acdf9e0b644ed210ba>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type EvidenceState = "FULFILLED" | "REQUESTED";
export type EvidenceType = "FILE" | "LINK";
export type FulfillEvidenceInput = {
evidenceId: string;
file?: any | null | undefined;
name?: string | null | undefined;
url?: string | null | undefined;
};
export type MeasureViewFulfillEvidenceMutation$variables = {
connections: ReadonlyArray<string>;
input: FulfillEvidenceInput;
};
export type MeasureViewFulfillEvidenceMutation$data = {
readonly fulfillEvidence: {
readonly evidenceEdge: {
readonly node: {
readonly createdAt: string;
readonly description: string;
readonly fileUrl: string | null | undefined;
readonly filename: string;
readonly id: string;
readonly mimeType: string;
readonly size: number;
readonly state: EvidenceState;
readonly type: EvidenceType;
readonly url: string | null | undefined;
};
};
};
};
export type MeasureViewFulfillEvidenceMutation = {
response: MeasureViewFulfillEvidenceMutation$data;
variables: MeasureViewFulfillEvidenceMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"concreteType": "EvidenceEdge",
"kind": "LinkedField",
"name": "evidenceEdge",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Evidence",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "filename",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fileUrl",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "mimeType",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "type",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "url",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "size",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewFulfillEvidenceMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "FulfillEvidencePayload",
"kind": "LinkedField",
"name": "fulfillEvidence",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "MeasureViewFulfillEvidenceMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "FulfillEvidencePayload",
"kind": "LinkedField",
"name": "fulfillEvidence",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "appendEdge",
"key": "",
"kind": "LinkedHandle",
"name": "evidenceEdge",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "a87965c67907a386e0fe9d72c02e6f69",
"id": null,
"metadata": {},
"name": "MeasureViewFulfillEvidenceMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewFulfillEvidenceMutation(\n $input: FulfillEvidenceInput!\n) {\n fulfillEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n description\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "615288332275b30fa96119676fe366e8";
export default node;

View File

@@ -0,0 +1,134 @@
/**
* @generated SignedSource<<70b5734532ae7cd132a0a4f60de81297>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureViewGetEvidenceFileUrlQuery$variables = {
evidenceId: string;
};
export type MeasureViewGetEvidenceFileUrlQuery$data = {
readonly node: {
readonly fileUrl?: string | null | undefined;
readonly id?: string;
};
};
export type MeasureViewGetEvidenceFileUrlQuery = {
response: MeasureViewGetEvidenceFileUrlQuery$data;
variables: MeasureViewGetEvidenceFileUrlQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "evidenceId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "evidenceId"
}
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fileUrl",
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewGetEvidenceFileUrlQuery",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"kind": "InlineFragment",
"selections": [
(v2/*: any*/),
(v3/*: any*/)
],
"type": "Evidence",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewGetEvidenceFileUrlQuery",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
(v3/*: any*/)
],
"type": "Evidence",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "53ad5d32a09d0f4e00e53f3ac7138267",
"id": null,
"metadata": {},
"name": "MeasureViewGetEvidenceFileUrlQuery",
"operationKind": "query",
"text": "query MeasureViewGetEvidenceFileUrlQuery(\n $evidenceId: ID!\n) {\n node(id: $evidenceId) {\n __typename\n ... on Evidence {\n id\n fileUrl\n }\n id\n }\n}\n"
}
};
})();
(node as any).hash = "e373fc3a6bc7c3c57d253f1915027880";
export default node;

View File

@@ -0,0 +1,262 @@
/**
* @generated SignedSource<<9b551f9e8f59a5ffe5c00700cdb59c88>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureViewLinkedControlsQuery$variables = {
measureId: string;
};
export type MeasureViewLinkedControlsQuery$data = {
readonly measure: {
readonly controls?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly description: string;
readonly id: string;
readonly name: string;
readonly referenceId: string;
};
}>;
};
readonly id: string;
};
};
export type MeasureViewLinkedControlsQuery = {
response: MeasureViewLinkedControlsQuery$data;
variables: MeasureViewLinkedControlsQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "measureId"
}
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
v4 = [
{
"alias": null,
"args": null,
"concreteType": "ControlEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Control",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "referenceId",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
(v3/*: any*/)
],
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "cursor",
"storageKey": null
}
],
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "PageInfo",
"kind": "LinkedField",
"name": "pageInfo",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endCursor",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "hasNextPage",
"storageKey": null
}
],
"storageKey": null
}
],
v5 = [
{
"kind": "Literal",
"name": "first",
"value": 100
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewLinkedControlsQuery",
"selections": [
{
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": "controls",
"args": null,
"concreteType": "ControlConnection",
"kind": "LinkedField",
"name": "__MeasureView_controls_connection",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": null
}
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewLinkedControlsQuery",
"selections": [
{
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": null,
"args": (v5/*: any*/),
"concreteType": "ControlConnection",
"kind": "LinkedField",
"name": "controls",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": "controls(first:100)"
},
{
"alias": null,
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "MeasureView_controls",
"kind": "LinkedHandle",
"name": "controls"
}
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "b4f524eea7ce57decf321b7efacdaa03",
"id": null,
"metadata": {
"connection": [
{
"count": null,
"cursor": null,
"direction": "forward",
"path": [
"measure",
"controls"
]
}
]
},
"name": "MeasureViewLinkedControlsQuery",
"operationKind": "query",
"text": "query MeasureViewLinkedControlsQuery(\n $measureId: ID!\n) {\n measure: node(id: $measureId) {\n __typename\n id\n ... on Measure {\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "5dfd96b1ab2edc5c8c654346046a968f";
export default node;

View File

@@ -0,0 +1,267 @@
/**
* @generated SignedSource<<340108b3d5d790eb9e5cf3caa49c2497>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureViewOrganizationQuery$variables = {
organizationId: string;
};
export type MeasureViewOrganizationQuery$data = {
readonly organization: {
readonly id: string;
readonly peoples?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly fullName: string;
readonly id: string;
readonly primaryEmailAddress: string;
};
}>;
};
};
};
export type MeasureViewOrganizationQuery = {
response: MeasureViewOrganizationQuery$data;
variables: MeasureViewOrganizationQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "organizationId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "organizationId"
}
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"kind": "Literal",
"name": "orderBy",
"value": {
"direction": "ASC",
"field": "FULL_NAME"
}
},
v4 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
v5 = [
{
"alias": null,
"args": null,
"concreteType": "PeopleEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "People",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fullName",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "primaryEmailAddress",
"storageKey": null
},
(v4/*: any*/)
],
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "cursor",
"storageKey": null
}
],
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "PageInfo",
"kind": "LinkedField",
"name": "pageInfo",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endCursor",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "hasNextPage",
"storageKey": null
}
],
"storageKey": null
}
],
v6 = [
{
"kind": "Literal",
"name": "first",
"value": 100
},
(v3/*: any*/)
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewOrganizationQuery",
"selections": [
{
"alias": "organization",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": "peoples",
"args": [
(v3/*: any*/)
],
"concreteType": "PeopleConnection",
"kind": "LinkedField",
"name": "__MeasureView_peoples_connection",
"plural": false,
"selections": (v5/*: any*/),
"storageKey": "__MeasureView_peoples_connection(orderBy:{\"direction\":\"ASC\",\"field\":\"FULL_NAME\"})"
}
],
"type": "Organization",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewOrganizationQuery",
"selections": [
{
"alias": "organization",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v4/*: any*/),
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": null,
"args": (v6/*: any*/),
"concreteType": "PeopleConnection",
"kind": "LinkedField",
"name": "peoples",
"plural": false,
"selections": (v5/*: any*/),
"storageKey": "peoples(first:100,orderBy:{\"direction\":\"ASC\",\"field\":\"FULL_NAME\"})"
},
{
"alias": null,
"args": (v6/*: any*/),
"filters": [
"orderBy"
],
"handle": "connection",
"key": "MeasureView_peoples",
"kind": "LinkedHandle",
"name": "peoples"
}
],
"type": "Organization",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "e3e667e3b7336703ac863582368aba65",
"id": null,
"metadata": {
"connection": [
{
"count": null,
"cursor": null,
"direction": "forward",
"path": [
"organization",
"peoples"
]
}
]
},
"name": "MeasureViewOrganizationQuery",
"operationKind": "query",
"text": "query MeasureViewOrganizationQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n peoples(first: 100, orderBy: {direction: ASC, field: FULL_NAME}) {\n edges {\n node {\n id\n fullName\n primaryEmailAddress\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "721e50c0d6835692c77ef891af1561c2";
export default node;

View File

@@ -0,0 +1,508 @@
/**
* @generated SignedSource<<63dbc912431a9ea23a2ce515ba95af86>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type EvidenceState = "FULFILLED" | "REQUESTED";
export type EvidenceType = "FILE" | "LINK";
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type TaskState = "DONE" | "TODO";
export type MeasureViewQuery$variables = {
measureId: string;
};
export type MeasureViewQuery$data = {
readonly measure: {
readonly category?: string;
readonly description?: string;
readonly id: string;
readonly name?: string;
readonly state?: MeasureState;
readonly tasks?: {
readonly __id: string;
readonly edges: ReadonlyArray<{
readonly node: {
readonly assignedTo: {
readonly fullName: string;
readonly id: string;
readonly primaryEmailAddress: string;
} | null | undefined;
readonly description: string;
readonly evidences: {
readonly __id: string;
readonly edges: ReadonlyArray<{
readonly node: {
readonly createdAt: string;
readonly description: string;
readonly filename: string;
readonly id: string;
readonly mimeType: string;
readonly size: number;
readonly state: EvidenceState;
readonly type: EvidenceType;
readonly url: string | null | undefined;
};
}>;
};
readonly id: string;
readonly name: string;
readonly state: TaskState;
readonly timeEstimate: any | null | undefined;
};
}>;
};
};
};
export type MeasureViewQuery = {
response: MeasureViewQuery$data;
variables: MeasureViewQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "measureId"
}
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
v4 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
v5 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
},
v6 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "category",
"storageKey": null
},
v7 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "timeEstimate",
"storageKey": null
},
v8 = {
"alias": null,
"args": null,
"concreteType": "People",
"kind": "LinkedField",
"name": "assignedTo",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fullName",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "primaryEmailAddress",
"storageKey": null
}
],
"storageKey": null
},
v9 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
v10 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "cursor",
"storageKey": null
},
v11 = {
"alias": null,
"args": null,
"concreteType": "PageInfo",
"kind": "LinkedField",
"name": "pageInfo",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endCursor",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "hasNextPage",
"storageKey": null
}
],
"storageKey": null
},
v12 = {
"kind": "ClientExtension",
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__id",
"storageKey": null
}
]
},
v13 = [
{
"alias": null,
"args": null,
"concreteType": "EvidenceEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Evidence",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "mimeType",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "filename",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "size",
"storageKey": null
},
(v5/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "type",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "url",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
(v4/*: any*/),
(v9/*: any*/)
],
"storageKey": null
},
(v10/*: any*/)
],
"storageKey": null
},
(v11/*: any*/),
(v12/*: any*/)
],
v14 = [
{
"kind": "Literal",
"name": "first",
"value": 100
}
],
v15 = [
{
"kind": "Literal",
"name": "first",
"value": 50
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewQuery",
"selections": [
{
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/),
(v6/*: any*/),
{
"alias": "tasks",
"args": null,
"concreteType": "TaskConnection",
"kind": "LinkedField",
"name": "__MeasureView_tasks_connection",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TaskEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Task",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/),
(v7/*: any*/),
(v8/*: any*/),
{
"alias": "evidences",
"args": null,
"concreteType": "EvidenceConnection",
"kind": "LinkedField",
"name": "__MeasureView_evidences_connection",
"plural": false,
"selections": (v13/*: any*/),
"storageKey": null
},
(v9/*: any*/)
],
"storageKey": null
},
(v10/*: any*/)
],
"storageKey": null
},
(v11/*: any*/),
(v12/*: any*/)
],
"storageKey": null
}
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewQuery",
"selections": [
{
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v9/*: any*/),
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/),
(v6/*: any*/),
{
"alias": null,
"args": (v14/*: any*/),
"concreteType": "TaskConnection",
"kind": "LinkedField",
"name": "tasks",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TaskEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Task",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/),
(v7/*: any*/),
(v8/*: any*/),
{
"alias": null,
"args": (v15/*: any*/),
"concreteType": "EvidenceConnection",
"kind": "LinkedField",
"name": "evidences",
"plural": false,
"selections": (v13/*: any*/),
"storageKey": "evidences(first:50)"
},
{
"alias": null,
"args": (v15/*: any*/),
"filters": null,
"handle": "connection",
"key": "MeasureView_evidences",
"kind": "LinkedHandle",
"name": "evidences"
},
(v9/*: any*/)
],
"storageKey": null
},
(v10/*: any*/)
],
"storageKey": null
},
(v11/*: any*/),
(v12/*: any*/)
],
"storageKey": "tasks(first:100)"
},
{
"alias": null,
"args": (v14/*: any*/),
"filters": null,
"handle": "connection",
"key": "MeasureView_tasks",
"kind": "LinkedHandle",
"name": "tasks"
}
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "9c4b0f0032102448259ea5deb2b9d57a",
"id": null,
"metadata": {
"connection": [
{
"count": null,
"cursor": null,
"direction": "forward",
"path": null
},
{
"count": null,
"cursor": null,
"direction": "forward",
"path": [
"measure",
"tasks"
]
}
]
},
"name": "MeasureViewQuery",
"operationKind": "query",
"text": "query MeasureViewQuery(\n $measureId: ID!\n) {\n measure: node(id: $measureId) {\n __typename\n id\n ... on Measure {\n name\n description\n state\n category\n tasks(first: 100) {\n edges {\n node {\n id\n name\n description\n state\n timeEstimate\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n evidences(first: 50) {\n edges {\n node {\n id\n mimeType\n filename\n size\n state\n type\n url\n createdAt\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "0de1c02cbaf76feae0ecdbd93f530fa7";
export default node;

View File

@@ -0,0 +1,318 @@
/**
* @generated SignedSource<<f1eccfbde625d131166d0fac7f4613aa>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureViewRisksQuery$variables = {
measureId: string;
};
export type MeasureViewRisksQuery$data = {
readonly measure: {
readonly id: string;
readonly risks?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly createdAt: string;
readonly description: string;
readonly id: string;
readonly inherentImpact: number;
readonly inherentLikelihood: number;
readonly inherentSeverity: number;
readonly name: string;
readonly residualImpact: number;
readonly residualLikelihood: number;
readonly residualSeverity: number;
readonly updatedAt: string;
};
}>;
};
};
};
export type MeasureViewRisksQuery = {
response: MeasureViewRisksQuery$data;
variables: MeasureViewRisksQuery$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "measureId"
}
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
v4 = [
{
"alias": null,
"args": null,
"concreteType": "RiskEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Risk",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "inherentLikelihood",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "inherentImpact",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "inherentSeverity",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "residualLikelihood",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "residualImpact",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "residualSeverity",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "updatedAt",
"storageKey": null
},
(v3/*: any*/)
],
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "cursor",
"storageKey": null
}
],
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "PageInfo",
"kind": "LinkedField",
"name": "pageInfo",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "endCursor",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "hasNextPage",
"storageKey": null
}
],
"storageKey": null
}
],
v5 = [
{
"kind": "Literal",
"name": "first",
"value": 100
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewRisksQuery",
"selections": [
{
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": "risks",
"args": null,
"concreteType": "RiskConnection",
"kind": "LinkedField",
"name": "__MeasureView_risks_connection",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": null
}
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewRisksQuery",
"selections": [
{
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": null,
"args": (v5/*: any*/),
"concreteType": "RiskConnection",
"kind": "LinkedField",
"name": "risks",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": "risks(first:100)"
},
{
"alias": null,
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "MeasureView_risks",
"kind": "LinkedHandle",
"name": "risks"
}
],
"type": "Measure",
"abstractKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "e0a3387051cf8312a5ac831f1a9012df",
"id": null,
"metadata": {
"connection": [
{
"count": null,
"cursor": null,
"direction": "forward",
"path": [
"measure",
"risks"
]
}
]
},
"name": "MeasureViewRisksQuery",
"operationKind": "query",
"text": "query MeasureViewRisksQuery(\n $measureId: ID!\n) {\n measure: node(id: $measureId) {\n __typename\n id\n ... on Measure {\n risks(first: 100) {\n edges {\n node {\n id\n name\n description\n inherentLikelihood\n inherentImpact\n inherentSeverity\n residualLikelihood\n residualImpact\n residualSeverity\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "22056b7f008dc87a4ad410bacac9a838";
export default node;

View File

@@ -0,0 +1,137 @@
/**
* @generated SignedSource<<681f6e4cd3a8dc325d74472b475df8cf>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type UnassignTaskInput = {
taskId: string;
};
export type MeasureViewUnassignTaskMutation$variables = {
input: UnassignTaskInput;
};
export type MeasureViewUnassignTaskMutation$data = {
readonly unassignTask: {
readonly task: {
readonly assignedTo: {
readonly fullName: string;
readonly id: string;
readonly primaryEmailAddress: string;
} | null | undefined;
readonly id: string;
};
};
};
export type MeasureViewUnassignTaskMutation = {
response: MeasureViewUnassignTaskMutation$data;
variables: MeasureViewUnassignTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v2 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "UnassignTaskPayload",
"kind": "LinkedField",
"name": "unassignTask",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Task",
"kind": "LinkedField",
"name": "task",
"plural": false,
"selections": [
(v1/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "People",
"kind": "LinkedField",
"name": "assignedTo",
"plural": false,
"selections": [
(v1/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fullName",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "primaryEmailAddress",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewUnassignTaskMutation",
"selections": (v2/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewUnassignTaskMutation",
"selections": (v2/*: any*/)
},
"params": {
"cacheID": "656f852f9ff5fa12a239a31652369278",
"id": null,
"metadata": {},
"name": "MeasureViewUnassignTaskMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewUnassignTaskMutation(\n $input: UnassignTaskInput!\n) {\n unassignTask(input: $input) {\n task {\n id\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "66c29432bc00748955eb5793105ff03b";
export default node;

View File

@@ -0,0 +1,118 @@
/**
* @generated SignedSource<<5c3c644d4844322b34c5fbee967880a8>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type UpdateMeasureInput = {
category?: string | null | undefined;
description?: string | null | undefined;
id: string;
name?: string | null | undefined;
state?: MeasureState | null | undefined;
};
export type MeasureViewUpdateMeasureStateMutation$variables = {
input: UpdateMeasureInput;
};
export type MeasureViewUpdateMeasureStateMutation$data = {
readonly updateMeasure: {
readonly measure: {
readonly id: string;
readonly state: MeasureState;
};
};
};
export type MeasureViewUpdateMeasureStateMutation = {
response: MeasureViewUpdateMeasureStateMutation$data;
variables: MeasureViewUpdateMeasureStateMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "UpdateMeasurePayload",
"kind": "LinkedField",
"name": "updateMeasure",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Measure",
"kind": "LinkedField",
"name": "measure",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewUpdateMeasureStateMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewUpdateMeasureStateMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "0b67944fab3e9ae13f437aeee2b28c5b",
"id": null,
"metadata": {},
"name": "MeasureViewUpdateMeasureStateMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewUpdateMeasureStateMutation(\n $input: UpdateMeasureInput!\n) {\n updateMeasure(input: $input) {\n measure {\n id\n state\n }\n }\n}\n"
}
};
})();
(node as any).hash = "d89e0bc25930592a1f723bbbdb3c43b8";
export default node;

View File

@@ -0,0 +1,126 @@
/**
* @generated SignedSource<<1595fa9771d6baa14534b181f4a1384a>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type TaskState = "DONE" | "TODO";
export type UpdateTaskInput = {
description?: string | null | undefined;
name?: string | null | undefined;
state?: TaskState | null | undefined;
taskId: string;
timeEstimate?: any | null | undefined;
};
export type MeasureViewUpdateTaskStateMutation$variables = {
input: UpdateTaskInput;
};
export type MeasureViewUpdateTaskStateMutation$data = {
readonly updateTask: {
readonly task: {
readonly id: string;
readonly state: TaskState;
readonly timeEstimate: any | null | undefined;
};
};
};
export type MeasureViewUpdateTaskStateMutation = {
response: MeasureViewUpdateTaskStateMutation$data;
variables: MeasureViewUpdateTaskStateMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "UpdateTaskPayload",
"kind": "LinkedField",
"name": "updateTask",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Task",
"kind": "LinkedField",
"name": "task",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "state",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "timeEstimate",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MeasureViewUpdateTaskStateMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MeasureViewUpdateTaskStateMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "f545a0b12edb8f231a1a7a7c38b6e905",
"id": null,
"metadata": {},
"name": "MeasureViewUpdateTaskStateMutation",
"operationKind": "mutation",
"text": "mutation MeasureViewUpdateTaskStateMutation(\n $input: UpdateTaskInput!\n) {\n updateTask(input: $input) {\n task {\n id\n state\n timeEstimate\n }\n }\n}\n"
}
};
})();
(node as any).hash = "e1d67c030523e56d6bcd595c27fcb3dc";
export default node;

View File

@@ -9,33 +9,33 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ImportMesureInput = {
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ImportMeasureInput = {
file: any;
organizationId: string;
};
export type MesureListViewImportMesureMutation$variables = {
export type MeasureListViewImportMeasureMutation$variables = {
connections: ReadonlyArray<string>;
input: ImportMesureInput;
input: ImportMeasureInput;
};
export type MesureListViewImportMesureMutation$data = {
readonly importMesure: {
readonly mesureEdges: ReadonlyArray<{
export type MeasureListViewImportMeasureMutation$data = {
readonly importMeasure: {
readonly measureEdges: ReadonlyArray<{
readonly node: {
readonly category: string;
readonly createdAt: string;
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MesureState;
readonly state: MeasureState;
readonly updatedAt: string;
};
}>;
};
};
export type MesureListViewImportMesureMutation = {
response: MesureListViewImportMesureMutation$data;
variables: MesureListViewImportMesureMutation$variables;
export type MeasureListViewImportMeasureMutation = {
response: MeasureListViewImportMeasureMutation$data;
variables: MeasureListViewImportMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -59,15 +59,15 @@ v2 = [
v3 = {
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "mesureEdges",
"name": "measureEdges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -135,14 +135,14 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureListViewImportMesureMutation",
"name": "MeasureListViewImportMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "ImportMesurePayload",
"concreteType": "ImportMeasurePayload",
"kind": "LinkedField",
"name": "importMesure",
"name": "importMeasure",
"plural": false,
"selections": [
(v3/*: any*/)
@@ -160,14 +160,14 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureListViewImportMesureMutation",
"name": "MeasureListViewImportMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "ImportMesurePayload",
"concreteType": "ImportMeasurePayload",
"kind": "LinkedField",
"name": "importMesure",
"name": "importMeasure",
"plural": false,
"selections": [
(v3/*: any*/),
@@ -178,7 +178,7 @@ return {
"handle": "appendEdge",
"key": "",
"kind": "LinkedHandle",
"name": "mesureEdges",
"name": "measureEdges",
"handleArgs": [
{
"kind": "Variable",
@@ -196,9 +196,9 @@ return {
"cacheID": "8cf2772dcac48b487c892d2b68a3bb51",
"id": null,
"metadata": {},
"name": "MesureListViewImportMesureMutation",
"name": "MeasureListViewImportMeasureMutation",
"operationKind": "mutation",
"text": "mutation MesureListViewImportMesureMutation(\n $input: ImportMesureInput!\n) {\n importMesure(input: $input) {\n mesureEdges {\n node {\n id\n name\n description\n category\n state\n createdAt\n updatedAt\n }\n }\n }\n}\n"
"text": "mutation MeasureListViewImportMeasureMutation(\n $input: ImportMeasureInput!\n) {\n importMeasure(input: $input) {\n measureEdges {\n node {\n id\n name\n description\n category\n state\n createdAt\n updatedAt\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -9,15 +9,15 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type MesureListViewQuery$variables = {
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type MeasureListViewQuery$variables = {
first?: number | null | undefined;
organizationId: string;
};
export type MesureListViewQuery$data = {
export type MeasureListViewQuery$data = {
readonly organization: {
readonly id: string;
readonly mesures?: {
readonly measures?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;
@@ -25,16 +25,16 @@ export type MesureListViewQuery$data = {
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MesureState;
readonly state: MeasureState;
readonly updatedAt: string;
};
}>;
};
};
};
export type MesureListViewQuery = {
response: MesureListViewQuery$data;
variables: MesureListViewQuery$variables;
export type MeasureListViewQuery = {
response: MeasureListViewQuery$data;
variables: MeasureListViewQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -73,7 +73,7 @@ v5 = [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -81,7 +81,7 @@ v5 = [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -184,7 +184,7 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureListViewQuery",
"name": "MeasureListViewQuery",
"selections": [
{
"alias": "organization",
@@ -199,11 +199,11 @@ return {
"kind": "InlineFragment",
"selections": [
{
"alias": "mesures",
"alias": "measures",
"args": null,
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "__MesureListView_mesures_connection",
"name": "__MeasureListView_measures_connection",
"plural": false,
"selections": (v5/*: any*/),
"storageKey": null
@@ -226,7 +226,7 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureListViewQuery",
"name": "MeasureListViewQuery",
"selections": [
{
"alias": "organization",
@@ -244,9 +244,9 @@ return {
{
"alias": null,
"args": (v6/*: any*/),
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": (v5/*: any*/),
"storageKey": null
@@ -256,9 +256,9 @@ return {
"args": (v6/*: any*/),
"filters": null,
"handle": "connection",
"key": "MesureListView_mesures",
"key": "MeasureListView_measures",
"kind": "LinkedHandle",
"name": "mesures"
"name": "measures"
}
],
"type": "Organization",
@@ -280,14 +280,14 @@ return {
"direction": "forward",
"path": [
"organization",
"mesures"
"measures"
]
}
]
},
"name": "MesureListViewQuery",
"name": "MeasureListViewQuery",
"operationKind": "query",
"text": "query MesureListViewQuery(\n $organizationId: ID!\n $first: Int\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n mesures(first: $first) {\n edges {\n node {\n id\n name\n description\n category\n state\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query MeasureListViewQuery(\n $organizationId: ID!\n $first: Int\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n measures(first: $first) {\n edges {\n node {\n id\n name\n description\n category\n state\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -13,10 +13,10 @@ export type AssignTaskInput = {
assignedToId: string;
taskId: string;
};
export type MesureViewAssignTaskMutation$variables = {
export type MeasureViewAssignTaskMutation$variables = {
input: AssignTaskInput;
};
export type MesureViewAssignTaskMutation$data = {
export type MeasureViewAssignTaskMutation$data = {
readonly assignTask: {
readonly task: {
readonly assignedTo: {
@@ -28,9 +28,9 @@ export type MesureViewAssignTaskMutation$data = {
};
};
};
export type MesureViewAssignTaskMutation = {
response: MesureViewAssignTaskMutation$data;
variables: MesureViewAssignTaskMutation$variables;
export type MeasureViewAssignTaskMutation = {
response: MeasureViewAssignTaskMutation$data;
variables: MeasureViewAssignTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -110,7 +110,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewAssignTaskMutation",
"name": "MeasureViewAssignTaskMutation",
"selections": (v2/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -119,16 +119,16 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewAssignTaskMutation",
"name": "MeasureViewAssignTaskMutation",
"selections": (v2/*: any*/)
},
"params": {
"cacheID": "6d3f95b9e223f40d7e333b951193abcc",
"id": null,
"metadata": {},
"name": "MesureViewAssignTaskMutation",
"name": "MeasureViewAssignTaskMutation",
"operationKind": "mutation",
"text": "mutation MesureViewAssignTaskMutation(\n $input: AssignTaskInput!\n) {\n assignTask(input: $input) {\n task {\n id\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n}\n"
"text": "mutation MeasureViewAssignTaskMutation(\n $input: AssignTaskInput!\n) {\n assignTask(input: $input) {\n task {\n id\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -9,21 +9,21 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type CreateControlMesureMappingInput = {
export type CreateControlMeasureMappingInput = {
controlId: string;
mesureId: string;
measureId: string;
};
export type MesureViewCreateControlMappingMutation$variables = {
input: CreateControlMesureMappingInput;
export type MeasureViewCreateControlMappingMutation$variables = {
input: CreateControlMeasureMappingInput;
};
export type MesureViewCreateControlMappingMutation$data = {
readonly createControlMesureMapping: {
export type MeasureViewCreateControlMappingMutation$data = {
readonly createControlMeasureMapping: {
readonly success: boolean;
};
};
export type MesureViewCreateControlMappingMutation = {
response: MesureViewCreateControlMappingMutation$data;
variables: MesureViewCreateControlMappingMutation$variables;
export type MeasureViewCreateControlMappingMutation = {
response: MeasureViewCreateControlMappingMutation$data;
variables: MeasureViewCreateControlMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -44,9 +44,9 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "CreateControlMesureMappingPayload",
"concreteType": "CreateControlMeasureMappingPayload",
"kind": "LinkedField",
"name": "createControlMesureMapping",
"name": "createControlMeasureMapping",
"plural": false,
"selections": [
{
@@ -65,7 +65,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewCreateControlMappingMutation",
"name": "MeasureViewCreateControlMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -74,16 +74,16 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewCreateControlMappingMutation",
"name": "MeasureViewCreateControlMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "78c1205d1a787ee2cc4e1173e3ef463f",
"id": null,
"metadata": {},
"name": "MesureViewCreateControlMappingMutation",
"name": "MeasureViewCreateControlMappingMutation",
"operationKind": "mutation",
"text": "mutation MesureViewCreateControlMappingMutation(\n $input: CreateControlMesureMappingInput!\n) {\n createControlMesureMapping(input: $input) {\n success\n }\n}\n"
"text": "mutation MeasureViewCreateControlMappingMutation(\n $input: CreateControlMeasureMappingInput!\n) {\n createControlMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();

View File

@@ -19,11 +19,11 @@ export type CreateEvidenceInput = {
type: EvidenceType;
url?: string | null | undefined;
};
export type MesureViewCreateEvidenceMutation$variables = {
export type MeasureViewCreateEvidenceMutation$variables = {
connections: ReadonlyArray<string>;
input: CreateEvidenceInput;
};
export type MesureViewCreateEvidenceMutation$data = {
export type MeasureViewCreateEvidenceMutation$data = {
readonly createEvidence: {
readonly evidenceEdge: {
readonly node: {
@@ -41,9 +41,9 @@ export type MesureViewCreateEvidenceMutation$data = {
};
};
};
export type MesureViewCreateEvidenceMutation = {
response: MesureViewCreateEvidenceMutation$data;
variables: MesureViewCreateEvidenceMutation$variables;
export type MeasureViewCreateEvidenceMutation = {
response: MeasureViewCreateEvidenceMutation$data;
variables: MeasureViewCreateEvidenceMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -164,7 +164,7 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureViewCreateEvidenceMutation",
"name": "MeasureViewCreateEvidenceMutation",
"selections": [
{
"alias": null,
@@ -189,7 +189,7 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureViewCreateEvidenceMutation",
"name": "MeasureViewCreateEvidenceMutation",
"selections": [
{
"alias": null,
@@ -225,9 +225,9 @@ return {
"cacheID": "550cd90cddee628ec42ebd53ac749af0",
"id": null,
"metadata": {},
"name": "MesureViewCreateEvidenceMutation",
"name": "MeasureViewCreateEvidenceMutation",
"operationKind": "mutation",
"text": "mutation MesureViewCreateEvidenceMutation(\n $input: CreateEvidenceInput!\n) {\n createEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n description\n }\n }\n }\n}\n"
"text": "mutation MeasureViewCreateEvidenceMutation(\n $input: CreateEvidenceInput!\n) {\n createEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n description\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -13,15 +13,15 @@ export type TaskState = "DONE" | "TODO";
export type CreateTaskInput = {
assignedToId?: string | null | undefined;
description: string;
mesureId: string;
measureId: string;
name: string;
timeEstimate?: any | null | undefined;
};
export type MesureViewCreateTaskMutation$variables = {
export type MeasureViewCreateTaskMutation$variables = {
connections: ReadonlyArray<string>;
input: CreateTaskInput;
};
export type MesureViewCreateTaskMutation$data = {
export type MeasureViewCreateTaskMutation$data = {
readonly createTask: {
readonly taskEdge: {
readonly node: {
@@ -39,9 +39,9 @@ export type MesureViewCreateTaskMutation$data = {
};
};
};
export type MesureViewCreateTaskMutation = {
response: MesureViewCreateTaskMutation$data;
variables: MesureViewCreateTaskMutation$variables;
export type MeasureViewCreateTaskMutation = {
response: MeasureViewCreateTaskMutation$data;
variables: MeasureViewCreateTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -154,7 +154,7 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureViewCreateTaskMutation",
"name": "MeasureViewCreateTaskMutation",
"selections": [
{
"alias": null,
@@ -179,7 +179,7 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureViewCreateTaskMutation",
"name": "MeasureViewCreateTaskMutation",
"selections": [
{
"alias": null,
@@ -215,9 +215,9 @@ return {
"cacheID": "453cd7da016798ce86c012c9d1cf29f1",
"id": null,
"metadata": {},
"name": "MesureViewCreateTaskMutation",
"name": "MeasureViewCreateTaskMutation",
"operationKind": "mutation",
"text": "mutation MesureViewCreateTaskMutation(\n $input: CreateTaskInput!\n) {\n createTask(input: $input) {\n taskEdge {\n node {\n id\n name\n description\n timeEstimate\n state\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n }\n}\n"
"text": "mutation MeasureViewCreateTaskMutation(\n $input: CreateTaskInput!\n) {\n createTask(input: $input) {\n taskEdge {\n node {\n id\n name\n description\n timeEstimate\n state\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -9,21 +9,21 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteControlMesureMappingInput = {
export type DeleteControlMeasureMappingInput = {
controlId: string;
mesureId: string;
measureId: string;
};
export type MesureViewDeleteControlMappingMutation$variables = {
input: DeleteControlMesureMappingInput;
export type MeasureViewDeleteControlMappingMutation$variables = {
input: DeleteControlMeasureMappingInput;
};
export type MesureViewDeleteControlMappingMutation$data = {
readonly deleteControlMesureMapping: {
export type MeasureViewDeleteControlMappingMutation$data = {
readonly deleteControlMeasureMapping: {
readonly success: boolean;
};
};
export type MesureViewDeleteControlMappingMutation = {
response: MesureViewDeleteControlMappingMutation$data;
variables: MesureViewDeleteControlMappingMutation$variables;
export type MeasureViewDeleteControlMappingMutation = {
response: MeasureViewDeleteControlMappingMutation$data;
variables: MeasureViewDeleteControlMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -44,9 +44,9 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "DeleteControlMesureMappingPayload",
"concreteType": "DeleteControlMeasureMappingPayload",
"kind": "LinkedField",
"name": "deleteControlMesureMapping",
"name": "deleteControlMeasureMapping",
"plural": false,
"selections": [
{
@@ -65,7 +65,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewDeleteControlMappingMutation",
"name": "MeasureViewDeleteControlMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -74,16 +74,16 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewDeleteControlMappingMutation",
"name": "MeasureViewDeleteControlMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "5293df3ec3b7a9c5dab1ae7c41177186",
"id": null,
"metadata": {},
"name": "MesureViewDeleteControlMappingMutation",
"name": "MeasureViewDeleteControlMappingMutation",
"operationKind": "mutation",
"text": "mutation MesureViewDeleteControlMappingMutation(\n $input: DeleteControlMesureMappingInput!\n) {\n deleteControlMesureMapping(input: $input) {\n success\n }\n}\n"
"text": "mutation MeasureViewDeleteControlMappingMutation(\n $input: DeleteControlMeasureMappingInput!\n) {\n deleteControlMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();

View File

@@ -12,18 +12,18 @@ import { ConcreteRequest } from 'relay-runtime';
export type DeleteEvidenceInput = {
evidenceId: string;
};
export type MesureViewDeleteEvidenceMutation$variables = {
export type MeasureViewDeleteEvidenceMutation$variables = {
connections: ReadonlyArray<string>;
input: DeleteEvidenceInput;
};
export type MesureViewDeleteEvidenceMutation$data = {
export type MeasureViewDeleteEvidenceMutation$data = {
readonly deleteEvidence: {
readonly deletedEvidenceId: string;
};
};
export type MesureViewDeleteEvidenceMutation = {
response: MesureViewDeleteEvidenceMutation$data;
variables: MesureViewDeleteEvidenceMutation$variables;
export type MeasureViewDeleteEvidenceMutation = {
response: MeasureViewDeleteEvidenceMutation$data;
variables: MeasureViewDeleteEvidenceMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -59,7 +59,7 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureViewDeleteEvidenceMutation",
"name": "MeasureViewDeleteEvidenceMutation",
"selections": [
{
"alias": null,
@@ -84,7 +84,7 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureViewDeleteEvidenceMutation",
"name": "MeasureViewDeleteEvidenceMutation",
"selections": [
{
"alias": null,
@@ -120,9 +120,9 @@ return {
"cacheID": "26fbd71aca06943318c6154a0079d6d7",
"id": null,
"metadata": {},
"name": "MesureViewDeleteEvidenceMutation",
"name": "MeasureViewDeleteEvidenceMutation",
"operationKind": "mutation",
"text": "mutation MesureViewDeleteEvidenceMutation(\n $input: DeleteEvidenceInput!\n) {\n deleteEvidence(input: $input) {\n deletedEvidenceId\n }\n}\n"
"text": "mutation MeasureViewDeleteEvidenceMutation(\n $input: DeleteEvidenceInput!\n) {\n deleteEvidence(input: $input) {\n deletedEvidenceId\n }\n}\n"
}
};
})();

View File

@@ -9,21 +9,21 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteMesureInput = {
mesureId: string;
export type DeleteMeasureInput = {
measureId: string;
};
export type MesureViewDeleteMesureMutation$variables = {
export type MeasureViewDeleteMeasureMutation$variables = {
connections: ReadonlyArray<string>;
input: DeleteMesureInput;
input: DeleteMeasureInput;
};
export type MesureViewDeleteMesureMutation$data = {
readonly deleteMesure: {
readonly deletedMesureId: string;
export type MeasureViewDeleteMeasureMutation$data = {
readonly deleteMeasure: {
readonly deletedMeasureId: string;
};
};
export type MesureViewDeleteMesureMutation = {
response: MesureViewDeleteMesureMutation$data;
variables: MesureViewDeleteMesureMutation$variables;
export type MeasureViewDeleteMeasureMutation = {
response: MeasureViewDeleteMeasureMutation$data;
variables: MeasureViewDeleteMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -48,7 +48,7 @@ v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "deletedMesureId",
"name": "deletedMeasureId",
"storageKey": null
};
return {
@@ -59,14 +59,14 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureViewDeleteMesureMutation",
"name": "MeasureViewDeleteMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteMesurePayload",
"concreteType": "DeleteMeasurePayload",
"kind": "LinkedField",
"name": "deleteMesure",
"name": "deleteMeasure",
"plural": false,
"selections": [
(v3/*: any*/)
@@ -84,14 +84,14 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureViewDeleteMesureMutation",
"name": "MeasureViewDeleteMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "DeleteMesurePayload",
"concreteType": "DeleteMeasurePayload",
"kind": "LinkedField",
"name": "deleteMesure",
"name": "deleteMeasure",
"plural": false,
"selections": [
(v3/*: any*/),
@@ -102,7 +102,7 @@ return {
"handle": "deleteEdge",
"key": "",
"kind": "ScalarHandle",
"name": "deletedMesureId",
"name": "deletedMeasureId",
"handleArgs": [
{
"kind": "Variable",
@@ -120,9 +120,9 @@ return {
"cacheID": "075b3e2d23906985e70fa5ccd3b623c7",
"id": null,
"metadata": {},
"name": "MesureViewDeleteMesureMutation",
"name": "MeasureViewDeleteMeasureMutation",
"operationKind": "mutation",
"text": "mutation MesureViewDeleteMesureMutation(\n $input: DeleteMesureInput!\n) {\n deleteMesure(input: $input) {\n deletedMesureId\n }\n}\n"
"text": "mutation MeasureViewDeleteMeasureMutation(\n $input: DeleteMeasureInput!\n) {\n deleteMeasure(input: $input) {\n deletedMeasureId\n }\n}\n"
}
};
})();

View File

@@ -12,18 +12,18 @@ import { ConcreteRequest } from 'relay-runtime';
export type DeleteTaskInput = {
taskId: string;
};
export type MesureViewDeleteTaskMutation$variables = {
export type MeasureViewDeleteTaskMutation$variables = {
connections: ReadonlyArray<string>;
input: DeleteTaskInput;
};
export type MesureViewDeleteTaskMutation$data = {
export type MeasureViewDeleteTaskMutation$data = {
readonly deleteTask: {
readonly deletedTaskId: string;
};
};
export type MesureViewDeleteTaskMutation = {
response: MesureViewDeleteTaskMutation$data;
variables: MesureViewDeleteTaskMutation$variables;
export type MeasureViewDeleteTaskMutation = {
response: MeasureViewDeleteTaskMutation$data;
variables: MeasureViewDeleteTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -59,7 +59,7 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureViewDeleteTaskMutation",
"name": "MeasureViewDeleteTaskMutation",
"selections": [
{
"alias": null,
@@ -84,7 +84,7 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureViewDeleteTaskMutation",
"name": "MeasureViewDeleteTaskMutation",
"selections": [
{
"alias": null,
@@ -120,9 +120,9 @@ return {
"cacheID": "a5096acddc7796fbc89521cc80b5538e",
"id": null,
"metadata": {},
"name": "MesureViewDeleteTaskMutation",
"name": "MeasureViewDeleteTaskMutation",
"operationKind": "mutation",
"text": "mutation MesureViewDeleteTaskMutation(\n $input: DeleteTaskInput!\n) {\n deleteTask(input: $input) {\n deletedTaskId\n }\n}\n"
"text": "mutation MeasureViewDeleteTaskMutation(\n $input: DeleteTaskInput!\n) {\n deleteTask(input: $input) {\n deletedTaskId\n }\n}\n"
}
};
})();

View File

@@ -9,10 +9,10 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureViewFrameworksQuery$variables = {
export type MeasureViewFrameworksQuery$variables = {
organizationId: string;
};
export type MesureViewFrameworksQuery$data = {
export type MeasureViewFrameworksQuery$data = {
readonly organization: {
readonly frameworks?: {
readonly edges: ReadonlyArray<{
@@ -35,9 +35,9 @@ export type MesureViewFrameworksQuery$data = {
readonly id: string;
};
};
export type MesureViewFrameworksQuery = {
response: MesureViewFrameworksQuery$data;
variables: MesureViewFrameworksQuery$variables;
export type MeasureViewFrameworksQuery = {
response: MeasureViewFrameworksQuery$data;
variables: MeasureViewFrameworksQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -163,7 +163,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewFrameworksQuery",
"name": "MeasureViewFrameworksQuery",
"selections": [
{
"alias": "organization",
@@ -240,7 +240,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewFrameworksQuery",
"name": "MeasureViewFrameworksQuery",
"selections": [
{
"alias": "organization",
@@ -352,9 +352,9 @@ return {
}
]
},
"name": "MesureViewFrameworksQuery",
"name": "MeasureViewFrameworksQuery",
"operationKind": "query",
"text": "query MesureViewFrameworksQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n frameworks(first: 100) {\n edges {\n node {\n id\n name\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query MeasureViewFrameworksQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n frameworks(first: 100) {\n edges {\n node {\n id\n name\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -17,11 +17,11 @@ export type FulfillEvidenceInput = {
name?: string | null | undefined;
url?: string | null | undefined;
};
export type MesureViewFulfillEvidenceMutation$variables = {
export type MeasureViewFulfillEvidenceMutation$variables = {
connections: ReadonlyArray<string>;
input: FulfillEvidenceInput;
};
export type MesureViewFulfillEvidenceMutation$data = {
export type MeasureViewFulfillEvidenceMutation$data = {
readonly fulfillEvidence: {
readonly evidenceEdge: {
readonly node: {
@@ -39,9 +39,9 @@ export type MesureViewFulfillEvidenceMutation$data = {
};
};
};
export type MesureViewFulfillEvidenceMutation = {
response: MesureViewFulfillEvidenceMutation$data;
variables: MesureViewFulfillEvidenceMutation$variables;
export type MeasureViewFulfillEvidenceMutation = {
response: MeasureViewFulfillEvidenceMutation$data;
variables: MeasureViewFulfillEvidenceMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -162,7 +162,7 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "MesureViewFulfillEvidenceMutation",
"name": "MeasureViewFulfillEvidenceMutation",
"selections": [
{
"alias": null,
@@ -187,7 +187,7 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "MesureViewFulfillEvidenceMutation",
"name": "MeasureViewFulfillEvidenceMutation",
"selections": [
{
"alias": null,
@@ -223,9 +223,9 @@ return {
"cacheID": "605c054b1e501d03ded168635513d859",
"id": null,
"metadata": {},
"name": "MesureViewFulfillEvidenceMutation",
"name": "MeasureViewFulfillEvidenceMutation",
"operationKind": "mutation",
"text": "mutation MesureViewFulfillEvidenceMutation(\n $input: FulfillEvidenceInput!\n) {\n fulfillEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n description\n }\n }\n }\n}\n"
"text": "mutation MeasureViewFulfillEvidenceMutation(\n $input: FulfillEvidenceInput!\n) {\n fulfillEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n description\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -9,18 +9,18 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureViewGetEvidenceFileUrlQuery$variables = {
export type MeasureViewGetEvidenceFileUrlQuery$variables = {
evidenceId: string;
};
export type MesureViewGetEvidenceFileUrlQuery$data = {
export type MeasureViewGetEvidenceFileUrlQuery$data = {
readonly node: {
readonly fileUrl?: string | null | undefined;
readonly id?: string;
};
};
export type MesureViewGetEvidenceFileUrlQuery = {
response: MesureViewGetEvidenceFileUrlQuery$data;
variables: MesureViewGetEvidenceFileUrlQuery$variables;
export type MeasureViewGetEvidenceFileUrlQuery = {
response: MeasureViewGetEvidenceFileUrlQuery$data;
variables: MeasureViewGetEvidenceFileUrlQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -57,7 +57,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewGetEvidenceFileUrlQuery",
"name": "MeasureViewGetEvidenceFileUrlQuery",
"selections": [
{
"alias": null,
@@ -87,7 +87,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewGetEvidenceFileUrlQuery",
"name": "MeasureViewGetEvidenceFileUrlQuery",
"selections": [
{
"alias": null,
@@ -122,9 +122,9 @@ return {
"cacheID": "05edf89cc90a90e1a96bd02f8448b629",
"id": null,
"metadata": {},
"name": "MesureViewGetEvidenceFileUrlQuery",
"name": "MeasureViewGetEvidenceFileUrlQuery",
"operationKind": "query",
"text": "query MesureViewGetEvidenceFileUrlQuery(\n $evidenceId: ID!\n) {\n node(id: $evidenceId) {\n __typename\n ... on Evidence {\n id\n fileUrl\n }\n id\n }\n}\n"
"text": "query MeasureViewGetEvidenceFileUrlQuery(\n $evidenceId: ID!\n) {\n node(id: $evidenceId) {\n __typename\n ... on Evidence {\n id\n fileUrl\n }\n id\n }\n}\n"
}
};
})();

View File

@@ -9,11 +9,11 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureViewLinkedControlsQuery$variables = {
mesureId: string;
export type MeasureViewLinkedControlsQuery$variables = {
measureId: string;
};
export type MesureViewLinkedControlsQuery$data = {
readonly mesure: {
export type MeasureViewLinkedControlsQuery$data = {
readonly measure: {
readonly controls?: {
readonly edges: ReadonlyArray<{
readonly node: {
@@ -27,9 +27,9 @@ export type MesureViewLinkedControlsQuery$data = {
readonly id: string;
};
};
export type MesureViewLinkedControlsQuery = {
response: MesureViewLinkedControlsQuery$data;
variables: MesureViewLinkedControlsQuery$variables;
export type MeasureViewLinkedControlsQuery = {
response: MeasureViewLinkedControlsQuery$data;
variables: MeasureViewLinkedControlsQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -37,14 +37,14 @@ var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "mesureId"
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "mesureId"
"variableName": "measureId"
}
],
v2 = {
@@ -152,10 +152,10 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewLinkedControlsQuery",
"name": "MeasureViewLinkedControlsQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -171,13 +171,13 @@ return {
"args": null,
"concreteType": "ControlConnection",
"kind": "LinkedField",
"name": "__MesureView_controls_connection",
"name": "__MeasureView_controls_connection",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": null
}
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -191,10 +191,10 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewLinkedControlsQuery",
"name": "MeasureViewLinkedControlsQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -221,12 +221,12 @@ return {
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "MesureView_controls",
"key": "MeasureView_controls",
"kind": "LinkedHandle",
"name": "controls"
}
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -244,15 +244,15 @@ return {
"cursor": null,
"direction": "forward",
"path": [
"mesure",
"measure",
"controls"
]
}
]
},
"name": "MesureViewLinkedControlsQuery",
"name": "MeasureViewLinkedControlsQuery",
"operationKind": "query",
"text": "query MesureViewLinkedControlsQuery(\n $mesureId: ID!\n) {\n mesure: node(id: $mesureId) {\n __typename\n id\n ... on Mesure {\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query MeasureViewLinkedControlsQuery(\n $measureId: ID!\n) {\n measure: node(id: $measureId) {\n __typename\n id\n ... on Measure {\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -9,10 +9,10 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureViewOrganizationQuery$variables = {
export type MeasureViewOrganizationQuery$variables = {
organizationId: string;
};
export type MesureViewOrganizationQuery$data = {
export type MeasureViewOrganizationQuery$data = {
readonly organization: {
readonly id: string;
readonly peoples?: {
@@ -26,9 +26,9 @@ export type MesureViewOrganizationQuery$data = {
};
};
};
export type MesureViewOrganizationQuery = {
response: MesureViewOrganizationQuery$data;
variables: MesureViewOrganizationQuery$variables;
export type MeasureViewOrganizationQuery = {
response: MeasureViewOrganizationQuery$data;
variables: MeasureViewOrganizationQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -153,7 +153,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewOrganizationQuery",
"name": "MeasureViewOrganizationQuery",
"selections": [
{
"alias": "organization",
@@ -174,10 +174,10 @@ return {
],
"concreteType": "PeopleConnection",
"kind": "LinkedField",
"name": "__MesureView_peoples_connection",
"name": "__MeasureView_peoples_connection",
"plural": false,
"selections": (v5/*: any*/),
"storageKey": "__MesureView_peoples_connection(orderBy:{\"direction\":\"ASC\",\"field\":\"FULL_NAME\"})"
"storageKey": "__MeasureView_peoples_connection(orderBy:{\"direction\":\"ASC\",\"field\":\"FULL_NAME\"})"
}
],
"type": "Organization",
@@ -194,7 +194,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewOrganizationQuery",
"name": "MeasureViewOrganizationQuery",
"selections": [
{
"alias": "organization",
@@ -226,7 +226,7 @@ return {
"orderBy"
],
"handle": "connection",
"key": "MesureView_peoples",
"key": "MeasureView_peoples",
"kind": "LinkedHandle",
"name": "peoples"
}
@@ -255,9 +255,9 @@ return {
}
]
},
"name": "MesureViewOrganizationQuery",
"name": "MeasureViewOrganizationQuery",
"operationKind": "query",
"text": "query MesureViewOrganizationQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n peoples(first: 100, orderBy: {direction: ASC, field: FULL_NAME}) {\n edges {\n node {\n id\n fullName\n primaryEmailAddress\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query MeasureViewOrganizationQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n peoples(first: 100, orderBy: {direction: ASC, field: FULL_NAME}) {\n edges {\n node {\n id\n fullName\n primaryEmailAddress\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -11,18 +11,18 @@
import { ConcreteRequest } from 'relay-runtime';
export type EvidenceState = "FULFILLED" | "REQUESTED";
export type EvidenceType = "FILE" | "LINK";
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type TaskState = "DONE" | "TODO";
export type MesureViewQuery$variables = {
mesureId: string;
export type MeasureViewQuery$variables = {
measureId: string;
};
export type MesureViewQuery$data = {
readonly mesure: {
export type MeasureViewQuery$data = {
readonly measure: {
readonly category?: string;
readonly description?: string;
readonly id: string;
readonly name?: string;
readonly state?: MesureState;
readonly state?: MeasureState;
readonly tasks?: {
readonly __id: string;
readonly edges: ReadonlyArray<{
@@ -58,9 +58,9 @@ export type MesureViewQuery$data = {
};
};
};
export type MesureViewQuery = {
response: MesureViewQuery$data;
variables: MesureViewQuery$variables;
export type MeasureViewQuery = {
response: MeasureViewQuery$data;
variables: MeasureViewQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -68,14 +68,14 @@ var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "mesureId"
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "mesureId"
"variableName": "measureId"
}
],
v2 = {
@@ -289,10 +289,10 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewQuery",
"name": "MeasureViewQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -312,7 +312,7 @@ return {
"args": null,
"concreteType": "TaskConnection",
"kind": "LinkedField",
"name": "__MesureView_tasks_connection",
"name": "__MeasureView_tasks_connection",
"plural": false,
"selections": [
{
@@ -342,7 +342,7 @@ return {
"args": null,
"concreteType": "EvidenceConnection",
"kind": "LinkedField",
"name": "__MesureView_evidences_connection",
"name": "__MeasureView_evidences_connection",
"plural": false,
"selections": (v13/*: any*/),
"storageKey": null
@@ -361,7 +361,7 @@ return {
"storageKey": null
}
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -375,10 +375,10 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewQuery",
"name": "MeasureViewQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -439,7 +439,7 @@ return {
"args": (v15/*: any*/),
"filters": null,
"handle": "connection",
"key": "MesureView_evidences",
"key": "MeasureView_evidences",
"kind": "LinkedHandle",
"name": "evidences"
},
@@ -461,12 +461,12 @@ return {
"args": (v14/*: any*/),
"filters": null,
"handle": "connection",
"key": "MesureView_tasks",
"key": "MeasureView_tasks",
"kind": "LinkedHandle",
"name": "tasks"
}
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -490,15 +490,15 @@ return {
"cursor": null,
"direction": "forward",
"path": [
"mesure",
"measure",
"tasks"
]
}
]
},
"name": "MesureViewQuery",
"name": "MeasureViewQuery",
"operationKind": "query",
"text": "query MesureViewQuery(\n $mesureId: ID!\n) {\n mesure: node(id: $mesureId) {\n __typename\n id\n ... on Mesure {\n name\n description\n state\n category\n tasks(first: 100) {\n edges {\n node {\n id\n name\n description\n state\n timeEstimate\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n evidences(first: 50) {\n edges {\n node {\n id\n mimeType\n filename\n size\n state\n type\n url\n createdAt\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query MeasureViewQuery(\n $measureId: ID!\n) {\n measure: node(id: $measureId) {\n __typename\n id\n ... on Measure {\n name\n description\n state\n category\n tasks(first: 100) {\n edges {\n node {\n id\n name\n description\n state\n timeEstimate\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n evidences(first: 50) {\n edges {\n node {\n id\n mimeType\n filename\n size\n state\n type\n url\n createdAt\n description\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -9,11 +9,11 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureViewRisksQuery$variables = {
mesureId: string;
export type MeasureViewRisksQuery$variables = {
measureId: string;
};
export type MesureViewRisksQuery$data = {
readonly mesure: {
export type MeasureViewRisksQuery$data = {
readonly measure: {
readonly id: string;
readonly risks?: {
readonly edges: ReadonlyArray<{
@@ -34,9 +34,9 @@ export type MesureViewRisksQuery$data = {
};
};
};
export type MesureViewRisksQuery = {
response: MesureViewRisksQuery$data;
variables: MesureViewRisksQuery$variables;
export type MeasureViewRisksQuery = {
response: MeasureViewRisksQuery$data;
variables: MeasureViewRisksQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -44,14 +44,14 @@ var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "mesureId"
"name": "measureId"
}
],
v1 = [
{
"kind": "Variable",
"name": "id",
"variableName": "mesureId"
"variableName": "measureId"
}
],
v2 = {
@@ -208,10 +208,10 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewRisksQuery",
"name": "MeasureViewRisksQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -227,13 +227,13 @@ return {
"args": null,
"concreteType": "RiskConnection",
"kind": "LinkedField",
"name": "__MesureView_risks_connection",
"name": "__MeasureView_risks_connection",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": null
}
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -247,10 +247,10 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewRisksQuery",
"name": "MeasureViewRisksQuery",
"selections": [
{
"alias": "mesure",
"alias": "measure",
"args": (v1/*: any*/),
"concreteType": null,
"kind": "LinkedField",
@@ -277,12 +277,12 @@ return {
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "MesureView_risks",
"key": "MeasureView_risks",
"kind": "LinkedHandle",
"name": "risks"
}
],
"type": "Mesure",
"type": "Measure",
"abstractKey": null
}
],
@@ -300,15 +300,15 @@ return {
"cursor": null,
"direction": "forward",
"path": [
"mesure",
"measure",
"risks"
]
}
]
},
"name": "MesureViewRisksQuery",
"name": "MeasureViewRisksQuery",
"operationKind": "query",
"text": "query MesureViewRisksQuery(\n $mesureId: ID!\n) {\n mesure: node(id: $mesureId) {\n __typename\n id\n ... on Mesure {\n risks(first: 100) {\n edges {\n node {\n id\n name\n description\n inherentLikelihood\n inherentImpact\n inherentSeverity\n residualLikelihood\n residualImpact\n residualSeverity\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query MeasureViewRisksQuery(\n $measureId: ID!\n) {\n measure: node(id: $measureId) {\n __typename\n id\n ... on Measure {\n risks(first: 100) {\n edges {\n node {\n id\n name\n description\n inherentLikelihood\n inherentImpact\n inherentSeverity\n residualLikelihood\n residualImpact\n residualSeverity\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -12,10 +12,10 @@ import { ConcreteRequest } from 'relay-runtime';
export type UnassignTaskInput = {
taskId: string;
};
export type MesureViewUnassignTaskMutation$variables = {
export type MeasureViewUnassignTaskMutation$variables = {
input: UnassignTaskInput;
};
export type MesureViewUnassignTaskMutation$data = {
export type MeasureViewUnassignTaskMutation$data = {
readonly unassignTask: {
readonly task: {
readonly assignedTo: {
@@ -27,9 +27,9 @@ export type MesureViewUnassignTaskMutation$data = {
};
};
};
export type MesureViewUnassignTaskMutation = {
response: MesureViewUnassignTaskMutation$data;
variables: MesureViewUnassignTaskMutation$variables;
export type MeasureViewUnassignTaskMutation = {
response: MeasureViewUnassignTaskMutation$data;
variables: MeasureViewUnassignTaskMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -109,7 +109,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewUnassignTaskMutation",
"name": "MeasureViewUnassignTaskMutation",
"selections": (v2/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -118,16 +118,16 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewUnassignTaskMutation",
"name": "MeasureViewUnassignTaskMutation",
"selections": (v2/*: any*/)
},
"params": {
"cacheID": "3f91f027e7a8a935f306386469bbac21",
"id": null,
"metadata": {},
"name": "MesureViewUnassignTaskMutation",
"name": "MeasureViewUnassignTaskMutation",
"operationKind": "mutation",
"text": "mutation MesureViewUnassignTaskMutation(\n $input: UnassignTaskInput!\n) {\n unassignTask(input: $input) {\n task {\n id\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n}\n"
"text": "mutation MeasureViewUnassignTaskMutation(\n $input: UnassignTaskInput!\n) {\n unassignTask(input: $input) {\n task {\n id\n assignedTo {\n id\n fullName\n primaryEmailAddress\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -9,28 +9,28 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type UpdateMesureInput = {
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type UpdateMeasureInput = {
category?: string | null | undefined;
description?: string | null | undefined;
id: string;
name?: string | null | undefined;
state?: MesureState | null | undefined;
state?: MeasureState | null | undefined;
};
export type MesureViewUpdateMesureStateMutation$variables = {
input: UpdateMesureInput;
export type MeasureViewUpdateMeasureStateMutation$variables = {
input: UpdateMeasureInput;
};
export type MesureViewUpdateMesureStateMutation$data = {
readonly updateMesure: {
readonly mesure: {
export type MeasureViewUpdateMeasureStateMutation$data = {
readonly updateMeasure: {
readonly measure: {
readonly id: string;
readonly state: MesureState;
readonly state: MeasureState;
};
};
};
export type MesureViewUpdateMesureStateMutation = {
response: MesureViewUpdateMesureStateMutation$data;
variables: MesureViewUpdateMesureStateMutation$variables;
export type MeasureViewUpdateMeasureStateMutation = {
response: MeasureViewUpdateMeasureStateMutation$data;
variables: MeasureViewUpdateMeasureStateMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -51,17 +51,17 @@ v1 = [
"variableName": "input"
}
],
"concreteType": "UpdateMesurePayload",
"concreteType": "UpdateMeasurePayload",
"kind": "LinkedField",
"name": "updateMesure",
"name": "updateMeasure",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "mesure",
"name": "measure",
"plural": false,
"selections": [
{
@@ -90,7 +90,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewUpdateMesureStateMutation",
"name": "MeasureViewUpdateMeasureStateMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -99,16 +99,16 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewUpdateMesureStateMutation",
"name": "MeasureViewUpdateMeasureStateMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "59db8143f555230677a401f5bed6a6c3",
"id": null,
"metadata": {},
"name": "MesureViewUpdateMesureStateMutation",
"name": "MeasureViewUpdateMeasureStateMutation",
"operationKind": "mutation",
"text": "mutation MesureViewUpdateMesureStateMutation(\n $input: UpdateMesureInput!\n) {\n updateMesure(input: $input) {\n mesure {\n id\n state\n }\n }\n}\n"
"text": "mutation MeasureViewUpdateMeasureStateMutation(\n $input: UpdateMeasureInput!\n) {\n updateMeasure(input: $input) {\n measure {\n id\n state\n }\n }\n}\n"
}
};
})();

View File

@@ -17,10 +17,10 @@ export type UpdateTaskInput = {
taskId: string;
timeEstimate?: any | null | undefined;
};
export type MesureViewUpdateTaskStateMutation$variables = {
export type MeasureViewUpdateTaskStateMutation$variables = {
input: UpdateTaskInput;
};
export type MesureViewUpdateTaskStateMutation$data = {
export type MeasureViewUpdateTaskStateMutation$data = {
readonly updateTask: {
readonly task: {
readonly id: string;
@@ -29,9 +29,9 @@ export type MesureViewUpdateTaskStateMutation$data = {
};
};
};
export type MesureViewUpdateTaskStateMutation = {
response: MesureViewUpdateTaskStateMutation$data;
variables: MesureViewUpdateTaskStateMutation$variables;
export type MeasureViewUpdateTaskStateMutation = {
response: MeasureViewUpdateTaskStateMutation$data;
variables: MeasureViewUpdateTaskStateMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -98,7 +98,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "MesureViewUpdateTaskStateMutation",
"name": "MeasureViewUpdateTaskStateMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
@@ -107,16 +107,16 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "MesureViewUpdateTaskStateMutation",
"name": "MeasureViewUpdateTaskStateMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "3af3e26a5c5be4c129b6d1706d3d1b59",
"id": null,
"metadata": {},
"name": "MesureViewUpdateTaskStateMutation",
"name": "MeasureViewUpdateTaskStateMutation",
"operationKind": "mutation",
"text": "mutation MesureViewUpdateTaskStateMutation(\n $input: UpdateTaskInput!\n) {\n updateTask(input: $input) {\n task {\n id\n state\n timeEstimate\n }\n }\n}\n"
"text": "mutation MeasureViewUpdateTaskStateMutation(\n $input: UpdateTaskInput!\n) {\n updateTask(input: $input) {\n task {\n id\n state\n timeEstimate\n }\n }\n}\n"
}
};
})();

View File

@@ -19,11 +19,11 @@ export type UploadEvidenceInput = {
type: EvidenceType;
url?: string | null | undefined;
};
export type MesureViewUploadEvidenceMutation$variables = {
export type MeasureViewUploadEvidenceMutation$variables = {
connections: ReadonlyArray<string>;
input: UploadEvidenceInput;
};
export type MesureViewUploadEvidenceMutation$data = {
export type MeasureViewUploadEvidenceMutation$data = {
readonly uploadEvidence: {
readonly evidenceEdge: {
readonly node: {
@@ -40,9 +40,9 @@ export type MesureViewUploadEvidenceMutation$data = {
};
};
};
export type MesureViewUploadEvidenceMutation = {
response: MesureViewUploadEvidenceMutation$data;
variables: MesureViewUploadEvidenceMutation$variables;
export type MeasureViewUploadEvidenceMutation = {
response: MeasureViewUploadEvidenceMutation$data;
variables: MeasureViewUploadEvidenceMutation$variables;
};
const node: ConcreteRequest = (function () {
@@ -153,7 +153,7 @@ const node: ConcreteRequest = (function () {
argumentDefinitions: [v0 /*: any*/, v1 /*: any*/],
kind: "Fragment",
metadata: null,
name: "MesureViewUploadEvidenceMutation",
name: "MeasureViewUploadEvidenceMutation",
selections: [
{
alias: null,
@@ -173,7 +173,7 @@ const node: ConcreteRequest = (function () {
operation: {
argumentDefinitions: [v1 /*: any*/, v0 /*: any*/],
kind: "Operation",
name: "MesureViewUploadEvidenceMutation",
name: "MeasureViewUploadEvidenceMutation",
selections: [
{
alias: null,
@@ -209,9 +209,9 @@ const node: ConcreteRequest = (function () {
cacheID: "30a6915055d3f6b63d96836b26f05a45",
id: null,
metadata: {},
name: "MesureViewUploadEvidenceMutation",
name: "MeasureViewUploadEvidenceMutation",
operationKind: "mutation",
text: "mutation MesureViewUploadEvidenceMutation(\n $input: UploadEvidenceInput!\n) {\n uploadEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n }\n }\n }\n}\n",
text: "mutation MeasureViewUploadEvidenceMutation(\n $input: UploadEvidenceInput!\n) {\n uploadEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n filename\n fileUrl\n mimeType\n type\n url\n size\n state\n createdAt\n }\n }\n }\n}\n",
},
};
})();

View File

@@ -0,0 +1,177 @@
/**
* @generated SignedSource<<5e6355327f3097f4e2081c313e93143a>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type CreateMeasureInput = {
category: string;
description: string;
name: string;
organizationId: string;
};
export type NewMeasureViewCreateMeasureMutation$variables = {
connections: ReadonlyArray<string>;
input: CreateMeasureInput;
};
export type NewMeasureViewCreateMeasureMutation$data = {
readonly createMeasure: {
readonly measureEdge: {
readonly node: {
readonly description: string;
readonly id: string;
readonly name: string;
};
};
};
};
export type NewMeasureViewCreateMeasureMutation = {
response: NewMeasureViewCreateMeasureMutation$data;
variables: NewMeasureViewCreateMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "connections"
},
v1 = {
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
},
v2 = [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
v3 = {
"alias": null,
"args": null,
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "measureEdge",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "name",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "description",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": [
(v0/*: any*/),
(v1/*: any*/)
],
"kind": "Fragment",
"metadata": null,
"name": "NewMeasureViewCreateMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateMeasurePayload",
"kind": "LinkedField",
"name": "createMeasure",
"plural": false,
"selections": [
(v3/*: any*/)
],
"storageKey": null
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
(v1/*: any*/),
(v0/*: any*/)
],
"kind": "Operation",
"name": "NewMeasureViewCreateMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateMeasurePayload",
"kind": "LinkedField",
"name": "createMeasure",
"plural": false,
"selections": [
(v3/*: any*/),
{
"alias": null,
"args": null,
"filters": null,
"handle": "prependEdge",
"key": "",
"kind": "LinkedHandle",
"name": "measureEdge",
"handleArgs": [
{
"kind": "Variable",
"name": "connections",
"variableName": "connections"
}
]
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "653394b4ee4a38ca9a1ab16847969464",
"id": null,
"metadata": {},
"name": "NewMeasureViewCreateMeasureMutation",
"operationKind": "mutation",
"text": "mutation NewMeasureViewCreateMeasureMutation(\n $input: CreateMeasureInput!\n) {\n createMeasure(input: $input) {\n measureEdge {\n node {\n id\n name\n description\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "e75d982c8f9d92fcea1aef2de7b2ad47";
export default node;

View File

@@ -9,19 +9,19 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type CreateMesureInput = {
export type CreateMeasureInput = {
category: string;
description: string;
name: string;
organizationId: string;
};
export type NewMesureViewCreateMesureMutation$variables = {
export type NewMeasureViewCreateMeasureMutation$variables = {
connections: ReadonlyArray<string>;
input: CreateMesureInput;
input: CreateMeasureInput;
};
export type NewMesureViewCreateMesureMutation$data = {
readonly createMesure: {
readonly mesureEdge: {
export type NewMeasureViewCreateMeasureMutation$data = {
readonly createMeasure: {
readonly measureEdge: {
readonly node: {
readonly description: string;
readonly id: string;
@@ -30,9 +30,9 @@ export type NewMesureViewCreateMesureMutation$data = {
};
};
};
export type NewMesureViewCreateMesureMutation = {
response: NewMesureViewCreateMesureMutation$data;
variables: NewMesureViewCreateMesureMutation$variables;
export type NewMeasureViewCreateMeasureMutation = {
response: NewMeasureViewCreateMeasureMutation$data;
variables: NewMeasureViewCreateMeasureMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -56,15 +56,15 @@ v2 = [
v3 = {
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "mesureEdge",
"name": "measureEdge",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -104,14 +104,14 @@ return {
],
"kind": "Fragment",
"metadata": null,
"name": "NewMesureViewCreateMesureMutation",
"name": "NewMeasureViewCreateMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateMesurePayload",
"concreteType": "CreateMeasurePayload",
"kind": "LinkedField",
"name": "createMesure",
"name": "createMeasure",
"plural": false,
"selections": [
(v3/*: any*/)
@@ -129,14 +129,14 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
"name": "NewMesureViewCreateMesureMutation",
"name": "NewMeasureViewCreateMeasureMutation",
"selections": [
{
"alias": null,
"args": (v2/*: any*/),
"concreteType": "CreateMesurePayload",
"concreteType": "CreateMeasurePayload",
"kind": "LinkedField",
"name": "createMesure",
"name": "createMeasure",
"plural": false,
"selections": [
(v3/*: any*/),
@@ -147,7 +147,7 @@ return {
"handle": "prependEdge",
"key": "",
"kind": "LinkedHandle",
"name": "mesureEdge",
"name": "measureEdge",
"handleArgs": [
{
"kind": "Variable",
@@ -165,9 +165,9 @@ return {
"cacheID": "de8b930c9628c62ae4272bd427076ebd",
"id": null,
"metadata": {},
"name": "NewMesureViewCreateMesureMutation",
"name": "NewMeasureViewCreateMeasureMutation",
"operationKind": "mutation",
"text": "mutation NewMesureViewCreateMesureMutation(\n $input: CreateMesureInput!\n) {\n createMesure(input: $input) {\n mesureEdge {\n node {\n id\n name\n description\n }\n }\n }\n}\n"
"text": "mutation NewMeasureViewCreateMeasureMutation(\n $input: CreateMeasureInput!\n) {\n createMeasure(input: $input) {\n measureEdge {\n node {\n id\n name\n description\n }\n }\n }\n}\n"
}
};
})();

View File

@@ -114,7 +114,7 @@ function NewPeopleViewContent() {
),
ConnectionHandler.getConnectionID(
organizationId!,
"MesureView_peoples",
"MeasureView_peoples",
{
orderBy: {
direction: "ASC",

View File

@@ -16,7 +16,7 @@ export function PolicyListViewSkeleton() {
<div className="bg-subtle-bg animate-pulse h-9 w-1/6 rounded-lg" />
}
>
{/* Search and filter mesures skeleton */}
{/* Search and filter measures skeleton */}
<div className="flex flex-col md:flex-row gap-4 mb-6">
<div className="flex-1 h-10 bg-subtle-bg animate-pulse rounded" />
<div className="flex gap-2">

View File

@@ -106,7 +106,7 @@ const listRiskViewFragment = graphql`
id
fullName
}
mesures(first: 1) {
measures(first: 1) {
edges {
node {
category
@@ -240,7 +240,7 @@ type RiskNode = {
readonly id: string;
readonly fullName: string;
} | null;
readonly mesures: {
readonly measures: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;

View File

@@ -54,11 +54,11 @@ import {
TableRow,
} from "@/components/ui/table";
import {
ShowRiskViewOrganizationMesuresQuery,
ShowRiskViewOrganizationMesuresQuery$data,
} from "./__generated__/ShowRiskViewOrganizationMesuresQuery.graphql";
import { ShowRiskViewCreateRiskMesureMappingMutation } from "./__generated__/ShowRiskViewCreateRiskMesureMappingMutation.graphql";
import { ShowRiskViewDeleteRiskMesureMappingMutation } from "./__generated__/ShowRiskViewDeleteRiskMesureMappingMutation.graphql";
ShowRiskViewOrganizationMeasuresQuery,
ShowRiskViewOrganizationMeasuresQuery$data,
} from "./__generated__/ShowRiskViewOrganizationMeasuresQuery.graphql";
import { ShowRiskViewCreateRiskMeasureMappingMutation } from "./__generated__/ShowRiskViewCreateRiskMeasureMappingMutation.graphql";
import { ShowRiskViewDeleteRiskMeasureMappingMutation } from "./__generated__/ShowRiskViewDeleteRiskMeasureMappingMutation.graphql";
import {
ShowRiskViewOrganizationPoliciesQuery,
ShowRiskViewOrganizationPoliciesQuery$data,
@@ -85,7 +85,7 @@ const showRiskViewQuery = graphql`
note
createdAt
updatedAt
mesures(first: 100) @connection(key: "Risk__mesures") {
measures(first: 100) @connection(key: "Risk__measures") {
edges {
node {
id
@@ -122,13 +122,13 @@ const showRiskViewQuery = graphql`
}
`;
// Add query to fetch all mesures for the organization
const organizationMesuresQuery = graphql`
query ShowRiskViewOrganizationMesuresQuery($organizationId: ID!) {
// Add query to fetch all measures for the organization
const organizationMeasuresQuery = graphql`
query ShowRiskViewOrganizationMeasuresQuery($organizationId: ID!) {
organization: node(id: $organizationId) {
id
... on Organization {
mesures(first: 100) @connection(key: "Organization__mesures") {
measures(first: 100) @connection(key: "Organization__measures") {
edges {
node {
id
@@ -163,23 +163,23 @@ const organizationPoliciesQuery = graphql`
}
`;
// Add mutation to create risk-mesure mapping
const createRiskMesureMappingMutation = graphql`
mutation ShowRiskViewCreateRiskMesureMappingMutation(
$input: CreateRiskMesureMappingInput!
// Add mutation to create risk-measure mapping
const createRiskMeasureMappingMutation = graphql`
mutation ShowRiskViewCreateRiskMeasureMappingMutation(
$input: CreateRiskMeasureMappingInput!
) {
createRiskMesureMapping(input: $input) {
createRiskMeasureMapping(input: $input) {
success
}
}
`;
// Add mutation to delete risk-mesure mapping
const deleteRiskMesureMappingMutation = graphql`
mutation ShowRiskViewDeleteRiskMesureMappingMutation(
$input: DeleteRiskMesureMappingInput!
// Add mutation to delete risk-measure mapping
const deleteRiskMeasureMappingMutation = graphql`
mutation ShowRiskViewDeleteRiskMeasureMappingMutation(
$input: DeleteRiskMeasureMappingInput!
) {
deleteRiskMesureMapping(input: $input) {
deleteRiskMeasureMapping(input: $input) {
success
}
}
@@ -329,8 +329,8 @@ function ShowRiskViewContent({
risk.inherentImpact!
);
// Fix typing for mesures
const mesures = risk.mesures?.edges?.map((edge) => edge.node) || [];
// Fix typing for measures
const measures = risk.measures?.edges?.map((edge) => edge.node) || [];
const residualSeverity = getRiskSeverity(
risk.residualLikelihood!,
risk.residualImpact!
@@ -342,17 +342,17 @@ function ShowRiskViewContent({
// Fix typing for controls
const controls = risk.controls?.edges?.map((edge) => edge.node) || [];
// Add state for mesure mapping dialog
const [isMesureDialogOpen, setIsMesureDialogOpen] = useState(false);
const [organizationMesuresData, setOrganizationMesuresData] =
useState<ShowRiskViewOrganizationMesuresQuery$data | null>(null);
const [mesureSearchQuery, setMesureSearchQuery] = useState("");
// Add state for measure mapping dialog
const [isMeasureDialogOpen, setIsMeasureDialogOpen] = useState(false);
const [organizationMeasuresData, setOrganizationMeasuresData] =
useState<ShowRiskViewOrganizationMeasuresQuery$data | null>(null);
const [measureSearchQuery, setMeasureSearchQuery] = useState("");
const [categoryFilter, setCategoryFilter] = useState<string | null>(null);
const [isLoadingMesures, setIsLoadingMesures] = useState(false);
const [linkingMesures, setLinkingMesures] = useState<Record<string, boolean>>(
const [isLoadingMeasures, setIsLoadingMeasures] = useState(false);
const [linkingMeasures, setLinkingMeasures] = useState<Record<string, boolean>>(
{}
);
const [unlinkingMesures, setUnlinkingMesures] = useState<
const [unlinkingMeasures, setUnlinkingMeasures] = useState<
Record<string, boolean>
>({});
@@ -370,13 +370,13 @@ function ShowRiskViewContent({
>({});
// Setup mutation hooks
const [createRiskMesureMapping] =
useMutation<ShowRiskViewCreateRiskMesureMappingMutation>(
createRiskMesureMappingMutation
const [createRiskMeasureMapping] =
useMutation<ShowRiskViewCreateRiskMeasureMappingMutation>(
createRiskMeasureMappingMutation
);
const [deleteRiskMesureMapping] =
useMutation<ShowRiskViewDeleteRiskMesureMappingMutation>(
deleteRiskMesureMappingMutation
const [deleteRiskMeasureMapping] =
useMutation<ShowRiskViewDeleteRiskMeasureMappingMutation>(
deleteRiskMeasureMappingMutation
);
// Setup policy mutation hooks
@@ -391,13 +391,13 @@ function ShowRiskViewContent({
// Clear filters when dialog closes
useEffect(() => {
if (!isMesureDialogOpen) {
setMesureSearchQuery("");
if (!isMeasureDialogOpen) {
setMeasureSearchQuery("");
setCategoryFilter(null);
setLinkingMesures({});
setUnlinkingMesures({});
setLinkingMeasures({});
setUnlinkingMeasures({});
}
}, [isMesureDialogOpen]);
}, [isMeasureDialogOpen]);
// Clear filters when policy dialog closes
useEffect(() => {
@@ -408,30 +408,30 @@ function ShowRiskViewContent({
}
}, [isPolicyDialogOpen]);
// Load mesures data when needed
const loadMesuresData = useCallback(() => {
// Load measures data when needed
const loadMeasuresData = useCallback(() => {
if (!organizationId || !risk.id) return;
setIsLoadingMesures(true);
setIsLoadingMeasures(true);
// Fetch all mesures for the organization
fetchQuery<ShowRiskViewOrganizationMesuresQuery>(
// Fetch all measures for the organization
fetchQuery<ShowRiskViewOrganizationMeasuresQuery>(
environment,
organizationMesuresQuery,
organizationMeasuresQuery,
{
organizationId,
}
).subscribe({
next: (data) => {
setOrganizationMesuresData(data);
setIsLoadingMesures(false);
setOrganizationMeasuresData(data);
setIsLoadingMeasures(false);
},
error: (error: Error) => {
console.error("Error fetching organization mesures:", error);
setIsLoadingMesures(false);
console.error("Error fetching organization measures:", error);
setIsLoadingMeasures(false);
toast({
title: "Error",
description: "Failed to load mesures.",
description: "Failed to load measures.",
variant: "destructive",
});
},
@@ -469,49 +469,49 @@ function ShowRiskViewContent({
}, [risk.id, environment, organizationId, toast]);
// Helper functions
const getMesures = useCallback(() => {
if (!organizationMesuresData?.organization?.mesures?.edges) return [];
return organizationMesuresData.organization.mesures.edges.map(
const getMeasures = useCallback(() => {
if (!organizationMeasuresData?.organization?.measures?.edges) return [];
return organizationMeasuresData.organization.measures.edges.map(
(edge) => edge.node
);
}, [organizationMesuresData]);
}, [organizationMeasuresData]);
const getMesureCategories = useCallback(() => {
const mesures = getMesures();
const getMeasureCategories = useCallback(() => {
const measures = getMeasures();
const categories = new Set<string>();
mesures.forEach((mesure) => {
if (mesure.category) {
categories.add(mesure.category);
measures.forEach((measure) => {
if (measure.category) {
categories.add(measure.category);
}
});
return Array.from(categories).sort();
}, [getMesures]);
}, [getMeasures]);
const filteredMesures = useCallback(() => {
const mesures = getMesures();
if (!mesureSearchQuery && !categoryFilter) return mesures;
const filteredMeasures = useCallback(() => {
const measures = getMeasures();
if (!measureSearchQuery && !categoryFilter) return measures;
return mesures.filter((mesure) => {
return measures.filter((measure) => {
// Filter by search query
const matchesSearch =
!mesureSearchQuery ||
mesure.name.toLowerCase().includes(mesureSearchQuery.toLowerCase()) ||
(mesure.description &&
mesure.description
!measureSearchQuery ||
measure.name.toLowerCase().includes(measureSearchQuery.toLowerCase()) ||
(measure.description &&
measure.description
.toLowerCase()
.includes(mesureSearchQuery.toLowerCase()));
.includes(measureSearchQuery.toLowerCase()));
// Filter by category
const matchesCategory =
!categoryFilter ||
categoryFilter === "all" ||
mesure.category === categoryFilter;
measure.category === categoryFilter;
return matchesSearch && matchesCategory;
});
}, [getMesures, mesureSearchQuery, categoryFilter]);
}, [getMeasures, measureSearchQuery, categoryFilter]);
// Helper functions for policies
const getPolicies = useCallback(() => {
@@ -533,38 +533,38 @@ function ShowRiskViewContent({
});
}, [getPolicies, policySearchQuery]);
// Handle linking a mesure to this risk
const handleLinkMesure = useCallback(
// Handle linking a measure to this risk
const handleLinkMeasure = useCallback(
(
mesure: NonNullable<
measure: NonNullable<
NonNullable<
ShowRiskViewOrganizationMesuresQuery$data["organization"]
>["mesures"]
ShowRiskViewOrganizationMeasuresQuery$data["organization"]
>["measures"]
>["edges"][0]["node"]
) => {
if (!risk.id) return;
// Track this specific mesure as linking
setLinkingMesures((prev) => ({ ...prev, [mesure.id]: true }));
// Track this specific measure as linking
setLinkingMeasures((prev) => ({ ...prev, [measure.id]: true }));
createRiskMesureMapping({
createRiskMeasureMapping({
variables: {
input: {
riskId: risk.id,
mesureId: mesure.id,
measureId: measure.id,
},
},
onCompleted: (_, errors) => {
setLinkingMesures((prev) => ({
setLinkingMeasures((prev) => ({
...prev,
[mesure.id]: false,
[measure.id]: false,
}));
if (errors && errors.length > 0) {
console.error("Error linking mesure:", errors);
console.error("Error linking measure:", errors);
toast({
title: "Error",
description: "Failed to link mesure. Please try again.",
description: "Failed to link measure. Please try again.",
variant: "destructive",
});
return;
@@ -585,58 +585,58 @@ function ShowRiskViewContent({
toast({
title: "Success",
description: `Linked mesure "${mesure.name}" to this risk.`,
description: `Linked measure "${measure.name}" to this risk.`,
});
},
onError: (error) => {
setLinkingMesures((prev) => ({
setLinkingMeasures((prev) => ({
...prev,
[mesure.id]: false,
[measure.id]: false,
}));
console.error("Error linking mesure:", error);
console.error("Error linking measure:", error);
toast({
title: "Error",
description: "Failed to link mesure. Please try again.",
description: "Failed to link measure. Please try again.",
variant: "destructive",
});
},
});
},
[risk.id, createRiskMesureMapping, toast, environment, loadQuery]
[risk.id, createRiskMeasureMapping, toast, environment, loadQuery]
);
// Handle unlinking a mesure from this risk
const handleUnlinkMesure = useCallback(
// Handle unlinking a measure from this risk
const handleUnlinkMeasure = useCallback(
(
mesure: NonNullable<
measure: NonNullable<
NonNullable<
ShowRiskViewOrganizationMesuresQuery$data["organization"]
>["mesures"]
ShowRiskViewOrganizationMeasuresQuery$data["organization"]
>["measures"]
>["edges"][0]["node"]
) => {
if (!risk.id) return;
// Track this specific mesure as unlinking
setUnlinkingMesures((prev) => ({ ...prev, [mesure.id]: true }));
// Track this specific measure as unlinking
setUnlinkingMeasures((prev) => ({ ...prev, [measure.id]: true }));
deleteRiskMesureMapping({
deleteRiskMeasureMapping({
variables: {
input: {
riskId: risk.id,
mesureId: mesure.id,
measureId: measure.id,
},
},
onCompleted: (_, errors) => {
setUnlinkingMesures((prev) => ({
setUnlinkingMeasures((prev) => ({
...prev,
[mesure.id]: false,
[measure.id]: false,
}));
if (errors && errors.length > 0) {
console.error("Error unlinking mesure:", errors);
console.error("Error unlinking measure:", errors);
toast({
title: "Error",
description: "Failed to unlink mesure. Please try again.",
description: "Failed to unlink measure. Please try again.",
variant: "destructive",
});
return;
@@ -657,24 +657,24 @@ function ShowRiskViewContent({
toast({
title: "Success",
description: `Unlinked mesure "${mesure.name}" from this risk.`,
description: `Unlinked measure "${measure.name}" from this risk.`,
});
},
onError: (error) => {
setUnlinkingMesures((prev) => ({
setUnlinkingMeasures((prev) => ({
...prev,
[mesure.id]: false,
[measure.id]: false,
}));
console.error("Error unlinking mesure:", error);
console.error("Error unlinking measure:", error);
toast({
title: "Error",
description: "Failed to unlink mesure. Please try again.",
description: "Failed to unlink measure. Please try again.",
variant: "destructive",
});
},
});
},
[risk.id, deleteRiskMesureMapping, toast, environment, loadQuery]
[risk.id, deleteRiskMeasureMapping, toast, environment, loadQuery]
);
// Handle linking a policy to this risk
@@ -994,10 +994,10 @@ function ShowRiskViewContent({
{risk.residualLikelihood! * risk.residualImpact!})
</span>
{risk.treatment === "MITIGATED" &&
risk.mesures?.edges &&
risk.mesures.edges.length > 0 &&
` with ${risk.mesures.edges.length} ${
risk.mesures.edges.length === 1
risk.measures?.edges &&
risk.measures.edges.length > 0 &&
` with ${risk.measures.edges.length} ${
risk.measures.edges.length === 1
? "measure"
: "measures"
}`}
@@ -1022,53 +1022,53 @@ function ShowRiskViewContent({
</Card>
)}
<Tabs defaultValue="mesures" className="w-full">
<Tabs defaultValue="measures" className="w-full">
<TabsList>
<TabsTrigger value="mesures">Mesures</TabsTrigger>
<TabsTrigger value="measures">Measures</TabsTrigger>
<TabsTrigger value="policies">Policies</TabsTrigger>
<TabsTrigger value="controls">Controls</TabsTrigger>
</TabsList>
<TabsContent value="mesures" className="space-y-4">
<TabsContent value="measures" className="space-y-4">
<div className="flex justify-between items-center mb-4">
<h2 className="text-xl font-semibold">Risk Mesures</h2>
<h2 className="text-xl font-semibold">Risk Measures</h2>
<Button
onClick={() => {
setIsMesureDialogOpen(true);
loadMesuresData();
setIsMeasureDialogOpen(true);
loadMeasuresData();
}}
>
<Plus className="mr-2 h-4 w-4" />
Link Mesure
Link Measure
</Button>
</div>
{risk.mesures?.edges && risk.mesures.edges.length > 0 ? (
{risk.measures?.edges && risk.measures.edges.length > 0 ? (
<div className="rounded-md border">
<Table>
<TableHeader>
<TableRow>
<TableHead className="w-full">Mesure</TableHead>
<TableHead className="w-full">Measure</TableHead>
<TableHead className="w-20">Actions</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{risk.mesures?.edges.map(({ node: mesure }) => (
<TableRow key={mesure.id}>
{risk.measures?.edges.map(({ node: measure }) => (
<TableRow key={measure.id}>
<TableCell>
<Link
to={`/organizations/${organizationId}/mesures/${mesure.id}`}
to={`/organizations/${organizationId}/measures/${measure.id}`}
className="font-medium text-blue-600 hover:underline"
>
{mesure.name}
{measure.name}
</Link>
</TableCell>
<TableCell>
<Button
variant="ghost"
size="icon"
onClick={() => handleUnlinkMesure(mesure)}
disabled={unlinkingMesures[mesure.id] || false}
title="Unlink mesure"
onClick={() => handleUnlinkMeasure(measure)}
disabled={unlinkingMeasures[measure.id] || false}
title="Unlink measure"
>
<Trash2 className="h-4 w-4 text-danger" />
</Button>
@@ -1080,7 +1080,7 @@ function ShowRiskViewContent({
</div>
) : (
<div className="text-center py-10 text-secondary">
<p>No mesures associated with this risk.</p>
<p>No measures associated with this risk.</p>
</div>
)}
</TabsContent>
@@ -1189,15 +1189,15 @@ function ShowRiskViewContent({
</TabsContent>
</Tabs>
{/* Dialog for linking mesures */}
<Dialog open={isMesureDialogOpen} onOpenChange={setIsMesureDialogOpen}>
{/* Dialog for linking measures */}
<Dialog open={isMeasureDialogOpen} onOpenChange={setIsMeasureDialogOpen}>
<DialogContent className="max-w-3xl">
<DialogHeader>
<div className="flex justify-between items-center">
<div>
<DialogTitle>Manage Risk Mesures</DialogTitle>
<DialogTitle>Manage Risk Measures</DialogTitle>
<DialogDescription>
Link or unlink mesures to manage this risk.
Link or unlink measures to manage this risk.
</DialogDescription>
</div>
</div>
@@ -1209,10 +1209,10 @@ function ShowRiskViewContent({
<div className="relative">
<Search className="absolute left-2 top-2.5 h-4 w-4 text-tertiary" />
<Input
placeholder="Search mesures..."
placeholder="Search measures..."
className="pl-8"
value={mesureSearchQuery}
onChange={(e) => setMesureSearchQuery(e.target.value)}
value={measureSearchQuery}
onChange={(e) => setMeasureSearchQuery(e.target.value)}
/>
</div>
</div>
@@ -1227,7 +1227,7 @@ function ShowRiskViewContent({
</SelectTrigger>
<SelectContent>
<SelectItem value="all">All Categories</SelectItem>
{getMesureCategories().map((category) => (
{getMeasureCategories().map((category) => (
<SelectItem key={category} value={category}>
{category}
</SelectItem>
@@ -1237,35 +1237,35 @@ function ShowRiskViewContent({
</div>
<div className="border rounded-md max-h-96 overflow-y-auto">
{isLoadingMesures ? (
<div className="p-4 text-center">Loading mesures...</div>
) : filteredMesures().length === 0 ? (
<div className="p-4 text-center">No mesures found.</div>
{isLoadingMeasures ? (
<div className="p-4 text-center">Loading measures...</div>
) : filteredMeasures().length === 0 ? (
<div className="p-4 text-center">No measures found.</div>
) : (
<div className="divide-y">
{filteredMesures().map((mesure) => {
{filteredMeasures().map((measure) => {
// For each render, recalculate linked status directly against the current risk data
const isLinked = risk.mesures?.edges?.some(
(edge) => edge.node.id === mesure.id
const isLinked = risk.measures?.edges?.some(
(edge) => edge.node.id === measure.id
);
const isLinking = linkingMesures[mesure.id] || false;
const isUnlinking = unlinkingMesures[mesure.id] || false;
const isLinking = linkingMeasures[measure.id] || false;
const isUnlinking = unlinkingMeasures[measure.id] || false;
return (
<div
key={mesure.id}
key={measure.id}
className="relative p-4 hover:bg-blue-50 transition-colors duration-150"
>
<div className="flex justify-between items-center">
<div className="flex items-center gap-2">
<h3 className="font-medium">{mesure.name}</h3>
{mesure.category && (
<h3 className="font-medium">{measure.name}</h3>
{measure.category && (
<Badge
variant="outline"
className="text-xs font-normal"
>
<Tag className="h-3 w-3 mr-1" />
{mesure.category}
{measure.category}
</Badge>
)}
</div>
@@ -1274,7 +1274,7 @@ function ShowRiskViewContent({
size="sm"
variant="outline"
disabled={isUnlinking}
onClick={() => handleUnlinkMesure(mesure)}
onClick={() => handleUnlinkMeasure(measure)}
className="text-red-600 border-red-200 hover:bg-red-50"
>
{isUnlinking ? "Unlinking..." : "Unlink"}
@@ -1283,7 +1283,7 @@ function ShowRiskViewContent({
<Button
size="sm"
disabled={isLinking}
onClick={() => handleLinkMesure(mesure)}
onClick={() => handleLinkMeasure(measure)}
>
{isLinking ? "Linking..." : "Link"}
</Button>
@@ -1300,7 +1300,7 @@ function ShowRiskViewContent({
<DialogFooter>
<Button
variant="outline"
onClick={() => setIsMesureDialogOpen(false)}
onClick={() => setIsMeasureDialogOpen(false)}
>
Close
</Button>

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<f0234c8da839e9d7babc696edb1171aa>>
* @generated SignedSource<<42dea43217da18c2c1c44893753af2a0>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -278,15 +278,15 @@ return {
"value": 1
}
],
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -294,7 +294,7 @@ return {
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -308,7 +308,7 @@ return {
"storageKey": null
}
],
"storageKey": "mesures(first:1)"
"storageKey": "measures(first:1)"
},
(v7/*: any*/)
],
@@ -397,16 +397,16 @@ return {
]
},
"params": {
"cacheID": "398efd65ce3f24d13b357e8cf32c4f6e",
"cacheID": "2d35bb699b87877054e407eccb1c398b",
"id": null,
"metadata": {},
"name": "ListRiskViewPaginationQuery",
"operationKind": "query",
"text": "query ListRiskViewPaginationQuery(\n $after: CursorKey\n $before: CursorKey\n $first: Int\n $last: Int\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...ListRiskView_risks_pbnwq\n id\n }\n}\n\nfragment ListRiskView_risks_pbnwq on Organization {\n risks(first: $first, after: $after, last: $last, before: $before) {\n edges {\n node {\n id\n name\n inherentLikelihood\n inherentImpact\n residualLikelihood\n residualImpact\n treatment\n description\n category\n createdAt\n updatedAt\n owner {\n id\n fullName\n }\n mesures(first: 1) {\n edges {\n node {\n category\n id\n }\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n id\n}\n"
"text": "query ListRiskViewPaginationQuery(\n $after: CursorKey\n $before: CursorKey\n $first: Int\n $last: Int\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...ListRiskView_risks_pbnwq\n id\n }\n}\n\nfragment ListRiskView_risks_pbnwq on Organization {\n risks(first: $first, after: $after, last: $last, before: $before) {\n edges {\n node {\n id\n name\n inherentLikelihood\n inherentImpact\n residualLikelihood\n residualImpact\n treatment\n description\n category\n createdAt\n updatedAt\n owner {\n id\n fullName\n }\n measures(first: 1) {\n edges {\n node {\n category\n id\n }\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n id\n}\n"
}
};
})();
(node as any).hash = "3fc46af4f252617f4547c988184bb168";
(node as any).hash = "064cf25e6278fd29f1e474d9a65c6d18";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<d4fc01f5c38bce1054b2198af7e021f2>>
* @generated SignedSource<<c0daa0e600804b3750294c11acacec17>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -280,15 +280,15 @@ return {
"value": 1
}
],
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -296,7 +296,7 @@ return {
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -310,7 +310,7 @@ return {
"storageKey": null
}
],
"storageKey": "mesures(first:1)"
"storageKey": "measures(first:1)"
},
(v8/*: any*/)
],
@@ -399,12 +399,12 @@ return {
]
},
"params": {
"cacheID": "519139d7f492b8d719abf1b0e788853a",
"cacheID": "3e7d8e722a266ae4e1892ad472d29e69",
"id": null,
"metadata": {},
"name": "ListRiskViewQuery",
"operationKind": "query",
"text": "query ListRiskViewQuery(\n $organizationId: ID!\n $first: Int\n $after: CursorKey\n $last: Int\n $before: CursorKey\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ...ListRiskView_risks_pbnwq\n }\n}\n\nfragment ListRiskView_risks_pbnwq on Organization {\n risks(first: $first, after: $after, last: $last, before: $before) {\n edges {\n node {\n id\n name\n inherentLikelihood\n inherentImpact\n residualLikelihood\n residualImpact\n treatment\n description\n category\n createdAt\n updatedAt\n owner {\n id\n fullName\n }\n mesures(first: 1) {\n edges {\n node {\n category\n id\n }\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n id\n}\n"
"text": "query ListRiskViewQuery(\n $organizationId: ID!\n $first: Int\n $after: CursorKey\n $last: Int\n $before: CursorKey\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ...ListRiskView_risks_pbnwq\n }\n}\n\nfragment ListRiskView_risks_pbnwq on Organization {\n risks(first: $first, after: $after, last: $last, before: $before) {\n edges {\n node {\n id\n name\n inherentLikelihood\n inherentImpact\n residualLikelihood\n residualImpact\n treatment\n description\n category\n createdAt\n updatedAt\n owner {\n id\n fullName\n }\n measures(first: 1) {\n edges {\n node {\n category\n id\n }\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n id\n}\n"
}
};
})();

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<1dd4443afe99bdd114d082b0d175776d>>
* @generated SignedSource<<ff2ba5959c29398eb8e36b013c459b6b>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -23,7 +23,7 @@ export type ListRiskView_risks$data = {
readonly id: string;
readonly inherentImpact: number;
readonly inherentLikelihood: number;
readonly mesures: {
readonly measures: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;
@@ -247,15 +247,15 @@ return {
"value": 1
}
],
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -263,7 +263,7 @@ return {
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -276,7 +276,7 @@ return {
"storageKey": null
}
],
"storageKey": "mesures(first:1)"
"storageKey": "measures(first:1)"
},
{
"alias": null,
@@ -359,6 +359,6 @@ return {
};
})();
(node as any).hash = "3fc46af4f252617f4547c988184bb168";
(node as any).hash = "064cf25e6278fd29f1e474d9a65c6d18";
export default node;

View File

@@ -0,0 +1,93 @@
/**
* @generated SignedSource<<ac6b4af30ca3e03181512667a7ee6d76>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type CreateRiskMeasureMappingInput = {
measureId: string;
riskId: string;
};
export type ShowRiskViewCreateRiskMeasureMappingMutation$variables = {
input: CreateRiskMeasureMappingInput;
};
export type ShowRiskViewCreateRiskMeasureMappingMutation$data = {
readonly createRiskMeasureMapping: {
readonly success: boolean;
};
};
export type ShowRiskViewCreateRiskMeasureMappingMutation = {
response: ShowRiskViewCreateRiskMeasureMappingMutation$data;
variables: ShowRiskViewCreateRiskMeasureMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "CreateRiskMeasureMappingPayload",
"kind": "LinkedField",
"name": "createRiskMeasureMapping",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "success",
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ShowRiskViewCreateRiskMeasureMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ShowRiskViewCreateRiskMeasureMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "f9e85548eb6e6aeb601fc36f92803ab6",
"id": null,
"metadata": {},
"name": "ShowRiskViewCreateRiskMeasureMappingMutation",
"operationKind": "mutation",
"text": "mutation ShowRiskViewCreateRiskMeasureMappingMutation(\n $input: CreateRiskMeasureMappingInput!\n) {\n createRiskMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();
(node as any).hash = "6246bbb8af3e7c1a2e968eb5482c91ce";
export default node;

View File

@@ -0,0 +1,93 @@
/**
* @generated SignedSource<<2cf110e09c6e34e64c013c6fc260e918>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type DeleteRiskMeasureMappingInput = {
measureId: string;
riskId: string;
};
export type ShowRiskViewDeleteRiskMeasureMappingMutation$variables = {
input: DeleteRiskMeasureMappingInput;
};
export type ShowRiskViewDeleteRiskMeasureMappingMutation$data = {
readonly deleteRiskMeasureMapping: {
readonly success: boolean;
};
};
export type ShowRiskViewDeleteRiskMeasureMappingMutation = {
response: ShowRiskViewDeleteRiskMeasureMappingMutation$data;
variables: ShowRiskViewDeleteRiskMeasureMappingMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "DeleteRiskMeasureMappingPayload",
"kind": "LinkedField",
"name": "deleteRiskMeasureMapping",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "success",
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ShowRiskViewDeleteRiskMeasureMappingMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ShowRiskViewDeleteRiskMeasureMappingMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "76adf5d3867e6179bb11daeda4de9fc5",
"id": null,
"metadata": {},
"name": "ShowRiskViewDeleteRiskMeasureMappingMutation",
"operationKind": "mutation",
"text": "mutation ShowRiskViewDeleteRiskMeasureMappingMutation(\n $input: DeleteRiskMeasureMappingInput!\n) {\n deleteRiskMeasureMapping(input: $input) {\n success\n }\n}\n"
}
};
})();
(node as any).hash = "c51d0282a2d54bab88d56d9f2fdc9e49";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<1fdd1781c11f4c88aeb14ba52fc3e884>>
* @generated SignedSource<<55b3897717ff85153a57b02526644ab8>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,29 +9,29 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ShowRiskViewOrganizationMesuresQuery$variables = {
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type ShowRiskViewOrganizationMeasuresQuery$variables = {
organizationId: string;
};
export type ShowRiskViewOrganizationMesuresQuery$data = {
export type ShowRiskViewOrganizationMeasuresQuery$data = {
readonly organization: {
readonly id: string;
readonly mesures?: {
readonly measures?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MesureState;
readonly state: MeasureState;
};
}>;
};
};
};
export type ShowRiskViewOrganizationMesuresQuery = {
response: ShowRiskViewOrganizationMesuresQuery$data;
variables: ShowRiskViewOrganizationMesuresQuery$variables;
export type ShowRiskViewOrganizationMeasuresQuery = {
response: ShowRiskViewOrganizationMeasuresQuery$data;
variables: ShowRiskViewOrganizationMeasuresQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -67,7 +67,7 @@ v4 = [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -75,7 +75,7 @@ v4 = [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -161,7 +161,7 @@ return {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "ShowRiskViewOrganizationMesuresQuery",
"name": "ShowRiskViewOrganizationMeasuresQuery",
"selections": [
{
"alias": "organization",
@@ -176,11 +176,11 @@ return {
"kind": "InlineFragment",
"selections": [
{
"alias": "mesures",
"alias": "measures",
"args": null,
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "__Organization__mesures_connection",
"name": "__Organization__measures_connection",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": null
@@ -200,7 +200,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "ShowRiskViewOrganizationMesuresQuery",
"name": "ShowRiskViewOrganizationMeasuresQuery",
"selections": [
{
"alias": "organization",
@@ -218,21 +218,21 @@ return {
{
"alias": null,
"args": (v5/*: any*/),
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": (v4/*: any*/),
"storageKey": "mesures(first:100)"
"storageKey": "measures(first:100)"
},
{
"alias": null,
"args": (v5/*: any*/),
"filters": null,
"handle": "connection",
"key": "Organization__mesures",
"key": "Organization__measures",
"kind": "LinkedHandle",
"name": "mesures"
"name": "measures"
}
],
"type": "Organization",
@@ -244,7 +244,7 @@ return {
]
},
"params": {
"cacheID": "af9a0c71ad20ea7e65e3c625e30b00d8",
"cacheID": "8d3ef87f30b0db1a4805df59ff0703c8",
"id": null,
"metadata": {
"connection": [
@@ -254,18 +254,18 @@ return {
"direction": "forward",
"path": [
"organization",
"mesures"
"measures"
]
}
]
},
"name": "ShowRiskViewOrganizationMesuresQuery",
"name": "ShowRiskViewOrganizationMeasuresQuery",
"operationKind": "query",
"text": "query ShowRiskViewOrganizationMesuresQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n mesures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query ShowRiskViewOrganizationMeasuresQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n measures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "addb9873294354cedf28bc3262cb736a";
(node as any).hash = "23094414dbfa064d558c59163678d658";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<5d1745636bcff5f05d946bcd613463e5>>
* @generated SignedSource<<48d940f6040fa9375ac915ce8851c658>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -9,7 +9,7 @@
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type MesureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type MeasureState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED";
export type RiskTreatment = "ACCEPTED" | "AVOIDED" | "MITIGATED" | "TRANSFERRED";
export type ShowRiskViewQuery$variables = {
riskId: string;
@@ -32,7 +32,7 @@ export type ShowRiskViewQuery$data = {
readonly id: string;
readonly inherentImpact?: number;
readonly inherentLikelihood?: number;
readonly mesures?: {
readonly measures?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly category: string;
@@ -40,7 +40,7 @@ export type ShowRiskViewQuery$data = {
readonly description: string;
readonly id: string;
readonly name: string;
readonly state: MesureState;
readonly state: MeasureState;
};
}>;
};
@@ -224,7 +224,7 @@ v17 = [
{
"alias": null,
"args": null,
"concreteType": "MesureEdge",
"concreteType": "MeasureEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
@@ -232,7 +232,7 @@ v17 = [
{
"alias": null,
"args": null,
"concreteType": "Mesure",
"concreteType": "Measure",
"kind": "LinkedField",
"name": "node",
"plural": false,
@@ -377,11 +377,11 @@ return {
(v12/*: any*/),
(v13/*: any*/),
{
"alias": "mesures",
"alias": "measures",
"args": null,
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "__Risk__mesures_connection",
"name": "__Risk__measures_connection",
"plural": false,
"selections": (v17/*: any*/),
"storageKey": null
@@ -450,21 +450,21 @@ return {
{
"alias": null,
"args": (v20/*: any*/),
"concreteType": "MesureConnection",
"concreteType": "MeasureConnection",
"kind": "LinkedField",
"name": "mesures",
"name": "measures",
"plural": false,
"selections": (v17/*: any*/),
"storageKey": "mesures(first:100)"
"storageKey": "measures(first:100)"
},
{
"alias": null,
"args": (v20/*: any*/),
"filters": null,
"handle": "connection",
"key": "Risk__mesures",
"key": "Risk__measures",
"kind": "LinkedHandle",
"name": "mesures"
"name": "measures"
},
{
"alias": null,
@@ -514,7 +514,7 @@ return {
]
},
"params": {
"cacheID": "a88eba4c398c292d41deaddd1d77bb3b",
"cacheID": "487765d92cad8c0915ad4fee24d7e702",
"id": null,
"metadata": {
"connection": [
@@ -524,7 +524,7 @@ return {
"direction": "forward",
"path": [
"node",
"mesures"
"measures"
]
},
{
@@ -549,11 +549,11 @@ return {
},
"name": "ShowRiskViewQuery",
"operationKind": "query",
"text": "query ShowRiskViewQuery(\n $riskId: ID!\n) {\n node(id: $riskId) {\n __typename\n id\n ... on Risk {\n name\n description\n treatment\n owner {\n id\n fullName\n }\n inherentLikelihood\n inherentImpact\n residualLikelihood\n residualImpact\n note\n createdAt\n updatedAt\n mesures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n createdAt\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n policies(first: 100) {\n edges {\n node {\n id\n title\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
"text": "query ShowRiskViewQuery(\n $riskId: ID!\n) {\n node(id: $riskId) {\n __typename\n id\n ... on Risk {\n name\n description\n treatment\n owner {\n id\n fullName\n }\n inherentLikelihood\n inherentImpact\n residualLikelihood\n residualImpact\n note\n createdAt\n updatedAt\n measures(first: 100) {\n edges {\n node {\n id\n name\n description\n category\n createdAt\n state\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n policies(first: 100) {\n edges {\n node {\n id\n title\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n controls(first: 100) {\n edges {\n node {\n id\n referenceId\n name\n description\n createdAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "96158658ecb7c406fc969e086917c03e";
(node as any).hash = "b8506a3dd8980cd16b5344b990471533";
export default node;