158 lines
16 KiB
Plaintext
158 lines
16 KiB
Plaintext
import { graphql } from "/_nuxt/lib/common/generated/gql/gql.ts";
|
|
import {
|
|
SavedViewVisibility
|
|
} from "/_nuxt/lib/common/generated/gql/graphql.ts";
|
|
import { Globe, User } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
|
|
import { useMutationLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
|
|
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
|
|
import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
graphql(`
|
|
fragment UseSavedViewValidationHelpers_SavedView on SavedView {
|
|
id
|
|
isHomeView
|
|
visibility
|
|
permissions {
|
|
canUpdate {
|
|
...FullPermissionCheckResult
|
|
}
|
|
canMove {
|
|
...FullPermissionCheckResult
|
|
}
|
|
canEditTitle {
|
|
...FullPermissionCheckResult
|
|
}
|
|
canEditDescription {
|
|
...FullPermissionCheckResult
|
|
}
|
|
canSetAsHomeView {
|
|
...FullPermissionCheckResult
|
|
}
|
|
}
|
|
}
|
|
`);
|
|
export const useSavedViewValidationHelpers = (params) => {
|
|
const homeViewPrivateError = "A home view must be shared";
|
|
const isLoading = useMutationLoading();
|
|
const {
|
|
resources: {
|
|
response: { isFederatedView }
|
|
}
|
|
} = useInjectedViewerState();
|
|
const permissions = computed(() => params.view.value?.permissions);
|
|
const canUpdate = computed(() => permissions.value?.canUpdate);
|
|
const canMove = computed(() => permissions.value?.canMove);
|
|
const canEditTitle = computed(() => permissions.value?.canEditTitle);
|
|
const canEditDescription = computed(() => permissions.value?.canEditDescription);
|
|
const canEmbed = computed(() => {
|
|
if (isLoading.value) {
|
|
return {
|
|
authorized: false,
|
|
errorMessage: void 0,
|
|
code: "LOADING",
|
|
message: ""
|
|
};
|
|
}
|
|
if (params.view.value?.visibility !== SavedViewVisibility.Public) {
|
|
return {
|
|
authorized: false,
|
|
errorMessage: "Only shared views can be embedded",
|
|
code: "FORBIDDEN",
|
|
message: "Only shared views can be embedded"
|
|
};
|
|
}
|
|
return { authorized: true, code: "OK", message: "" };
|
|
});
|
|
const canOpenEditDialog = computed(
|
|
() => {
|
|
if (isLoading.value) {
|
|
return {
|
|
authorized: false,
|
|
errorMessage: void 0,
|
|
code: "LOADING",
|
|
message: ""
|
|
};
|
|
}
|
|
if (canUpdate.value?.authorized) return canUpdate.value;
|
|
if (canEditTitle.value?.authorized) return canEditTitle.value;
|
|
if (canEditDescription.value?.authorized) return canEditDescription.value;
|
|
if (canMove.value?.authorized) return canMove.value;
|
|
return canMove.value;
|
|
}
|
|
);
|
|
const isOnlyVisibleToMe = computed(
|
|
() => params.view.value?.visibility === SavedViewVisibility.AuthorOnly
|
|
);
|
|
const isHomeView = computed(() => params.view.value?.isHomeView);
|
|
const visibilityOptions = computed(() => [
|
|
{
|
|
value: SavedViewVisibility.Public,
|
|
title: "Shared",
|
|
introduction: "Visible to anyone with access to the model",
|
|
icon: Globe
|
|
},
|
|
{
|
|
value: SavedViewVisibility.AuthorOnly,
|
|
title: "Private",
|
|
introduction: "Visible only to the view author",
|
|
icon: User,
|
|
...params.view.value?.isHomeView ? {
|
|
disabled: true,
|
|
help: homeViewPrivateError
|
|
} : {}
|
|
}
|
|
]);
|
|
const canSetHomeView = computed(
|
|
() => {
|
|
if (!permissions.value?.canSetAsHomeView.authorized || isLoading.value) {
|
|
return {
|
|
authorized: false,
|
|
message: permissions.value?.canSetAsHomeView.errorMessage || void 0
|
|
};
|
|
}
|
|
if (isFederatedView.value) {
|
|
return {
|
|
authorized: false,
|
|
message: "Home view settings can't be updated while in a federated view"
|
|
};
|
|
}
|
|
return { authorized: true, message: void 0 };
|
|
}
|
|
);
|
|
const canToggleVisibility = computed(() => {
|
|
if (!canUpdate.value?.authorized || isLoading.value) {
|
|
return {
|
|
authorized: false,
|
|
message: canUpdate.value?.errorMessage || void 0
|
|
};
|
|
}
|
|
if (isHomeView.value && !isOnlyVisibleToMe.value) {
|
|
return {
|
|
authorized: false,
|
|
message: homeViewPrivateError
|
|
};
|
|
}
|
|
return { authorized: true, message: void 0 };
|
|
});
|
|
const validateVisibility = (value) => {
|
|
if (!params.view.value) return true;
|
|
if (!params.view.value.isHomeView) return true;
|
|
return value === SavedViewVisibility.AuthorOnly ? homeViewPrivateError : true;
|
|
};
|
|
return {
|
|
validateVisibility,
|
|
visibilityOptions,
|
|
canUpdate,
|
|
isOnlyVisibleToMe,
|
|
canSetHomeView,
|
|
isHomeView,
|
|
canToggleVisibility,
|
|
canMove,
|
|
canEditTitle,
|
|
canEditDescription,
|
|
canOpenEditDialog,
|
|
canEmbed
|
|
};
|
|
};
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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QU87QUFBQSxVQUNMLFlBQVk7QUFBQSxVQUNaLFNBQVMsWUFBWSxPQUFPLGlCQUFpQixnQkFBZ0I7QUFBQSxRQUMvRDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLGdCQUFnQixPQUFPO0FBQ3pCLGVBQU87QUFBQSxVQUNMLFlBQVk7QUFBQSxVQUNaLFNBQVM7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQUVBLGFBQU8sRUFBRSxZQUFZLE1BQU0sU0FBUyxPQUFVO0FBQUEsSUFDaEQ7QUFBQSxFQUNGO0FBRUEsUUFBTSxzQkFBc0IsU0FBUyxNQUFNO0FBQ3pDLFFBQUksQ0FBQyxVQUFVLE9BQU8sY0FBYyxVQUFVLE9BQU87QUFDbkQsYUFBTztBQUFBLFFBQ0wsWUFBWTtBQUFBLFFBQ1osU0FBUyxVQUFVLE9BQU8sZ0JBQWdCO0FBQUEsTUFDNUM7QUFBQSxJQUNGO0FBRUEsUUFBSSxXQUFXLFNBQVMsQ0FBQyxrQkFBa0IsT0FBTztBQUNoRCxhQUFPO0FBQUEsUUFDTCxZQUFZO0FBQUEsUUFDWixTQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFFQSxXQUFPLEVBQUUsWUFBWSxNQUFNLFNBQVMsT0FBVTtBQUFBLEVBQ2hELENBQUM7QUFLRCxRQUFNLHFCQUFtRSxDQUFDLFVBQVU7QUFDbEYsUUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFPLFFBQU87QUFDL0IsUUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLFdBQVksUUFBTztBQUUxQyxXQUFPLFVBQVUsb0JBQW9CLGFBQWEsdUJBQXVCO0FBQUEsRUFDM0U7QUFFQSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJ2YWxpZGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWF5YmVOdWxsT3JVbmRlZmluZWQsIE9wdGlvbmFsIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNWYWxpZGF0ZUZ1bmN0aW9uIH0gZnJvbSAndmVlLXZhbGlkYXRlJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3FsJ1xyXG5pbXBvcnQge1xyXG4gIFNhdmVkVmlld1Zpc2liaWxpdHksXHJcbiAgdHlwZSBGdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0RnJhZ21lbnQsXHJcbiAgdHlwZSBVc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdGcmFnbWVudFxyXG59IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IEdsb2JlLCBVc2VyIH0gZnJvbSAnbHVjaWRlLXZ1ZS1uZXh0J1xyXG5pbXBvcnQgdHlwZSB7IEZvcm1SYWRpb0dyb3VwSXRlbSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IHVzZU11dGF0aW9uTG9hZGluZyB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IHVzZUluamVjdGVkVmlld2VyU3RhdGUgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBVc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcclxuICAgIGlkXHJcbiAgICBpc0hvbWVWaWV3XHJcbiAgICB2aXNpYmlsaXR5XHJcbiAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgIGNhblVwZGF0ZSB7XHJcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICB9XHJcbiAgICAgIGNhbk1vdmUge1xyXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgfVxyXG4gICAgICBjYW5FZGl0VGl0bGUge1xyXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgfVxyXG4gICAgICBjYW5FZGl0RGVzY3JpcHRpb24ge1xyXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgfVxyXG4gICAgICBjYW5TZXRBc0hvbWVWaWV3IHtcclxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5leHBvcnQgY29uc3QgdXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnMgPSAocGFyYW1zOiB7XHJcbiAgdmlldzogQ29tcHV0ZWRSZWY8XHJcbiAgICBNYXliZU51bGxPclVuZGVmaW5lZDxVc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdGcmFnbWVudD5cclxuICA+XHJcbn0pID0+IHtcclxuICBjb25zdCBob21lVmlld1ByaXZhdGVFcnJvciA9ICdBIGhvbWUgdmlldyBtdXN0IGJlIHNoYXJlZCdcclxuXHJcbiAgY29uc3QgaXNMb2FkaW5nID0gdXNlTXV0YXRpb25Mb2FkaW5nKClcclxuICBjb25zdCB7XHJcbiAgICByZXNvdXJjZXM6IHtcclxuICAgICAgcmVzcG9uc2U6IHsgaXNGZWRlcmF0ZWRWaWV3IH1cclxuICAgIH1cclxuICB9ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcblxyXG4gIGNvbnN0IHBlcm1pc3Npb25zID0gY29tcHV0ZWQoKCkgPT4gcGFyYW1zLnZpZXcudmFsdWU/LnBlcm1pc3Npb25zKVxyXG4gIGNvbnN0IGNhblVwZGF0ZSA9IGNvbXB1dGVkKCgpID0+IHBlcm1pc3Npb25zLnZhbHVlPy5jYW5VcGRhdGUpXHJcbiAgY29uc3QgY2FuTW92ZSA9IGNvbXB1dGVkKCgpID0+IHBlcm1pc3Npb25zLnZhbHVlPy5jYW5Nb3ZlKVxyXG4gIGNvbnN0IGNhbkVkaXRUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHBlcm1pc3Npb25zLnZhbHVlPy5jYW5FZGl0VGl0bGUpXHJcbiAgY29uc3QgY2FuRWRpdERlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gcGVybWlzc2lvbnMudmFsdWU/LmNhbkVkaXREZXNjcmlwdGlvbilcclxuXHJcbiAgY29uc3QgY2FuRW1iZWQgPSBjb21wdXRlZCgoKTogRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdEZyYWdtZW50IHwgdW5kZWZpbmVkID0+IHtcclxuICAgIGlmIChpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBhdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICBlcnJvck1lc3NhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgICBjb2RlOiAnTE9BRElORycsXHJcbiAgICAgICAgbWVzc2FnZTogJydcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMudmlldy52YWx1ZT8udmlzaWJpbGl0eSAhPT0gU2F2ZWRWaWV3VmlzaWJpbGl0eS5QdWJsaWMpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBhdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICBlcnJvck1lc3NhZ2U6ICdPbmx5IHNoYXJlZCB2aWV3cyBjYW4gYmUgZW1iZWRkZWQnLFxyXG4gICAgICAgIGNvZGU6ICdGT1JCSURERU4nLFxyXG4gICAgICAgIG1lc3NhZ2U6ICdPbmx5IHNoYXJlZCB2aWV3cyBjYW4gYmUgZW1iZWRkZWQnXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBhdXRob3JpemVkOiB0cnVlLCBjb2RlOiAnT0snLCBtZXNzYWdlOiAnJyB9XHJcbiAgfSlcclxuXHJcbiAgY29uc3QgY2FuT3BlbkVkaXREaWFsb2cgPSBjb21wdXRlZChcclxuICAgICgpOiBGdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0RnJhZ21lbnQgfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgICBpZiAoaXNMb2FkaW5nLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBjb2RlOiAnTE9BRElORycsXHJcbiAgICAgICAgICBtZXNzYWdlOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNhblVwZGF0ZS52YWx1ZT8uYXV0aG9yaXplZCkgcmV0dXJuIGNhblVwZGF0ZS52YWx1ZVxyXG4gICAgICBpZiAoY2FuRWRpdFRpdGxlLnZhbHVlPy5hdXRob3JpemVkKSByZXR1cm4gY2FuRWRpdFRpdGxlLnZhbHVlXHJcbiAgICAgIGlmIChjYW5FZGl0RGVzY3JpcHRpb24udmFsdWU/LmF1dGhvcml6ZWQpIHJldHVybiBjYW5FZGl0RGVzY3JpcHRpb24udmFsdWVcclxuICAgICAgaWYgKGNhbk1vdmUudmFsdWU/LmF1dGhvcml6ZWQpIHJldHVybiBjYW5Nb3ZlLnZhbHVlXHJcbiAgICAgIHJldHVybiBjYW5Nb3ZlLnZhbHVlXHJcbiAgICB9XHJcbiAgKVxyXG5cclxuICBjb25zdCBpc09ubHlWaXNpYmxlVG9NZSA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gcGFyYW1zLnZpZXcudmFsdWU/LnZpc2liaWxpdHkgPT09IFNhdmVkVmlld1Zpc2liaWxpdHkuQXV0aG9yT25seVxyXG4gIClcclxuICBjb25zdCBpc0hvbWVWaWV3ID0gY29tcHV0ZWQoKCkgPT4gcGFyYW1zLnZpZXcudmFsdWU/LmlzSG9tZVZpZXcpXHJcblxyXG4gIC8qKlxyXG4gICAqIFZpc2liaWxpdHkgb3B0aW9ucyBmb3IgdmlzaWJpbGl0eSByYWRpbyBncm91cFxyXG4gICAqL1xyXG4gIGNvbnN0IHZpc2liaWxpdHlPcHRpb25zID0gY29tcHV0ZWQoKCk6IEZvcm1SYWRpb0dyb3VwSXRlbTxTYXZlZFZpZXdWaXNpYmlsaXR5PltdID0+IFtcclxuICAgIHtcclxuICAgICAgdmFsdWU6IFNhdmVkVmlld1Zpc2liaWxpdHkuUHVibGljLFxyXG4gICAgICB0aXRsZTogJ1NoYXJlZCcsXHJcbiAgICAgIGludHJvZHVjdGlvbjogJ1Zpc2libGUgdG8gYW55b25lIHdpdGggYWNjZXNzIHRvIHRoZSBtb2RlbCcsXHJcbiAgICAgIGljb246IEdsb2JlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogU2F2ZWRWaWV3VmlzaWJpbGl0eS5BdXRob3JPbmx5LFxyXG4gICAgICB0aXRsZTogJ1ByaXZhdGUnLFxyXG4gICAgICBpbnRyb2R1Y3Rpb246ICdWaXNpYmxlIG9ubHkgdG8gdGhlIHZpZXcgYXV0aG9yJyxcclxuICAgICAgaWNvbjogVXNlcixcclxuICAgICAgLi4uKHBhcmFtcy52aWV3LnZhbHVlPy5pc0hvbWVWaWV3XHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBoZWxwOiBob21lVmlld1ByaXZhdGVFcnJvclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDoge30pXHJcbiAgICB9XHJcbiAgXSlcclxuXHJcbiAgY29uc3QgY2FuU2V0SG9tZVZpZXcgPSBjb21wdXRlZChcclxuICAgICgpOiB7IGF1dGhvcml6ZWQ6IGJvb2xlYW47IG1lc3NhZ2U6IE9wdGlvbmFsPHN0cmluZz4gfSA9PiB7XHJcbiAgICAgIGlmICghcGVybWlzc2lvbnMudmFsdWU/LmNhblNldEFzSG9tZVZpZXcuYXV0aG9yaXplZCB8fCBpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICBtZXNzYWdlOiBwZXJtaXNzaW9ucy52YWx1ZT8uY2FuU2V0QXNIb21lVmlldy5lcnJvck1lc3NhZ2UgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNGZWRlcmF0ZWRWaWV3LnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgbWVzc2FnZTogXCJIb21lIHZpZXcgc2V0dGluZ3MgY2FuJ3QgYmUgdXBkYXRlZCB3aGlsZSBpbiBhIGZlZGVyYXRlZCB2aWV3XCJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7IGF1dGhvcml6ZWQ6IHRydWUsIG1lc3NhZ2U6IHVuZGVmaW5lZCB9XHJcbiAgICB9XHJcbiAgKVxyXG5cclxuICBjb25zdCBjYW5Ub2dnbGVWaXNpYmlsaXR5ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFjYW5VcGRhdGUudmFsdWU/LmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgbWVzc2FnZTogY2FuVXBkYXRlLnZhbHVlPy5lcnJvck1lc3NhZ2UgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNIb21lVmlldy52YWx1ZSAmJiAhaXNPbmx5VmlzaWJsZVRvTWUudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBhdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICBtZXNzYWdlOiBob21lVmlld1ByaXZhdGVFcnJvclxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgYXV0aG9yaXplZDogdHJ1ZSwgbWVzc2FnZTogdW5kZWZpbmVkIH1cclxuICB9KVxyXG5cclxuICAvKipcclxuICAgKiBWZWUtdmFsaWRhdGUgcnVsZSBmb3IgdmlzaWJpbGl0eSBjaGVja3NcclxuICAgKi9cclxuICBjb25zdCB2YWxpZGF0ZVZpc2liaWxpdHk6IEdlbmVyaWNWYWxpZGF0ZUZ1bmN0aW9uPFNhdmVkVmlld1Zpc2liaWxpdHk+ID0gKHZhbHVlKSA9PiB7XHJcbiAgICBpZiAoIXBhcmFtcy52aWV3LnZhbHVlKSByZXR1cm4gdHJ1ZVxyXG4gICAgaWYgKCFwYXJhbXMudmlldy52YWx1ZS5pc0hvbWVWaWV3KSByZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiB2YWx1ZSA9PT0gU2F2ZWRWaWV3VmlzaWJpbGl0eS5BdXRob3JPbmx5ID8gaG9tZVZpZXdQcml2YXRlRXJyb3IgOiB0cnVlXHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgdmFsaWRhdGVWaXNpYmlsaXR5LFxyXG4gICAgdmlzaWJpbGl0eU9wdGlvbnMsXHJcbiAgICBjYW5VcGRhdGUsXHJcbiAgICBpc09ubHlWaXNpYmxlVG9NZSxcclxuICAgIGNhblNldEhvbWVWaWV3LFxyXG4gICAgaXNIb21lVmlldyxcclxuICAgIGNhblRvZ2dsZVZpc2liaWxpdHksXHJcbiAgICBjYW5Nb3ZlLFxyXG4gICAgY2FuRWRpdFRpdGxlLFxyXG4gICAgY2FuRWRpdERlc2NyaXB0aW9uLFxyXG4gICAgY2FuT3BlbkVkaXREaWFsb2csXHJcbiAgICBjYW5FbWJlZFxyXG4gIH1cclxufVxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zYXZlZFZpZXdzL3ZhbGlkYXRpb24udHMifQ== |