;
input: UploadMeasureEvidenceInput;
};
-export type MeasureEvidencesTabUploadMutation$data = {
+export type CreateEvidenceDialogUploadMutation$data = {
readonly uploadMeasureEvidence: {
readonly evidenceEdge: {
readonly node: {
@@ -28,9 +28,9 @@ export type MeasureEvidencesTabUploadMutation$data = {
};
};
};
-export type MeasureEvidencesTabUploadMutation = {
- response: MeasureEvidencesTabUploadMutation$data;
- variables: MeasureEvidencesTabUploadMutation$variables;
+export type CreateEvidenceDialogUploadMutation = {
+ response: CreateEvidenceDialogUploadMutation$data;
+ variables: CreateEvidenceDialogUploadMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -66,7 +66,7 @@ return {
],
"kind": "Fragment",
"metadata": null,
- "name": "MeasureEvidencesTabUploadMutation",
+ "name": "CreateEvidenceDialogUploadMutation",
"selections": [
{
"alias": null,
@@ -118,7 +118,7 @@ return {
(v0/*: any*/)
],
"kind": "Operation",
- "name": "MeasureEvidencesTabUploadMutation",
+ "name": "CreateEvidenceDialogUploadMutation",
"selections": [
{
"alias": null,
@@ -215,16 +215,16 @@ return {
]
},
"params": {
- "cacheID": "facbff238f3ee10c220a5c80883836da",
+ "cacheID": "7070386f52341969556753a27d42e226",
"id": null,
"metadata": {},
- "name": "MeasureEvidencesTabUploadMutation",
+ "name": "CreateEvidenceDialogUploadMutation",
"operationKind": "mutation",
- "text": "mutation MeasureEvidencesTabUploadMutation(\n $input: UploadMeasureEvidenceInput!\n) {\n uploadMeasureEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n ...MeasureEvidencesTabFragment_evidence\n }\n }\n }\n}\n\nfragment MeasureEvidencesTabFragment_evidence on Evidence {\n id\n filename\n size\n type\n createdAt\n fileUrl\n mimeType\n}\n"
+ "text": "mutation CreateEvidenceDialogUploadMutation(\n $input: UploadMeasureEvidenceInput!\n) {\n uploadMeasureEvidence(input: $input) {\n evidenceEdge {\n node {\n id\n ...MeasureEvidencesTabFragment_evidence\n }\n }\n }\n}\n\nfragment MeasureEvidencesTabFragment_evidence on Evidence {\n id\n filename\n size\n type\n createdAt\n fileUrl\n mimeType\n}\n"
}
};
})();
-(node as any).hash = "37283c7d6f25ed8c768ba9e0f93ebafb";
+(node as any).hash = "719cce21cdff705c55dda3de31997a53";
export default node;
diff --git a/apps/console/src/pages/organizations/measures/tabs/MeasureEvidencesTab.tsx b/apps/console/src/pages/organizations/measures/tabs/MeasureEvidencesTab.tsx
index 711876514..bb918200c 100644
--- a/apps/console/src/pages/organizations/measures/tabs/MeasureEvidencesTab.tsx
+++ b/apps/console/src/pages/organizations/measures/tabs/MeasureEvidencesTab.tsx
@@ -5,23 +5,26 @@ import { usePageTitle } from "@probo/hooks";
import {
ActionDropdown,
DropdownItem,
- Dropzone,
IconArrowInbox,
+ IconPlusLarge,
IconTrashCan,
Tbody,
Td,
Th,
Thead,
Tr,
+ TrButton,
useConfirm,
+ useDialogRef,
} from "@probo/ui";
import { graphql } from "relay-runtime";
-import { useFragment, useMutation, useRefetchableFragment } from "react-relay";
+import { useFragment, useMutation, usePaginationFragment } from "react-relay";
import { SortableTable } from "/components/SortableTable";
import type { MeasureEvidencesTabFragment_evidence$key } from "./__generated__/MeasureEvidencesTabFragment_evidence.graphql";
import { fileSize, fileType, promisifyMutation, sprintf } from "@probo/helpers";
import { EvidencePreviewDialog } from "../dialog/EvidencePreviewDialog";
import { useOrganizationId } from "/hooks/useOrganizationId";
+import { CreateEvidenceDialog } from "../dialog/CreateEvidenceDialog";
export const evidencesFragment = graphql`
fragment MeasureEvidencesTabFragment on Measure
@@ -67,22 +70,6 @@ export const evidenceFragment = graphql`
}
`;
-const uploadEvidenceMutation = graphql`
- mutation MeasureEvidencesTabUploadMutation(
- $input: UploadMeasureEvidenceInput!
- $connections: [ID!]!
- ) {
- uploadMeasureEvidence(input: $input) {
- evidenceEdge @appendEdge(connections: $connections) {
- node {
- id
- ...MeasureEvidencesTabFragment_evidence
- }
- }
- }
- }
-`;
-
const deleteEvidenceMutation = graphql`
mutation MeasureEvidencesTabDeleteMutation(
$input: DeleteEvidenceInput!
@@ -99,58 +86,21 @@ export default function MeasureEvidencesTab() {
measure: MeasureEvidencesTabFragment$key & { id: string; name: string };
}>();
const { evidenceId } = useParams<{ evidenceId: string }>();
- const [data, refetch] = useRefetchableFragment(evidencesFragment, measure);
- const connectionId = data.evidences.__id;
- const evidences = data.evidences?.edges?.map((edge) => edge.node) ?? [];
+ const pagination = usePaginationFragment(evidencesFragment, measure);
+ const connectionId = pagination.data.evidences.__id;
+ const evidences =
+ pagination.data.evidences?.edges?.map((edge) => edge.node) ?? [];
const navigate = useNavigate();
const { __ } = useTranslate();
- const [mutate, isUpdating] = useMutation(uploadEvidenceMutation);
const evidence = evidences.find((e) => e.id === evidenceId);
const organizationId = useOrganizationId();
+ const dialogRef = useDialogRef();
usePageTitle(measure.name + " - " + __("Evidences"));
- const handleDrop = (files: File[]) => {
- for (const file of files) {
- mutate({
- variables: {
- connections: [connectionId],
- input: {
- measureId: measure.id,
- file: null,
- },
- },
- uploadables: {
- "input.file": file,
- },
- });
- }
- };
-
return (
-
-
+
| {__("Evidence name")} |
@@ -170,6 +120,13 @@ export default function MeasureEvidencesTab() {
connectionId={connectionId}
/>
))}
+ dialogRef.current?.open()}
+ icon={IconPlusLarge}
+ >
+ {__("Add evidence")}
+
{evidence && (
@@ -183,6 +140,11 @@ export default function MeasureEvidencesTab() {
evidence={evidence}
/>
)}
+
);
}
diff --git a/packages/ui/src/Atoms/Tabs/Tabs.tsx b/packages/ui/src/Atoms/Tabs/Tabs.tsx
index 5efefe0b2..399a05dc1 100644
--- a/packages/ui/src/Atoms/Tabs/Tabs.tsx
+++ b/packages/ui/src/Atoms/Tabs/Tabs.tsx
@@ -36,7 +36,7 @@ export function TabItem({
asChild,
active,
...props
-}: AsChildProps<{ active?: boolean }>) {
+}: AsChildProps<{ active?: boolean; onClick?: () => void }>) {
const Component = asChild ? Slot : "div";
return ;
}
diff --git a/packages/ui/src/Molecules/Field/Field.tsx b/packages/ui/src/Molecules/Field/Field.tsx
index 961de4535..e891db749 100644
--- a/packages/ui/src/Molecules/Field/Field.tsx
+++ b/packages/ui/src/Molecules/Field/Field.tsx
@@ -18,6 +18,7 @@ type Props =
| BaseProps>
| BaseProps<"text", ComponentProps>
| BaseProps<"email", ComponentProps>
+ | BaseProps<"url", ComponentProps>
| BaseProps<"password", ComponentProps>
| BaseProps<"textarea", ComponentProps>
| BaseProps<"number", ComponentProps>