- - - - - - - - - - - {{ title }} - - - - - - - - - - {{ creating ? 'Creating...' : 'Create & Close' }} - - - - + + + + + + + + + + + {{ title }} + + + + + + + + + + + + + {{ creating ? 'Creating...' : 'Create & Close' }} + + + + + + + + + + + + + + + + + + + + We hit a snag + + + + + {{ error }} + + + + + - - + Enter an email address and the rest of the form will auto-populate. + + + + + * Email @@ -159,14 +249,15 @@ async function onCreateAndCloseClick() { - + + First Name @@ -188,7 +279,8 @@ async function onCreateAndCloseClick() { - + + @@ -197,7 +289,8 @@ async function onCreateAndCloseClick() { - + + Loading... @@ -213,8 +306,9 @@ async function onCreateAndCloseClick() { Role - + None + Loading... @@ -227,7 +321,8 @@ async function onCreateAndCloseClick() { - + + * Alias @@ -237,17 +332,29 @@ async function onCreateAndCloseClick() { - + + * Username + + + + + + + + Parts of the username are randomly generated to ensure uniqueness. + + - + + * Nickname @@ -257,7 +364,7 @@ async function onCreateAndCloseClick() { - + @@ -268,21 +375,20 @@ async function onCreateAndCloseClick() { - - - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/src/components/ToolLauncher.vue b/src/components/ToolLauncher.vue index 2331335..3043676 100644 --- a/src/components/ToolLauncher.vue +++ b/src/components/ToolLauncher.vue @@ -74,7 +74,14 @@ onMounted(() => { \ No newline at end of file diff --git a/src/components/modals/quick-create-user-settings/QuickCreateUserSettingsModal.vue b/src/components/modals/quick-create-user-settings/QuickCreateUserSettingsModal.vue new file mode 100644 index 0000000..fc501bf --- /dev/null +++ b/src/components/modals/quick-create-user-settings/QuickCreateUserSettingsModal.vue @@ -0,0 +1,119 @@ + + + + + + + + + + + + + Settings + + + + + Username Domain + + + + + + + + The default text to place after the @ symbol in the username. + + + + + + + + + + + + + + Get First/Last name from Email + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/modals/user-select/UserSelectModal.vue b/src/components/modals/user-select/UserSelectModal.vue index c67cdf2..3ac8d7b 100644 --- a/src/components/modals/user-select/UserSelectModal.vue +++ b/src/components/modals/user-select/UserSelectModal.vue @@ -4,7 +4,7 @@ import { ref } from 'vue'; import type User from '@/models/User'; import SearchLookup from '../../slds/SearchLookup.vue'; import SearchLookupItem from '@/components/slds/SearchLookupItem'; -import type Context from '@/models/context'; +import Context from '@/models/context'; import SalesforceRESTService from '@/services/salesforce-rest-service'; let restService: SalesforceRESTService; @@ -117,6 +117,8 @@ defineExpose<{ \ No newline at end of file diff --git a/src/components/slds/LightningToast.vue b/src/components/slds/LightningToast.vue new file mode 100644 index 0000000..7793097 --- /dev/null +++ b/src/components/slds/LightningToast.vue @@ -0,0 +1,60 @@ + + + + + + + {{ text }} + + + + + + \ No newline at end of file diff --git a/src/models/UserCreateForm.ts b/src/models/UserCreateForm.ts index f687716..381d5e5 100644 --- a/src/models/UserCreateForm.ts +++ b/src/models/UserCreateForm.ts @@ -2,7 +2,10 @@ export default class UserCreateForm { firstName = ''; lastName = ''; alias = ''; + email = ''; + emailValid = false; + username = ''; nickname = ''; federationIdentifier = ''; diff --git a/src/models/UserQuickCreateSettings.ts b/src/models/UserQuickCreateSettings.ts new file mode 100644 index 0000000..edc43a7 --- /dev/null +++ b/src/models/UserQuickCreateSettings.ts @@ -0,0 +1,4 @@ +export default class UserQuickCreateSettings { + usernameDomain = ''; + getFirstLastNameFromEmail = true; +} \ No newline at end of file diff --git a/src/services/salesforce-rest-service.ts b/src/services/salesforce-rest-service.ts index b08ce93..e1b5f37 100644 --- a/src/services/salesforce-rest-service.ts +++ b/src/services/salesforce-rest-service.ts @@ -22,7 +22,7 @@ export default class SalesforceRESTService { // } protected authFetch(requestUrl: URL, requestInfo: any = { method: 'GET' }): Promise { - const actualRequestUrl = requestUrl.toString().replace('+', '%20'); + const actualRequestUrl = requestUrl.toString().replace(/\+/g, '%20'); if (!requestInfo.headers) requestInfo.headers = {}; diff --git a/src/services/salesforce-tooling-service.ts b/src/services/salesforce-tooling-service.ts index 41fb323..8c57cbe 100644 --- a/src/services/salesforce-tooling-service.ts +++ b/src/services/salesforce-tooling-service.ts @@ -1,4 +1,4 @@ -import type ServiceResult from './result'; +import ServiceResult from './result'; export default class SalesforceToolingService { EXECUTE_ANONYMOUS_ENDPOINT = '/services/data/v58.0/tooling/executeAnonymous'; @@ -11,12 +11,11 @@ export default class SalesforceToolingService { this.sessionId = sessionId; } - protected authFetch(requestUrl: URL, requestInfo: any = { method: 'GET' }) { - const actualRequestUrl = requestUrl.toString().replace('+', '%20'); + protected authFetch(requestUrl: URL, requestInfo: any = { method: 'GET' }): Promise { + const actualRequestUrl = requestUrl.toString().replace(/\+/g, '%20'); - if (!requestInfo.headers) { + if (!requestInfo.headers) requestInfo.headers = {}; - } requestInfo.headers['Authorization'] = 'Bearer ' + this.sessionId return fetch(actualRequestUrl, requestInfo); diff --git a/src/services/salesforce-user-service.ts b/src/services/salesforce-user-service.ts index 66041c9..57169e1 100644 --- a/src/services/salesforce-user-service.ts +++ b/src/services/salesforce-user-service.ts @@ -14,17 +14,15 @@ export default class SalesforceUserService extends SalesforceRESTService { generateUsername(usernamePrefix?: string, domainPrefix?: string): string { let username = this.generateRandomString(5, false, true, true); if (usernamePrefix) { - username = `${usernamePrefix}-${username}`; + username = `${usernamePrefix}.${username}`; } let domain = this.generateRandomString(5, false, true, false); if (domainPrefix) { - domain = `${domainPrefix}-${domain}`; + domain = `${domainPrefix}.${domain}`; } - const tld = this.generateRandomString(3, false, true, false); - - return `${username}@${domain}.${tld}`; + return `${username}@${domain}`; } generateNickname(): string {