diff --git a/client/src/api/histories.ts b/client/src/api/histories.ts index 65ad7e2d6b1d..9d3788a9505d 100644 --- a/client/src/api/histories.ts +++ b/client/src/api/histories.ts @@ -4,3 +4,6 @@ export const historiesFetcher = fetcher.path("/api/histories").method("get").cre export const archivedHistoriesFetcher = fetcher.path("/api/histories/archived").method("get").create(); export const undeleteHistory = fetcher.path("/api/histories/deleted/{history_id}/undelete").method("post").create(); export const purgeHistory = fetcher.path("/api/histories/{history_id}").method("delete").create(); + +export const sharing = fetcher.path("/api/histories/{history_id}/sharing").method("get").create(); +export const enableLink = fetcher.path("/api/histories/{history_id}/enable_link_access").method("put").create(); diff --git a/client/src/api/workflows.ts b/client/src/api/workflows.ts new file mode 100644 index 000000000000..ae5a054a6584 --- /dev/null +++ b/client/src/api/workflows.ts @@ -0,0 +1,4 @@ +import { fetcher } from "@/api/schema"; + +export const sharing = fetcher.path("/api/workflows/{id}/sharing").method("get").create(); +export const enableLink = fetcher.path("/api/workflows/{id}/enable_link_access").method("put").create(); diff --git a/client/src/components/Markdown/parse.ts b/client/src/components/Markdown/parse.ts index 900bbd3135db..3eb11ae54f89 100644 --- a/client/src/components/Markdown/parse.ts +++ b/client/src/components/Markdown/parse.ts @@ -77,3 +77,48 @@ export function getArgs(content: string) { content: content, }; } + +class ReferencedObjects { + jobs: Set = new Set(); + historyDatasets: Set = new Set(); + historyDatasetCollections: Set = new Set(); + workflows: Set = new Set(); + invocations: Set = new Set(); +} + +export function referencedObjects(markdown: string) { + const { sections } = splitMarkdown(markdown); + const objects = new ReferencedObjects(); + for (const section of sections) { + if (!("args" in section)) { + continue; + } + const args = section.args; + if (!args) { + continue; + } + if ("job_id" in args) { + addToSetIfHasValue(args.job_id, objects.jobs); + } + if ("history_dataset_id" in args) { + addToSetIfHasValue(args.history_dataset_id, objects.historyDatasets); + } + if ("history_dataset_collection_id" in args) { + addToSetIfHasValue(args.history_dataset_collection_id, objects.historyDatasetCollections); + } + if ("invocation_id" in args) { + addToSetIfHasValue(args.invocation_id, objects.invocations); + } + if ("workflow_id" in args) { + addToSetIfHasValue(args.workflow_id, objects.workflows); + } + // TODO: implicit collect job ids + } + return objects; +} + +function addToSetIfHasValue(value: string, toSet: Set): void { + if (value) { + toSet.add(value); + } +} diff --git a/client/src/components/PageEditor/ObjectPermissions.vue b/client/src/components/PageEditor/ObjectPermissions.vue new file mode 100644 index 000000000000..9e8aa15464ea --- /dev/null +++ b/client/src/components/PageEditor/ObjectPermissions.vue @@ -0,0 +1,267 @@ + + + diff --git a/client/src/components/PageEditor/ObjectPermissionsModal.vue b/client/src/components/PageEditor/ObjectPermissionsModal.vue new file mode 100644 index 000000000000..cb250f1884e6 --- /dev/null +++ b/client/src/components/PageEditor/ObjectPermissionsModal.vue @@ -0,0 +1,15 @@ + + + diff --git a/client/src/components/PageEditor/PageEditorMarkdown.vue b/client/src/components/PageEditor/PageEditorMarkdown.vue index 7ef80fe89225..e422a3c8855d 100644 --- a/client/src/components/PageEditor/PageEditorMarkdown.vue +++ b/client/src/components/PageEditor/PageEditorMarkdown.vue @@ -1,6 +1,20 @@