201 lines
16 KiB
Plaintext
201 lines
16 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/auth/LoginWithEmailBlock.vue");import { FormTextInput as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_2 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createVNode as __createVNode,createElementVNode as __createElementVNode,createElementBlock as __createElementBlock } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
|
|
function _interopVNode(vnode) {
|
|
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
|
|
const data = vnode.props['data-v-inspector']
|
|
delete vnode.props['data-v-inspector']
|
|
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
|
|
}
|
|
return vnode
|
|
}
|
|
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
/* Injection by vite-plugin-vue-inspector End */
|
|
import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { useForm } from "/_nuxt/node_modules/.cache/vite/client/deps/vee-validate.js?v=e4f18c29";
|
|
import { isEmail, isRequired } from "/_nuxt/lib/common/helpers/validation.ts";
|
|
import { ToastNotificationType, useGlobalToast } from "/_nuxt/lib/common/composables/toast.ts";
|
|
import { ensureError } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
|
|
import { useAuthManager } from "/_nuxt/lib/auth/composables/auth.ts";
|
|
import { forgottenPasswordRoute } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import { useMounted } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
|
|
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
|
|
|
|
import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "AuthLoginWithEmailBlock",
|
|
props: {
|
|
challenge: { type: String, required: true },
|
|
workspaceInvite: { type: Object, required: false }
|
|
},
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
graphql(`
|
|
fragment AuthLoginWithEmailBlock_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {
|
|
id
|
|
email
|
|
user {
|
|
id
|
|
}
|
|
}
|
|
`);
|
|
const props = __props;
|
|
const { handleSubmit, setValues } = useForm();
|
|
const loading = ref(false);
|
|
const emailRules = [isEmail];
|
|
const passwordRules = [isRequired];
|
|
const isMounted = useMounted();
|
|
const { loginWithEmail } = useAuthManager();
|
|
const { triggerNotification } = useGlobalToast();
|
|
const inviteEmail = computed(() => props.workspaceInvite?.email);
|
|
const isInviteForExistingUser = computed(() => !!props.workspaceInvite?.user);
|
|
const shouldForceInviteEmail = computed(
|
|
() => !!(inviteEmail.value && isInviteForExistingUser.value)
|
|
);
|
|
const onSubmit = handleSubmit(async ({ email, password }) => {
|
|
try {
|
|
loading.value = true;
|
|
await loginWithEmail({ email, password, challenge: props.challenge });
|
|
} catch (e) {
|
|
triggerNotification({
|
|
type: ToastNotificationType.Danger,
|
|
title: "Login failed",
|
|
description: `${ensureError(e).message}`
|
|
});
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
});
|
|
watch(
|
|
shouldForceInviteEmail,
|
|
(shouldForce) => {
|
|
if (shouldForce) {
|
|
setValues({ email: inviteEmail.value || "" });
|
|
}
|
|
},
|
|
{ immediate: true }
|
|
);
|
|
const __returned__ = { props, handleSubmit, setValues, loading, emailRules, passwordRules, isMounted, loginWithEmail, triggerNotification, inviteEmail, isInviteForExistingUser, shouldForceInviteEmail, onSubmit, get forgottenPasswordRoute() {
|
|
return forgottenPasswordRoute;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveComponent as _resolveComponent, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "flex flex-col space-y-2",
|
|
"data-v-inspector": "components/auth/LoginWithEmailBlock.vue:3:5"
|
|
};
|
|
const _hoisted_2 = {
|
|
class: "mt-1 text-center text-body-xs text-foreground-3 select-none",
|
|
"data-v-inspector": "components/auth/LoginWithEmailBlock.vue:39:5"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_FormTextInput = __nuxt_component_0;
|
|
const _component_FormButton = __nuxt_component_1;
|
|
const _component_NuxtLink = __nuxt_component_2;
|
|
return _openBlock(), _createElementBlock(
|
|
"form",
|
|
{
|
|
method: "post",
|
|
onSubmit: _cache[0] || (_cache[0] = (...args) => $setup.onSubmit && $setup.onSubmit(...args)),
|
|
"data-v-inspector": "components/auth/LoginWithEmailBlock.vue:2:3"
|
|
},
|
|
[
|
|
_createElementVNode("div", _hoisted_1, [
|
|
_createVNode(_component_FormTextInput, {
|
|
type: "email",
|
|
name: "email",
|
|
label: "E-mail",
|
|
placeholder: "Enter your email",
|
|
size: "lg",
|
|
color: "foundation",
|
|
rules: $setup.emailRules,
|
|
"show-label": "",
|
|
disabled: !!($setup.loading || $setup.shouldForceInviteEmail),
|
|
"auto-focus": "",
|
|
autocomplete: "email",
|
|
"data-v-inspector": "components/auth/LoginWithEmailBlock.vue:4:7"
|
|
}, null, 8, ["disabled"]),
|
|
_createVNode(_component_FormTextInput, {
|
|
type: "password",
|
|
name: "password",
|
|
label: "Password",
|
|
placeholder: "Enter your password",
|
|
color: "foundation",
|
|
size: "lg",
|
|
rules: $setup.passwordRules,
|
|
"show-label": "",
|
|
disabled: $setup.loading,
|
|
autocomplete: "current-password",
|
|
"data-v-inspector": "components/auth/LoginWithEmailBlock.vue:17:7"
|
|
}, null, 8, ["disabled"])
|
|
]),
|
|
_createVNode(_component_FormButton, {
|
|
size: "lg",
|
|
submit: "",
|
|
"full-width": "",
|
|
class: "mt-8 mb-4",
|
|
disabled: $setup.loading || !$setup.isMounted,
|
|
"data-v-inspector": "components/auth/LoginWithEmailBlock.vue:30:5"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[1] || (_cache[1] = [
|
|
_createTextVNode(
|
|
" Log in ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["disabled"]),
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_cache[3] || (_cache[3] = _createTextVNode(
|
|
" Forgot your password? ",
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createVNode(_component_NuxtLink, {
|
|
to: $setup.forgottenPasswordRoute,
|
|
class: "text-foreground",
|
|
"data-v-inspector": "components/auth/LoginWithEmailBlock.vue:41:7"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[2] || (_cache[2] = [
|
|
_createTextVNode(
|
|
" Reset password ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to"])
|
|
])
|
|
],
|
|
32
|
|
/* NEED_HYDRATION */
|
|
);
|
|
}
|
|
_sfc_main.__hmrId = "e562ee45";
|
|
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
|
|
import.meta.hot.on("file-changed", ({ file }) => {
|
|
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
|
|
});
|
|
import.meta.hot.accept((mod) => {
|
|
if (!mod) return;
|
|
const { default: updated, _rerender_only } = mod;
|
|
if (_rerender_only) {
|
|
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
|
|
} else {
|
|
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
|
|
}
|
|
});
|
|
import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper";
|
|
export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/auth/LoginWithEmailBlock.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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WUFGQztBQUFBLFlBRUQ7QUFBQTtBQUFBO0FBQUE7Ozs7TUFDQSxvQkFLTSxPQUxOLFlBS007QUFBQTtVQUxtSTtBQUFBLFVBRXZJO0FBQUE7QUFBQTtBQUFBLHFCQUVXO0FBQUEsVUFGQSxJQUFJO0FBQUEsVUFBd0IsT0FBTTtBQUFBLFVBQWtCLG9CQUFpQjtBQUFBOzRCQUErQyxNQUUvSDtBQUFBO2NBRitIO0FBQUEsY0FFL0g7QUFBQTtBQUFBO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkxvZ2luV2l0aEVtYWlsQmxvY2sudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8Zm9ybSBtZXRob2Q9XCJwb3N0XCIgQHN1Ym1pdD1cIm9uU3VibWl0XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpbldpdGhFbWFpbEJsb2NrLnZ1ZToyOjNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHNwYWNlLXktMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5XaXRoRW1haWxCbG9jay52dWU6Mzo1XCI+XHJcbiAgICAgIDxGb3JtVGV4dElucHV0XHJcbiAgICAgICAgdHlwZT1cImVtYWlsXCJcclxuICAgICAgICBuYW1lPVwiZW1haWxcIlxyXG4gICAgICAgIGxhYmVsPVwiRS1tYWlsXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZW1haWxcIlxyXG4gICAgICAgIHNpemU9XCJsZ1wiXHJcbiAgICAgICAgY29sb3I9XCJmb3VuZGF0aW9uXCJcclxuICAgICAgICA6cnVsZXM9XCJlbWFpbFJ1bGVzXCJcclxuICAgICAgICBzaG93LWxhYmVsXHJcbiAgICAgICAgOmRpc2FibGVkPVwiISEobG9hZGluZyB8fCBzaG91bGRGb3JjZUludml0ZUVtYWlsKVwiXHJcbiAgICAgICAgYXV0by1mb2N1c1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cImVtYWlsXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpbldpdGhFbWFpbEJsb2NrLnZ1ZTo0OjdcIlxyXG4gICAgICAvPlxyXG4gICAgICA8Rm9ybVRleHRJbnB1dFxyXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcclxuICAgICAgICBsYWJlbD1cIlBhc3N3b3JkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgcGFzc3dvcmRcIlxyXG4gICAgICAgIGNvbG9yPVwiZm91bmRhdGlvblwiXHJcbiAgICAgICAgc2l6ZT1cImxnXCJcclxuICAgICAgICA6cnVsZXM9XCJwYXNzd29yZFJ1bGVzXCJcclxuICAgICAgICBzaG93LWxhYmVsXHJcbiAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5XaXRoRW1haWxCbG9jay52dWU6MTc6N1wiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgIHNpemU9XCJsZ1wiXHJcbiAgICAgIHN1Ym1pdFxyXG4gICAgICBmdWxsLXdpZHRoXHJcbiAgICAgIGNsYXNzPVwibXQtOCBtYi00XCJcclxuICAgICAgOmRpc2FibGVkPVwibG9hZGluZyB8fCAhaXNNb3VudGVkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpbldpdGhFbWFpbEJsb2NrLnZ1ZTozMDo1XCJcclxuICAgID5cclxuICAgICAgTG9nIGluXHJcbiAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMSB0ZXh0LWNlbnRlciB0ZXh0LWJvZHkteHMgdGV4dC1mb3JlZ3JvdW5kLTMgc2VsZWN0LW5vbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luV2l0aEVtYWlsQmxvY2sudnVlOjM5OjVcIj5cclxuICAgICAgRm9yZ290IHlvdXIgcGFzc3dvcmQ/XHJcbiAgICAgIDxOdXh0TGluayA6dG89XCJmb3Jnb3R0ZW5QYXNzd29yZFJvdXRlXCIgY2xhc3M9XCJ0ZXh0LWZvcmVncm91bmRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luV2l0aEVtYWlsQmxvY2sudnVlOjQxOjdcIj5cclxuICAgICAgICBSZXNldCBwYXNzd29yZFxyXG4gICAgICA8L051eHRMaW5rPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAndmVlLXZhbGlkYXRlJ1xyXG5pbXBvcnQgeyBpc0VtYWlsLCBpc1JlcXVpcmVkIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3ZhbGlkYXRpb24nXHJcbmltcG9ydCB7IFRvYXN0Tm90aWZpY2F0aW9uVHlwZSwgdXNlR2xvYmFsVG9hc3QgfSBmcm9tICd+fi9saWIvY29tbW9uL2NvbXBvc2FibGVzL3RvYXN0J1xyXG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgdXNlQXV0aE1hbmFnZXIgfSBmcm9tICd+fi9saWIvYXV0aC9jb21wb3NhYmxlcy9hdXRoJ1xyXG5pbXBvcnQgeyBmb3Jnb3R0ZW5QYXNzd29yZFJvdXRlIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyB1c2VNb3VudGVkIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwnXHJcbmltcG9ydCB0eXBlIHsgQXV0aExvZ2luV2l0aEVtYWlsQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50IH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuXHJcbnR5cGUgRm9ybVZhbHVlcyA9IHsgZW1haWw6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9XHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBBdXRoTG9naW5XaXRoRW1haWxCbG9ja19QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xyXG4gICAgaWRcclxuICAgIGVtYWlsXHJcbiAgICB1c2VyIHtcclxuICAgICAgaWRcclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICBjaGFsbGVuZ2U6IHN0cmluZ1xyXG4gIHdvcmtzcGFjZUludml0ZT86IEF1dGhMb2dpbldpdGhFbWFpbEJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JGcmFnbWVudFxyXG59PigpXHJcblxyXG5jb25zdCB7IGhhbmRsZVN1Ym1pdCwgc2V0VmFsdWVzIH0gPSB1c2VGb3JtPEZvcm1WYWx1ZXM+KClcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGVtYWlsUnVsZXMgPSBbaXNFbWFpbF1cclxuY29uc3QgcGFzc3dvcmRSdWxlcyA9IFtpc1JlcXVpcmVkXVxyXG5cclxuY29uc3QgaXNNb3VudGVkID0gdXNlTW91bnRlZCgpXHJcbmNvbnN0IHsgbG9naW5XaXRoRW1haWwgfSA9IHVzZUF1dGhNYW5hZ2VyKClcclxuY29uc3QgeyB0cmlnZ2VyTm90aWZpY2F0aW9uIH0gPSB1c2VHbG9iYWxUb2FzdCgpXHJcblxyXG5jb25zdCBpbnZpdGVFbWFpbCA9IGNvbXB1dGVkKCgpID0+IHByb3BzLndvcmtzcGFjZUludml0ZT8uZW1haWwpXHJcbmNvbnN0IGlzSW52aXRlRm9yRXhpc3RpbmdVc2VyID0gY29tcHV0ZWQoKCkgPT4gISFwcm9wcy53b3Jrc3BhY2VJbnZpdGU/LnVzZXIpXHJcbmNvbnN0IHNob3VsZEZvcmNlSW52aXRlRW1haWwgPSBjb21wdXRlZChcclxuICAoKSA9PiAhIShpbnZpdGVFbWFpbC52YWx1ZSAmJiBpc0ludml0ZUZvckV4aXN0aW5nVXNlci52YWx1ZSlcclxuKVxyXG5cclxuY29uc3Qgb25TdWJtaXQgPSBoYW5kbGVTdWJtaXQoYXN5bmMgKHsgZW1haWwsIHBhc3N3b3JkIH0pID0+IHtcclxuICB0cnkge1xyXG4gICAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuICAgIGF3YWl0IGxvZ2luV2l0aEVtYWlsKHsgZW1haWwsIHBhc3N3b3JkLCBjaGFsbGVuZ2U6IHByb3BzLmNoYWxsZW5nZSB9KVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyLFxyXG4gICAgICB0aXRsZTogJ0xvZ2luIGZhaWxlZCcsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtlbnN1cmVFcnJvcihlKS5tZXNzYWdlfWBcclxuICAgIH0pXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxufSlcclxuXHJcbndhdGNoKFxyXG4gIHNob3VsZEZvcmNlSW52aXRlRW1haWwsXHJcbiAgKHNob3VsZEZvcmNlKSA9PiB7XHJcbiAgICBpZiAoc2hvdWxkRm9yY2UpIHtcclxuICAgICAgc2V0VmFsdWVzKHsgZW1haWw6IGludml0ZUVtYWlsLnZhbHVlIHx8ICcnIH0pXHJcbiAgICB9XHJcbiAgfSxcclxuICB7IGltbWVkaWF0ZTogdHJ1ZSB9XHJcbilcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2F1dGgvTG9naW5XaXRoRW1haWxCbG9jay52dWUifQ== |