{"version":3,"file":"bundle-3710bc52.chunk.js","sources":["../../src/elements/tbui/fileUploader/fileUploader.ts","../../src/elements/tbme/localState/localState.ts","../../src/elements/tbme/reactiveVarAdapter/reactiveVarAdapter.ts","../../src/elements/tbme/localization/localization.ts","../../src/elements/tbui/avatarUpload/avatarUpload.ts","../../src/shared/profileServices.ts","../../src/elements/tbtbc/communityData/state.ts","../../src/elements/tbme/localState/trailheadLocale.ts","../../src/elements/tbme/localState/urls.ts","../../src/elements/tbme/clientAdapter/cache.ts","../../src/gql/localSchema.ts","../../src/elements/tbme/clientAdapter/clientAdapter.ts","../../src/elements/tbme/logger/logger.ts","../../src/elements/tbme/queryAdapter/queryAdapter.ts","../../src/elements/tbme/avatar/query.ts","../../src/elements/tbme/iis/iis.ts","../../src/elements/tbme/avatar/avatar.ts","../../src/elements/tbme/profileEdit/form.ts","../../src/elements/tbme/profileEdit/query.ts","../../src/shared/feature.ts","../../src/elements/tbme/profileEdit/profileEdit.ts","../../src/elements/tbme/profileEdit/input.ts","../../src/elements/tbui/iconText/iconText.ts","../../src/elements/tbui/buttonIconText/buttonIconText.ts","../../src/elements/tbui/buttonIconTextLink/buttonIconTextLink.ts","../../src/elements/tbui/buttonStateful/buttonStateful.ts","../../src/elements/tbtbc/communityData/queryUtils.ts","../../src/elements/tbme/legacyApexBridge/legacyApexBridge.ts","../../src/shared/memoize.ts","../../src/elements/tbtbc/communityData/fetchUsers.ts","../../src/elements/tbtbc/communityData/followActions.ts","../../src/elements/tbtbc/followButton/followButton.ts","../../src/elements/tbme/profilePage/componentTracker.ts","../../src/gql/tbcSchema.ts","../../src/elements/tbtbc/clientAdapter/clientAdapter.ts","../../src/elements/tbme/profilePage/contexts/currentUser.ts","../../src/elements/tbme/profilePage/contexts/appLauncherItems.ts","../../src/elements/tbme/profilePage/contexts/profileUser.ts","../../src/elements/tbme/profilePage/contexts/locale.ts","../../src/elements/tbme/profilePage/contexts/localeOptions.ts","../../src/elements/tbme/profilePage/contexts/chassis.ts","../../src/elements/tbme/profilePage/context.ts","../../src/elements/tbme/profilePage/contexts/assets.ts","../../src/elements/tbme/profilePage/contexts/footerLinks.ts","../../src/elements/tbme/profilePage/contexts/baseUrl.ts","../../src/elements/tbme/profilePage/contexts/trailheadUrlState.ts","../../src/elements/tbtbc/communityData/fetchCommunityStats.ts","../../src/elements/tbtbc/communityData/fetchConnections.ts","../../src/elements/tbtbc/communityData/communityData.ts","../../src/elements/tbtbc/userActions/userActions.ts","../../src/elements/tbui/card/card.ts","../../src/elements/tbme/aboutMe/aboutMe.ts","../../src/elements/tbme/aboutMe/images/dotme.svg","../../src/elements/tbme/clientProvider/clientProvider.ts","../../src/elements/tbme/mockProvider/mockClient.ts","../../src/elements/tbme/socialLinks/socialLinks.ts","../../src/elements/tbme/followButton/query.ts","../../src/elements/tbtbc/queryAdapter/queryAdapter.ts","../../src/elements/tbme/followButton/mutation.ts","../../src/elements/tbme/followButton/followButton.ts","../../src/elements/tbme/userActions/query.ts","../../src/elements/tbme/userActions/userActions.ts","../../src/shared/experienceApi.ts","../../src/elements/tbme/careerMarketplace/careerMarketplace.ts","../../src/shared/analytics.ts","../../src/elements/tbme/aboutMyself/query.ts","../../src/shared/aura.ts","../../src/shared/lit/auraComponent.ts","../../src/shared/lit/withContext.ts","../../src/elements/tbme/profilePage/legacyComponents.ts","../../src/elements/tbme/profilePage/legacyEvents.ts","../../src/elements/tbme/profilePage/profilePage.ts","../../src/elements/tbme/aboutMyself/aboutMyself.ts","../../src/elements/tbme/aboutMyself/images/salesforce-icon.svg","../../src/elements/tbui/communityBanner/communityBanner.ts","../../src/elements/tbui/tally/tally.ts","../../src/elements/tbme/connections/query.ts","../../src/elements/tbme/connections/connections.ts","../../src/elements/tbtbc/clientProvider/clientProvider.ts","../../src/elements/tbtbc/mockProvider/mockClient.ts","../../src/elements/tbui/cardFooterLink/cardFooterLink.ts","../../src/elements/tbme/files/query.ts","../../src/elements/tbme/files/files.ts","../../src/elements/tbui/pageFooter/pageFooter.ts","../../src/elements/tbme/footer/footer.ts","../../src/elements/tbme/mvp/query.ts","../../src/elements/tbme/mvp/mvp.ts","../../src/elements/tbui/stayInBounds/stayInBounds.ts","../../src/elements/tbui/popover/popover.ts","../../src/elements/tbui/privateProfileBanner/privateProfileBanner.ts","../../src/elements/tbui/privateProfile/privateProfile.ts","../../src/elements/tbui/profileLayout/profileLayout.ts","../../src/elements/tbme/header/query.ts","../../src/elements/tbme/header/header.ts","../../src/elements/tbui/pageLayout/pageLayout.ts","../../src/elements/tbui/badge/badge.ts","../../src/elements/tbui/progressAvatar/progressAvatar.ts","../../src/elements/tbui/learnerStatusLevel/learnerStatusLevel.ts","../../src/elements/tbme/rank/query.ts","../../src/elements/tbme/rank/rank.ts","../../src/elements/tbui/skillsRing/skillsRing.ts","../../src/elements/tbui/skillButton/skillButton.ts","../../src/elements/tbui/skillsChart/skillsChart.ts","../../src/elements/tbme/skills/query.ts","../../src/elements/tbme/skills/skills.ts","../../src/elements/tbui/emptyItem/emptyItem.ts","../../src/gql/types.ts","../../src/gql/fragments/PageInfoBidirectional.ts","../../src/elements/tbme/profileBadges/query.ts","../../src/elements/tbme/profileBadges/profileBadges.ts","../../src/elements/tbme/profileBadges/emptyBadges.ts","../../src/elements/tbtbc/noActivity/noActivity.ts","../../src/elements/tbtbc/questionsAndAnswers/query.ts","../../src/elements/tbtbc/questionsAndAnswers/questionsAndAnswers.ts","../../src/elements/tbtbc/questionsAndAnswers/assets/trophy.svg","../../src/elements/tbtbc/connections/connections.ts","../../src/elements/tbme/mockProvider/mockProvider.ts","../../src/elements/tbme/profileMetadata/profileMetadata.ts","../../src/elements/tbui/emptySuperbadgeItem/emptySuperbadgeItem.ts","../../src/elements/tbui/superbadgeItem/superbadgeItem.ts","../../src/elements/tbme/superbadges/superbadges.ts","../../src/elements/tbui/communityTag/communityTag.ts","../../src/elements/tbui/communityTagModal/communityTagModal.ts","../../src/elements/tbui/duelingPicklist/keyboard.ts","../../src/elements/tbui/duelingPicklist/duelingPicklist.ts","../../src/elements/tbme/communityTagsEdit/communityTagsEdit.ts","../../src/elements/tbme/communityTags/query.ts","../../src/elements/tbme/communityTags/mutation.ts","../../src/elements/tbme/communityTags/communityTags.ts","../../src/elements/tbui/hireMeBanner/hireMeBanner.ts","../../src/elements/tbui/certificationMessage/certificationMessage.ts","../../src/elements/tbui/certificationItem/certificationItem.ts","../../src/elements/tbui/certificationsGroup/certificationsGroup.ts","../../src/elements/tbme/certifications/query.ts","../../src/elements/tbme/certifications/certifications.ts","../../src/elements/tbui/userDetailItem/userDetailItem.ts","../../src/elements/tbme/userDetails/query.ts","../../src/elements/tbme/userDetails/userDetails.ts","../../src/elements/tbtbc/files/files.ts","../../src/elements/tbme/questionsAndAnswers/query.ts","../../src/elements/tbme/questionsAndAnswers/questionsAndAnswers.ts","../../src/elements/tbme/questionsAndAnswers/assets/trophy.svg","../../src/elements/tbme/mockTbtbcProvider/mockTbtbcProvider.ts","../../src/elements/tbme/chassisProfileMetadata/query.ts","../../src/elements/tbme/chassisProfileMetadata/chassisProfileMetadata.ts","../../src/elements/tbme/iisModuleAdapter/iisModuleAdapter.ts","../../src/modules/tbme-profile.ts"],"sourcesContent":["import { api, LightningElement, wire } from \"lwc\";\n\nexport default class extends LightningElement {\n @api buttonText!: string;\n @api additionalText!: string;\n @api acceptedFileTypes!: string;\n @api errorText!: string;\n\n private handleFileUpload(event: CustomEvent) {\n let files = (event.currentTarget as HTMLInputElement).files;\n this.dispatchEvent(\n new CustomEvent(\"filechange\", {\n composed: true,\n bubbles: true,\n detail: { files: files },\n })\n );\n }\n\n private handleDragOver(event: CustomEvent) {\n event.preventDefault();\n const el = this.template.querySelector('[data-id=\"dropzone\"]')!;\n if (!el.classList.contains(\"dragged-over\")) {\n el.classList.add(\"dragged-over\");\n }\n }\n\n private handleDragLeave(event: CustomEvent) {\n event.preventDefault();\n const el = this.template.querySelector('[data-id=\"dropzone\"]')!;\n if (el.classList.contains(\"dragged-over\")) {\n el.classList.remove(\"dragged-over\");\n }\n }\n}\n","import { makeVar } from \"@apollo/client\";\nimport { api, LightningElement } from \"lwc\";\nimport { Locale } from \"tbme/localization\";\nimport { FooterLink } from \"../../tbui/pageFooter/types\";\nimport {\n AppLauncherItem,\n User,\n LocalProfile,\n SiteInfo,\n LocaleOption,\n MenuOption,\n} from \"./types\";\n\nimport { ChassisContext } from \"../profilePage/types\";\n\nexport const appLauncherItems = makeVar([]);\nexport const currentUser = makeVar(null);\nexport const profileUser = makeVar(null);\n\nexport const isSelf = (): boolean => {\n return !!(currentUser() && profileUser() && currentUser()?.id === profileUser()?.id);\n}\nexport const isPublic = (): boolean => {\n return !!(isSelf() || (profileUser() && profileUser()?.isPublicProfile));\n}\n\n/** Shared URL Variables */\nexport const baseUrl = makeVar(\n (window.sfdcBase?.exp || process.env.USE_DIGITAL_PROFILE_URLS === \"true\"\n ? process.env.DIGITAL_PROFILE_BASE_URL\n : process.env.TBME_BASE_URL) || \"\"\n);\nexport const assetsUrl = makeVar(process.env.ASSETS_URL || \"\");\n\nexport const defaultTrailheadUrl = \"https://trailhead.salesforce.com\";\n\nexport const trailheadUrl = makeVar(\n process.env.TRAILHEAD_URL || defaultTrailheadUrl\n);\n\nexport const locale = makeVar(\"en\");\n\nexport const siteInfo = makeVar>({\n name: process.env.TBME_SITE_NAME!,\n logoUrl: process.env.TBME_LOGO_URL!,\n});\n\nexport const tbcCurrentUserId = makeVar(null);\nexport const tbcProfileUserId = makeVar(null);\n\nexport const localeOptions = makeVar([\n { label: \"English\", value: \"en\" },\n { label: \"Français\", value: \"fr\" },\n { label: \"Deutsch\", value: \"de\" },\n { label: \"日本語\", value: \"ja\" },\n { label: \"Português (Brasil)\", value: \"pt-BR\" },\n { label: \"Español (LATAM)\", value: \"es-MX\" },\n { label: \"한국어\", value: \"ko\" },\n { label: \"[中文(简体)]'介引]\", value: \"zh-CN\" },\n]);\n\nexport const footerLinks = makeVar([\n {\n label: \"Privacy Statement\",\n href: \"https://salesforce.com/company/privacy\",\n image: null,\n },\n {\n label: \"Terms of Use\",\n href: \"https://trailblazer.me/terms?lang=en\",\n image: null,\n },\n {\n label: \"Use of Cookies\",\n href: \"https://www.salesforce.com/company/privacy/full_privacy/#nav_info\",\n image: null,\n },\n {\n label: \"Trust\",\n href: \"https://trust.salesforce.com/\",\n image: null,\n },\n {\n label: \"Accessibility\",\n href:\n \"https://trailhead.salesforce.com/help?article=Trailhead-Accessibility\",\n image: null,\n },\n {\n label: \"Help\",\n href: \"https://trailhead.salesforce.com/help\",\n image: null,\n },\n {\n label: \"Your Privacy Choices\",\n href: \"https://www.salesforce.com/form/other/privacy-request\",\n image: \"privacychoices.svg\",\n },\n]);\n\nexport const chassis = makeVar(null);\nexport const isRenderProfileChassis = makeVar(false);\n\n/**\n * This \"element\" provides an interface for setting localState variables from markup. This has utility in stories and\n * other scenarios such as a standalone footer component with data arbitrarily set by the template.\n */\nexport default class LocalState extends LightningElement {\n @api\n get profileUser() {\n return profileUser();\n }\n set profileUser(value: LocalProfile | null) {\n profileUser(value);\n }\n\n @api\n get currentUser() {\n return currentUser();\n }\n set currentUser(value: User | null) {\n currentUser(value);\n }\n\n @api\n get baseUrl() {\n return baseUrl();\n }\n set baseUrl(value: string) {\n baseUrl(value);\n }\n\n @api\n get assetsUrl() {\n return assetsUrl();\n }\n set assetsUrl(value: string) {\n assetsUrl(value);\n }\n\n @api\n get trailheadUrl() {\n return trailheadUrl();\n }\n set trailheadUrl(value: string) {\n trailheadUrl(value);\n }\n\n @api\n get locale() {\n return locale();\n }\n set locale(value: Locale) {\n locale(value);\n }\n\n @api\n get siteInfo() {\n return siteInfo();\n }\n set siteInfo(value: Partial) {\n siteInfo(value);\n }\n\n @api\n get tbcCurrentUserId() {\n return tbcCurrentUserId();\n }\n set tbcCurrentUserId(value: string | null) {\n tbcCurrentUserId(value);\n }\n\n @api\n get tbcProfileUserId() {\n return tbcProfileUserId();\n }\n set tbcProfileUserId(value: string | null) {\n tbcProfileUserId(value);\n }\n\n @api\n get localeOptions() {\n return localeOptions();\n }\n set localeOptions(value: LocaleOption[]) {\n localeOptions(value);\n }\n\n @api\n get footerLinks() {\n return footerLinks();\n }\n set footerLinks(value: FooterLink[]) {\n footerLinks(value);\n }\n\n @api\n get chassis() {\n return chassis();\n }\n set chassis(value: ChassisContext | null) {\n if (!value) {\n chassis(null);\n } else {\n // We are doing this spread dance to avoid mutating state.\n // ChassisContext is a complex type with nested objects and some not nullable fields at all levels ...\n chassis({\n ...value,\n profile: {\n ...value.profile,\n company: { ...value.profile?.company },\n ...(value.profile?.address && { ...value.profile.address }),\n },\n });\n }\n }\n\n @api\n get isRenderProfileChassis() {\n return isRenderProfileChassis();\n }\n set isRenderProfileChassis(value: boolean) {\n isRenderProfileChassis(value);\n }\n}\n","import { ReactiveVar } from \"@apollo/client\";\nimport { ReactiveListener } from \"@apollo/client/cache/inmemory/reactiveVars\";\nimport { WireAdapter } from \"lwc\";\n\nexport interface ReactiveVarAdapterConfig {\n var: ReactiveVar;\n}\n\nexport interface ReactiveVarAdapterContext {\n var: ReactiveVar;\n}\n\ntype Unsubscriber = () => void;\n\nconst unsubscribers: WeakMap, Unsubscriber[]> = new WeakMap();\n\nexport function subscribeToVar(\n reactiveVar: ReactiveVar,\n listener: ReactiveListener\n) {\n if (!unsubscribers.has(reactiveVar)) {\n unsubscribers.set(reactiveVar, []);\n }\n\n let unsubs = unsubscribers.get(reactiveVar) as Unsubscriber[];\n let unsubscriber: Unsubscriber;\n\n const unsubscribe = () => unsubscriber && unsubscriber();\n\n unsubscribers.set(reactiveVar, [...unsubs, unsubscribe]);\n\n const onNextChange = (value: T) => {\n listener(value);\n unsubscriber = reactiveVar.onNextChange(onNextChange);\n };\n\n reactiveVar.onNextChange(onNextChange);\n\n return unsubscribe;\n}\n\nexport function unsubscribeAll(reactiveVar: ReactiveVar) {\n const unsubs = unsubscribers.get(reactiveVar);\n\n while (unsubs && unsubs.length) {\n const unsub = unsubs.pop();\n unsub && unsub();\n }\n\n unsubscribers.set(reactiveVar, []);\n}\n\nexport class ReactiveVarAdapter\n implements\n WireAdapter, ReactiveVarAdapterContext> {\n constructor(public setValue: (value: T) => void) {}\n\n private reactiveVar?: ReactiveVar;\n private unsubscribe?: () => void;\n\n update(config: ReactiveVarAdapterConfig) {\n if (!this.reactiveVar) {\n this.reactiveVar = config.var;\n\n this.setValue(this.reactiveVar());\n this.unsubscribe = subscribeToVar(this.reactiveVar, (value: T) => {\n this.setValue(value);\n });\n } else if (this.reactiveVar !== config.var) {\n this.disconnect();\n this.update(config);\n }\n }\n connect() {}\n disconnect() {\n if (this.unsubscribe) {\n this.reactiveVar = undefined;\n this.unsubscribe();\n }\n }\n}\n","import i18n from \"i18n-js\";\nimport * as defaultLocales from \"./locales\";\nimport { WireAdapter } from \"lwc\";\nimport { locale } from \"tbme/localState\";\nimport isEqual from \"lodash/isEqual\";\nimport set from \"lodash/set\";\nimport { subscribeToVar } from \"../reactiveVarAdapter/reactiveVarAdapter\";\nimport { setLocale } from \"@devforce/trailhead-client-locale\";\n\nexport type Locale = string;\nexport interface LabelAdapterConfig extends i18n.TranslateOptions {\n labelKey: string;\n}\n\n// The translate function, t, doesn't return an empty string\n// if it can't translate the provided key. Instead, it returns\n// a string indicating the translation is missing in the\n// following format: [missing \"$LANG.$MODULE.$KEY\" translation]\nexport const TRANSLATION_MISSING_MESSAGE = \"[missing\";\n\nexport interface LegacyLabelAdaperConfig {\n labelKey: string;\n scope?: string | string[];\n [k: number]: any;\n}\n\nexport interface MultiLabelConfigItem\n extends LabelAdapterConfig,\n LegacyLabelAdaperConfig {\n formattingType?: \"standard\" | \"legacy\";\n aliasKey?: string;\n}\n\nexport interface MultiLabelAdapterConfig {\n labels: (MultiLabelConfigItem | string)[];\n}\n\nexport type LabelDefinition = {\n value?: string;\n one?: string;\n other?: string;\n zero?: string;\n _description?: string;\n};\n\nexport type LabelDefinitions = {\n [key: string]: { [k: string]: LabelDefinition } | LabelDefinition;\n};\n\nexport type Locales = {\n [locale in Locale]?: LabelDefinitions;\n};\n\nexport type LabelTranslations = {\n [key: string]: string;\n};\n\nexport type Labels = {\n [key: string]: string | LabelTranslations;\n};\n\ntype AdapterConstructor = {\n new (setValue: (value: string) => void): BaseAdapter;\n};\n\nconst adapters = new Set>();\n\ni18n.defaultLocale = \"en\";\ni18n.fallbacks = true;\n\nsubscribeToVar(locale, (value: Locale) => {\n i18n.locale = value;\n setLocale(value);\n updateAdapters();\n});\n\nexport const DEFAULT_SCOPE = \"tbme\";\n\nexport function setTranslations(\n locales: Locales,\n options?: { scope?: string; merge?: boolean }\n) {\n const { scope, merge } = {\n scope: DEFAULT_SCOPE,\n merge: true,\n ...options,\n };\n for (const [locale, labels] of Object.entries(locales)) {\n // Modules can only export identifiers, so we transform the key\n // \"esMX\" => \"es-MX\"\n const localeKey = toLocaleKey(locale);\n\n if (!labels) {\n continue;\n }\n\n i18n.translations[localeKey] = {\n ...i18n.translations[localeKey],\n [scope]: {\n ...(merge ? (i18n.translations[localeKey] as any) || {} : {})[scope],\n ...collectValues(labels),\n },\n };\n }\n\n updateAdapters();\n}\n\nsetTranslations(defaultLocales);\n\nexport function updateAdapters() {\n adapters.forEach((adapter) => adapter.updateValue());\n}\n\nexport function toLocaleKey(value: string) {\n return value.replace(\n /([a-z]{2,3})(?:[_-])?([A-Z]{2})/g,\n (_, lang, country) => `${lang}-${country.toUpperCase()}`\n );\n}\n\nexport function translate(\n key: string,\n options?: i18n.TranslateOptions\n): string {\n return i18n.t(key, { scope: DEFAULT_SCOPE, ...options });\n}\n\nexport const t = translate;\n\nexport function legacyFormat(label: string, ...args: any[]) {\n if (!label) {\n throw new Error(\"legacyFormat() - label is required\");\n }\n\n if (args.length < 1) return label;\n return args.reduce(\n (sum, arg, i) => sum.replace(new RegExp(`\\\\{${i}\\\\}`, \"g\"), arg),\n label\n );\n}\n\nabstract class BaseAdapter\n implements WireAdapter {\n config?: Config;\n\n constructor(public setValue: (value: Value) => void) {}\n\n abstract updateValue(): void;\n\n update(config: Config) {\n this.config = config;\n this.updateValue();\n }\n connect() {\n adapters.add(this);\n }\n disconnect() {\n adapters.delete(this);\n }\n}\n\nexport class LabelAdapter extends BaseAdapter {\n updateValue() {\n if (!this.config) {\n return;\n }\n this.setValue(translate(this.config.labelKey, this.config));\n }\n}\n\nexport class LegacyLabelAdapter extends BaseAdapter<\n LegacyLabelAdaperConfig,\n string\n> {\n updateValue() {\n if (!this.config) {\n return;\n }\n const scope = this.config.scope || DEFAULT_SCOPE;\n\n let args: any[] = [];\n for (const [key, value] of Object.entries(this.config)) {\n if (!isNaN(parseInt(key))) {\n args.push(value);\n }\n }\n\n this.setValue(legacyFormat(t(this.config.labelKey, { scope }), ...args));\n }\n}\n\nexport class MultiLabelAdapter extends BaseAdapter<\n MultiLabelAdapterConfig,\n Labels\n> {\n private childAdapters = new Set>();\n private translations: Labels = {};\n private previousTranslations?: Labels;\n\n setChildValue(key: string, value: string) {\n if (this.translations[key] && this.translations[key] === value) {\n return;\n }\n this.translations = {\n ...this.translations,\n [key]: value,\n };\n this.updateValue();\n }\n\n updateValue() {\n if (!this.config) {\n return;\n }\n\n if (!this.config.labels) {\n return;\n }\n\n if (\n this.translations !== this.previousTranslations &&\n this.childAdapters.size &&\n this.childAdapters.size === this.config.labels.length &&\n this.config.labels.length === Object.keys(this.translations).length\n ) {\n this.setValue(this.unpackTranslations(this.translations));\n this.previousTranslations = this.translations;\n }\n }\n\n update(config: MultiLabelAdapterConfig) {\n if (!this.config || !isEqual(this.config, config)) {\n const { labels } = config;\n let assignedKeys: string[] = [];\n\n this.translations = {};\n this.disconnectChildren();\n this.config = config;\n\n for (let item of labels) {\n let adapterType: AdapterConstructor = LabelAdapter;\n let childConfig: MultiLabelConfigItem;\n let valueKey: string;\n\n if (typeof item === \"string\") {\n valueKey = item;\n childConfig = {\n labelKey: item,\n };\n } else {\n if (item.formattingType === \"legacy\") {\n adapterType = LegacyLabelAdapter;\n }\n valueKey = item.aliasKey || item.labelKey;\n childConfig = item;\n }\n\n if (assignedKeys.includes(valueKey)) {\n throw `Invalid duplicate labelKey or aliasKey found: ${valueKey}. All keys on the labels object must be unique.`;\n }\n\n assignedKeys.push(valueKey);\n\n const adapter: BaseAdapter = new adapterType(\n this.setChildValue.bind(this, valueKey)\n );\n\n this.childAdapters.add(adapter);\n adapter.connect();\n adapter.update(childConfig);\n }\n }\n }\n\n disconnect() {\n this.disconnectChildren();\n adapters.delete(this);\n }\n\n disconnectChildren() {\n this.childAdapters.forEach((adapter) => adapter.disconnect());\n }\n\n private unpackTranslations(labels: Labels, result: Labels = {}) {\n for (let [key, value] of Object.entries(labels)) {\n set(result, key, value);\n }\n\n return result;\n }\n}\n\nfunction collectValues(labels: LabelDefinitions, result: Labels = {}): Labels {\n const omitKeys = [\"_description\"];\n for (const [key, label] of Object.entries(labels)) {\n if (typeof label === \"string\") {\n // Skip _description\n if (!omitKeys.includes(key)) {\n result[key] = label;\n }\n } else if (label.hasOwnProperty(\"value\") && label) {\n result[key] = (label as LabelDefinition).value || \"\";\n } else {\n result[key] = {\n ...collectValues(label as LabelDefinitions),\n } as LabelTranslations;\n }\n }\n\n return result;\n}\n","import { api, LightningElement, wire } from \"lwc\";\nimport Croppie, { ResultOptions, Type } from \"croppie\";\n//import exif from \"exif-js\";\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\n\nexport default class extends LightningElement {\n @api uid: string = \"\";\n @api photoUrl: string = \"\";\n @api photoTitle: string = \"\";\n hasCustomPhoto: boolean = false;\n photoHasChanged: boolean = false;\n photoIsSaving: boolean = false;\n acceptedFileTypes: string = \"image/jpg, image/jpeg, image/gif, image/png\";\n minimumFileSize = 10240; // 10 kb\n maximumFileSize = 15728640; // 15 mb\n contentType: string = \"\";\n croppieObj!: Croppie | null;\n uploadButtonLabel: string = \"\";\n displayUploadPhotoModal: boolean = false;\n openRemovePhotoConfirmation: boolean = false;\n croppedImageBlob: Blob | undefined;\n errorText = \"\";\n\n private labels: LabelTranslations = undefined!;\n\n get isChangedCustomPhoto() {\n return this.hasCustomPhoto && !this.photoHasChanged;\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"avatarUpload.uploadTitle\",\n \"avatarUpload.fileUploadText\",\n \"avatarUpload.removePhoto\",\n \"avatarUpload.saveButton\",\n \"avatarUpload.cancelButton\",\n \"avatarUpload.removePictureTitle\",\n \"avatarUpload.removeButton\",\n \"avatarUpload.editPhotoAssistiveText\",\n \"avatarUpload.sizeTooBigError\",\n \"avatarUpload.sizeTooSmallError\",\n \"fileUploader.buttonText\",\n \"fileUploader.additionalText\",\n ],\n })\n private handleLabels(labels: {\n avatarUpload: LabelTranslations;\n fileUploader: LabelTranslations;\n }) {\n this.labels = {\n ...labels.avatarUpload,\n ...labels.fileUploader,\n };\n }\n\n private handleHideUploadPhotoModal() {\n this.displayUploadPhotoModal = false;\n }\n\n private handleDisplayUploadPhotoModal() {\n this.displayUploadPhotoModal = true;\n this.photoHasChanged = false;\n this.photoIsSaving = false;\n // The URL for the default Astro image will be along the lines of\n // \"{domain}/resource/1565801268000/astro\". If the URL contains\n // 'resource', that means the photo is the default Astro image.\n this.hasCustomPhoto =\n (this.photoUrl && this.photoUrl.indexOf(\"/resource/\")) === -1;\n }\n\n private handleFileChanged(event: CustomEvent) {\n const uploadedFiles = event.detail.files;\n if (!uploadedFiles || uploadedFiles.length < 1) {\n return;\n }\n const uploadedFile = uploadedFiles[0];\n const fileName = uploadedFile.name.toLowerCase();\n const fileNameExtension = fileName.split(\".\").pop();\n const fileSize = uploadedFile.size;\n if (this.acceptedFileTypes.indexOf(fileNameExtension!) === -1) {\n return;\n } else if (fileSize > this.maximumFileSize) {\n this.errorText = this.labels.sizeTooBigError;\n return;\n } else if (fileSize < this.minimumFileSize) {\n this.errorText = this.labels.sizeTooSmallError;\n return;\n }\n this.errorText = \"\";\n let currentPic = this.template.querySelector(\n '[data-id=\"current-pic\"]'\n ) as HTMLElement;\n currentPic.classList.add(\"hide\");\n\n let uploadedPic = this.template.querySelector(\n '[data-id=\"uploaded-pic\"]'\n ) as HTMLElement;\n uploadedPic.classList.remove(\"hide\");\n\n let reader = new FileReader();\n reader.onload = (evnt) => {\n this.createCroppieObj();\n this.bindCroppie(evnt.target?.result);\n this.photoHasChanged = true;\n this.hasCustomPhoto = true;\n };\n\n reader.readAsDataURL(uploadedFile);\n this.contentType = uploadedFile.type;\n }\n\n private createCroppieObj() {\n if (this.croppieObj) {\n this.croppieObj.destroy();\n this.croppieObj = null;\n }\n\n const element = this.template.querySelector(\n '[data-id=\"pic-container\"]'\n ) as HTMLElement;\n if (element) {\n this.croppieObj = new Croppie(element, {\n viewport: {\n width: 160,\n height: 160,\n type: \"circle\",\n },\n });\n }\n }\n\n private bindCroppie(photo: any) {\n this.croppieObj?.setZoom(0.5);\n this.croppieObj?.bind({\n url: photo,\n });\n this.hasCustomPhoto = true;\n }\n\n private handleRemovePhotoModal() {\n this.openRemovePhotoConfirmation = !this.openRemovePhotoConfirmation;\n }\n\n private handleRemoveButtonClick() {\n this.handleRemovePhotoModal();\n this.dispatchEvent(\n new Event(\"remove\", {\n bubbles: true,\n })\n );\n }\n\n private handleSave() {\n this.photoIsSaving = true;\n if (this.contentType) {\n this.croppieObj!.result({\n type: \"blob\",\n size: \"original\",\n } as ResultOptions)\n // Uses 'any' since the types currently don't work for string results\n .then((croppedImageBlob: any) => {\n this.dispatchEvent(\n new CustomEvent(\"upload\", {\n bubbles: true,\n detail: URL.createObjectURL(croppedImageBlob as Blob),\n })\n );\n this.displayUploadPhotoModal = false;\n })\n .catch((err) => {\n console.error(err);\n })\n .finally(() => {\n this.photoIsSaving = false;\n });\n }\n }\n\n get isSaveButtonDisabled() {\n return !this.photoHasChanged || this.photoIsSaving;\n }\n\n get uploadPhotoModalClass() {\n return this.openRemovePhotoConfirmation ? \"hidden\" : \"\";\n }\n}\n","import { ChassisContextProfile } from \"elements/tbme/profilePage/types\";\n\nconst BASE_URL =\n window.sfdcBase?.exp?.PROFILE_SERVICE_INTERNAL_API_BASE_URL ||\n process.env.PROFILE_SERVICE_INTERNAL_API_BASE_URL;\n\nconst EXTERNAL_BASE_URL =\n window.sfdcBase?.exp?.PROFILE_SERVICE_EXTERNAL_API_BASE_URL ||\n process.env.PROFILE_SERVICE_EXTERNAL_API_BASE_URL;\n\ntype UploadImageResponse = {\n upload: {\n url: string;\n fields: Record;\n };\n download: {\n url: string;\n };\n};\n\ntype DeleteImageResponse = {\n photoUrl: string;\n};\nconst getUserImageUploadResponse: () => Promise<\n UploadImageResponse\n> = async () => {\n const ENDPOINT = \"/v1/userprofile/generate-image-upload-url\";\n const options = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n credentials: \"include\",\n } as RequestInit;\n\n try {\n const response = await fetch(`${BASE_URL}${ENDPOINT}`, options);\n if (!response.ok) {\n const text = await response.text();\n throw new Error(text);\n }\n return response.json() as Promise;\n } catch (e) {\n throw new Error(JSON.stringify(e));\n }\n};\n\nexport const uploadUserImage: (\n imageUrl: string,\n fileName: string\n) => Promise = async (imageUrl: string, fileName: string) => {\n try {\n const { upload } = await getUserImageUploadResponse();\n const blob = await fetch(imageUrl).then((r) => r.blob());\n const form = new FormData();\n Object.entries(upload.fields).forEach(([field, value]) => {\n form.append(field, value);\n });\n form.append(\"Content-Type\", blob.type);\n form.append(\"file\", new File([blob], fileName, { type: blob.type }));\n var options = {\n method: \"POST\",\n body: form,\n };\n const response = await fetch(upload.url, options);\n URL.revokeObjectURL(imageUrl);\n if (!response.ok) {\n const text = await response.text();\n throw new Error(text);\n }\n const responseText = await response.text();\n const parser = new DOMParser();\n const xmlDOM = parser.parseFromString(responseText, \"text/xml\");\n const value =\n xmlDOM.getElementsByTagName(\"Key\")[0].childNodes[0].nodeValue ?? \"\";\n return Promise.resolve(\n `${EXTERNAL_BASE_URL.substring(\n 0,\n EXTERNAL_BASE_URL.lastIndexOf(\"/\")\n )}/${value}`\n ) as Promise;\n } catch (e) {\n return new Error(JSON.stringify(e));\n }\n};\n\nexport const deleteUserImage = async (): Promise => {\n const ENDPOINT = \"/v1/userprofile/profile-image\";\n const options = {\n method: \"DELETE\",\n credentials: \"include\",\n } as RequestInit;\n\n try {\n const response = await fetch(`${BASE_URL}${ENDPOINT}`, options);\n if (!response.ok) {\n const text = await response.text();\n throw new Error(text);\n }\n return response.json() as Promise;\n } catch (e) {\n throw new Error(JSON.stringify(e));\n }\n};\n\nexport type UserProfile = ChassisContextProfile;\n\nexport const getProfile = async (): Promise => {\n const ENDPOINT = \"/v1/userprofile\";\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n credentials: \"include\",\n } as RequestInit;\n const result = await fetch(`${BASE_URL}${ENDPOINT}`, options);\n if (!result.ok) {\n const text = await result.text();\n throw new Error(text);\n }\n\n const response = await result.json();\n return response as UserProfile;\n};\n\nexport const updateProfile: (\n values: Partial\n) => Promise = async (values: Partial) => {\n const ENDPOINT = \"/v1/userprofile\";\n const options = {\n body: JSON.stringify(values),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n credentials: \"include\",\n method: \"PATCH\",\n } as RequestInit;\n\n const result = await fetch(`${BASE_URL}${ENDPOINT}`, options);\n if (!result.ok) {\n const text = await result.text();\n throw new Error(text);\n }\n\n const response = await result.json();\n return response as UserProfile;\n};\n","import { makeVar } from \"@apollo/client\";\nimport { ProfileContext } from \"../../tbme/profilePage/types\";\nimport {\n ApexCommunityUsers,\n LegacyCommunityConnections,\n CommunityAsyncResponse,\n CommunityStats,\n CommunityUser,\n} from \"./types\";\n\nexport const pendingValue: CommunityAsyncResponse = {\n __typename: \"CommunityAsyncResponse\",\n isLoading: true,\n error: null,\n};\n\nexport const currentCommunityUser = makeVar<\n CommunityUser | CommunityAsyncResponse | null\n>(null);\n\nexport const profileCommunityUser = makeVar<\n CommunityUser | CommunityAsyncResponse | null\n>(null);\n\nexport const communityStats = makeVar<\n CommunityStats | CommunityAsyncResponse | null\n>(pendingValue);\n\nexport const legacyCommunityConnections = makeVar<\n LegacyCommunityConnections | CommunityAsyncResponse | null\n>(pendingValue);\n\nexport const resetState = () =>\n [currentCommunityUser, profileCommunityUser].map((fn) => fn(null)) &&\n [communityStats, legacyCommunityConnections].map((fn) => fn(pendingValue));\n\n/**\n * Utils for setting user states\n */\nexport const setUserStateFromApexResponse = (response: ApexCommunityUsers) => {\n const { currentUser, contextUser, contextProfileTbc2User } = response;\n\n currentCommunityUser(\n currentUser && currentUser.ExternalId\n ? {\n __typename: \"CommunityUser\",\n id: currentUser.ExternalId,\n secondaryIds: null,\n }\n : null\n );\n\n profileCommunityUser(\n contextUser && contextUser.ExternalId\n ? {\n __typename: \"CommunityUser\",\n id: contextUser.ExternalId,\n secondaryIds:\n contextProfileTbc2User &&\n contextProfileTbc2User.aggregatedTbc2UserIds\n ? contextProfileTbc2User.aggregatedTbc2UserIds\n : [],\n }\n : null\n );\n};\n\nexport const setUserStateFromProfileContext = ({\n tbc2UserRecords,\n}: ProfileContext) => {\n if (!tbc2UserRecords) {\n return;\n }\n\n return setUserStateFromApexResponse(tbc2UserRecords);\n};\n\n/** Convenience selectors */\n\nexport const getCurrentCommunityUserId = (): null | string => {\n const user = currentCommunityUser();\n\n if (user && user.__typename === \"CommunityUser\") {\n return (user && user.id) || null;\n }\n\n return null;\n};\n\nexport const getProfileCommunityUserId = (): null | string => {\n const user = profileCommunityUser();\n\n if (user && user.__typename === \"CommunityUser\") {\n return (user && user.id) || null;\n }\n\n return null;\n};\n","import { Locale } from \"tbme/localization\";\n\nconst TRAILHEAD_LOCALES: Locale[] = [\n \"en\",\n \"fr\",\n \"de\",\n \"ja\",\n \"pt-BR\",\n \"es-MX\",\n \"ko\",\n \"zh-CN\",\n ...(process.env.FEATURE_NEW_TRAILHEAD_LOCALES_ENABLED === \"true\"\n ? [\"es\", \"it\"]\n : []),\n];\nconst TRAILHEAD_DEFAULT: Locale = \"en\";\n\nexport const trailheadLocaleFor = (locale: Locale) =>\n TRAILHEAD_LOCALES.includes(locale) ? locale : TRAILHEAD_DEFAULT;\n","import { FieldFunctionOptions, FieldPolicy } from \"@apollo/client\";\nimport {\n getCurrentCommunityUserId,\n getProfileCommunityUserId,\n} from \"../../tbtbc/communityData/state\";\nimport {\n assetsUrl,\n baseUrl,\n currentUser,\n locale,\n profileUser,\n trailheadUrl,\n} from \"./localState\";\nimport { trailheadLocaleFor } from \"./trailheadLocale\";\n\ninterface UrlParamValues {\n [k: string]: string | number | boolean | null;\n}\n\ninterface UrlPatternParam {\n key: string;\n placeholder: string;\n}\n\nexport interface UrlFormatter {\n (args?: UrlParamValues): string;\n pattern: string;\n}\n\nexport const sharedUrls = {\n base: parametizedUrl(process.env.TBME_BASE_URL!),\n home: parametizedUrl(process.env.TBME_HOME_URL!),\n profile: parametizedUrl(process.env.TBME_PROFILE_URL!),\n settings: parametizedUrl(process.env.TBME_SETTINGS_URL!),\n availableForHire: parametizedUrl(process.env.TBME_AVAILABLE_FOR_HIRE_URL!),\n ...(window.sfdcBase?.exp || process.env.USE_DIGITAL_PROFILE_URLS === \"true\"\n ? {\n base: parametizedUrl(process.env.DIGITAL_PROFILE_BASE_URL!),\n home: parametizedUrl(process.env.DIGITAL_PROFILE_HOME_URL!),\n profile: parametizedUrl(process.env.DIGITAL_PROFILE_PROFILE_URL!),\n settings: parametizedUrl(process.env.DIGITAL_PROFILE_SETTINGS_URL!),\n availableForHire: parametizedUrl(\n process.env.DIGITAL_PROFILE_AVAILABLE_FOR_HIRE_URL!\n ),\n }\n : {}),\n assets: parametizedUrl(\"{{assetsUrl}}\"),\n logo: parametizedUrl(process.env.TBME_LOGO_URL!),\n bannerBackgroundImage: parametizedUrl(process.env.BANNER_BACKGROUND_URL!),\n astroImage: parametizedUrl(process.env.ASTRO_IMAGE_URL!),\n defaultAstroImage: parametizedUrl(process.env.DEFAULT_ASTRO_IMAGE_URL!),\n mvpImage: parametizedUrl(process.env.MVP_IMAGE_URL!),\n noneMessageSuperbadgeItem: parametizedUrl(\n process.env.TH_NONE_MESSAGE_SUPERBADGE_ITEM_URL!\n ),\n noneMessageModuleItem: parametizedUrl(\n process.env.TH_NONE_MESSAGE_MODULE_ITEM_URL!\n ),\n noneMessageProjectItem: parametizedUrl(\n process.env.TH_NONE_MESSAGE_PROJECT_ITEM_URL!\n ),\n noneMessageEventItem: parametizedUrl(\n process.env.TH_NONE_MESSAGE_EVENT_ITEM_URL!\n ),\n superbadgeImage: parametizedUrl(process.env.TH_SUPERBADGE_IMAGE_URL!),\n moduleImage: parametizedUrl(process.env.TH_MODULE_IMAGE_URL!),\n projectImage: parametizedUrl(process.env.TH_PROJECT_IMAGE_URL!),\n eventImage: parametizedUrl(process.env.TH_EVENT_IMAGE_URL!),\n trailheadUnknownBadge: parametizedUrl(\n process.env.TH_UNKNOWN_BADGE_IMAGE_URL!\n ),\n trailheadFirstModule: parametizedUrl(process.env.TH_FIRST_MODULE_URL!),\n trailheadFirstModuleImage: parametizedUrl(\n process.env.TH_FIRST_MODULE_IMAGE_URL!\n ),\n trailhead: parametizedUrl(\"{{trailheadUrl}}\"),\n trailheadHelpProfileOverview: parametizedUrl(\n process.env.TH_HELP_PROFILE_OVERVIEW_URL!\n ),\n trailheadRanks: parametizedUrl(process.env.TH_RANKS_URL!),\n signup: parametizedUrl(process.env.SIGNUP_URL!),\n login: parametizedUrl(process.env.LOGIN_URL!),\n logout: parametizedUrl(process.env.LOGOUT_URL!),\n defaultSuperbadgeImage: parametizedUrl(\n process.env.DEFAULT_SUPERBADGE_IMAGE_URL!\n ),\n defaultSuperbadge: parametizedUrl(process.env.DEFAULT_SUPERBADGE_URL!),\n\n // TBC Urls\n tbcDefaultGroupImage: parametizedUrl(\n process.env.TBC_DEFAULT_GROUP_IMAGE_URL!\n ),\n tbcUserFiles: parametizedUrl(process.env.TBC_USER_FILES_URL!),\n tbcSearchFiles: parametizedUrl(process.env.TBC_SEARCH_FILES_URL!),\n tbcCommunityFeed: parametizedUrl(process.env.TBC_COMMUNITY_FEED!),\n tbcUserFeedQuestions: parametizedUrl(\n process.env.TBC_USER_FEED_QUESTIONS_URL!\n ),\n tbcUserFeedAnswers: parametizedUrl(process.env.TBC_USER_FEED_ANSWERS_URL!),\n tbcUserFeedBestAnswers: parametizedUrl(\n process.env.TBC_USER_FEED_BEST_ANSWERS_URL!\n ),\n tbcUserGroups: parametizedUrl(process.env.TBC_USER_GROUPS_URL!),\n tbcUserFeed: parametizedUrl(process.env.TBC_USER_FEED_URL!),\n tbcUserConnections: parametizedUrl(process.env.TBC_USER_CONNECTIONS_URL!, {\n tab: \"\",\n }),\n tbcGroupDetail: parametizedUrl(process.env.TBC_GROUP_DETAIL_URL!),\n tbcHireMe: parametizedUrl(process.env.TBC_MESSAGE_HIRE_ME_URL!),\n tbcMessageUser: parametizedUrl(process.env.TBC_MESSAGE_USER_URL!),\n};\n\n/** Field Policies for Apollo Cache */\nexport const urlFieldPolicies: {\n [fieldName: string]: FieldPolicy;\n} = {};\n\nfor (let [field, value] of Object.entries(sharedUrls)) {\n urlFieldPolicies[field] = {\n read(cv = value, { args }: FieldFunctionOptions) {\n if (typeof cv === \"string\") {\n return cv;\n }\n\n const getUrl = cv as UrlFormatter;\n\n if (args !== null) {\n return getUrl(args);\n }\n\n return getUrl();\n },\n };\n}\n\n// Method to retrieve the url values directly instead of using apollo\nexport const getSharedUrlValues = () => {\n const urls: { [key: string]: string } = {};\n for (let [field, value] of Object.entries(sharedUrls)) {\n // @ts-ignore\n urls[field] = urlFieldPolicies?.[field]?.read(value, {} as FieldFunctionOptions) || \"\";\n }\n return urls;\n};\n\nfunction paramsFor(pattern: string): UrlPatternParam[] {\n return (pattern.match(/\\{\\{[\\w]+\\}\\}/g) || []).map((param: string) => ({\n key: param.replace(/\\{|\\}/g, \"\"),\n placeholder: param,\n }));\n}\n\nexport function parametizedUrl(pattern: string, defaults?: UrlParamValues) {\n if (pattern === undefined) {\n throw new Error(\"Pattern is required, is an env var missing or invalid?\");\n }\n\n const params = paramsFor(pattern) || [];\n const defaultValues = defaults;\n\n const formatter = (args?: UrlParamValues) => {\n const values: UrlParamValues = {\n ...{\n locale: locale(),\n baseUrl: baseUrl(),\n trailheadLocale: trailheadLocaleFor(locale()),\n trailheadUrl: trailheadUrl(),\n profileUserId: profileUser() ? profileUser()!.id : null,\n currentUserId: currentUser() ? currentUser()!.id : null,\n tbcProfileUserId: getProfileCommunityUserId(),\n tbcCurrentUserId: getCurrentCommunityUserId(),\n assetsUrl: assetsUrl(),\n },\n ...defaults,\n ...args,\n };\n\n return params.reduce((acc: string, { key, placeholder }) => {\n const value = values[key];\n\n if (value === undefined || value === null) {\n return acc;\n }\n\n return acc.replace(placeholder, String(value));\n }, pattern);\n };\n\n formatter.pattern = pattern;\n\n return formatter;\n}\n","import { InMemoryCache, FieldFunctionOptions } from \"@apollo/client\";\nimport {\n appLauncherItems,\n profileUser,\n currentUser,\n siteInfo,\n locale,\n localeOptions,\n footerLinks,\n tbcProfileUserId,\n chassis,\n} from \"tbme/localState\";\nimport { Locale } from \"tbme/localization\";\nimport {\n AppLauncherItem,\n Link,\n LocaleOption,\n LocalProfile,\n SiteInfo,\n} from \"../localState/types\";\n\nimport { ChassisContext } from \"../profilePage/types\";\n\nimport { urlFieldPolicies } from \"../localState/urls\";\nimport {\n legacyCommunityConnections,\n communityStats,\n currentCommunityUser,\n profileCommunityUser,\n} from \"../../tbtbc/communityData/state\";\nimport { relayStylePagination } from \"@apollo/client/utilities\";\n\nexport const createCache = () =>\n new InMemoryCache({\n addTypename: false,\n typePolicies: {\n SiteUrls: {\n fields: {\n ...urlFieldPolicies,\n },\n },\n User: {\n fields: {\n communityUser: {\n read(value = currentCommunityUser()) {\n return value;\n },\n },\n },\n },\n TrailheadProfileStats: {\n keyFields: [],\n },\n PublicProfile: {\n keyFields: [],\n fields: {\n earnedAwards: relayStylePagination([\"awardType\"]),\n tbcUserId: {\n read(value = tbcProfileUserId()) {\n return value;\n },\n },\n communityUser: {\n read(value = profileCommunityUser()) {\n return value;\n },\n },\n communityStats: {\n read(value = communityStats()) {\n return value;\n },\n },\n legacyCommunityConnections: {\n read(value = legacyCommunityConnections()) {\n return value;\n },\n },\n },\n },\n SiteInfo: {\n fields: {\n urls: {\n read(value = { __typename: \"SiteUrls\" }) {\n return value;\n },\n },\n },\n },\n Query: {\n fields: {\n appLauncherItems: {\n read(\n items: AppLauncherItem[] = appLauncherItems(),\n { args }: FieldFunctionOptions\n ) {\n if (args && args.id) {\n return items.filter((item) => item.id === args.id);\n }\n\n return items;\n },\n },\n appLauncherItem: {\n read(item = undefined, { args }: FieldFunctionOptions) {\n const items = appLauncherItems();\n if (!args || !args.id) {\n return undefined;\n }\n\n return items.find((item) => item.id === args.id);\n },\n },\n localeOptions: {\n read(options: LocaleOption[] = localeOptions()) {\n return options;\n },\n },\n footerLinks: {\n read(links: Link[] = footerLinks()) {\n return links;\n },\n },\n currentUser: {\n read(user = currentUser()) {\n return user;\n },\n },\n profileUser: {\n read(profile = profileUser()): LocalProfile {\n const user = currentUser();\n\n const isSelf = !!(user && profile && user.id === profile.id);\n const isPublic = isSelf || (profile && profile.isPublicProfile);\n\n return {\n __typename: isPublic ? \"PublicProfile\" : \"PrivateProfile\",\n isSelf,\n ...profile,\n };\n },\n },\n siteInfo: {\n read(value = siteInfo()): SiteInfo {\n return {\n __typename: \"SiteInfo\",\n ...value,\n };\n },\n },\n locale: {\n read(value = locale()): Locale {\n return value;\n },\n },\n chassis: {\n read(value = chassis()): ChassisContext {\n return value;\n },\n },\n },\n },\n },\n });\n\nexport const cache = createCache();\n","import { gql } from \"@apollo/client\";\n\nexport default gql`\n type AppLauncherItem {\n link: Link!\n label: String!\n id: String!\n imageUrl: String!\n }\n\n # This will eventually move to server, here to represent fields required for the\n # \"current user\"\n type LegacyUser {\n id: String\n backgroundImageUrl: String!\n fullName: String!\n avatarUrl: String!\n\n communityUser: PendingCommunityUser\n }\n\n type SiteUrls {\n baseUrl: String!\n home: String!\n profile: String!\n settings: String!\n assets: String!\n logo: String!\n astroImage: String!\n defaultAstroImage: String!\n mvpImage: String!\n noneMessageSuperbadgeItem: String!\n noneMessageModuleItem: String!\n noneMessageProjectItem: String!\n noneMessageEventItem: String!\n superbadgeImage: String!\n moduleImage: String!\n projectImage: String!\n eventImage: String!\n trailhead: String!\n trailheadUnknownBadge: String!\n trailheadHelpProfileOverview: String!\n trailheadFirstModule: String!\n trailheadFirstModuleImage: String!\n trailheadRanks: String!\n signup: String!\n login: String!\n logout: String!\n defaultSuperbadgeImage: String!\n defaultSuperbadge: String!\n tbcDefaultGroupImage: String!\n tbcSearchFiles: String!\n tbcUserFiles: String!\n tbcCommunityFeed: String!\n tbcUserFeedQuestions: String!\n tbcUserFeedAnswers: String!\n tbcUserFeedBestAnswers: String!\n tbcUserGroups: String!\n tbcUserFeed: String!\n tbcUserConnections: String!\n tbcGroupDetail: String!\n tbcHireMe: String!\n tbcMessageUser: String!\n }\n\n type SiteInfo {\n name: String!\n logoUrl: String!\n urls: SiteUrls!\n }\n\n type Link {\n target: String\n href: String!\n }\n\n type FooterLink {\n label: String!\n href: String!\n image: String\n }\n\n type Locale {\n label: String!\n value: String!\n }\n\n type ChassisProfileCompany {\n name: String\n size: String\n website: String\n }\n\n type ChassisProfileAddress {\n state: String\n country: String\n }\n\n type ChassisProfilePhone {\n mobile: String\n work: String\n default: String\n }\n\n type ChassisProfile {\n id: String!\n firstName: String!\n lastName: String!\n isPublicProfile: Boolean!\n isAvailableForHire: Boolean!\n role: String\n relationshipToSalesforce: String\n username: String\n profileUrl: String\n title: String\n pronoun: String\n nickname: String\n photoUrl: String\n bio: String\n twitterHandle: String\n facebookHandle: String\n linkedinHandle: String\n websiteUrl: String\n company: ChassisProfileCompany\n address: ChassisProfileAddress\n backgroundImageUrl: String\n phone: ChassisProfilePhone\n workEmail: String\n }\n\n type Chassis {\n profile: ChassisProfile!\n isSelf: Boolean!\n }\n\n extend interface Profile {\n isSelf: Boolean!\n fullName: String!\n }\n\n # Extra fields defined here will move to server\n extend type PublicProfile {\n fullName: String!\n tbcUserId: String\n isSelf: Boolean!\n isExternalUser: Boolean!\n\n communityUser: PendingCommunityUser\n communityStats: PendingCommunityStats\n legacyCommunityConnections: PendingCommunityConnections\n }\n\n # Extra fields defined here will move to server\n extend type PrivateProfile {\n fullName: String!\n isSelf: Boolean!\n }\n\n extend type PrivateExternalProfile {\n isSelf: Boolean!\n fullName: String!\n }\n\n type CommunityAsyncResponse {\n isLoading: Boolean!\n error: String\n }\n\n type CommunityStats {\n questionsCount: Int!\n answersCount: Int!\n bestAnswersCount: Int!\n communityUserRank: Int!\n }\n\n type CommunityConnection {\n id: String!\n name: String!\n imageUrl: String!\n url: String!\n }\n\n type CommunityConnectionCollection {\n count: Int!\n connections: [CommunityConnection!]\n url: String!\n }\n\n type LegacyCommunityConnections {\n viewerCanFollow: Boolean!\n viewerSubscriptionId: String\n followers: CommunityConnectionCollection!\n groups: CommunityConnectionCollection!\n following: CommunityConnectionCollection!\n }\n\n type CommunityUser {\n id: String!\n secondaryIds: [String!]\n }\n\n union PendingCommunityUser = CommunityUser | CommunityAsyncResponse\n\n union PendingCommunityStats = CommunityStats | CommunityAsyncResponse\n\n union PendingCommunityConnections =\n LegacyCommunityConnections\n | CommunityAsyncResponse\n\n extend type Query {\n appLauncherItems(id: ID): [AppLauncherItem!]!\n appLauncherItem(id: ID!): AppLauncherItem\n currentUser: LegacyUser\n profileUser: Profile!\n siteInfo: SiteInfo!\n footerLinks: [FooterLink!]!\n localeOptions: [Locale!]!\n locale: String!\n chassis: Chassis\n }\n`;\n","import { ApolloClient, createHttpLink } from \"@apollo/client\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { cache } from \"./cache\";\nimport { createContextAdapter } from \"common/context\";\nimport localSchema from \"../../../gql/localSchema\";\nimport { locale, isRenderProfileChassis } from \"tbme/localState\";\nimport { fetch } from \"@devforce/trailhead-client-fetch\";\n\nexport { createCache, cache } from \"./cache\";\n\ntype Nullable = T | null;\n\nexport interface ClientAdapterValue {\n client: ApolloClient;\n}\nexport interface ClientAdapterConfig {\n client?: Nullable>;\n}\nexport interface ClientAdapterContext {\n client?: Nullable>;\n}\n\nexport const adapterContextSchema = {\n client: \"optional\",\n};\n\nexport interface ClientConfig {\n client?: ApolloClient;\n accessToken: string;\n accessTokenType: \"Bearer\" | \"Visualforce\";\n uri: string;\n fetch: typeof fetch;\n}\n\nexport const profileApiBffUrl: string =\n window?.sfdcBase?.exp?.PROFILE_API_BFF_URL || \"\";\n\nexport const getDefaultConfig = (): ClientConfig => ({\n accessToken: \"\",\n accessTokenType: \"Visualforce\",\n uri: profileApiBffUrl || (process.env.PROFILE_API_BFF_URL as string) || \"\",\n fetch,\n});\n\nlet config = {\n ...getDefaultConfig(),\n client: createClient(getDefaultConfig()),\n};\n\nexport const ClientAdapter = createContextAdapter<\n ClientAdapterValue,\n ClientAdapterConfig,\n ClientAdapterContext\n>(() => ({ client: config.client }), adapterContextSchema);\n\nexport function setGlobalClient(client: ApolloClient) {\n config.client = client;\n\n ClientAdapter.setGlobalContext({ client });\n}\n\nexport function setAccessToken(accessToken: string) {\n config.accessToken = accessToken;\n\n setGlobalClient(createClient(config));\n}\n\nexport function setAccessTokenType(accessTokenType: \"Bearer\" | \"Visualforce\") {\n config.accessTokenType = accessTokenType;\n\n setGlobalClient(createClient(config));\n}\n\nexport function setUri(uri: string) {\n config.uri = uri;\n\n setGlobalClient(createClient(config));\n}\n\nexport function getClient() {\n return config.client;\n}\n\nexport function getConfig() {\n return config;\n}\n\nexport function createClient(config: ClientConfig) {\n const { uri, accessToken, accessTokenType, fetch } = config;\n\n const httpLink = createHttpLink({\n uri,\n fetch,\n });\n\n const headersLink = setContext((_, { headers }) => {\n // FIXME: The X-Idp token should be included only if the entry point is renderProfileChassis()\n return {\n headers: {\n ...headers,\n \"accept-language\": locale(),\n ...(isRenderProfileChassis()\n ? {\n \"x-idp\": \"iis\",\n }\n : {}),\n ...(accessToken\n ? {\n authorization: `${accessTokenType} ${accessToken}`,\n }\n : {}),\n },\n };\n });\n\n return new ApolloClient({\n link: headersLink.concat(httpLink),\n defaultOptions: {\n watchQuery: {\n errorPolicy: \"all\",\n returnPartialData: true,\n },\n },\n cache,\n typeDefs: localSchema,\n });\n}\n","import { Logger } from \"@devforce/trailhead-client-logger\";\n\nexport const logger = new Logger({\n prefix: \"[th-profile-ui]: \",\n});\n","import {\n WatchQueryOptions,\n ApolloQueryResult,\n ObservableQuery,\n ApolloClient,\n NetworkStatus,\n OperationVariables,\n FetchMoreQueryOptions,\n} from \"@apollo/client\";\nimport { WireAdapter } from \"lwc\";\nimport isEqual from \"lodash/isEqual\";\n\nimport { adapterContextSchema, ClientAdapterContext } from \"tbme/clientAdapter\";\nimport { logger } from \"tbme/logger\";\nimport {Subscription} from \"zen-observable-ts\";\n\nexport interface QueryAdapterValue\n extends ApolloQueryResult {\n fetchMore(fetchMoreOptions: FetchMoreQueryOptions & {\n updateQuery?: (previousQueryResult: TData, options: {\n fetchMoreResult: TFetchData;\n variables: TFetchVars;\n }) => TData;\n }): Promise>;\n refetch(variables?: Partial): Promise>;\n}\nexport class QueryAdapter\n implements\n WireAdapter<\n QueryAdapterValue,\n WatchQueryOptions,\n ClientAdapterContext\n > {\n static contextSchema = adapterContextSchema;\n observable?: ObservableQuery;\n subscription?: Subscription;\n client?: ApolloClient;\n private defaultData: ApolloQueryResult = {\n loading: true,\n networkStatus: NetworkStatus.loading,\n } as QueryAdapterValue;\n private previousData: ApolloQueryResult = { ...this.defaultData };\n\n constructor(\n public setValue: (value: QueryAdapterValue) => void\n ) {}\n\n makeQuery(config: WatchQueryOptions) {\n if (!this.observable) {\n this.observable = this.client!.watchQuery(config);\n\n this.setValue(this.getValue());\n this.subscription = this.observable.subscribe(\n (result) => {\n this.previousData = result;\n this.setValue(this.getValue());\n },\n (error) => {\n this.previousData = {\n data: (this.previousData.data || {}) as TData,\n loading: false,\n networkStatus: NetworkStatus.error,\n error,\n };\n\n this.setValue(this.getValue());\n }\n );\n } else if (\n this.observable &&\n config.variables &&\n !isEqual(config.variables, this.observable.variables)\n ) {\n this.resetData();\n this.disconnect();\n this.makeQuery(config);\n }\n }\n\n private resetData() {\n this.previousData = { ...this.defaultData };\n }\n\n private reset() {\n this.disconnect();\n this.client = undefined;\n }\n\n private getValue(): QueryAdapterValue {\n return {\n ...this.previousData,\n fetchMore: this.observable!.fetchMore.bind(this.observable),\n refetch: this.observable!.refetch.bind(this.observable),\n };\n }\n\n update(\n config: WatchQueryOptions,\n context?: ClientAdapterContext\n ) {\n if (context && context.client) {\n if (this.client !== context.client) {\n this.reset();\n }\n\n this.client = context.client;\n\n this.makeQuery(config);\n } else {\n return;\n }\n }\n connect() {\n if (!this.client) {\n logger.error(\n `Did you forget to wrap your component in a provider such as `\n );\n }\n }\n disconnect() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.observable = undefined;\n }\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const AVATAR_QUERY = gql`\n query GetAvatar {\n chassis @client {\n profile {\n firstName\n lastName\n username\n photoUrl\n }\n isSelf\n }\n\n siteInfo @client {\n urls {\n defaultAstroImage\n }\n }\n }\n`;\n","import { WireAdapter } from 'lwc';\nimport { get, set } from 'lodash';\n\ntype IISCompleteProfileResponse = {\n isProfileComplete: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: Record;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: Record;\n location?: string;\n};\n\nexport class IISUtilAdapter\n implements WireAdapter>\n{\n dataCallback?: (val: IISUtil) => void;\n\n constructor(cb: (val: IISUtil) => void) {\n this.dataCallback = cb;\n }\n\n async connect() {\n const iisUtil = await getIISUtil();\n this.dataCallback?.(iisUtil);\n return iisUtil;\n }\n\n disconnect() {}\n\n update() {}\n}\n\nexport const getIISUtil = async () => {\n if (!window.IISUtil) {\n await loadIIS();\n }\n\n return window.IISUtil;\n};\n\nconst loadIIS = async () => {\n try {\n const env = getEnv();\n const version = artifactVersionMap[getEnv()];\n const iisVersion = window?.sfdcBase?.iisVersion || `v1-${version}`;\n const asset = env === 'prod' ? 'iis.min.js' : 'iis.js';\n const { default: iis } = await import(\n `https://a.sfdcstatic.com/digital/iis/${iisVersion}/${asset}`\n );\n window.IISUtil = iis as IISUtil;\n // Override IIS util function to ensure userInfo is decoded.l\n if (window.IISUtil?.getUserInfo && window.IISUtil?.refreshUserInfo) {\n window.IISUtil.getUserInfo = ((getUserInfo) => async () => {\n const u = await getUserInfo();\n const userInfo = u?.userInfo || u;\n return decodeJSONObject(userInfo, encodedUserInfoFields);\n })(window.IISUtil.refreshUserInfo);\n window.IISUtil.refreshUserInfo = ((refreshUserInfo) => async () => {\n const u = await refreshUserInfo();\n const userInfo = u?.userInfo || u;\n return decodeJSONObject(userInfo, encodedUserInfoFields);\n })(window.IISUtil.refreshUserInfo);\n }\n } catch (e) {\n console.error('unable to load iis.js:', e);\n }\n};\n\n// TODO: Possibly refactor when sfdcBase.env is set in each environment\nexport const getEnv = (): string => {\n let env = 'dev';\n if (window?.sfdcBase?.env) {\n env = window?.sfdcBase?.env;\n } else if (window.location.host) {\n const host = window.location.host;\n const subdomain = host.split('.')[0];\n if (subdomain === 'www' || subdomain === 'tbid') {\n env = 'prod';\n } else if (subdomain.startsWith('www-') || subdomain.startsWith('tbid-')) {\n env = subdomain.split('-')[1].replace(/[0-9]/g, '');\n env = env === 'stage' ? 'uat' : env;\n }\n }\n return env.toLowerCase();\n};\n\nconst artifactVersionMap: { [env: string]: string } = {\n qa: 'latest',\n uat: 'stage',\n prod: 'stable',\n dev: 'latest',\n int: 'stage',\n hotfix: 'stable',\n perf: 'stage',\n onboard: 'stable',\n};\n\nexport const encodedUserInfoFields = [\n 'custom_attributes.CompanyName',\n 'custom_attributes.Title',\n];\n\n/**\n * Decodes url encoded property values of a JSON object.\n *\n * @param userInfo The raw JSON object with encoded free form fields.\n * @param applyTo An optional list of field paths (period delimited: custom_attributes.CompanyName) to apply the decoding to.\n * When left empty, it will apply the decoding to the entire userInfo object.\n * @returns\n * UserInfo object with decoded fields.\n */\nexport const decodeJSONObject = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object: Record | undefined,\n applyTo: Array | undefined = undefined\n): Record | undefined => {\n try {\n if (object && applyTo) {\n applyTo.forEach((fieldPath) => {\n const fieldValue = get(object, fieldPath);\n if (typeof fieldValue === 'object') {\n set(\n object,\n fieldPath,\n decodeJSONObject(fieldValue as Record)\n );\n }\n\n if (typeof fieldValue === 'string') {\n set(object, fieldPath, decodeURIComponent(fieldValue));\n }\n });\n return object;\n } else {\n const string = JSON.stringify(object);\n const decodedString = decodeURIComponent(string);\n return JSON.parse(decodedString) as Record | undefined;\n }\n } catch (e) {\n return object;\n }\n};\n","import { api, LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport {\n deleteUserImage,\n uploadUserImage,\n} from \"../../../shared/profileServices\";\nimport { showToast } from \"@devforce/th-components/modules/tds/toaster/toaster\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport { AVATAR_QUERY } from \"./query\";\nimport { GetAvatar } from \"./gql/GetAvatar\";\nimport { isRenderProfileChassis, chassis } from \"tbme/localState\";\nimport { UserProfile } from \"../../../shared/profileServices\";\nimport { IISUtilAdapter } from \"../iis/iis\"\n\nexport default class extends LightningElement {\n @api isSelf: boolean = false;\n @api profilePhotoUrl?: string;\n\n defaultImage?: string;\n labels: LabelTranslations = undefined!;\n isExpanded: boolean = false;\n firstName?: string;\n lastName?: string;\n isSaving: boolean = false;\n iis?: IISUtil;\n\n @wire(MultiLabelAdapter, {\n labels: [\"avatar.expandedViewTitle\", \"avatar.successfulUpload\"],\n })\n private handleLabels(labels: { avatar: LabelTranslations }) {\n this.labels = {\n ...labels.avatar,\n };\n }\n\n @wire(QueryAdapter, {\n query: AVATAR_QUERY,\n })\n private handleResult({\n data,\n loading,\n error,\n errors,\n }: QueryAdapterValue) {\n if (!data) {\n return;\n }\n const { chassis, siteInfo } = data;\n if (chassis && siteInfo) {\n const { profile, isSelf } = chassis;\n this.isSelf = isSelf;\n this.defaultImage = data.siteInfo.urls.defaultAstroImage;\n this.profilePhotoUrl =\n data.chassis?.profile.photoUrl ?? this.defaultImage;\n this.firstName = data.chassis?.profile.firstName;\n this.lastName = data.chassis?.profile.lastName;\n }\n }\n\n @wire(IISUtilAdapter)\n loadIISUtil(iis: IISUtil) {\n if (!this.iis && iis) {\n this.iis = iis;\n }\n }\n\n async refreshUserInfo() {\n try {\n if (this.iis?.refreshUserInfo) {\n await this.iis?.refreshUserInfo?.();\n } else {\n console.warn('iis refresh user info not available');\n }\n } catch (e) {\n console.warn('error refreshing user info', e);\n }\n }\n\n private get imageStyle() {\n return `background-image: url('${this.profilePhotoUrl}')`;\n }\n\n private get photoTitle() {\n if (this.altText) {\n return this.altText;\n }\n return this.profilePhotoUrl\n ? this.profilePhotoUrl.substring(\n this.profilePhotoUrl.lastIndexOf(\"/\") + 1\n )\n : \"\";\n }\n\n private get altText() {\n return t(\"avatar.avatarImageAltText\", {\n firstName: this.firstName,\n lastName: this.lastName,\n });\n }\n\n private closeModal() {\n this.isExpanded = false;\n }\n\n private expandImage() {\n this.isExpanded = true;\n }\n\n private handleImageError() {\n if (this.defaultImage) {\n this.profilePhotoUrl = this.defaultImage;\n }\n }\n\n private async handleSave(event: CustomEvent) {\n try {\n this.isSaving = true;\n const result = await uploadUserImage(\n event.detail,\n `${this.firstName}_${this.lastName}`\n );\n if (typeof result === \"string\") {\n this.profilePhotoUrl = result;\n this.updateChassisProfile({ photoUrl: result });\n await this.refreshUserInfo();\n showToast({\n message: t(\"avatar.successfulUpload\"),\n variant: \"success\",\n });\n } else {\n throw result;\n }\n } catch (e) {\n showToast({\n message: t(\"avatar.unsuccessfulUpload\"),\n variant: \"error\",\n });\n } finally {\n this.isSaving = false;\n }\n }\n\n async handleRemove() {\n try {\n this.isSaving = true;\n const result = await deleteUserImage();\n this.profilePhotoUrl = result.photoUrl;\n this.updateChassisProfile({ photoUrl: result.photoUrl });\n showToast({\n message: t(\"avatar.successfulDeletion\"),\n variant: \"success\",\n });\n } catch (e) {\n showToast({\n message: t(\"avatar.unsuccessfulUpload\"),\n variant: \"error\",\n });\n } finally {\n this.isSaving = false;\n }\n }\n\n updateChassisProfile(value: Partial) {\n if (!isRenderProfileChassis()) {\n return;\n }\n\n const profile = Object.assign({}, chassis()!.profile, value) as UserProfile;\n\n chassis({\n ...chassis()!,\n profile,\n });\n }\n}\n","import {\n parsePhoneNumberFromString,\n validatePhoneNumberLength,\n isPossiblePhoneNumber,\n} from \"libphonenumber-js\";\n\nexport interface ProfileEditForm {\n [fieldName: string]: {\n value?: string | null;\n errorMessage?: string;\n // validationRules are only applicable to 'input' fields and not 'select' fields\n validationRules?: FormValidationRule[];\n };\n}\n\ntype FormValidationRule = {\n regex?: RegExp;\n fn?: (value: string) => boolean;\n errorLabel: string;\n};\n\nexport function convertPhoneNumberToE164(phoneNumber: string): string {\n return (\n parsePhoneNumberFromString(phoneNumber, \"US\")?.format(\"E.164\") ??\n phoneNumber\n );\n}\n\nfunction validatePhoneNumber(phoneNumberString: string): string {\n const defaultCountry = \"US\";\n const isPossiblePhone = isPossiblePhoneNumber(\n phoneNumberString,\n defaultCountry\n );\n const validationError = validatePhoneNumberLength(\n phoneNumberString,\n defaultCountry\n );\n return validationError\n ? validationError\n : !isPossiblePhone\n ? \"NOT_A_NUMBER\"\n : \"\";\n}\n\n// Returns a URL if the value provided is a valid URL. Returns 'undefined' otherwise.\nexport const validateWebsite: (value: string) => URL | undefined = (value) => {\n try {\n const website = new URL(value);\n if (website?.protocol === \"http:\" || website?.protocol === \"https:\") {\n return website;\n } else {\n return undefined;\n }\n } catch (e) {\n return undefined;\n }\n};\n\nexport const validateSlug: (value: string) => boolean = (value) => {\n // Taken straight from here in order to not have unnecessary network calls:\n // https://git.soma.salesforce.com/dpae/trailblazer-profile-service/blob/2a6cfa6c380593383d5a7a89acdf07a6eafae65b/functions/authn-userprofile-handler/src/username-validator.ts#L33\n const validationRules = [\n (str: string) => str.length >= 4 && str.length <= 64,\n (str: string) => /[a-z]/.test(str.charAt(0)),\n (str: string) => /[a-z0-9]$/.test(str.charAt(str.length - 1)),\n (str: string) => /^[a-z0-9-]+$/.test(str),\n ];\n\n return validationRules.every((rule) => {\n return !rule(value) ? false : true;\n });\n};\n\n// Returns the text input if it is not blank/empty space. Returns 'undefined' otherwise.\nexport const validateRequiredTextInput: (\n value: string\n) => string | undefined = (value) => {\n return value.replace(/<[^>]*>/g, \"\").trim().length > 0 ? value : undefined;\n};\n\nexport const validateSocialHandle: (\n baseUrl: string,\n value: string\n) => boolean = (baseUrl, value) => {\n const website = validateWebsite(`${baseUrl}/${value}`);\n if (\n !website ||\n website?.searchParams.toString().length > 0 ||\n website.hash.length > 0 ||\n website.pathname.replace(/^\\/(in\\/)?/, \"\").includes(\"/\")\n ) {\n return false;\n }\n return true;\n};\n\n// Returns true if the value is within the max limit\nexport const validateMaximumCharacterLength: (\n value: string,\n maxCharacterLength: number\n) => boolean = (value, maxCharacterLength) => {\n return value.length <= maxCharacterLength;\n};\n\n// lets browser handle checking if an email is valid\n// if browser does not have ability to do so, fall back on\n// regex that simply checks for characters, an @, and characters with periods\nconst validateEmail: (value: string) => boolean = (value) => {\n const emailInput = document.createElement(\"input\");\n let result: boolean;\n emailInput.type = \"email\";\n emailInput.value = value;\n\n if (typeof emailInput.checkValidity === \"function\") {\n result = emailInput.checkValidity();\n } else {\n const emailRegex = new RegExp(/\\S+@\\S+\\.\\S+/);\n result = emailRegex.test(value);\n }\n\n emailInput.remove();\n\n return result;\n};\n\nexport const profileEditForm = function (): ProfileEditForm {\n return {\n givenName: {\n validationRules: [\n {\n fn: (value) => !!validateRequiredTextInput(value),\n errorLabel: \"profileEditModal.validationRequired\",\n },\n {\n fn: (value) => validateMaximumCharacterLength(value, 40),\n errorLabel: \"profileEditModal.validationCharacterLength\",\n },\n ],\n },\n familyName: {\n validationRules: [\n {\n fn: (value) => !!validateRequiredTextInput(value),\n errorLabel: \"profileEditModal.validationRequired\",\n },\n {\n fn: (value) => validateMaximumCharacterLength(value, 40),\n errorLabel: \"profileEditModal.validationCharacterLength\",\n },\n ],\n },\n title: {},\n role: {\n validationRules: [\n {\n fn: (value) => !!validateRequiredTextInput(value),\n errorLabel: \"profileEditModal.validationRequired\",\n },\n ],\n },\n pronoun: {},\n relationshipToSalesforce: {\n validationRules: [\n {\n fn: (value) => !!validateRequiredTextInput(value),\n errorLabel: \"profileEditModal.validationRequired\",\n },\n ],\n },\n bio: {},\n slug: {\n validationRules: [\n {\n fn: (value) => validateSlug(value),\n errorLabel: \"profileEditModal.validateUsernameError\",\n },\n ],\n },\n countryCode: {},\n stateCode: {},\n companyName: {\n validationRules: [\n {\n fn: (value) => !!validateRequiredTextInput(value),\n errorLabel: \"profileEditModal.validationRequired\",\n },\n ],\n },\n companySize: {},\n companyWebsite: {\n validationRules: [\n {\n fn: (value) => !!validateWebsite(value),\n errorLabel: \"profileEditModal.validationWebsite\",\n },\n ],\n },\n facebook: {\n validationRules: [\n {\n fn: (value) =>\n !!validateSocialHandle(\"https://www.facebook.com\", value),\n errorLabel: \"profileEditModal.validationSocialHandleError\",\n },\n ],\n },\n linkedIn: {\n validationRules: [\n {\n fn: (value) =>\n !!validateSocialHandle(\"https://www.linkedin.com/in\", value),\n errorLabel: \"profileEditModal.validationSocialHandleError\",\n },\n ],\n },\n twitter: {\n validationRules: [\n {\n fn: (value) =>\n !!validateSocialHandle(\"https://www.twitter.com\", value),\n errorLabel: \"profileEditModal.validationSocialHandleError\",\n },\n ],\n },\n website: {\n validationRules: [\n {\n fn: (value) => !!validateWebsite(value),\n errorLabel: \"profileEditModal.validationWebsite\",\n },\n ],\n },\n workEmail: {\n validationRules: [\n {\n fn: (value: string) => !!validateEmail(value),\n errorLabel: \"profileEditModal.validationEmail\",\n },\n ],\n },\n workPhone: {\n validationRules: [\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"TOO_SHORT\",\n errorLabel: \"profileEditModal.validationPhoneTooShort\",\n },\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"TOO_LONG\",\n errorLabel: \"profileEditModal.validationPhoneTooLong\",\n },\n {\n fn: (value: string) =>\n validatePhoneNumber(value) !== \"INVALID_COUNTRY\",\n errorLabel: \"profileEditModal.validationPhoneInvalidCountry\",\n },\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"NOT_A_NUMBER\",\n errorLabel: \"profileEditModal.validationPhoneInvalid\",\n },\n ],\n },\n mobilePhone: {\n validationRules: [\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"TOO_SHORT\",\n errorLabel: \"profileEditModal.validationPhoneTooShort\",\n },\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"TOO_LONG\",\n errorLabel: \"profileEditModal.validationPhoneTooLong\",\n },\n {\n fn: (value: string) =>\n validatePhoneNumber(value) !== \"INVALID_COUNTRY\",\n errorLabel: \"profileEditModal.validationPhoneInvalidCountry\",\n },\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"NOT_A_NUMBER\",\n errorLabel: \"profileEditModal.validationPhoneInvalid\",\n },\n ],\n },\n phone: {\n validationRules: [\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"TOO_SHORT\",\n errorLabel: \"profileEditModal.validationPhoneTooShort\",\n },\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"TOO_LONG\",\n errorLabel: \"profileEditModal.validationPhoneTooLong\",\n },\n {\n fn: (value: string) =>\n validatePhoneNumber(value) !== \"INVALID_COUNTRY\",\n errorLabel: \"profileEditModal.validationPhoneInvalidCountry\",\n },\n {\n fn: (value: string) => validatePhoneNumber(value) !== \"NOT_A_NUMBER\",\n errorLabel: \"profileEditModal.validationPhoneInvalid\",\n },\n ],\n },\n };\n};\n","import { gql } from \"@apollo/client\";\n\nexport const PROFILE_EDIT_QUERY = gql`\n query GetProfileEdit {\n chassis @client {\n profile {\n isPublicProfile\n firstName\n lastName\n title\n role\n pronoun\n relationshipToSalesforce\n bio\n username\n address {\n country\n state\n }\n company {\n name\n size\n website\n }\n facebookHandle\n linkedinHandle\n twitterHandle\n websiteUrl\n backgroundImageUrl\n phone {\n default\n mobile\n work\n }\n workEmail\n }\n isSelf\n }\n\n siteInfo @client {\n urls {\n settings\n }\n }\n }\n`;\n","/**\n * @returns true if Hire Me feature is enabled false otherwise.\n */\nexport function isHireMeEnabled() {\n return window?.sfdcBase?.exp?.FEATURE_HIRE_ME === \"true\";\n}\n\n/**\n * @returns true if Career Marketplace feature is enabled false otherwise.\n */\nexport function isCareerMarketplaceEnabled() {\n return window?.sfdcBase?.exp?.FEATURE_CAREER_MARKET === \"true\";\n}\n\n/**\n * @returns true if Accepted Answer Label feature is enabled false otherwise\n */\nexport function isAcceptedAnswersLabelEnabled() {\n return window?.sfdcBase?.exp?.FEATURE_ACCEPTED_ANSWERS_LABEL === \"true\";\n}\n\n/**\n * @returns true if we should hide the Profile Edit modal Settings banner false otherwise\n */\nexport function isHideProfileEditSettingsBannerEnabled() {\n return (\n window?.sfdcBase?.exp?.FEATURE_HIDE_PROFILE_EDIT_SETTINGS_BANNER === \"true\"\n );\n}\n\nexport function areVirtualRegistrationFieldsEnabled() {\n return window?.sfdcBase?.exp?.FEATURE_VIRTUAL_REG_FIELDS === \"true\";\n}\n\nexport function isTbmeSkillsComponentEnabled() {\n return window?.sfdcBase?.exp.FEATURE_TBME_SKILLS_COMPONENT === \"true\";\n}\n\nexport function isIISUpdateProfileEnabled() {\n return window?.sfdcBase?.exp.FEATURE_IIS_UPDATE_PROFILE === \"true\";\n}\n","import { LightningElement, api, wire, track } from \"lwc\";\nimport {\n LabelTranslations,\n MultiLabelAdapter,\n t,\n TRANSLATION_MISSING_MESSAGE,\n} from \"tbme/localization\";\nimport { showToast } from \"tds/toaster\";\nimport { getInputValue, isInputRequired } from \"./input\";\nimport {\n profileEditForm,\n ProfileEditForm,\n convertPhoneNumberToE164,\n} from \"./form\";\nimport { PROFILE_EDIT_QUERY } from \"./query\";\nimport {\n GetProfileEdit,\n GetProfileEdit_chassis_profile,\n} from \"./gql/GetProfileEdit\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport {\n countryOptions,\n stateOptions,\n sortOptions,\n SelectOption,\n verifyCountry,\n verifyState,\n} from \"@sfdc-www/digital-i18n\";\nimport {\n getProfile,\n updateProfile,\n UserProfile,\n} from \"../../../shared/profileServices\";\nimport { isRenderProfileChassis, chassis } from \"tbme/localState\";\nimport { sharedUrls } from \"../localState/urls\";\nimport {\n areVirtualRegistrationFieldsEnabled,\n isHideProfileEditSettingsBannerEnabled,\n isIISUpdateProfileEnabled,\n} from \"../../../shared/feature\";\nimport { IISUtilAdapter } from \"../iis/iis\";\n\nexport default class extends LightningElement {\n @api open: boolean = false;\n cancelButtonDisabled: boolean = false;\n saveButtonDisabled: boolean = false;\n labels: LabelTranslations = undefined!;\n isPublicProfile: boolean | null = null;\n settingsUrl: string | null = null;\n profile?: GetProfileEdit_chassis_profile;\n @track\n form: ProfileEditForm;\n isSelf: boolean = false;\n backgroundImageUrl?: string;\n iis?: IISUtil;\n\n constructor() {\n super();\n this.form = profileEditForm();\n }\n\n get areVirtualRegistrationFieldsEnabled() {\n return areVirtualRegistrationFieldsEnabled();\n }\n\n get countryOptions(): SelectOption[] {\n const verifiedCountries = countryOptions.map((country) => {\n const validatedCountry = verifyCountry(country.value);\n return {\n ...country,\n label:\n country.value === \"\"\n ? this.labels.fieldCountryCodePlaceholder\n : validatedCountry!,\n };\n });\n return verifiedCountries.sort(sortOptions);\n }\n\n private get bannerStyle() {\n // The value is coming in as the string 'undefined' if not defined\n if (this.backgroundImageUrl && this.backgroundImageUrl !== \"undefined\") {\n return `background-image: url(${this.backgroundImageUrl})`;\n }\n return `background-image: url(${sharedUrls.bannerBackgroundImage()})`;\n }\n\n get stateOptions(): SelectOption[] {\n const countryCode = this.form?.countryCode?.value;\n if (!countryCode) {\n return [];\n }\n\n const states = stateOptions[countryCode];\n if (!states || states.length === 0) {\n return [];\n }\n\n const verifiedStates = states.map((state) => {\n const validatedState = verifyState(countryCode, state.value);\n return {\n ...state,\n label:\n state.value === \"\"\n ? this.labels.fieldStateCodePlaceholder\n : validatedState!,\n };\n });\n return verifiedStates.sort(sortOptions);\n }\n\n get stateOptionsDisabled(): boolean {\n return !(this.stateOptions && this.stateOptions.length > 0);\n }\n\n get stateRequired(): boolean {\n return !this.stateOptionsDisabled;\n }\n\n countryHandler = (e: CustomEvent): void => {\n // State value and state errors need to be cleared out if country changes\n if (this.form.stateCode) {\n this.form.stateCode.value = undefined;\n }\n this.form[\"stateCode\"].errorMessage = \"\";\n\n this.handleFieldChange(e);\n };\n\n // TODO: Grab this from the 'chassis' context\n get roleOptions(): { label: string; value: string }[] {\n const options = this.labels.roleOptions as any;\n return [\n {\n label: options.developer,\n value: \"Developer\",\n },\n { label: options.administrator, value: \"Administrator\" },\n { label: options.architect, value: \"Architect\" },\n {\n label: options.salesRep,\n value: \"Sales Representative / Manager\",\n },\n { label: options.marketer, value: \"Marketer\" },\n {\n label: options.supervisor,\n value: \"Service Agent / Supervisor\",\n },\n { label: options.dataAnalyst, value: \"Data Analyst\" },\n { label: options.consultant, value: \"Consultant\" },\n {\n label: options.businessOperationsManager,\n value: \"Business Operations Manager\",\n },\n { label: options.designer, value: \"Designer\" },\n { label: options.educator, value: \"Educator\" },\n { label: options.student, value: \"Student\" },\n { label: options.executive, value: \"Executive\" },\n { label: options.productManager, value: \"Product Manager\" },\n ];\n }\n\n // TODO: Grab this from the 'chassis' context\n get relationshipToSalesforceOptions(): { value: string; label: string }[] {\n const options = this.labels.relationshipOptions as any;\n return [\n { label: options.customer, value: \"Customer\" },\n { label: options.partner, value: \"Partner\" },\n { label: options.nonCustomerProspect, value: \"Non-Customer / Prospect\" },\n { label: options.salesforceEmployee, value: \"Salesforce Employee\" },\n ];\n }\n\n // TODO: Grab this from the 'chassis' context\n get pronounOptions(): { value: string; label: string }[] {\n const options = this.labels.pronounOptions as any;\n return [\n { label: options.heHimHis, value: \"he/him/his\" },\n { label: options.otherAskMe, value: \"other/ask me\" },\n { label: options.sheHerHers, value: \"she/her/hers\" },\n { label: options.theyThemTheirs, value: \"they/them/theirs\" },\n ];\n }\n\n // TODO: Grab this from the 'chassis' context\n get companySizeOptions(): { value: string; label: string }[] {\n const options = this.labels.companySizeOptions as any;\n return [\n { label: options.oneToTwenty, value: \"1-20 employees\" },\n { label: options.twentyOneToOneHundred, value: \"21-100 employees\" },\n { label: options.oneHundredToFiveHundred, value: \"101-500 employees\" },\n {\n label: options.fiveHundredToThreeThousand,\n value: \"501-3500 employees\",\n },\n { label: options.threeThousandPlus, value: \"3501+ employees\" },\n ];\n }\n\n private handleFieldChange(event: CustomEvent) {\n const element = event.target as HTMLElement;\n const identifier = element.dataset.id;\n const value = event.detail;\n\n if (identifier) {\n this.form[identifier].value = value.replace(/<[^>]*>/g, \"\").trim();\n }\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"profileEditModal.title\",\n \"profileEditModal.sectionMe\",\n \"profileEditModal.fieldGivenName\",\n \"profileEditModal.fieldFamilyName\",\n \"profileEditModal.fieldTitle\",\n \"profileEditModal.fieldRole\",\n \"profileEditModal.fieldPronoun\",\n \"profileEditModal.fieldRelationshipToSalesforce\",\n \"profileEditModal.fieldBio\",\n \"profileEditModal.fieldSlug\",\n \"profileEditModal.sectionLocation\",\n \"profileEditModal.fieldCountryCode\",\n \"profileEditModal.fieldCountryCodePlaceholder\",\n \"profileEditModal.fieldStateCode\",\n \"profileEditModal.fieldStateCodePlaceholder\",\n \"profileEditModal.sectionMyCompany\",\n \"profileEditModal.fieldCompanyName\",\n \"profileEditModal.fieldCompanySize\",\n \"profileEditModal.fieldCompanyWebsite\",\n \"profileEditModal.sectionSocials\",\n \"profileEditModal.fieldFacebook\",\n \"profileEditModal.fieldLinkedIn\",\n \"profileEditModal.fieldTwitter\",\n \"profileEditModal.fieldWebsite\",\n \"profileEditModal.validationRequired\",\n \"profileEditModal.buttonSave\",\n \"profileEditModal.buttonCancel\",\n \"profileEditModal.toastUpdateSuccess\",\n \"profileEditModal.toastFieldInvalid\",\n \"profileEditModal.toastUpdateError\",\n \"profileEditModal.roleOptions\",\n \"profileEditModal.pronounOptions\",\n \"profileEditModal.relationshipOptions\",\n \"profileEditModal.companySizeOptions\",\n \"profileEditModal.fieldWorkEmail\",\n \"profileEditModal.fieldWorkPhone\",\n \"profileEditModal.fieldMobilePhone\",\n \"profileEditModal.fieldPhone\",\n \"profileEditModal.phoneFieldFormat\",\n ],\n })\n private handleLabels(labels: { profileEditModal: LabelTranslations }) {\n this.labels = {\n ...labels.profileEditModal,\n };\n }\n\n private get settingsNoticeClass() {\n if (this.isPublicProfile !== null) {\n return this.isPublicProfile\n ? \"settings-notice-public\"\n : \"settings-notice-private\";\n }\n }\n\n private get settingsNotice() {\n if (isHideProfileEditSettingsBannerEnabled()) {\n return null;\n }\n\n if (this.isPublicProfile !== null && this.settingsUrl !== null) {\n let settingsNoticeLabel = this.isPublicProfile\n ? \"profileEditModal.settingsNoticePublicProfile\"\n : \"profileEditModal.settingsNoticePrivateProfile\";\n return t(settingsNoticeLabel, { settingsUrl: this.settingsUrl });\n }\n }\n\n @wire(QueryAdapter, {\n query: PROFILE_EDIT_QUERY,\n })\n private handleResult(result: QueryAdapterValue) {\n const { data } = result;\n\n //TODO: Handle errors. Handle loading(?)\n if (data?.chassis?.profile) {\n this.backgroundImageUrl =\n data.chassis.profile?.backgroundImageUrl ?? undefined;\n this.profile = data?.chassis?.profile;\n this.assignToForm(this.profile);\n\n this.isPublicProfile = this.profile.isPublicProfile;\n\n // tds-textarea does not expose an api property to set its\n // value. As a workaround, we'll instead need to select the\n // element and manually set the value.\n const element = this.getTextArea(\"bio\");\n if (element) {\n element.value = this.form.bio.value || \"\";\n }\n }\n\n if (data?.siteInfo?.urls) {\n this.settingsUrl = data.siteInfo.urls.settings;\n }\n }\n\n assignToForm(profile: GetProfileEdit_chassis_profile) {\n for (let obj in this.form) {\n this.form[obj].errorMessage = undefined;\n }\n this.form.givenName.value = profile.firstName;\n this.form.familyName.value = profile.lastName;\n this.form.title.value = profile.title;\n this.form.role.value = profile.role;\n this.form.pronoun.value = profile.pronoun;\n this.form.relationshipToSalesforce.value = profile.relationshipToSalesforce;\n this.form.bio.value = profile.bio;\n this.form.slug.value = profile.username;\n this.form.countryCode.value = profile.address?.country;\n this.form.stateCode.value = profile.address?.state;\n this.form.companyName.value = profile.company?.name;\n // Needed for profiles that incorrectly had 3500+ employees instead of 3501+ employees\n this.form.companySize.value = profile.company?.size?.replace(\n \"3500+ employees\",\n \"3501+ employees\"\n );\n this.form.companySize.value = profile.company?.size?.replace(\n \"1-20 Employees\",\n \"1-20 employees\"\n );\n this.form.companyWebsite.value = profile.company?.website;\n this.form.facebook.value = profile.facebookHandle;\n this.form.linkedIn.value = profile.linkedinHandle;\n this.form.twitter.value = profile.twitterHandle;\n this.form.website.value = profile.websiteUrl;\n if (this.areVirtualRegistrationFieldsEnabled) {\n this.form.workEmail.value = profile.workEmail;\n this.form.mobilePhone.value = profile.phone?.mobile;\n this.form.workPhone.value = profile.phone?.work;\n }\n this.form.phone.value = profile.phone?.default;\n }\n\n @wire(IISUtilAdapter)\n loadIISUtil(iis: IISUtil) {\n if (!this.iis && iis) {\n this.iis = iis;\n }\n }\n\n async refreshUserInfo() {\n try {\n if (this.iis?.refreshUserInfo) {\n await this.iis?.refreshUserInfo?.();\n } else {\n console.warn(\"iis refresh user info not available\");\n }\n } catch (e) {\n console.warn(\"error refreshing user info\", e);\n }\n }\n\n private closeModal() {\n this.dispatchEvent(new CustomEvent(\"profileeditrequestclose\"));\n }\n\n private getInput(dataId: string): HTMLInputElement | null | undefined {\n return this.template\n .querySelector(`[data-id=\"${dataId}\"]`)\n ?.shadowRoot?.querySelector(\"input\");\n }\n\n private getTextArea(dataId: string): HTMLTextAreaElement | null | undefined {\n return this.template\n .querySelector(`[data-id=\"${dataId}\"]`)\n ?.shadowRoot?.querySelector(\"textarea\");\n }\n\n private getSelect(dataId: string): HTMLSelectElement | null | undefined {\n return this.template\n .querySelector(`[data-id=\"${dataId}\"]`)\n ?.shadowRoot?.querySelector(\"select\");\n }\n\n // returns 'true' if the input value is valid\n private validateInput(dataId: string): boolean {\n let input = this.getInput(dataId) || this.getSelect(dataId);\n let inputValue = getInputValue(input);\n this.form[dataId].errorMessage = \"\";\n\n if (isInputRequired(input) && !inputValue) {\n this.form[dataId].errorMessage = this.labels.validationRequired;\n return false;\n }\n\n // validate input only is a value is present\n if (inputValue && this.form[dataId].validationRules?.length) {\n return this.form[dataId].validationRules!.every((rule) => {\n // Input value must conform with the RegExp and validation functions (if present)\n if (rule.regex && !rule.regex.test(inputValue)) {\n this.form[dataId].errorMessage = t(rule.errorLabel);\n return false;\n }\n if (rule.fn && !rule.fn(inputValue)) {\n this.form[dataId].errorMessage = t(rule.errorLabel);\n return false;\n }\n return true;\n });\n }\n return true;\n }\n\n private validate(): boolean {\n let isFormValid: boolean = true;\n for (const fieldName in this.form) {\n let isFieldValid = this.validateInput(fieldName);\n isFormValid = isFormValid && isFieldValid;\n }\n\n return isFormValid;\n }\n\n private handleRequestClose() {\n if (this.profile) {\n this.assignToForm(this.profile);\n }\n this.closeModal();\n }\n\n private assemblePayload(): Partial {\n const address = {\n country: this.form.countryCode.value || \"\",\n state: this.form.stateCode.value || \"\",\n };\n\n const company = {\n name: this.form.companyName.value || \"\",\n size: this.form.companySize.value || \"\",\n website: this.form.companyWebsite.value || \"\",\n };\n\n let virtualRegistrationFields:{ phone?: { work: string, mobile: string }, workEmail?: string } = {};\n if (this.areVirtualRegistrationFieldsEnabled) {\n this.form.workPhone.value = convertPhoneNumberToE164(\n this.form.workPhone.value ?? \"\"\n );\n this.form.mobilePhone.value = convertPhoneNumberToE164(\n this.form.mobilePhone.value ?? \"\"\n );\n virtualRegistrationFields = {\n phone: {\n work: this.form.workPhone.value,\n mobile: this.form.mobilePhone.value,\n },\n workEmail: this.form.workEmail.value || \"\",\n };\n }\n\n this.form.phone.value = convertPhoneNumberToE164(\n this.form.phone.value ?? \"\"\n );\n\n let phoneFields = {\n ...(virtualRegistrationFields?.phone ?? {}),\n default: this.form.phone.value,\n }\n\n return {\n address,\n company,\n firstName: this.form.givenName.value || \"\",\n lastName: this.form.familyName.value || \"\",\n title: this.form.title.value || \"\",\n role: this.form.role.value || \"\",\n pronoun: this.form.pronoun.value || \"\",\n relationshipToSalesforce: this.form.relationshipToSalesforce.value || \"\",\n bio: this.form.bio.value || \"\",\n username: this.form.slug.value || \"\",\n twitterHandle: this.form.twitter.value || \"\",\n facebookHandle: this.form.facebook.value || \"\",\n linkedinHandle: this.form.linkedIn.value || \"\",\n websiteUrl: this.form.website.value || \"\",\n ...virtualRegistrationFields,\n phone: {\n ...phoneFields\n }\n };\n }\n\n private async handleRequestSave() {\n this.cancelButtonDisabled = true;\n this.saveButtonDisabled = true;\n\n const valid = this.validate();\n if (valid) {\n const payload = this.assemblePayload();\n\n try {\n if (isIISUpdateProfileEnabled()) {\n await this.iis?.updateProfile?.(payload);\n const response = await getProfile();\n this.updateChassisProfile(response);\n } else {\n const response = await updateProfile(payload);\n this.updateChassisProfile(response);\n await this.refreshUserInfo();\n }\n\n showToast({\n message: this.labels.toastUpdateSuccess,\n variant: \"success\",\n });\n\n this.closeModal();\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : \"\";\n showToast({\n message: this.translateProfileUpdateError(errorMessage),\n variant: \"error\",\n });\n }\n } else {\n showToast({\n message: this.labels.toastFieldInvalid,\n variant: \"error\",\n });\n }\n\n this.cancelButtonDisabled = false;\n this.saveButtonDisabled = false;\n }\n\n // For a small subset of cases attempt to translate the error coming back from the profile service\n // Eventually this should be replaced by error codes\n private translateProfileUpdateError(responseText: string) {\n if (\n responseText.includes(\"Username is not available\") ||\n responseText.includes(\"Username is unavailable\")\n ) {\n return t(\"profileEditModal.usernameUnavailableError\");\n }\n\n return t(\"profileEditModal.toastUpdateError\");\n }\n\n updateChassisProfile(value: Partial) {\n if (!isRenderProfileChassis()) {\n return;\n }\n\n const profile = Object.assign({}, chassis()!.profile, value) as UserProfile;\n\n chassis({\n ...chassis()!,\n profile,\n });\n }\n}\n","export function getInputValue(\n input: HTMLInputElement | HTMLSelectElement | null | undefined\n): string {\n return input ? input.value : \"\";\n}\n\nexport function isInputRequired(\n input: HTMLInputElement | HTMLSelectElement | null | undefined\n): boolean {\n return input ? input.required : false;\n}\n\nexport function isInputValid(\n input: HTMLInputElement | null | undefined\n): boolean | undefined {\n return input ? input.hasAttribute(\"aria-invalid\") : true;\n}\n","import Icon from \"tds/icon\";\n\nexport default class extends Icon {}\n","import { api } from \"lwc\";\nimport Button from \"tds/button\";\nimport { Sprite } from \"tds/icon\";\n\nexport default class extends Button {\n @api iconSymbol: string = undefined!;\n @api iconSprite: Sprite = \"utility\";\n @api iconSize: string = \"override\";\n}\n","import { api } from \"lwc\";\nimport ButtonIconText from \"tbui/buttonIconText\";\nimport { Sprite } from \"tds/icon\";\n\nexport default class extends ButtonIconText {\n @api href: string | null = null;\n @api rel: string | null = null;\n @api target: \"_self\" | \"_blank\" | \"_parent\" | \"_top\" | null = null;\n @api iconSymbol: string = undefined!;\n @api iconSprite: Sprite = \"utility\";\n @api iconSize: string = \"override\";\n}\n","import classNames from \"classnames\";\nimport { VariableDefinitionNode } from \"graphql\";\nimport { api, LightningElement, track } from \"lwc\";\nimport Button from \"tds/button\";\nimport { Variant, createVariantClassName } from \"tds/button\";\n\nexport type VariantConfig = {\n active: Variant;\n inactive: Variant;\n};\nexport type ButtonState = {\n active: boolean;\n focused?: boolean;\n variant: Variant;\n config: VariantConfig;\n};\n\nconst defaultVariant = \"neutral\";\nconst defaultState = {\n active: false,\n variant: defaultVariant,\n focused: false,\n config: {\n active: defaultVariant,\n inactive: defaultVariant,\n },\n};\n\nexport default class extends Button {\n private state: ButtonState = undefined!;\n\n @api\n get active() {\n return this.state.active;\n }\n set active(value: boolean) {\n this.updateState({ active: attrToBool(value) });\n }\n\n @api\n get activeVariant() {\n return this.config.active;\n }\n set activeVariant(value) {\n this.updateConfig({ active: value });\n }\n\n @api\n get focused() {\n return this.state.focused;\n }\n set focused(value) {\n this.updateState({ focused: attrToBool(value) });\n }\n\n private get classes() {\n return classNames({\n \"state-active\": this.state.active && !this.state.focused,\n \"state-active-focus\": this.state.active && this.state.focused,\n \"state-inactive\": !this.state.active,\n });\n }\n\n private get config(): VariantConfig {\n if (!this.state || !this.state.config) {\n this.updateConfig({});\n }\n\n return this.state.config;\n }\n\n connectedCallback() {\n this.updateState({});\n }\n\n private updateConfig(updates: Partial) {\n this.updateState({\n config: {\n ...this.config,\n ...updates,\n },\n });\n }\n\n private updateState(updates: Partial) {\n this.state = { ...defaultState, ...this.state, ...updates };\n\n this.updateVariant();\n }\n\n private updateVariant() {\n if (![this.config.active, this.config.inactive].includes(this.variant)) {\n this.updateConfig({\n inactive: this.variant,\n });\n }\n\n this.variant = this.state.active\n ? this.config.active\n : this.config.inactive;\n }\n\n private handleEvent(event: MouseEvent) {\n if (attrToBool(this.disabled)) return;\n\n switch (event.type) {\n case \"mouseout\": {\n this.updateState({\n focused: false,\n });\n break;\n }\n case \"mouseover\": {\n this.updateState({\n focused: true,\n });\n break;\n }\n case \"focus\": {\n this.updateState({\n focused: true,\n });\n break;\n }\n case \"blur\": {\n this.updateState({\n focused: false,\n });\n break;\n }\n }\n }\n}\n\nfunction attrToBool(attr: T): boolean {\n if (typeof attr === \"boolean\") {\n return attr;\n }\n if (typeof attr === \"string\") {\n return attr === \"true\" || attr === \"\";\n }\n return !!attr;\n}\n","import {\n CommunityAsyncResponse,\n LegacyCommunityConnections,\n CommunityStats,\n CommunityUser,\n} from \"./types\";\n\ntype CommunityType =\n | Partial\n | Partial\n | Partial\n | null\n | Partial;\ntype CommunityUserType =\n | Partial\n | null\n | Partial;\n\nconst checkForTypename = (data: CommunityType) => {\n if (data && !data.__typename) {\n throw new Error(\n \"Error handling CommunityUser data. Did you forget to include __typename in your query?\"\n );\n }\n};\n\nexport const getIsLoading = (data: CommunityType) => {\n checkForTypename(data);\n return data && data.__typename === \"CommunityAsyncResponse\"\n ? data.isLoading\n : false;\n};\n\nexport const getError = (data: CommunityType) => {\n checkForTypename(data);\n return data && data.__typename === \"CommunityAsyncResponse\" && data.error\n ? data.error\n : null;\n};\n\nexport const getUserId = (data: CommunityUserType) => {\n checkForTypename(data);\n return data && data.__typename === \"CommunityUser\" ? data.id : null;\n};\n","import { AuraComponent } from \"shared/aura\";\nimport { ApexError } from \"./types\";\n\ninterface ApexCallback {\n (): void;\n}\n\ninterface MethodArgs {\n [k: string]: any;\n}\n\ninterface BridgeComponent extends AuraComponent {\n getApexMethod(path: string): (args: A) => Promise;\n}\n\nconst BRIDGE_COMPONENT_TIMEOUT = 150000;\n\nlet bridgeComponent: BridgeComponent;\nlet pendingCalls: ApexCallback[] = [];\nlet componentTimeout: NodeJS.Timeout;\n\nconst resolvePendingCalls = () => {\n while (pendingCalls.length > 0) {\n let cb = pendingCalls.shift();\n cb && cb();\n }\n};\n\nexport const setBridgeComponent = (component: AuraComponent) => {\n bridgeComponent = component as BridgeComponent;\n clearTimeout(componentTimeout);\n\n resolvePendingCalls();\n};\n\nexport const getBridgeComponent = () => bridgeComponent;\n\nexport const useApexMethod = (path: string) => {\n return (args: A) => {\n if (!bridgeComponent && !componentTimeout) {\n componentTimeout = setTimeout(() => {\n resolvePendingCalls();\n }, BRIDGE_COMPONENT_TIMEOUT);\n }\n\n let resolver: (value: Promise) => void;\n let rejecter: (error: ApexError | string | Error) => void;\n\n const promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n\n const callback = () => {\n if (!bridgeComponent) {\n return rejecter(\n `LegacyApexBridge: Timed out. Bridge component was not set after ${BRIDGE_COMPONENT_TIMEOUT}ms.`\n );\n }\n\n try {\n const method = bridgeComponent.getApexMethod(path);\n resolver(method(args));\n } catch (e) {\n rejecter(getErrorMessage(e));\n }\n };\n\n if (!bridgeComponent) {\n pendingCalls.push(callback);\n } else {\n callback();\n }\n\n return promise;\n };\n};\n\nexport function getErrorMessage(error: ApexError | string | Error) {\n if (typeof error === \"string\") return error;\n if (error instanceof Error) return error.message;\n return (error && error.body && error.body.message) || \"Unknown Error\";\n}\n","import deepEqual from \"fast-deep-equal\";\n\nexport type EqualityFn = (newArgs: any[], lastArgs: any[]) => boolean;\n\nexport interface CachedFunction void> {\n resetCache: () => void;\n (this: any, ...newArgs: any[]): ReturnType;\n}\n\n/**\n * Based on memoize-one. Caches a function call once, resets on new args. This is useful for most simple caching needs.\n * The cache is reset each time the args used are changed.\n *\n * Example:\n * ```ts\n * let count = 0;\n * const expensiveMethod = memoizeOnce((name: string) => {\n * count++;\n * return `called: ${count}`\n * })\n *\n * expensiveMethod(\"Frank\"); // \"called: 1\"\n * expensiveMethod(\"Frank\"); // \"called: 1\"\n * expensiveMethod(\"George\"); // \"called: 2\"\n * expensiveMethod(\"George\"); \"called: 2\"\n *\n * expensiveMethod(\"Frank\"); // \"called: 3\"\n * expensiveMethod.resetCache();\n * expensiveMethod(\"Frank\"); // \"called: 4\"\n * ```\n */\nexport function memoizeOnce<\n ResultFn extends (this: any, ...newArgs: any[]) => ReturnType\n>(\n resultFn: ResultFn,\n isEqual: EqualityFn = deepEqual\n): CachedFunction {\n let lastThis: unknown;\n let lastArgs: unknown[] = [];\n let lastResult: ReturnType;\n let calledOnce: boolean = false;\n\n function reset() {\n calledOnce = false;\n }\n\n function memoized(\n this: unknown,\n ...newArgs: unknown[]\n ): ReturnType {\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n\n memoized.resetCache = reset;\n\n return memoized;\n}\n","import { memoizeOnce } from \"../../../shared/memoize\";\nimport { getErrorMessage, useApexMethod } from \"tbme/legacyApexBridge\";\nimport {\n currentCommunityUser,\n pendingValue,\n profileCommunityUser,\n setUserStateFromApexResponse,\n} from \"./state\";\nimport { ApexCommunityUsers } from \"./types\";\nimport { getContext } from \"../../tbme/profilePage/context\";\nimport { ProfileContext } from \"elements/tbme/profilePage/types\";\n\ntype CommunitySource = \"tz\" | \"tbc2\";\ninterface ApexCommunityUsersArgs {\n source: CommunitySource;\n profileUserId: string;\n isExternalUser: boolean;\n}\n\nlet shouldFetchUsers: boolean = true;\nlet localUserRecords: { [k: string]: ApexCommunityUsers | undefined } = {\n tz: undefined,\n tbc2: undefined,\n};\n\nexport const setShouldFetchUsers = (value: boolean) => {\n shouldFetchUsers = value;\n};\n\nexport const setLocalUserRecords = (\n key: CommunitySource,\n value: ApexCommunityUsers | undefined\n) => {\n localUserRecords = {\n ...localUserRecords,\n [key]: value,\n };\n};\n\nconst getLocalUserRecords = (key: CommunitySource) => {\n if (!shouldFetchUsers) {\n return localUserRecords[key];\n }\n\n return undefined;\n};\n\nconst getCommunityUsers = useApexMethod<\n ApexCommunityUsersArgs,\n ApexCommunityUsers\n>(\"TrailblazerActivityController.getCommunityUsers\");\n\nconst fetchUsersFromApexOrContext = (\n source: CommunitySource,\n profileUserId: string,\n isExternalUser: boolean = false\n) => {\n const recordsFromContext = getLocalUserRecords(source);\n\n if (recordsFromContext) {\n return Promise.resolve(recordsFromContext);\n }\n\n return getCommunityUsers({ source, profileUserId, isExternalUser });\n};\n\nexport const fetchTbcUsers = memoizeOnce(\n (profileUserId: string, isExternalUser: boolean = false) =>\n fetchUsersFromApexOrContext(\"tbc2\", profileUserId, isExternalUser)\n);\n\nexport const fetchTzUsers = memoizeOnce(\n (profileUserId: string, isExternalUser: boolean = false) =>\n fetchUsersFromApexOrContext(\"tz\", profileUserId, isExternalUser)\n);\n\nexport const fetchUsers = async (\n profileUserId: string,\n isExternalUser: boolean = false\n) => {\n // Set pending states\n [profileCommunityUser, currentCommunityUser].map((fn) => fn(pendingValue));\n\n let response;\n\n try {\n response = await fetchTbcUsers(profileUserId, isExternalUser);\n\n setUserStateFromApexResponse(response);\n } catch (error) {\n [profileCommunityUser, currentCommunityUser].map((varFn) =>\n varFn({\n __typename: \"CommunityAsyncResponse\",\n error: getErrorMessage(error),\n isLoading: false,\n })\n );\n }\n\n return response;\n};\n","import { useApexMethod } from \"tbme/legacyApexBridge\";\nimport { fetchTbcUsers } from \"./fetchUsers\";\nimport { legacyCommunityConnections } from \"./state\";\nimport { sharedUrls } from \"../../tbme/localState/urls\";\nimport {\n CommunityConnectionCollection,\n LegacyCommunityConnections,\n} from \"./types\";\nimport { currentUser as getCurrentUser } from \"tbme/localState\";\nimport { logger } from \"tbme/logger\";\n\ninterface ApexFollowArgs {\n contextProfileUserCommunityUserId: string;\n isMockProfile: boolean;\n uid: string;\n}\n\ninterface ApexUnfollowArgs {\n existingEntitySubscriptionId: string;\n isMockProfile: boolean;\n uid: string;\n}\n\ninterface Viewer {\n id: string;\n avatarUrl: string;\n fullName: string;\n}\n\nconst apexFollow = useApexMethod(\n \"TrailblazerConnectionsController.followProfileUser\"\n);\n\nconst apexUnfollow = useApexMethod(\n \"TrailblazerConnectionsController.unFollowProfileUser\"\n);\n\nexport const follow = async (\n profileUserId: string,\n isExternalUser: boolean\n): Promise => {\n const { contextUser, currentUser } = await fetchTbcUsers(\n profileUserId,\n isExternalUser\n );\n\n if (!contextUser || !contextUser.ExternalId || !currentUser) {\n throw new Error(\"No community user found.\");\n }\n\n try {\n const result = await apexFollow({\n uid: profileUserId,\n isMockProfile: isExternalUser,\n contextProfileUserCommunityUserId: contextUser.ExternalId,\n });\n\n if (result) {\n const user = getCurrentUser()!;\n const viewer = {\n id: currentUser.ExternalId,\n avatarUrl: user.avatarUrl,\n fullName: user.fullName,\n };\n legacyCommunityConnections(\n updateConnectionsOnFollow(\n legacyCommunityConnections() as LegacyCommunityConnections,\n viewer,\n result\n )\n );\n }\n\n return !!result;\n } catch (e) {\n logger.error(e);\n return false;\n }\n};\n\nexport const unfollow = async (\n profileUserId: string,\n isExternalUser: boolean,\n viewerSubscriptionId: string\n): Promise => {\n if (!viewerSubscriptionId) {\n return false;\n }\n\n const { currentUser } = await fetchTbcUsers(profileUserId, isExternalUser);\n\n if (!currentUser) {\n throw new Error(\"No community user found.\");\n }\n\n try {\n const result = await apexUnfollow({\n uid: profileUserId,\n isMockProfile: isExternalUser,\n existingEntitySubscriptionId: viewerSubscriptionId,\n });\n\n if (result) {\n const user = getCurrentUser()!;\n const viewer = {\n id: currentUser.ExternalId,\n avatarUrl: user.avatarUrl,\n fullName: user.fullName,\n };\n\n legacyCommunityConnections(\n updateConnectionsOnUnfollow(\n legacyCommunityConnections() as LegacyCommunityConnections,\n viewer\n )\n );\n }\n\n return result;\n } catch (error) {\n logger.error(error);\n return false;\n }\n};\n\n/**\n * Exported for tests\n */\nexport function updateConnectionsOnFollow(\n currentValue: LegacyCommunityConnections,\n viewer: Viewer,\n subscriptionId?: string\n) {\n const result = fillFollowers(currentValue.followers);\n\n result.count++;\n\n if (result.connections!.length < 5) {\n const { id, avatarUrl, fullName } = viewer;\n result.connections = [\n {\n __typename: \"CommunityConnection\",\n id: id,\n name: `${fullName}`,\n url: sharedUrls.profile(),\n imageUrl: `${avatarUrl}`,\n },\n ...result.connections!,\n ];\n }\n\n return {\n ...currentValue,\n followers: result,\n viewerSubscriptionId: subscriptionId || null,\n };\n}\n\nexport function updateConnectionsOnUnfollow(\n currentValue: LegacyCommunityConnections,\n viewer: Viewer\n) {\n const result = fillFollowers(currentValue.followers);\n\n result.count = result.count > 0 ? result.count - 1 : 0;\n\n result.connections = result.connections!.filter(({ id }) => id !== viewer.id);\n\n return {\n ...currentValue,\n viewerSubscriptionId: null,\n followers: result,\n };\n}\n\nfunction fillFollowers(\n followers: CommunityConnectionCollection | null\n): CommunityConnectionCollection {\n return {\n __typename: \"CommunityConnectionCollection\",\n count: 0,\n connections: [],\n url: sharedUrls.tbcUserConnections({ tab: \"followers\" }),\n ...filterNull(followers || {}),\n };\n}\n\nfunction filterNull(input: object) {\n const result: any = {};\n\n for (let [key, value] of Object.entries(input)) {\n if (\n input[key as keyof typeof input] !== null &&\n input[key as keyof typeof input] !== undefined\n ) {\n result[key] = value;\n }\n }\n\n return result;\n}\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { api, LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { fetchCommunityProfile } from \"tbtbc/communityData\";\nimport { getError, getIsLoading, getUserId } from \"../communityData/queryUtils\";\nimport { LegacyCommunityConnections } from \"../communityData/types\";\nimport { follow, unfollow } from \"../communityData/followActions\";\nimport { FollowingContext } from \"./gql/FollowingContext\";\nimport { Size } from \"@devforce/th-components/modules/tds/button/button\";\nimport { showToast } from \"@devforce/th-components/modules/tds/toaster/toaster\";\n\nexport const FOLLOWING_QUERY = gql`\n query FollowingContext {\n profileUser @client {\n __typename\n ... on PublicProfile {\n id\n isSelf\n isExternalUser\n\n legacyCommunityConnections @client {\n __typename\n ... on CommunityAsyncResponse {\n isLoading\n error\n }\n ... on LegacyCommunityConnections {\n viewerCanFollow\n viewerSubscriptionId\n }\n }\n }\n }\n }\n`;\nexport default class extends LightningElement {\n @api following: boolean = false;\n @api size: Size = \"small\";\n\n // internal only, for stories\n @api focused: boolean = false;\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"tbcUserActions.follow\",\n \"tbcUserActions.unfollow\",\n \"tbcUserActions.following\",\n \"tbcUserActions.followError\",\n ],\n })\n private labels: { tbcUserActions: LabelTranslations } = undefined!;\n\n private visible = false;\n private pending = false;\n private userId: string = undefined!;\n private isExternalUser: boolean = false;\n private subscriptionId?: string | null;\n\n @wire(QueryAdapter, {\n query: FOLLOWING_QUERY,\n })\n private handleResult({ data }: ApolloQueryResult) {\n const { profileUser } = data || {};\n\n if (!profileUser || profileUser.__typename !== \"PublicProfile\") {\n return;\n }\n\n const { legacyCommunityConnections, isSelf } = profileUser;\n\n if (\n getIsLoading(legacyCommunityConnections) ||\n getError(legacyCommunityConnections)\n ) {\n this.visible = false;\n return;\n }\n\n if (!legacyCommunityConnections) {\n this.visible = false;\n return;\n }\n\n const {\n viewerCanFollow,\n viewerSubscriptionId,\n } = legacyCommunityConnections as LegacyCommunityConnections;\n\n this.visible = !!(!isSelf && viewerCanFollow);\n this.following = !!viewerSubscriptionId;\n this.subscriptionId = viewerSubscriptionId;\n this.userId = profileUser.id;\n this.isExternalUser = profileUser.isExternalUser;\n }\n\n private async handleFollowClick() {\n if (this.pending) return;\n\n const isFollowing = this.following;\n this.pending = true;\n\n //optimistic change\n this.following = !this.following;\n\n const result = isFollowing\n ? await unfollow(this.userId, this.isExternalUser, this.subscriptionId!)\n : await follow(this.userId, this.isExternalUser);\n\n if (result) {\n this.pending = false;\n } else {\n this.following = !this.following;\n showToast({\n variant: \"error\",\n message: this.labels.tbcUserActions.followError,\n });\n }\n }\n}\n","import { AuraComponent, AuraComponentAttrs } from \"shared/aura\";\nimport { ProfileContext } from \"./types\";\n\n/**\n * Creates a service for collecting Aura component changes before LightningOut has loaded,\n * then applying the changes after the component has loaded. After LightningOut is available\n * the set method directly applies changes to the component.\n */\nexport class ComponentTracker {\n private component?: AuraComponent;\n private trackedChanges = new Map();\n private contextSelector?: (context: ProfileContext) => AuraComponentAttrs;\n\n set(key: string, value: any) {\n this.updateValue(key, value);\n }\n\n get(key: string): T | undefined {\n return this.component ? this.component.get(key) : undefined;\n }\n\n apply(attrs: AuraComponentAttrs) {\n for (let [key, value] of Object.entries(attrs)) {\n key = key.startsWith(\"v.\") ? key : `v.${key}`;\n this.set(key, value);\n }\n }\n\n setComponent(value: AuraComponent) {\n this.component = value;\n\n this.commitPendingChanges();\n }\n\n getComponent() {\n return this.component;\n }\n\n setSelector(selector: (context: ProfileContext) => AuraComponentAttrs) {\n this.contextSelector = selector;\n }\n\n updateValue(key: string, value: any) {\n this.trackedChanges.set(key, value);\n this.component && this.component.set(key, value);\n }\n\n onContextChange = (context: ProfileContext) => {\n if (!this.contextSelector) return;\n\n this.apply(this.contextSelector(context));\n };\n\n private commitPendingChanges() {\n if (!this.component) {\n throw new Error(\"Component is not set.\");\n }\n\n for (let [key, value] of this.trackedChanges.entries()) {\n this.component.set(key, value);\n }\n }\n}\n\nexport class ProfileEditModal extends ComponentTracker {\n open() {\n const component = this.getComponent();\n\n if (\n component &&\n component.helper &&\n component.helper.initializeProfileEdit\n ) {\n component.helper.initializeProfileEdit(component);\n }\n\n this.updateValue(\"v.showProfileEditModal\", true);\n }\n close() {\n this.updateValue(\"v.showProfileEditModal\", false);\n }\n}\n\n/**\n * Named aura component tracker instances used for applying state changes\n * after the initial load.\n */\nexport const trackedComponents = {\n userDetails: new ComponentTracker(),\n aboutMeSocialLinks: new ComponentTracker(),\n aboutMeAvatar: new ComponentTracker(),\n profileEdit: new ProfileEditModal(),\n achievements: new ComponentTracker(),\n skills: new ComponentTracker(),\n badges: new ComponentTracker(),\n recognitions: new ComponentTracker(),\n appExchange: new ComponentTracker(),\n developerMarketplace: new ComponentTracker(),\n mvp: new ComponentTracker(),\n rank: new ComponentTracker(),\n profileUpdater: new ComponentTracker(),\n certifications: new ComponentTracker(),\n};\n","import { gql } from \"@apollo/client\";\n\nexport default gql`\n type User {\n detail: Actor!\n }\n type ProfileData {\n communityUserId: String!\n isMvp: Boolean\n runningCommunityUserId: String\n communityUserUrls: CommunityUserUrls\n questionAndAnswersStats: QuestionAndAnswersStats\n communityConnections: CommunityConnections\n }\n\n type CommunityUserUrls {\n communityUserUrls: CommunityUserUrls\n answersUrl: String\n bestAnswersUrl: String\n feedUrl: String\n filesUrl: String\n followersUrl: String\n followingUrl: String\n groupsUrl: String\n inboxUrl: String\n questionsUrl: String\n }\n\n type QuestionAndAnswersStats {\n answersCount: Int!\n bestAnswersCount: Int!\n communityUserRank: Int\n questionsCount: Int!\n }\n\n type CommunityConnections {\n followers(after: String, first: Int): ActorWithTotalCountConnection!\n following(after: String, first: Int): ActorWithTotalCountConnection!\n groups(after: String, first: Int): GroupDetailWithTotalCountConnection!\n }\n\n type ActorWithTotalCountConnection {\n edges: [ActorEdge]\n pageInfo: PageInfo!\n totalCount: Int\n }\n\n type GroupDetailWithTotalCountConnection {\n edges: [GroupDetailEdge]\n pageInfo: PageInfo!\n totalCount: Int\n }\n\n type ActorEdge {\n node: Actor!\n }\n\n type Actor {\n id: ID!\n avatar: String!\n url: String\n name: String!\n isCurrentUser: Boolean!\n following: Boolean\n }\n\n type GroupDetailEdge {\n node: GroupDetail!\n }\n\n type GroupDetail {\n id: ID!\n avatar: Avatar!\n url: String\n name: String!\n }\n\n type Avatar {\n large: String!\n }\n\n interface Error {\n argumentName: String\n clientMessage: String!\n clientMutationId: String\n code: String!\n message: String!\n statusCode: Int!\n }\n\n type InsufficientAccessError implements Error {\n argumentName: String\n clientMessage: String!\n clientMutationId: String\n code: String!\n message: String!\n statusCode: Int!\n }\n type InvalidArgumentError implements Error {\n argumentName: String\n clientMessage: String!\n clientMutationId: String\n code: String!\n message: String!\n statusCode: Int!\n }\n type RequestTimeoutError implements Error {\n argumentName: String\n clientMessage: String!\n clientMutationId: String\n code: String!\n message: String!\n statusCode: Int!\n }\n type UnknownError implements Error {\n argumentName: String\n clientMessage: String!\n clientMutationId: String\n code: String!\n message: String!\n statusCode: Int!\n }\n type UserNotFoundError implements Error {\n argumentName: String\n clientMessage: String!\n clientMutationId: String\n code: String!\n message: String!\n statusCode: Int!\n }\n\n type FollowUserInput {\n clientMutationId: String\n userId: ID!\n }\n\n type FollowUserResult {\n clientMutationId: String\n user: Actor!\n }\n\n union FollowUserPayload =\n FollowUserResult\n | InsufficientAccessError\n | InvalidArgumentError\n | RequestTimeoutError\n | UnknownError\n | UserNotFoundError\n\n type UnfollowUserInput {\n clientMutationId: String\n userId: ID!\n }\n\n type UnfollowUserResult {\n clientMutationId: String\n user: Actor!\n }\n\n union UnfollowUserPayload =\n UnfollowUserResult\n | InsufficientAccessError\n | InvalidArgumentError\n | RequestTimeoutError\n | UnknownError\n | UserNotFoundError\n\n extend type Query {\n profileData(userSlug: ID!): ProfileData!\n user(userId: ID!): User!\n }\n\n extend type Mutation {\n followUser(input: FollowUserInput!): FollowUserPayload\n unfollowUser(input: UnfollowUserInput!): UnfollowUserPayload\n }\n`;\n","import { ApolloClient, createHttpLink, InMemoryCache } from \"@apollo/client\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { createContextAdapter } from \"common/context\";\nimport { isRenderProfileChassis, locale } from \"tbme/localState\";\nimport { fetch } from \"@devforce/trailhead-client-fetch\";\nimport tbcSchema from \"../../../gql/tbcSchema\";\nimport merge from \"lodash/merge\";\n\ntype Nullable = T | null;\n\nexport interface ClientAdapterValue {\n client: ApolloClient;\n}\nexport interface ClientAdapterConfig {\n client?: Nullable>;\n}\nexport interface ClientAdapterContext {\n client?: Nullable>;\n}\n\nexport const adapterContextSchema = {\n client: \"optional\",\n};\n\nexport interface ClientConfig {\n client?: ApolloClient;\n accessToken: string;\n accessTokenType: \"Bearer\" | \"Visualforce\";\n uri: string;\n fetch: typeof fetch;\n}\n\nexport const tbcApiBffUrl: string =\n window?.sfdcBase?.exp?.TBC_API_BFF_URL || \"\";\n\nexport const getDefaultConfig = (): ClientConfig => ({\n accessToken: \"\",\n accessTokenType: \"Visualforce\",\n uri: tbcApiBffUrl || (process.env.TBC_API_BFF_URL as string) || \"\",\n fetch,\n});\n\nlet config = {\n ...getDefaultConfig(),\n client: createClient(getDefaultConfig()),\n};\n\nexport const ClientAdapter = createContextAdapter<\n ClientAdapterValue,\n ClientAdapterConfig,\n ClientAdapterContext\n>(() => ({ client: config.client }), adapterContextSchema);\n\nexport function setGlobalClient(client: ApolloClient) {\n config.client = client;\n\n ClientAdapter.setGlobalContext({ client });\n}\n\nexport function setAccessToken(accessToken: string) {\n config.accessToken = accessToken;\n\n setGlobalClient(createClient(config));\n}\n\nexport function setAccessTokenType(accessTokenType: \"Bearer\" | \"Visualforce\") {\n config.accessTokenType = accessTokenType;\n\n setGlobalClient(createClient(config));\n}\n\nexport function setUri(uri: string) {\n config.uri = uri;\n\n setGlobalClient(createClient(config));\n}\n\nexport function getClient() {\n return config.client;\n}\n\nexport function getConfig() {\n return config;\n}\n\nexport function createClient(config: ClientConfig) {\n const { uri, accessToken, accessTokenType, fetch } = config;\n\n const httpLink = createHttpLink({\n uri,\n fetch,\n });\n const headersLink = setContext((_, { headers }) => {\n return {\n headers: {\n ...headers,\n \"accept-language\": locale(),\n ...(isRenderProfileChassis()\n ? {\n \"x-idp\": \"iis\",\n }\n : {}),\n ...(accessToken\n ? {\n authorization: `${accessTokenType} ${accessToken}`,\n }\n : {}),\n },\n };\n });\n\n return new ApolloClient({\n link: headersLink.concat(httpLink),\n defaultOptions: {\n watchQuery: {\n errorPolicy: \"all\",\n returnPartialData: true,\n },\n },\n cache: new InMemoryCache({\n addTypename: false,\n typePolicies: {\n Query: {\n fields: {\n profileData: {\n merge(existing, incoming) {\n return merge({}, existing, incoming);\n },\n },\n },\n },\n },\n }),\n typeDefs: tbcSchema,\n });\n}\n","import { setAccessToken, setAccessTokenType } from \"tbme/clientAdapter\";\nimport {\n setAccessToken as setAccessTokenTbtbc,\n setAccessTokenType as setAccessTokenTypeTbtbc,\n} from \"tbtbc/clientAdapter\";\nimport { currentUser } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\n\nexport class CurrentUserContextError extends Error {}\n\n/**\n * Update currentUser variable from identity object set by visualforce page.\n */\nexport const setLegacyCurrentUserState = ({\n cuid,\n identity,\n}: ProfileContext) => {\n if (!cuid || !identity) {\n currentUser(null);\n return;\n }\n\n const { name, ProfilePictureUrl, backgroundImageUrl } = identity;\n\n if (!name || !ProfilePictureUrl || !backgroundImageUrl) {\n throw new CurrentUserContextError(\n `Invalid context provided for currentUser.`\n );\n }\n\n setAccessToken(identity.access_token || \"\");\n\n currentUser({\n id: cuid,\n fullName: name,\n avatarUrl: ProfilePictureUrl,\n backgroundImageUrl: backgroundImageUrl,\n });\n};\n\nexport const setChassisCurrentUserState = ({ chassis }: ProfileContext) => {\n const accessTokenType = \"Bearer\";\n setAccessTokenType(accessTokenType);\n setAccessTokenTypeTbtbc(accessTokenType);\n\n // Set access tokens for both TBTBC and TBME Clients\n setAccessToken(chassis?.token || \"\");\n setAccessTokenTbtbc(chassis?.token || \"\");\n};\n","import { AppLauncherItem } from \"elements/tbme/localState/types\";\nimport { appLauncherItems } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\n\nexport class AppLauncherContextError extends Error {}\n\n/**\n * Update appLauncherItem variable from ProfileContext\n */\nexport const setAppLauncherState = ({ appLauncherLinks }: ProfileContext) => {\n if (!appLauncherLinks) return;\n\n let items: AppLauncherItem[] = [];\n\n try {\n items = Object.entries(appLauncherLinks)\n .sort((a, b) => {\n const [aKey, aEntry] = a;\n const [bKey, bEntry] = b;\n return (\n aEntry.UserInterfacePosition__c - bEntry.UserInterfacePosition__c\n );\n })\n .reduce(\n (\n acc: AppLauncherItem[],\n [key, { AppUrl__c, ImageUrl__c, Label }]\n ): AppLauncherItem[] => {\n return [\n ...acc,\n {\n id: key,\n link: { href: AppUrl__c },\n imageUrl: ImageUrl__c,\n label: Label,\n },\n ];\n },\n []\n );\n } catch (e) {\n throw new AppLauncherContextError(\n `Error processing appLauncherLinks: ${e}`\n );\n }\n\n appLauncherItems(items);\n};\n","import { profileUser as setProfileUser } from \"tbme/localState\";\nimport { LocalProfile } from \"../../localState/types\";\nimport { ProfileContext, UserObjectContext } from \"../types\";\nimport { t, legacyFormat } from \"tbme/localization\";\n\nexport class ProfileUserContextError extends Error {}\n\nconst fieldMapping = {\n bio: \"AboutMe\",\n companyName: \"CompanyName\",\n companySize: \"Company_Size__c\",\n companyWebsite: \"Company_Website__c\",\n country: \"Country\",\n countryCode: \"CountryCode\",\n facebook: \"FacebookProfileLink__c\",\n givenName: \"FirstName\",\n id: \"Id\",\n isPublicProfile: \"Is_Public_Profile__c\",\n familyName: \"LastName\",\n linkedIn: \"LinkedInProfileLink__c\",\n avatarUrl: \"MediumPhotoUrl\",\n pronoun: \"Pronoun__c\",\n relationshipToSalesforce: \"Relationship_To_Salesforce__c\",\n role: \"TBID_Role__c\",\n slug: \"TrailblazerId__c\",\n state: \"State\",\n stateCode: \"StateCode\",\n title: \"Title\",\n twitter: \"TwitterProfileLink__c\",\n website: \"WebsiteLink__c\",\n};\n\nconst translateFields = (profileUser: UserObjectContext) => {\n const result: any = {};\n\n for (const [target, source] of Object.entries(fieldMapping)) {\n const value = profileUser[source as keyof UserObjectContext];\n result[target] = value !== undefined ? value : null;\n }\n\n return result as LocalProfile;\n};\n\n/**\n * Update profileUser variable from identity object set by visualforce page.\n */\nexport const setProfileUserState = ({\n profileUser,\n profilePhotoUrl,\n profileUserBgImageUrl,\n isAvailableForHire,\n isCommunityUser,\n isExtProfileUser,\n}: ProfileContext) => {\n if (!profileUser) {\n return;\n }\n\n const fullName = getFullName({ profileUser });\n\n if (!fullName || !profilePhotoUrl || !profileUserBgImageUrl) {\n return;\n }\n\n setProfileUser({\n ...translateFields(profileUser),\n backgroundImageUrl: profileUserBgImageUrl,\n avatarUrl: profilePhotoUrl,\n fullName,\n isAvailableForHire: !!isAvailableForHire,\n isCommunityUser: !!isCommunityUser,\n isExternalUser: !!isExtProfileUser,\n });\n};\n\nexport const getFullName = ({ profileUser }: Partial) => {\n // Use both formatting schemes until all of the translations use the new form\n // TODO: removing legacy formatting after translations are updated\n return profileUser\n ? legacyFormat(\n t(\"fullName\", {\n givenName: profileUser.FirstName,\n familyName: profileUser.LastName,\n }),\n profileUser.FirstName,\n profileUser.LastName\n )\n : \"\";\n};\n\nexport const getProfileUserId = ({\n profileUser,\n}: Partial): string => {\n return profileUser ? profileUser.Id : \"\";\n};\n","import { Locale } from \"tbme/localization\";\nimport { locale } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\nimport { setLanguage } from \"@sfdc-www/digital-i18n\";\n\n/**\n * Update locale variable from identity object set by visualforce page.\n */\nexport const setLocaleState = ({ languageParam }: ProfileContext) => {\n if (!languageParam) {\n return;\n }\n\n locale(convertLocale(languageParam) as Locale);\n setLanguage(languageParam);\n};\n\nexport function convertLocale(input: string) {\n return input.replace(\"en_US\", \"en\").replace(\"_\", \"-\");\n}\n","import { localeOptions } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\nimport { convertLocale } from \"./locale\";\n\n/**\n * Set localeOptions var from VF context.\n */\nexport const setLocaleOptionsState = ({ languageOptions }: ProfileContext) => {\n if (!languageOptions) return;\n\n if (Array.isArray(languageOptions)) {\n localeOptions(\n languageOptions.map((languageOption) => ({\n ...languageOption,\n value: convertLocale(languageOption.value),\n }))\n );\n }\n};\n","import { chassis } from \"tbme/localState\";\nimport {\n ChassisContext,\n ChassisContextProfile,\n ProfileContext,\n} from \"../types\";\nimport { t } from \"tbme/localization\";\n\n/**\n * Set chassis context from digital-profile chassis\n */\nexport const setChassisState = ({ chassis: context }: ProfileContext) => {\n if (!context) return;\n chassis(context);\n};\n\n/**\n * Get profile user full name or a default value if neither first name or last name are present\n */\nexport const getFullName = (\n profile?: Pick\n) => {\n const firstName = profile?.firstName?.trim() || \"\";\n const lastName = profile?.lastName?.trim() || \"\";\n\n if (!firstName && !lastName) {\n return t(\"privateProfileOtherDefaultName\");\n } else {\n return `${firstName} ${lastName}`.trim();\n }\n};\n","import { ProfileContext } from \"./types\";\nimport { trackedComponents } from \"./componentTracker\";\nimport {\n setChassisCurrentUserState,\n setLegacyCurrentUserState,\n} from \"./contexts/currentUser\";\nimport { setAppLauncherState } from \"./contexts/appLauncherItems\";\nimport { setProfileUserState } from \"./contexts/profileUser\";\nimport { setLocaleState } from \"./contexts/locale\";\nimport { setLocaleOptionsState } from \"./contexts/localeOptions\";\nimport { setFooterLinksState } from \"./contexts/footerLinks\";\nimport { setAssetsState } from \"./contexts/assets\";\nimport {\n setLegacyBaseUrlState,\n setChassisBaseUrlState,\n} from \"./contexts/baseUrl\";\nimport { makeVar } from \"@apollo/client\";\nimport { subscribeToVar } from \"../reactiveVarAdapter/reactiveVarAdapter\";\nimport { ReactiveListener } from \"@apollo/client/cache/inmemory/reactiveVars\";\nimport {\n setLegacyTrailheadUrlState,\n setChassisTrailheadUrlState,\n} from \"./contexts/trailheadUrlState\";\nimport { setChassisState } from \"./contexts/chassis\";\nimport { isRenderProfileChassis } from \"tbme/localState\";\n\nexport { getFullName, getProfileUserId } from \"./contexts/profileUser\";\n\nexport const legacyContextVar = makeVar({});\n\nexport const subscribeToContextChange = (\n listener: ReactiveListener\n) => subscribeToVar(legacyContextVar, listener);\n\nObject.values(trackedComponents).map((tracker) =>\n subscribeToContextChange(tracker.onContextChange)\n);\nsubscribeToContextChange(setStateFromContext);\n\nexport const setContext = (context: ProfileContext) => {\n return legacyContextVar(context);\n};\n\nexport const getContext = () => {\n const value = legacyContextVar();\n\n if (Object.keys(value).length < 1) {\n throw new Error(\n \"Legacy Page Context is not set. It must be set before it can be retrieved.\"\n );\n }\n\n return value;\n};\n\n/**\n * Primary entry point for one-time update of local state variables from the TBID id.page context.\n */\nexport function setStateFromContext(context: ProfileContext) {\n setAssetsState(context);\n setAppLauncherState(context);\n setLocaleState(context);\n setProfileUserState(context);\n setLocaleOptionsState(context);\n setFooterLinksState(context);\n\n if (isRenderProfileChassis()) {\n setChassisBaseUrlState();\n setChassisTrailheadUrlState();\n setChassisCurrentUserState(context);\n setChassisState(context);\n } else {\n setLegacyBaseUrlState(context);\n setLegacyTrailheadUrlState(context);\n setLegacyCurrentUserState(context);\n }\n}\n","import { assetsUrl } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\nimport { setGlobalContext as setTdsContext } from \"tds/contextAdapter\";\n\n/**\n * Configure tds components with assets URL so that they can find icons and other resources.\n */\nexport const setAssetsState = ({ profileResourceUrl }: ProfileContext) => {\n if (!profileResourceUrl) return;\n\n assetsUrl(profileResourceUrl);\n\n setTdsContext({\n crossOriginAssets: true,\n assetsUrl: profileResourceUrl,\n });\n};\n","import { footerLinks } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\n\n/**\n * Set footerLinks var from VF context.\n */\nexport const setFooterLinksState = (context: ProfileContext) => {\n const fromContext = context.footerLinks;\n if (!fromContext) return;\n\n if (Array.isArray(fromContext)) {\n footerLinks(fromContext);\n }\n};\n","import { baseUrl } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\n\nexport const setLegacyBaseUrlState = ({ communityUrl }: ProfileContext) => {\n if (!communityUrl) return;\n\n baseUrl(communityUrl);\n};\n\nexport const setChassisBaseUrlState = () => {\n if (window?.sfdcBase?.exp?.DIGITAL_PROFILE_BASE_URL) {\n baseUrl(window?.sfdcBase?.exp?.DIGITAL_PROFILE_BASE_URL);\n }\n};\n","import { trailheadUrl } from \"tbme/localState\";\nimport { ProfileContext } from \"../types\";\n\nexport const setLegacyTrailheadUrlState = ({\n appLauncherLinks,\n}: ProfileContext) => {\n if (!appLauncherLinks) return;\n\n if (\n appLauncherLinks &&\n appLauncherLinks.trailhead &&\n appLauncherLinks.trailhead.AppUrl__c\n ) {\n trailheadUrl(appLauncherLinks.trailhead.AppUrl__c);\n }\n};\n\nexport const setChassisTrailheadUrlState = () => {\n if (window?.sfdcBase?.exp?.TRAILHEAD_URL) {\n trailheadUrl(window?.sfdcBase?.exp?.TRAILHEAD_URL);\n }\n};\n","import { getErrorMessage, useApexMethod } from \"tbme/legacyApexBridge\";\nimport {\n communityStats,\n getProfileCommunityUserId,\n pendingValue,\n profileCommunityUser,\n} from \"./state\";\nimport { ApexCommunityStatsResponse } from \"./types\";\n\ninterface ApexCommunityStatsArgs {\n communityUserId: string;\n}\n\nconst getCommunityStats = useApexMethod<\n ApexCommunityStatsArgs,\n ApexCommunityStatsResponse\n>(\"TrailblazerActivityController.getCommunityStats\");\n\nexport const fetchCommunityStats = async (\n communityUserId: string | null = getProfileCommunityUserId()\n) => {\n // If there is no user, set the community stats state to null and exit\n if (!communityUserId) {\n communityStats(null);\n\n return communityStats();\n }\n\n communityStats(pendingValue);\n\n try {\n const response = await getCommunityStats({\n communityUserId,\n });\n\n const { status, data } = response;\n\n communityStats({\n __typename: \"CommunityStats\",\n questionsCount: 0,\n answersCount: 0,\n bestAnswersCount: 0,\n communityUserRank: null,\n ...data,\n });\n } catch (error) {\n communityStats({\n __typename: \"CommunityAsyncResponse\",\n isLoading: false,\n error: getErrorMessage(error),\n });\n }\n\n return communityStats();\n};\n","import { memoizeOnce } from \"../../../shared/memoize\";\nimport { getErrorMessage, useApexMethod } from \"tbme/legacyApexBridge\";\nimport { currentUser } from \"tbme/localState\";\nimport { fetchTbcUsers } from \"./fetchUsers\";\nimport { legacyCommunityConnections, pendingValue } from \"./state\";\nimport { ApexConnectionsResponse, LegacyCommunityConnections } from \"./types\";\nimport { sharedUrls } from \"../../tbme/localState/urls\";\n\nconst { tbcUserConnections, tbcUserGroups, tbcGroupDetail } = sharedUrls;\n\ninterface ApexArgs {\n cuid: string | null;\n uid: string;\n isMockProfile: boolean;\n contextProfileCommunityUser: object | null;\n currentCommunityUser: object | null;\n}\n\nconst apexGetConnections = useApexMethod(\n \"TrailblazerConnectionsController.getCommunityConnections\"\n);\n\n/**\n * Fetchs raw apex response\n */\nexport const fetchApexConnections = memoizeOnce(\n async (profileUserId: string, isExternalUser: boolean) => {\n const user = currentUser();\n const currentUserId = user ? user.id : null;\n const tbcUsers = await fetchTbcUsers(profileUserId, isExternalUser);\n\n if (!(tbcUsers.contextUser && tbcUsers.contextUser.ExternalId)) {\n return Promise.resolve(null);\n }\n\n return apexGetConnections({\n uid: profileUserId,\n isMockProfile: isExternalUser,\n cuid: currentUserId,\n contextProfileCommunityUser:\n tbcUsers && tbcUsers.contextUser ? tbcUsers.contextUser : null,\n currentCommunityUser:\n tbcUsers && tbcUsers.currentUser ? tbcUsers.currentUser : null,\n });\n }\n);\n\n/**\n * Primary entry point\n */\nexport const fetchConnections = memoizeOnce(\n async (profileUserId: string, isExternalUser: boolean) => {\n legacyCommunityConnections(pendingValue);\n\n try {\n const response = await fetchApexConnections(\n profileUserId,\n isExternalUser\n );\n legacyCommunityConnections(transformResponse(response));\n } catch (error) {\n legacyCommunityConnections({\n __typename: \"CommunityAsyncResponse\",\n isLoading: false,\n error: getErrorMessage(error),\n });\n }\n }\n);\n\nfunction transformResponse(\n response: ApexConnectionsResponse | null\n): LegacyCommunityConnections | null {\n if (!response || !response.collaborationDataWrappers) {\n return null;\n }\n\n const result: LegacyCommunityConnections = {\n __typename: \"LegacyCommunityConnections\",\n viewerSubscriptionId: null,\n viewerCanFollow: false,\n followers: null,\n groups: null,\n following: null,\n };\n\n const {\n collaborationDataWrappers,\n existingEntitySubscriptionId,\n communityUserStatus,\n } = response;\n\n if (communityUserStatus) {\n const {\n runningUserCommunityUserId,\n contextProfileUserCommunityUserId,\n contextProfileUserIsActive,\n } = communityUserStatus;\n\n const user = currentUser();\n const currentUserId = user ? user.id : null;\n\n result.viewerCanFollow = !!(\n currentUserId &&\n runningUserCommunityUserId &&\n contextProfileUserCommunityUserId &&\n contextProfileUserIsActive\n );\n\n result.viewerSubscriptionId = existingEntitySubscriptionId || null;\n }\n\n collaborationDataWrappers.forEach(\n ({ count, typeName, collaborationData }) => {\n result[typeName] = {\n __typename: \"CommunityConnectionCollection\",\n count,\n url:\n typeName === \"groups\"\n ? tbcUserGroups()\n : tbcUserConnections({ tab: typeName }),\n connections: collaborationData.map(\n ({ communityIdentifier, imageUrl, linkUrl, name }) => {\n return {\n __typename: \"CommunityConnection\",\n id: communityIdentifier,\n imageUrl,\n url:\n typeName === \"groups\"\n ? tbcGroupDetail({ groupId: communityIdentifier })\n : linkUrl,\n name,\n };\n }\n ),\n };\n }\n );\n\n return result;\n}\n","import { memoizeOnce } from \"../../../shared/memoize\";\nimport {\n getContext,\n setContext,\n subscribeToContextChange,\n} from \"../../tbme/profilePage/context\";\nimport { getProfileCommunityUserId } from \"./state\";\nimport {\n fetchTzUsers,\n fetchTbcUsers,\n fetchUsers,\n setShouldFetchUsers,\n setLocalUserRecords,\n} from \"./fetchUsers\";\nimport { fetchCommunityStats } from \"./fetchCommunityStats\";\nimport { profileUser } from \"tbme/localState\";\nimport { ProfileContext } from \"../../tbme/profilePage/types\";\nimport { fetchConnections, fetchApexConnections } from \"./fetchConnections\";\nimport { logger } from \"tbme/logger\";\n\n/**\n * Impure function which fetches community data using ids from state. Can only be called once.\n */\nexport const fetchCommunityProfile = memoizeOnce(() => {\n const profile = profileUser();\n\n if (!profile || !profile.id) {\n return;\n }\n\n const fetchData = async (profileUserId: string, isExternalUser: boolean) => {\n // Wait for users before requesting subsequent data\n if (!getProfileCommunityUserId()) {\n await fetchUsers(profileUserId, isExternalUser);\n }\n\n // Allow subsequent calls to be made in parallel\n fetchCommunityStats();\n fetchConnections(profileUserId, isExternalUser);\n\n // TODO: add connections\n // TODO: add mvp\n };\n\n return fetchData(profile.id, !!profile.isExternalUser);\n});\n\nexport const resetCache = () => {\n fetchCommunityProfile.resetCache();\n fetchTzUsers.resetCache();\n fetchTbcUsers.resetCache();\n fetchConnections.resetCache();\n fetchApexConnections.resetCache();\n};\n\nconst isEmptyUsers = (check: object) =>\n check && Object.keys(check).length === 0;\n\n/**\n * Handle legacy page context changes. After the TBC2 launch community user records will no longer\n * be part of the Legacy Visualforce page state and must be fetched.\n */\nsubscribeToContextChange((context: ProfileContext) => {\n const { featureFlags } = context;\n\n const shouldFetchUsers = !!(\n featureFlags && featureFlags.isDeferCommunityUsersToClientOn\n );\n\n setShouldFetchUsers(shouldFetchUsers);\n\n if (!shouldFetchUsers) {\n const { tzUserRecords, tbc2UserRecords } = context;\n\n setLocalUserRecords(\"tz\", tzUserRecords);\n setLocalUserRecords(\"tbc2\", tbc2UserRecords);\n }\n\n updateTzUserFetchingState(context);\n updateTbc2UserFetchingState(context);\n});\n\n/**\n * Fetch TZ users\n */\nasync function updateTzUserFetchingState({\n featureFlags,\n tzUserRecords,\n profileUser,\n isExtProfileUser,\n}: ProfileContext) {\n if (\n featureFlags &&\n featureFlags.isDeferCommunityUsersToClientOn &&\n profileUser &&\n profileUser.Id &&\n isEmptyUsers(tzUserRecords)\n ) {\n try {\n const result = await fetchTzUsers(profileUser.Id, !!isExtProfileUser);\n\n setContext({\n ...getContext(),\n tzUserRecords: {\n ...(result || {}),\n resolved: true,\n },\n });\n } catch (error) {\n logger.error(error);\n return;\n }\n }\n}\n\n/**\n * Fetch tbc2 users\n */\nasync function updateTbc2UserFetchingState({\n featureFlags,\n tbc2UserRecords,\n profileUser,\n isExtProfileUser,\n}: ProfileContext) {\n if (\n featureFlags &&\n featureFlags.isDeferCommunityUsersToClientOn &&\n profileUser &&\n profileUser.Id &&\n isEmptyUsers(tbc2UserRecords)\n ) {\n try {\n const result = await fetchTbcUsers(profileUser.Id, !!isExtProfileUser);\n\n setContext({\n ...getContext(),\n tbc2UserRecords: {\n ...(result || {}),\n resolved: true,\n },\n });\n } catch (error) {\n logger.error(error);\n return;\n }\n }\n}\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { api, LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { fetchCommunityProfile } from \"tbtbc/communityData\";\nimport { getError, getIsLoading, getUserId } from \"../communityData/queryUtils\";\nimport { LegacyCommunityConnections } from \"../communityData/types\";\nimport {\n UserActionsContext,\n UserActionsContext_siteInfo_urls,\n} from \"./gql/UserActionsContext\";\nimport { follow, unfollow } from \"../communityData/followActions\";\nimport { Size } from \"@devforce/th-components/modules/tds/button/button\";\n\nexport const USER_ACTIONS_QUERY = gql`\n query UserActionsContext {\n profileUser @client {\n __typename\n ... on PublicProfile {\n isSelf\n\n communityUser @client {\n __typename\n ... on CommunityAsyncResponse {\n isLoading\n error\n }\n ... on CommunityUser {\n id\n }\n }\n }\n }\n\n siteInfo @client {\n urls {\n tbcHireMe\n tbcMessageUser\n }\n }\n }\n`;\n\nexport default class extends LightningElement {\n @api size: Size = \"medium\";\n @api showHireMeButton = false;\n\n @wire(MultiLabelAdapter, {\n labels: [\"tbcUserActions.message\", \"tbcUserActions.hireMe\"],\n })\n private labels: LabelTranslations = undefined!;\n private urls: UserActionsContext_siteInfo_urls = undefined!;\n private visible = false;\n\n connectedCallback() {\n fetchCommunityProfile();\n }\n\n @wire(QueryAdapter, {\n query: USER_ACTIONS_QUERY,\n })\n private handleResult({ data }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n\n this.urls = data.siteInfo.urls;\n\n const { profileUser } = data;\n\n if (!profileUser || profileUser.__typename !== \"PublicProfile\") {\n return;\n }\n\n const { communityUser, isSelf } = profileUser;\n const isTbcUser = !!getUserId(communityUser);\n\n if (getIsLoading(communityUser) || getError(communityUser)) {\n this.visible = false;\n return;\n }\n\n this.visible = !isSelf && isTbcUser;\n }\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport classNames from \"classnames\";\nimport { assignedSlotNames } from \"common/slot\";\nimport {\n MultiLabelAdapter,\n LabelTranslations,\n legacyFormat,\n} from \"tbme/localization\";\n\nimport { CardState } from \"./types\";\n\nexport default class extends LightningElement {\n @api title!: string;\n @api subtitle?: string;\n @api flush?: boolean = false;\n @api state?: CardState = \"default\";\n @api hasHeader?: boolean = false;\n\n private _errorText?: string | null;\n private _hasFooter?: boolean = false;\n private slots: string[] = [];\n\n @api\n get errorText() {\n if (this._errorText) return this._errorText;\n return this.labels.failedToUpdate;\n }\n set errorText(value) {\n this._errorText = value || null;\n }\n\n @api\n get hasFooter() {\n return this.isDefault && this._hasFooter;\n }\n set hasFooter(value) {\n this._hasFooter = value;\n }\n\n @api\n get className() {\n return classNames(\"card\", {\n card_loading: this.isLoading,\n card_flush: this.flush,\n \"card_no-body\": !this.hasBodySlot && this.isDefault,\n \"p-top_large\": !this.hasHeader && !this.flush,\n \"p-bottom_x-large\": this.isLoadFailed && this.hasHeader,\n });\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\"cardData\", \"failedToUpdate\"],\n })\n private labels: LabelTranslations = undefined!;\n\n get bodyClass() {\n return classNames(\"card__body\", {\n card__body_inner: this.isDefault,\n });\n }\n\n get isDefault() {\n return this.state === \"default\";\n }\n\n get isLoading() {\n return this.state === \"loading\";\n }\n\n get isLoadFailed() {\n return this.state === \"loadFailed\";\n }\n\n get hasBodySlot() {\n return this.slots.includes(\"default\");\n }\n\n private onSlotChange() {\n this.slots = assignedSlotNames(this.template);\n }\n}\n","import { legacyFormat, t } from \"tbme/localization\";\nimport { LightningElement, wire } from \"lwc\";\nimport {\n LabelTranslations,\n MultiLabelAdapter,\n MultiLabelAdapterConfig,\n} from \"tbme/localization\";\nimport dotMeSrc from \"./images/dotme.svg\";\nimport { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport {\n GetAboutMe,\n GetAboutMe_siteInfo_urls,\n GetAboutMe_profileUser_PublicProfile,\n} from \"./gql/GetAboutMe\";\nimport { showToast } from \"tds/toaster\";\nimport { logger } from \"tbme/logger\";\nimport { sharedUrls } from \"../localState/urls\";\nimport { isHireMeEnabled } from \"../../../shared/feature\";\n\nexport const ABOUT_ME_QUERY = gql`\n query GetAboutMe {\n profileUser @client {\n __typename\n ... on PublicProfile {\n isSelf @client\n fullName\n title\n companyName\n state\n country\n bio\n slug\n isExternalUser\n isAvailableForHire @client\n isCommunityUser @client\n }\n }\n\n siteInfo @client {\n urls {\n profile\n }\n }\n }\n`;\nexport default class extends LightningElement {\n private user: GetAboutMe_profileUser_PublicProfile = undefined!;\n private urls: GetAboutMe_siteInfo_urls = undefined!;\n private visible: boolean = false;\n private displayProfileEditModal: boolean = false;\n\n @wire(QueryAdapter, {\n query: ABOUT_ME_QUERY,\n })\n private handleResult({ data }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n\n const { siteInfo, profileUser } = data;\n\n if (!profileUser || profileUser.__typename !== \"PublicProfile\") {\n this.visible = false;\n return;\n }\n\n this.user = profileUser;\n this.urls = siteInfo.urls;\n this.visible = true;\n }\n\n private get profileUrl() {\n return `${this.urls.profile}/${this.user.slug}`;\n }\n\n private get showUrlComponent(): boolean {\n return !!(this.user && !this.user.isExternalUser && this.user.slug);\n }\n\n private get displayUrl() {\n return this.profileUrl && this.profileUrl.replace(\"https://\", \"\");\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"aboutMe.edit\",\n \"aboutMe.copy\",\n \"aboutMe.emptyAddShortBio\",\n \"aboutMe.hireMeOptIn\",\n \"aboutMe.hireMeOptOut\",\n ],\n })\n private updateLabels({ aboutMe }: { aboutMe: LabelTranslations }) {\n this.labels = {\n ...aboutMe,\n };\n }\n private labels: LabelTranslations = undefined!;\n\n private get titleAtCompany() {\n if (this.user.title && this.user.companyName) {\n return t(\"aboutMe.titleAtCompany\", {\n title: this.user.title,\n company: this.user.companyName,\n });\n }\n return this.user.companyName;\n }\n\n private get location(): string {\n if (this.user.state && this.user.country)\n return `${this.user.state}, ${this.user.country}`;\n return `${this.user.country}`;\n }\n\n private get dotMeSrc() {\n return dotMeSrc;\n }\n\n private async handleCopyClick() {\n const textarea = this.template.querySelector(\n \".slug-value\"\n ) as HTMLTextAreaElement;\n\n try {\n await navigator.clipboard.writeText(textarea.value);\n showToast({\n message: t(\"aboutMe.copySuccess\"),\n variant: \"success\",\n });\n } catch (e) {\n logger.error(\"Error copying text to clipboard\", e);\n }\n }\n\n private get featureNewProfileEditComponent() {\n return process.env.FEATURE_NEW_PROFILE_EDIT_COMPONENT === \"true\";\n }\n\n private handleEditClick() {\n if (this.featureNewProfileEditComponent) {\n this.displayProfileEditModal = true;\n } else {\n this.dispatchEvent(\n new CustomEvent(\"displayeditprofile\", {\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n private handleProfileEditRequestClose() {\n this.displayProfileEditModal = false;\n }\n\n private get displayEmptyState(): boolean {\n return this.user.isSelf && !this.user.bio;\n }\n\n private get showAvailableForHireLink() {\n return isHireMeEnabled() && this.user.isSelf && this.user.isCommunityUser;\n }\n\n private get showHireMeButton() {\n return (\n isHireMeEnabled() &&\n this.user.isAvailableForHire &&\n this.user.isCommunityUser\n );\n }\n\n private get availableForHireLink() {\n const key: string = this.user.isAvailableForHire\n ? \"hireMeOptOut\"\n : \"hireMeOptIn\";\n return legacyFormat(this.labels[key], sharedUrls.availableForHire());\n }\n}\n","export default \"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2023.94%209.43%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m23.43%205.87a.93.93%200%200%200%20-.54.39%203%203%200%200%201%20-2.39%201.27%201.62%201.62%200%200%201%20-1.62-1%2014.08%2014.08%200%200%200%201.76-1.86%203.74%203.74%200%200%200%201.1-2.54%202%202%200%200%200%20-1.87-2.13h-.13c-2.84.07-4%202.74-3.94%205.3a4.65%204.65%200%200%200%20.2%201.17c-.59.68-1%201-1.25%201-.95%200-.66-1.91-.59-2.91s.34-3.15.12-3.44a3.37%203.37%200%200%200%20-1.7-.92%204.3%204.3%200%200%200%20-2.18%201.73%202.25%202.25%200%200%200%20-.09-.73%203.35%203.35%200%200%200%20-1.79-1%206.34%206.34%200%200%200%20-2.73%202.4c0-.49.24-2%200-2a4.83%204.83%200%200%200%20-2.23.29%2013.42%2013.42%200%200%200%20-.12%202.83c-.1%201.95-.41%204.16.24%205.35a2.28%202.28%200%200%200%201.73-.27%2018.25%2018.25%200%200%201%20.69-3.88%204.62%204.62%200%200%201%201.57-2.08c.2%200%20.22.63.19.9-.08%201.3-.34%204.77%200%205.16s1.71%200%202-.08a25.6%2025.6%200%200%200%20.27-3.27%204.86%204.86%200%200%201%201.59-2.74c.2%200%20.25.63.22.9%200%201.3-.12%204%20.17%204.64a1.76%201.76%200%200%200%201.44.93%206.68%206.68%200%200%200%201.78-.22%203.1%203.1%200%200%200%201.36-1.25%204.14%204.14%200%200%200%203.36%201.62%203.8%203.8%200%200%200%203.87-2.85c.08-.48-.13-.71-.49-.71zm-3.82-4.17c.08%200%20.19.09.24.27a3.63%203.63%200%200%201%20-.53%201.53%207.67%207.67%200%200%201%20-1.27%201.57c-.13-.87.29-3.52%201.56-3.37zm-17.23%206.24a1.19%201.19%200%201%201%20-1.19-1.19%201.19%201.19%200%200%201%201.19%201.19z%22%20fill%3D%22%2300a1df%22%2F%3E%3C%2Fsvg%3E\"","import {\n LightningElement,\n createContextProvider,\n ContextConsumer,\n wire,\n api,\n} from \"lwc\";\nimport { EffectAdapter } from \"common/effectAdapter\";\nimport {\n ClientAdapter,\n ClientAdapterContext,\n ClientAdapterValue,\n} from \"tbme/clientAdapter\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { ApolloClient } from \"@apollo/client\";\n\nconst contexts = [\n createContextProvider(ClientAdapter),\n createContextProvider(QueryAdapter),\n];\n\ntype EffectContext = {\n localContext: ClientAdapterContext;\n};\n\n/**\n * This provider deviates from the base utility implementation provided by `common/context` by\n * providing \"context\" to instances of each adapter that require client from ClientAdapter.\n * This allows for declarative control over the client used by QueryAdapter without needing\n * to alter the implementation of the consumer of QueryAdapter.\n */\nexport default class extends LightningElement {\n private consumers = new Set>();\n\n @api client: ApolloClient = undefined!;\n\n @wire(EffectAdapter, {\n localContext: \"$localContext\",\n })\n private updateConsumers({ localContext }: EffectContext) {\n for (let consumer of this.consumers) {\n consumer.provide(localContext);\n }\n }\n\n @wire(ClientAdapter, {\n client: \"$client\",\n })\n private context: ClientAdapterValue = undefined!;\n\n get localContext(): ClientAdapterContext {\n return { client: this.client || this.context.client };\n }\n\n connectedCallback() {\n contexts.forEach((contextualizer) =>\n contextualizer(this, {\n consumerConnectedCallback: (\n consumer: ContextConsumer\n ) => {\n this.consumers.add(consumer);\n consumer.provide(this.localContext);\n },\n consumerDisconnectedCallback: (\n consumer: ContextConsumer\n ) => {\n this.consumers.delete(consumer);\n },\n })\n );\n }\n}\n","import { ApolloClient, NormalizedCacheObject } from \"@apollo/client\";\nimport { MockedResponse, MockLink } from \"@apollo/client/testing\";\nimport { createCache } from \"../clientAdapter/cache\";\n\nexport const createMockClient = (\n mocks: MockedResponse[],\n addTypename: boolean = false\n) => {\n return new ApolloClient({\n cache: createCache(),\n link: new MockLink(mocks, addTypename),\n });\n};\n","import { LightningElement, api } from \"lwc\";\nimport { LabelTranslations } from \"tbme/localization\";\nimport { t } from \"tbme/localization\";\nimport { validateWebsite, validateSocialHandle } from \"../profileEdit/form\";\ninterface SocialLink {\n name: string;\n href: string;\n class: string;\n assistiveText: string;\n}\n\nexport default class extends LightningElement {\n _twitterHandle?: SocialLink;\n _linkedinHandle?: SocialLink;\n _facebookHandle?: SocialLink;\n _websiteUrl?: SocialLink;\n\n private labels: LabelTranslations = undefined!;\n\n @api name?: string;\n\n @api\n get twitterHandle(): SocialLink | undefined | string {\n return this._twitterHandle;\n }\n set twitterHandle(value: SocialLink | undefined | string) {\n value = validateSocialHandle(\"https://www.twitter.com\", value as string)\n ? value\n : undefined;\n this._twitterHandle = value\n ? ({\n name: \"twitter\",\n href: `https://www.twitter.com/${value}`,\n class: \"social twitter\",\n assistiveText: t(\"socialLinks.twitterAssistiveText\", {\n name: this.name,\n }),\n } as SocialLink)\n : undefined;\n }\n\n @api\n get linkedinHandle(): SocialLink | undefined | string {\n return this._linkedinHandle;\n }\n set linkedinHandle(value: SocialLink | undefined | string) {\n value = validateSocialHandle(\"https://www.linkedin.com/in\", value as string)\n ? value\n : undefined;\n this._linkedinHandle = value\n ? ({\n name: \"linkedin\",\n href: `https://www.linkedin.com/in/${value}`,\n class: \"social linkedin\",\n assistiveText: t(\"socialLinks.linkedInAssistiveText\", {\n name: this.name,\n }),\n } as SocialLink)\n : undefined;\n }\n\n @api\n get facebookHandle(): SocialLink | undefined | string {\n return this._facebookHandle;\n }\n set facebookHandle(value: SocialLink | undefined | string) {\n value = validateSocialHandle(\"https://www.facebook.com\", value as string)\n ? value\n : undefined;\n this._facebookHandle = value\n ? ({\n name: \"facebook\",\n href: `https://www.facebook.com/${value}`,\n class: \"social facebook\",\n assistiveText: t(\"socialLinks.facebookAssistiveText\", {\n name: this.name,\n }),\n } as SocialLink)\n : undefined;\n }\n\n @api\n get websiteUrl(): SocialLink | undefined | string {\n return this._websiteUrl;\n }\n set websiteUrl(value: SocialLink | undefined | string) {\n let website = validateWebsite(value as string);\n this._websiteUrl = website\n ? ({\n name: \"link\",\n href: `${website}`,\n class: \"social link\",\n assistiveText: t(\"socialLinks.websiteAssistiveText\", {\n name: this.name,\n }),\n } as SocialLink)\n : undefined;\n }\n\n get socialLinks() {\n return [\n this.linkedinHandle,\n this.twitterHandle,\n this.facebookHandle,\n this.websiteUrl,\n ].filter((link) => link);\n }\n\n get isVisible() {\n return this.socialLinks.length > 0;\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const FOLLOWING_QUERY = gql`\n query FollowingQuery {\n chassis @client {\n profile {\n username\n }\n isSelf\n }\n }\n`;\n\nexport const TBC_FOLLOWING_QUERY = gql`\n query GetIsFollowing(\n $userSlug: ID!\n $userId: ID!\n $queryUserData: Boolean!\n $queryUser: Boolean!\n ) {\n profileData(userSlug: $userSlug) @include(if: $queryUserData) {\n communityUserId\n }\n user(userId: $userId) @include(if: $queryUser) {\n detail {\n isCurrentUser\n following\n }\n }\n }\n`;\n","import {\n WatchQueryOptions,\n ApolloQueryResult,\n ObservableQuery,\n ApolloClient,\n NetworkStatus,\n OperationVariables,\n FetchMoreQueryOptions,\n} from \"@apollo/client\";\nimport { WireAdapter } from \"lwc\";\nimport isEqual from \"lodash/isEqual\";\n\nimport {\n adapterContextSchema,\n ClientAdapterContext,\n} from \"tbtbc/clientAdapter\";\nimport { logger } from \"tbme/logger\";\nimport {Subscription} from \"zen-observable-ts\";\n\nexport interface QueryAdapterValue\n extends ApolloQueryResult {\n fetchMore(fetchMoreOptions: FetchMoreQueryOptions & {\n updateQuery?: (previousQueryResult: TData, options: {\n fetchMoreResult: TFetchData;\n variables: TFetchVars;\n }) => TData;\n }): Promise>;\n refetch(variables?: Partial): Promise>;\n}\nexport class QueryAdapter\n implements\n WireAdapter<\n QueryAdapterValue,\n WatchQueryOptions,\n ClientAdapterContext\n > {\n static contextSchema = adapterContextSchema;\n observable?: ObservableQuery;\n subscription?: Subscription;\n client?: ApolloClient;\n private defaultData: ApolloQueryResult = {\n loading: true,\n networkStatus: NetworkStatus.loading,\n } as QueryAdapterValue;\n private previousData: ApolloQueryResult = { ...this.defaultData };\n\n constructor(\n public setValue: (value: QueryAdapterValue) => void\n ) {}\n\n makeQuery(config: WatchQueryOptions) {\n if (!this.observable) {\n this.observable = this.client!.watchQuery(config);\n\n this.setValue(this.getValue());\n\n this.subscription = this.observable.subscribe(\n (result) => {\n this.previousData = result;\n this.setValue(this.getValue());\n },\n (error) => {\n this.previousData = {\n data: (this.previousData.data || {}) as TData,\n loading: false,\n networkStatus: NetworkStatus.error,\n error,\n };\n\n this.setValue(this.getValue());\n }\n );\n } else if (\n this.observable &&\n config.variables &&\n !isEqual(config.variables, this.observable.variables)\n ) {\n this.resetData();\n this.disconnect();\n this.makeQuery(config);\n }\n }\n\n private resetData() {\n this.previousData = { ...this.defaultData };\n }\n\n private reset() {\n this.disconnect();\n this.client = undefined;\n }\n\n private getValue(): QueryAdapterValue {\n return {\n ...this.previousData,\n fetchMore: this.observable!.fetchMore.bind(this.observable),\n refetch: this.observable!.refetch.bind(this.observable),\n };\n }\n\n update(\n config: WatchQueryOptions,\n context?: ClientAdapterContext\n ) {\n if (context && context.client) {\n if (this.client !== context.client) {\n this.reset();\n }\n\n this.client = context.client;\n\n this.makeQuery(config);\n } else {\n return;\n }\n }\n connect() {\n if (!this.client) {\n logger.error(\n `Did you forget to wrap your component in a provider such as `\n );\n }\n }\n disconnect() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.observable = undefined;\n }\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const FOLLOW_USER_MUTATION = gql`\n mutation followUser($userId: ID!) {\n followUser(input: { userId: $userId }) {\n ... on FollowUserResult {\n user {\n id\n following\n }\n }\n ... on Error {\n code\n message\n statusCode\n argumentName\n clientMutationId\n }\n }\n }\n`;\n\nexport const UNFOLLOW_USER_MUTATION = gql`\n mutation unfollowUser($userId: ID!) {\n unfollowUser(input: { userId: $userId }) {\n ... on UnfollowUserResult {\n user {\n id\n following\n }\n }\n ... on Error {\n code\n message\n statusCode\n argumentName\n clientMutationId\n }\n }\n }\n`;\n","import { ApolloQueryResult, FetchResult } from \"@apollo/client\";\nimport { api, LightningElement, wire, track } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { Size } from \"@devforce/th-components/modules/tds/button/button\";\nimport { showToast } from \"@devforce/th-components/modules/tds/toaster/toaster\";\nimport { FOLLOWING_QUERY, TBC_FOLLOWING_QUERY } from \"./query\";\nimport { FollowingQuery } from \"./gql/FollowingQuery\";\nimport { GetIsFollowing, GetIsFollowingVariables } from \"./gql/GetIsFollowing\";\nimport {\n QueryAdapter as TBCQueryAdapter,\n QueryAdapterValue as TBCQueryAdapterValue,\n} from \"tbtbc/queryAdapter\";\nimport { FOLLOW_USER_MUTATION, UNFOLLOW_USER_MUTATION } from \"./mutation\";\nimport { getClient } from \"tbtbc/clientAdapter\";\nimport {\n followUser_followUser_FollowUserResult,\n followUser,\n} from \"./gql/followUser\";\nimport {\n unfollowUser_unfollowUser_UnfollowUserResult,\n unfollowUser,\n} from \"./gql/unfollowUser\";\n\nexport default class extends LightningElement {\n @api size: Size = \"small\";\n\n // internal only, for stories\n @api focused: boolean = false;\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"tbcUserActions.follow\",\n \"tbcUserActions.unfollow\",\n \"tbcUserActions.following\",\n \"tbcUserActions.followError\",\n ],\n })\n labels: { tbcUserActions: LabelTranslations } = undefined!;\n\n following: boolean = false;\n visible = false;\n isLoading = false;\n userId: string = undefined!;\n isExternalUser: boolean = false;\n isSelf: boolean = false;\n subscriptionId?: string | null;\n @track\n variables: GetIsFollowingVariables = {\n userSlug: \"\",\n userId: \"\",\n queryUser: false,\n queryUserData: false,\n };\n\n @wire(QueryAdapter, {\n query: FOLLOWING_QUERY,\n })\n private handleResult({\n data,\n error,\n errors,\n }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n const { chassis } = data;\n\n this.isSelf = chassis?.isSelf ?? false;\n\n if (error || errors) {\n this.visible = false;\n return;\n }\n\n if (data.chassis?.profile?.username) {\n this.variables.userSlug = data.chassis.profile.username;\n this.variables.queryUserData = true;\n }\n }\n\n @wire(TBCQueryAdapter, {\n query: TBC_FOLLOWING_QUERY,\n variables: \"$variables\",\n })\n private handleTbcResult({\n data,\n error,\n errors,\n }: TBCQueryAdapterValue) {\n if (!data) return;\n if (\n this.variables.queryUserData === true &&\n data.profileData?.communityUserId &&\n this.variables.queryUser === false\n ) {\n this.variables = {\n ...this.variables,\n queryUser: true,\n userId: data.profileData.communityUserId,\n };\n } else if (\n this.variables.queryUserData === true &&\n data.user &&\n this.variables.queryUser === true\n ) {\n this.following = data.user.detail?.following ?? false;\n this.visible = !data.user.detail?.isCurrentUser && !this.isSelf;\n }\n }\n\n private async handleFollowClick() {\n if (this.isLoading) {\n return;\n }\n const operation = this.following\n ? UNFOLLOW_USER_MUTATION\n : FOLLOW_USER_MUTATION;\n const options = {\n variables: { userId: this.variables.userId },\n mutation: operation,\n };\n\n const request = () =>\n getClient().mutate(options);\n try {\n this.isLoading = true;\n const { data, errors } = await request();\n if (errors || !data) {\n showToast({\n variant: \"error\",\n message: this.labels.tbcUserActions.followError,\n });\n } else {\n const followResult = (data as followUser)\n .followUser as followUser_followUser_FollowUserResult;\n const unfollowResult = (data as unfollowUser)\n .unfollowUser as unfollowUser_unfollowUser_UnfollowUserResult;\n if (unfollowResult) {\n this.following = unfollowResult.user.following ?? false;\n } else if (followResult) {\n this.following = followResult.user.following ?? false;\n }\n }\n } catch (error) {\n showToast({\n variant: \"error\",\n message: this.labels.tbcUserActions.followError,\n });\n } finally {\n this.isLoading = false;\n }\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const USER_ACTIONS_QUERY = gql`\n query UserActionsQuery {\n chassis @client {\n isSelf\n profile {\n username\n firstName\n lastName\n }\n }\n }\n`;\n\nexport const TBC_USER_ACTIONS_QUERY = gql`\n query GetInboxUrl($userSlug: ID!, $queryUserActions: Boolean!) {\n profileData(userSlug: $userSlug) @include(if: $queryUserActions) {\n communityUserUrls {\n inboxUrl\n }\n }\n }\n`;\n","import { LightningElement, api, wire, track } from \"lwc\";\nimport { Size } from \"@devforce/th-components/modules/tds/button/button\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { USER_ACTIONS_QUERY, TBC_USER_ACTIONS_QUERY } from \"./query\";\nimport { ApolloQueryResult } from \"@apollo/client\";\nimport { UserActionsQuery } from \"./gql/UserActionsQuery\";\nimport {\n QueryAdapter as TBCQueryAdapter,\n QueryAdapterValue as TBCQueryAdapterValue,\n} from \"tbtbc/queryAdapter\";\nimport {\n GetInboxUrl_profileData_communityUserUrls,\n GetInboxUrlVariables,\n GetInboxUrl,\n} from \"./gql/GetInboxUrl\";\n\ntype UserActionsUrls = Omit<\n GetInboxUrl_profileData_communityUserUrls,\n \"__typename\"\n> & { tbcHireMe: string };\n\nconst mediaQueryMobile = window.matchMedia(\"(max-width: 835px)\");\n\nexport default class extends LightningElement {\n @api size: Size = \"medium\";\n @api showHireMeButton = false;\n notMobile = !mediaQueryMobile.matches;\n\n @wire(MultiLabelAdapter, {\n labels: [\"tbcUserActions.message\", \"tbcUserActions.hireMe\"],\n })\n labels: LabelTranslations = undefined!;\n\n variables: GetInboxUrlVariables = {\n userSlug: \"\",\n queryUserActions: false,\n };\n @track\n urls: UserActionsUrls = {\n tbcHireMe: \"\",\n inboxUrl: \"\",\n };\n visible = false;\n\n get showLinkButtons(): boolean {\n return !!this.urls.inboxUrl;\n }\n\n @wire(QueryAdapter, {\n query: USER_ACTIONS_QUERY,\n })\n handleResult({ data, error, errors }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n if (error || errors) {\n this.visible = false;\n return;\n }\n if (data.chassis) {\n this.visible = !data.chassis?.isSelf ?? this.visible;\n if (data.chassis.profile.username) {\n this.variables.userSlug = data.chassis.profile.username;\n\n this.variables.queryUserActions = Boolean(\n data.chassis?.profile?.firstName && data.chassis?.profile?.lastName\n );\n }\n }\n }\n\n @wire(TBCQueryAdapter, {\n query: TBC_USER_ACTIONS_QUERY,\n variables: \"$variables\",\n })\n handleTbcResult({ data, error, errors }: TBCQueryAdapterValue) {\n if (!data) return;\n if (error || errors || !this.variables.queryUserActions) {\n this.visible = false;\n return;\n }\n if (\n this.variables.queryUserActions &&\n data.profileData?.communityUserUrls?.inboxUrl\n ) {\n this.urls.inboxUrl = data.profileData.communityUserUrls.inboxUrl;\n this.urls.tbcHireMe = `${data.profileData.communityUserUrls.inboxUrl}&source=hire_me`;\n }\n }\n}\n","export interface DigitalResume {\n id?: string;\n openToRemoteWork?: boolean;\n openToRelocation?: boolean;\n showFullName?: boolean;\n showInSearchResults?: boolean;\n agreeToTerms?: boolean;\n showProfilePhoto?: boolean;\n location?: string;\n highlight?: string | null;\n careerPath?: string | null;\n motivators?: string | null;\n aboutMeVideoUrl?: string | null;\n workExperiences?: [];\n educationExperiences?: [];\n projects?: [];\n}\n\nexport interface ExperienceError {\n message: string;\n path: string[];\n status: number;\n}\n\nexport type DigitalResumeResponse = {\n data: { digitalResume?: DigitalResume };\n errors?: ExperienceError[];\n};\n\nexport type UpdateDigitalResumeResponse = {\n data: {\n updateDigitalResume?: {\n digitalResume?: DigitalResume;\n };\n };\n errors?: ExperienceError[];\n};\n\nconst DIGITAL_RESUME_QUERY = `\nquery FindDigitalResume {\n digitalResume {\n showInSearchResults\n }\n}`;\n\nconst requestBody = {\n query: DIGITAL_RESUME_QUERY,\n operationName: \"FindDigitalResume\",\n variables: \"{}\",\n};\n\nconst BASE_URL =\n window.sfdcBase?.exp?.EXPERIENCE_API_BFF_URL ||\n process.env.EXPERIENCE_API_BFF_URL;\n\nexport const getDigitalResume: (\n iisToken: string\n) => Promise = async (iisToken: string) => {\n const options = {\n body: JSON.stringify(requestBody),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${iisToken}`,\n },\n method: \"POST\",\n } as RequestInit;\n try {\n const result = await fetch(BASE_URL, options);\n if (!result.ok) {\n const text = await result.text();\n throw new Error(text);\n }\n return (await result.json()) as Promise;\n } catch (e) {\n throw new Error(JSON.stringify(e));\n }\n};\n","import { LightningElement, track } from \"lwc\";\nimport { t } from \"tbme/localization\";\nimport {\n DigitalResume,\n getDigitalResume,\n DigitalResumeResponse,\n} from \"../../../shared/experienceApi\";\nimport { getConfig } from \"tbme/clientAdapter\";\nimport {\n sendAnalyticEvent,\n AnalyticElementTypes,\n} from \"../../../shared/analytics\";\nimport { trailheadUrl } from \"tbme/localState\";\nexport default class extends LightningElement {\n @track\n digitalResume?: DigitalResume;\n state: \"loading\" | \"error\" | \"success\" = \"loading\";\n\n get isEnrolled(): boolean {\n return this.digitalResume ? true : false;\n }\n\n get isCareerModeEnabled(): boolean {\n return this.digitalResume?.showInSearchResults === true;\n }\n\n get hasErrors(): boolean {\n return this.state === \"error\";\n }\n\n get isLoading(): boolean {\n return this.state === \"loading\";\n }\n\n get isSuccessful(): boolean {\n return this.state === \"success\";\n }\n\n get buttonLink(): string {\n return this.isEnrolled\n ? this.isCareerModeEnabled\n ? `${trailheadUrl()}/careers/resume`\n : `${trailheadUrl()}/careers/resume`\n : `${trailheadUrl()}/careers/resume?source=profile`;\n }\n get buttonText(): string {\n return this.isEnrolled\n ? this.isCareerModeEnabled\n ? t(\"careerMarketplace.buttonEnrolledCareerModeOn\")\n : t(\"careerMarketplace.buttonEnrolledCareerModeOff\")\n : t(\"careerMarketplace.buttonUnenrolled\");\n }\n\n get title(): string {\n return t(\"careerMarketplace.title\");\n }\n\n get containerClass(): string {\n return this.isEnrolled\n ? \"cm-container cm-top-border\"\n : \"cm-container cm-bordered\";\n }\n\n get careerModeStatusText(): string {\n return this.isCareerModeEnabled\n ? t(\"careerMarketplace.statusOn\")\n : t(\"careerMarketplace.statusOff\");\n }\n\n get bodyText(): string {\n if (this.hasErrors) {\n return t(\"careerMarketplace.bodyError\");\n } else {\n return this.isEnrolled\n ? this.isCareerModeEnabled\n ? t(\"careerMarketplace.bodyEnrolledCareerModeOn\", {\n careerMarketplaceLink: `${trailheadUrl()}/careers`,\n settingsLink: \"/trailblazer/settings\",\n })\n : t(\"careerMarketplace.bodyEnrolledCareerModeOff\", {\n careerMarketplaceLink: `${trailheadUrl()}/careers`,\n settingsLink: \"/trailblazer/settings\",\n })\n : t(\"careerMarketplace.bodyUnenrolled\", {\n careerMarketplaceLink: `${trailheadUrl()}/careers`,\n });\n }\n }\n\n handleAnalytics(e: MouseEvent): void {\n const target = ((e.target as HTMLElement).tagName === \"A\"\n ? e.target\n : e.currentTarget) as HTMLAnchorElement;\n if (target.href) {\n sendAnalyticEvent(\"sf/career-mode\", {\n name: target.textContent || \"\",\n link: {\n text: target.textContent || \"\",\n url: target.href,\n elementType:\n target.tagName === \"A\"\n ? \"text-button\"\n : (\"button\" as AnalyticElementTypes),\n },\n });\n }\n }\n\n async connectedCallback() {\n const accessToken = getConfig().accessToken;\n this.state = \"loading\";\n getDigitalResume(accessToken)\n .then((response: DigitalResumeResponse) => {\n if (\n response.data?.digitalResume ||\n (response.errors &&\n response.errors.length === 1 &&\n response.errors[0].status === 404)\n ) {\n this.digitalResume = response.data.digitalResume;\n this.state = \"success\";\n } else {\n this.state = \"error\";\n }\n })\n .catch(() => {\n this.state = \"error\";\n });\n }\n}\n","export type AnalyticElementTypes =\n | \"button\"\n | \"text-button\"\n | \"radio-button\"\n | \"\";\n\nexport interface AnalyticModule {\n name: string;\n link: {\n text: string;\n url: string | null;\n elementType: AnalyticElementTypes;\n };\n}\n\nexport type AnalyticEventTypes = \"custEv_contentClick\";\n\nexport interface AnalyticEvent {\n event: AnalyticEventTypes;\n blade: {\n name: string;\n type: \"blade\";\n module: AnalyticModule[];\n };\n}\n\nexport const sendAnalyticEvent = (\n bladeName: string,\n analyticModule: AnalyticModule,\n eventName: AnalyticEventTypes = \"custEv_contentClick\"\n) => {\n window.dataLayer?.push({\n event: eventName,\n blade: {\n name: bladeName,\n type: \"blade\",\n module: [\n {\n name: analyticModule.name,\n link: {\n text: analyticModule.link.text,\n url: analyticModule.link.url,\n elementType: analyticModule.link.elementType,\n },\n },\n ],\n },\n });\n};\n","import { gql } from \"@apollo/client\";\n\nexport const ABOUT_MYSELF_QUERY = gql`\n query GetAboutMyself {\n chassis @client {\n profile {\n id\n isPublicProfile\n firstName\n lastName\n title\n role\n company {\n name\n }\n address {\n state\n country\n }\n bio\n username\n profileUrl\n isAvailableForHire\n twitterHandle\n linkedinHandle\n facebookHandle\n websiteUrl\n }\n isSelf\n }\n }\n`;\n","import { directive, html, Part, TemplateResult } from \"lit-html\";\n\nexport interface AuraComponent {\n helper?: any;\n set(attrRef: string, value: any): void;\n get(attrRef: string): any;\n}\n\nexport interface LightningOutUtility {\n use: (appRef: string, readyCallback: () => void) => void;\n $A?: any;\n createComponent: (\n componentRef: string,\n attrs: T,\n elementId: string,\n callback: (component: AuraComponent) => void\n ) => void;\n}\n\nexport interface AuraDirectiveOptions {\n placeholder?: TemplateResult;\n onRender?: (component: AuraComponent) => void;\n}\n\nexport interface AuraComponentAttrs {\n [key: string]: any;\n}\n\nlet auraService: AuraService;\n\nexport const setupAura = (lightning: LightningOutUtility, appRef: string) => {\n auraService = new AuraService(lightning, appRef);\n\n return auraService;\n};\n\nexport const getAura = () => {\n return auraService;\n};\nexport class AuraService {\n public $A: any;\n\n private lightningOut: LightningOutUtility;\n private lightningIsReady = false;\n private pendingCallbacks: (() => void)[] = [];\n\n constructor(lightningOut: LightningOutUtility, appRef: string) {\n this.lightningOut = lightningOut;\n this.loadAura(appRef);\n }\n\n private loadAura(appRef: string) {\n this.lightningOut.use(appRef, this.lightningReadyCallback.bind(this));\n }\n\n private patch() {\n /**\n * When aura loads a custom property, `$shadowResolver$`, is added to the Node prototype\n * with a custom setter that expects to receive a callable with a custom attribute\n * `nodeType`. However, the LWC engine also writes to the same property but sometimes\n * writes `undefined`. This creates an error when LWC attempts to render a new element\n * after Aura has loaded on the page. This patch prevents the Aura setter from being\n * called if the value is undefined.\n */\n const oldDef = Object.getOwnPropertyDescriptor(\n Node.prototype,\n \"$shadowResolver$\"\n );\n\n if (oldDef) {\n Object.defineProperty(Node.prototype, \"$shadowResolver$\", {\n ...oldDef,\n set(v: any) {\n if (v) {\n // @ts-ignore\n oldDef.set.call(this, v);\n }\n },\n });\n }\n }\n\n private lightningReadyCallback() {\n this.patch();\n\n // @ts-ignore\n if (window.$A) {\n // @ts-ignore\n this.$A = window.$A;\n }\n\n this.resolvePendingCallbacks();\n }\n\n private resolvePendingCallbacks() {\n while (this.pendingCallbacks.length > 0) {\n let cb = this.pendingCallbacks.shift();\n cb && cb();\n }\n\n this.lightningIsReady = true;\n }\n\n /**\n * Promise resolves after LightningOut is ready. Useful for access `$A` after it is\n * available.\n */\n async ready() {\n let resolver: (value?: AuraService) => void;\n\n const promise = new Promise((resolve) => {\n resolver = resolve;\n });\n\n const callback = () => {\n resolver(this);\n };\n\n if (!this.lightningIsReady) {\n this.pendingCallbacks.push(callback);\n } else {\n callback();\n }\n\n return promise;\n }\n\n async createComponent(\n componentRef: string,\n options: T,\n elementId: string\n ): Promise {\n let resolver: (value?: AuraComponent) => void;\n\n const promise = new Promise((resolve) => {\n resolver = resolve;\n });\n\n const callback = () => {\n this.lightningOut.createComponent(\n componentRef,\n options,\n elementId,\n (component: AuraComponent) => {\n resolver(component);\n }\n );\n };\n\n if (!this.lightningIsReady) {\n this.pendingCallbacks.push(callback);\n } else {\n callback();\n }\n\n return promise;\n }\n}\n","import { Part, directive, html } from \"lit-html\";\nimport {\n AuraComponent,\n AuraComponentAttrs,\n AuraDirectiveOptions,\n getAura,\n} from \"../aura\";\n\ninterface AuraDirectiveStatus {\n component?: AuraComponent;\n pending?: boolean;\n id: string;\n container?: HTMLElement;\n}\n\nconst componentIds: string[] = [];\nconst directiveCache = new WeakMap();\n\n/**\n * Lit-html directive for rendering component from LightningOut.\n *\n * @param componentRef the name of the component to render\n * @param attrs component attributes\n * @param placeholder lit-html template to use a placeholder until the component is loaded\n */\nexport const auraComponent = directive(\n (\n componentRef: string,\n attrs: AuraComponentAttrs,\n options?: AuraDirectiveOptions\n ) => (part: Part) => {\n const getState = () => directiveCache.get(part);\n const setState = (newState: AuraDirectiveStatus) =>\n directiveCache.set(part, newState);\n\n const { onRender, placeholder } = { ...options };\n\n if (!getState()) {\n const newId = `aura-directive-id-${componentIds.length}`;\n componentIds.push(newId);\n\n setState({\n id: newId,\n });\n\n part.setValue(\n html`
\n ${placeholder\n ? html`
${placeholder}
`\n : \"\"}\n
`\n );\n part.commit();\n }\n\n if (getState()!.pending) {\n return;\n }\n\n directiveCache.set(part, {\n ...getState()!,\n pending: true,\n });\n\n // Ensure createComponent is executed after an in-progress render\n Promise.resolve().then(() => {\n const state = getState();\n\n if (!state) {\n return;\n }\n\n const container = document!.getElementById(state.id);\n\n if (!container) {\n return;\n }\n\n directiveCache.set(part, {\n ...state,\n container,\n });\n\n getAura()\n .createComponent(componentRef, attrs, state.id)\n .then((component) => {\n const state = getState();\n\n if (!state) {\n return;\n }\n\n directiveCache.set(part, {\n ...state,\n pending: false,\n });\n\n // Disable the default SLDS that is loaded in app.css\n // by removing the \"slds-scope\" class\n if (container) {\n container.className = \"\";\n\n let placeholderEl = container.querySelector(\n `#${state.id}-placeholder`\n );\n\n if (placeholderEl) {\n container.removeChild(placeholderEl);\n }\n }\n\n if (onRender) {\n onRender(component);\n }\n });\n });\n }\n);\n","import {\n getContext,\n subscribeToContextChange,\n} from \"../../elements/tbme/profilePage/context\";\nimport { directive, html, Part, TemplateResult } from \"lit-html\";\nimport { ProfileContext } from \"../../elements/tbme/profilePage/types\";\n\nexport const withContext = directive(\n (fn: (c: ProfileContext) => TemplateResult) => (part: Part) => {\n let previous: TemplateResult;\n\n const update = (context: ProfileContext) => {\n let newValue = fn(context);\n\n if (previous === newValue) {\n return;\n }\n\n previous = newValue;\n part.setValue(newValue);\n part.commit();\n };\n subscribeToContextChange((context: ProfileContext) => {\n update(context);\n });\n\n update(getContext());\n }\n);\n","import { html, TemplateResult } from \"lit-html\";\nimport { withContext } from \"../../../shared/lit/withContext\";\nimport { AuraComponent, AuraComponentAttrs } from \"../../../shared/aura\";\nimport { auraComponent } from \"../../../shared/lit/auraComponent\";\nimport { ComponentTracker, trackedComponents } from \"./componentTracker\";\nimport { getProfileUserId } from \"./context\";\nimport { ProfileContext } from \"./types\";\n\nexport const renderTrackedComponent = (\n tracker: ComponentTracker,\n cmpRef: string,\n selector: (c: ProfileContext) => AuraComponentAttrs,\n shouldRender: (c: ProfileContext) => boolean = () => true,\n placeholder: TemplateResult = html``\n) => {\n let rendered = false;\n let previousResult = html``;\n\n return html` ${withContext((c: ProfileContext) => {\n const render = shouldRender(c);\n\n if (render !== rendered) {\n rendered = render;\n\n if (\n render &&\n cmpRef === \"c:AppExchange\" &&\n process.env.DISABLE_APP_EXCHANGE_MODAL_HACK !== \"true\"\n ) {\n // TODO: Remove AppExchange hack after W-9167590\n previousResult = renderAppExchangeWithModalHack(\n tracker,\n cmpRef,\n c,\n selector\n );\n } else if (render) {\n previousResult = html`${auraComponent(cmpRef, selector(c), {\n onRender(cmp: AuraComponent) {\n tracker.setSelector(selector);\n tracker.setComponent(cmp);\n },\n placeholder,\n })}`;\n } else {\n previousResult = html``;\n }\n }\n return previousResult;\n })}`;\n};\n\nexport const renderLegacyCard = (\n tracker: ComponentTracker,\n cmpRef: string,\n selector: (c: ProfileContext) => AuraComponentAttrs,\n shouldRender: (c: ProfileContext) => boolean = () => true\n) =>\n renderTrackedComponent(\n tracker,\n cmpRef,\n selector,\n shouldRender,\n html` \n
\n
`\n );\n\nexport const renderAboutMe = () => {\n return html`\n \n
\n ${renderTrackedComponent(\n trackedComponents.aboutMeAvatar,\n \"c:AboutMeAvatar\",\n ({ profileUser, isSelf, profilePhotoUrl }: ProfileContext) => ({\n isSelf,\n profileUser: profileUser,\n profilePhotoUrl: profilePhotoUrl,\n }),\n () => true,\n html`
`\n )}\n \n
\n ${renderTrackedComponent(\n trackedComponents.aboutMeSocialLinks,\n \"c:aboutMeSocialLinks\",\n ({ profileUser }: ProfileContext) => ({\n size: \"medium\",\n name: profileUser ? profileUser.FirstName : \"\",\n google: profileUser ? profileUser.GoogleProfileLink__c : \"\",\n twitter: profileUser ? profileUser.TwitterProfileLink__c : \"\",\n facebook: profileUser ? profileUser.FacebookProfileLink__c : \"\",\n linkedin: profileUser ? profileUser.LinkedInProfileLink__c : \"\",\n website: profileUser ? profileUser.WebsiteLink__c : \"\",\n })\n )}\n
\n
\n `;\n};\n\nexport const renderCertifications = () =>\n renderLegacyCard(\n trackedComponents.certifications,\n \"c:lwcCertifications\",\n ({ isSelf, profileUser, languageParam }: Partial) => ({\n isSelf,\n userId: getProfileUserId({ profileUser }),\n locale: languageParam,\n ...(process.env.FEATURE_ADDITIONAL_CERTS === \"true\" && {\n featureAdditionalCerts: true,\n }),\n ...(process.env.FEATURE_CERTIFICATIONS_STATUS_MESSAGE === \"true\" && {\n useStatusMessage: true,\n }),\n }),\n ({ isExtProfileUser }) => !isExtProfileUser\n );\n\nexport const renderUserDetails = () =>\n renderLegacyCard(\n trackedComponents.userDetails,\n \"c:UserDetails\",\n ({\n isSelf,\n profileUser,\n profilePhotoUrl,\n identity,\n profileUserBgImageUrl,\n pickLists,\n }: ProfileContext) => ({\n isSelf,\n profileUser,\n profilePhotoUrl,\n trailheadEmail: identity ? identity.email : \"\",\n profileUserBgImageUrl,\n pickLists,\n }),\n ({ isExtProfileUser }) => !isExtProfileUser\n );\n\nexport const renderRecognitions = () =>\n renderLegacyCard(\n trackedComponents.recognitions,\n \"c:lwcRecognitions\",\n ({ recognitions }: ProfileContext) => ({\n recognitions,\n }),\n ({ featureFlags, isExtProfileUser, recognitions }) =>\n !!(\n featureFlags &&\n !isExtProfileUser &&\n featureFlags.isRecognitionsOn &&\n recognitions &&\n recognitions.length > 0\n )\n );\n\nexport const renderAppExchange = () =>\n renderLegacyCard(\n trackedComponents.appExchange,\n \"c:AppExchange\",\n ({ cuid, profileUser }: ProfileContext) => ({\n uid: getProfileUserId({ profileUser }),\n cuid: cuid,\n }),\n ({ featureFlags, extProfileUserCmty, isExtProfileUser }) =>\n !!(\n featureFlags &&\n (!isExtProfileUser || extProfileUserCmty === \"Tz\") &&\n featureFlags.isAppExchangeOn\n )\n );\n\nexport const renderDeveloperMarketplace = () =>\n renderLegacyCard(\n trackedComponents.developerMarketplace,\n \"c:DeveloperMarketplace\",\n ({ cuid, profileUser }: ProfileContext) => ({\n uid: getProfileUserId({ profileUser }),\n cuid: cuid,\n }),\n ({ featureFlags, isExtProfileUser, extProfileUserCmty }) =>\n !!(\n featureFlags &&\n (!isExtProfileUser || extProfileUserCmty === \"Tz\") &&\n featureFlags.isAppExchangeOn &&\n featureFlags.isDevMarketplaceOn\n )\n );\n\nexport const renderMVPComponent = () =>\n renderLegacyCard(\n trackedComponents.mvp,\n \"c:MVPComponent\",\n ({\n cuid,\n profileUser,\n isExtProfileUser,\n tbc2UserRecords,\n }: ProfileContext) => ({\n uid: getProfileUserId({ profileUser }),\n cuid: cuid,\n isMockProfile: isExtProfileUser,\n aggregatedMvpExtUserIds:\n tbc2UserRecords && tbc2UserRecords.contextProfileTbc2User\n ? tbc2UserRecords.contextProfileTbc2User.aggregatedTbc2UserIds\n : undefined,\n }),\n (context) =>\n shouldRenderCommunityComponent(context) &&\n !!(\n context.featureFlags &&\n (!context.isExtProfileUser || context.extProfileUserCmty === \"Tz\") &&\n !context.featureFlags.isRecognitionsOn\n )\n );\n\nexport function shouldRenderCommunityComponent({\n featureFlags,\n tbc2UserRecords,\n}: ProfileContext) {\n if (!featureFlags) {\n return true;\n }\n\n const { isDeferCommunityUsersToClientOn } = featureFlags;\n\n if (!isDeferCommunityUsersToClientOn) {\n return true;\n }\n\n const hasValue = (userRecords: object) => {\n return userRecords && Object.keys(userRecords).length > 0;\n };\n\n if (hasValue(tbc2UserRecords)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Workaround for AppExchange component not being wrapped in a ModalContainer.\n *\n * Render both a c:ModalContainer instance and a c:AppExchange instance, then place\n * the appExchange component into the ModalContainer. This will result in duplicate\n * Elements in the HTML and a broken visual state but the links will be clickable\n * and will open a modal.\n *\n * As a workaround for the visual regressions after adding the component to the\n * modalContainer, an additional AppExchange component is added outside of the container,\n * click events are captured on the tally elements, and then click events are triggered\n * on the corresponding elements in the hidden modal enabled element.\n *\n * Because this is clearly hacky, it should be removed after the TBID implementation\n * is fixed.\n *\n * TODO: Remove after W-9167590\n */\nfunction renderAppExchangeWithModalHack(\n tracker: ComponentTracker,\n cmpRef: string,\n context: ProfileContext,\n selector: (c: ProfileContext) => AuraComponentAttrs\n) {\n let modalContainer: AuraComponent;\n let appExchange: AuraComponent;\n\n const renderTogether = () => {\n if (modalContainer && appExchange) {\n modalContainer.set(\"v.body\", appExchange);\n }\n };\n\n const triggerClick = (index: number) => {\n const buttons = document.querySelectorAll(\n \".appex-modal-container .button-tally\"\n );\n\n (buttons[index] as HTMLElement).click();\n };\n\n document.addEventListener(\"click\", (e: MouseEvent) => {\n const target: HTMLElement | null = e.target as HTMLElement;\n if (!target || !(target as HTMLElement).closest(\".appex-visible\")) {\n return;\n }\n\n const button = target.closest(\".button-tally\");\n\n if (!button) return;\n\n const index = Array.prototype.indexOf.call(\n button.parentNode!.children,\n button\n );\n\n if (index > -1) {\n triggerClick(index);\n }\n });\n\n return html`\n \n
\n ${auraComponent(\n \"c:ModalContainer\",\n {},\n {\n onRender(cmp) {\n modalContainer = cmp;\n\n renderTogether();\n },\n }\n )}\n
\n ${auraComponent(cmpRef, selector(context), {\n onRender(cmp) {\n appExchange = cmp;\n\n renderTogether();\n },\n })}\n
\n
\n
\n ${auraComponent(cmpRef, selector(context), {\n onRender(cmp) {\n tracker.setSelector(selector);\n tracker.setComponent(cmp);\n },\n })}\n
\n `;\n}\n","import { currentUser, profileUser } from \"tbme/localState\";\nimport { showToast } from \"tds/toaster\";\nimport { getContext, setContext } from \"./context\";\nimport { ProfileContext } from \"./types\";\n\ntype ToastVariant = \"info\" | \"error\" | \"success\";\nexport interface AuraEvent {\n getParams(): T;\n}\n\nexport type AuraToastEvent = AuraEvent<{\n variant: ToastVariant;\n message: string;\n}>;\n\nexport interface LegacyToastEvent extends Event {\n detail: {\n state: ToastVariant;\n message: string;\n };\n}\n\nexport type AuraAvatarUploadEvent = AuraEvent<{\n photoUrl: string;\n}>;\n\nexport type AuraContextChangeEvent = AuraEvent<{\n data: Partial;\n}>;\n\n/**\n * Handle Aura c:ToastEvent and create a toast\n */\nexport function handleAuraToast(event: AuraToastEvent) {\n const { variant, message } = event.getParams();\n showToast({\n variant,\n unsafeMessage: message,\n });\n}\n\n/**\n * Legacy on-core LWC components dispatch the \"toast\" CustomEvent\n */\nexport function handleOnCoreLwcToast(event: Event) {\n const { state, message } = (event as LegacyToastEvent).detail;\n showToast({\n variant: state,\n unsafeMessage: message,\n });\n}\n\n/**\n * The legacy Aura component AvatarUploader dispatches an Application event\n * after a new avatar has been uploaded. The state should only be changed if\n * the user is logged in and viewing their own profile.\n */\nexport function handleAuraAvatarUpload(event: AuraAvatarUploadEvent) {\n const { photoUrl } = event.getParams();\n const user = currentUser();\n const profile = profileUser();\n\n if (profile && user && user.id === profile.id) {\n const updates = {\n ...getContext(),\n identity: {\n ...getContext().identity,\n ProfilePictureUrl: photoUrl,\n },\n profilePhotoUrl: photoUrl,\n };\n\n setContext(updates as ProfileContext);\n }\n}\n\nexport function handleAuraContextChange(event: AuraContextChangeEvent) {\n const { data } = event.getParams();\n\n if (!data) return;\n\n setContext({\n ...getContext(),\n ...data,\n });\n}\n","import { html, render, TemplateResult } from \"lit-html\";\nimport { ChassisContext, ProfileContext } from \"./types\";\nimport { setContext, getFullName as getFullNameLegacy } from \"./context\";\nimport { getFullName } from \"./contexts/chassis\";\nimport { setupAura } from \"../../../shared/aura\";\nimport { auraComponent } from \"../../../shared/lit/auraComponent\";\nimport { getBridgeComponent, setBridgeComponent } from \"tbme/legacyApexBridge\";\n\nimport { set } from \"@devforce/trailhead-client-env\";\nimport {\n renderAboutMe,\n renderAppExchange,\n renderCertifications as renderLegacyCertifications,\n renderMVPComponent,\n renderTrackedComponent,\n renderUserDetails as renderLegacyUserDetails,\n} from \"./legacyComponents\";\nimport { trackedComponents } from \"./componentTracker\";\nimport {\n handleAuraAvatarUpload,\n handleAuraContextChange,\n handleAuraToast,\n handleOnCoreLwcToast,\n} from \"./legacyEvents\";\nimport { trailheadUrl, isRenderProfileChassis } from \"tbme/localState\";\nimport { isTbmeSkillsComponentEnabled } from \"../../../shared/feature\";\n\nconst experienceApiBffUrl =\n window?.sfdcBase?.exp?.EXPERIENCE_API_BFF_URL ||\n \"https://mobile.api.trailhead.com/graphql\";\n\nset(\"GRAPHQL_API_HOST\", experienceApiBffUrl);\n\nexport const mediaQueryMobile = window.matchMedia(\"(max-width: 760px)\");\n\n/**\n * The primary profile render function. Accepts the `attrs` object from the Visualforce\n * page (ProfileContext) and renders the responsive layout.\n * @param context attrs object from VF\n * @param element element to render into\n */\nexport function renderProfile(context: ProfileContext, element: HTMLElement) {\n setContext(context);\n\n if (!context.$lightning) {\n throw new Error(\"$lightning is required to render profile.\");\n }\n\n setupAura(context.$lightning, \"c:ProfileApp\")\n .ready()\n .then(({ $A }) => {\n // Aura components emit the c:ToastEvent \"Application Event\"\n $A.eventService.addHandler({\n event: \"c:ToastEvent\",\n handler: handleAuraToast,\n });\n\n // Update avatarUrl when user changes avatar\n $A.eventService.addHandler({\n event: \"c:AvatarUploadEvent\",\n handler: handleAuraAvatarUpload,\n });\n\n $A.eventService.addHandler({\n event: \"c:ProfileEditEvent\",\n handler: (event: any) => {\n trackedComponents.profileEdit.open();\n },\n });\n\n $A.eventService.addHandler({\n event: \"c:ContextChangeEvent\",\n handler: handleAuraContextChange,\n });\n });\n\n // On-core LWC components emit this event for toasts\n element.addEventListener(\"toast\", handleOnCoreLwcToast);\n\n // Allow on-core LWC components to open profile edit modal\n element.addEventListener(\"displayeditprofile\", () =>\n trackedComponents.profileEdit.open()\n );\n\n render(renderContainer(context), element);\n\n const profile = renderProfileSections(\n element,\n context,\n mediaQueryMobile.matches\n );\n\n mediaQueryMobile.addEventListener(\"change\", (e: MediaQueryListEvent) =>\n renderProfileSections(element, context, e.matches)\n );\n}\n\n/**\n * The primary profile render function when running on Digital App Chassis.\n * Accepts context (ProfileContext) from the /id page and renders the responsive layout.\n * @param context context object from /id page\n * @param element element to render into\n */\nexport function renderProfileChassis(\n context: ProfileContext,\n element: HTMLElement\n) {\n isRenderProfileChassis(true);\n setContext(context);\n\n render(renderContainerChassis(context), element);\n\n const profile = renderProfileSectionsChassis(\n element,\n context,\n mediaQueryMobile.matches\n );\n\n mediaQueryMobile.addEventListener(\"change\", (e: MediaQueryListEvent) =>\n renderProfileSectionsChassis(element, context, e.matches)\n );\n}\n\n/**\n * This is the primary function handling the responsive behavior. This inserts\n * content into a named div rendered by `renderContainer` with the id\n * `profile-sections-container`. This means that the LightningOut components\n * are entirely rerendered.\n */\nexport const renderProfileSections = (\n element: HTMLElement,\n context: ProfileContext,\n isMobile: boolean\n) => {\n const container = element.querySelector(\"#profile-sections-container\");\n\n if (!container) {\n throw new Error(\"Sections container not present.\");\n }\n\n const renderContent =\n context.profileUser!.Is_Public_Profile__c || context.isSelf\n ? renderPublicProfile.bind(null, context, isMobile)\n : renderPrivateProfile.bind(null, context);\n\n return render(renderContent(), container);\n};\n\n/**\n * This is the primary function handling the responsive behavior. This inserts\n * content into a named div rendered by `renderContainer` with the id\n * `profile-sections-container`. This method is to be used when rendering\n * in the Digital App Chassis\n */\nexport const renderProfileSectionsChassis = (\n element: HTMLElement,\n context: ProfileContext,\n isMobile: boolean\n) => {\n const container = element.querySelector(\"#profile-sections-container\");\n\n if (!container) {\n throw new Error(\"Sections container not present.\");\n }\n\n const renderContent =\n context?.chassis?.profile?.isPublicProfile || context?.chassis?.isSelf\n ? renderPublicProfileChassis.bind(null, context, isMobile)\n : renderPrivateProfileChassis.bind(null, context);\n\n return render(renderContent(), container);\n};\n\n/**\n * Render the primary layout container for the profile.\n */\nexport const renderContainer = (context: ProfileContext) =>\n html`\n \n\n \n \n \n \n\n \n\n ${auraComponent(\"c:trailheadUrlService\", {\n trailheadUrl: trailheadUrl(),\n locale: context.thLanguage,\n })}\n ${auraComponent(\n \"c:thApexBridge\",\n {},\n {\n onRender: (component) => {\n !getBridgeComponent() && setBridgeComponent(component);\n },\n }\n )}\n\n \n ${context.isSelf\n ? renderTrackedComponent(\n trackedComponents.profileEdit,\n \"c:ProfileEdit\",\n ({\n profileUser,\n profilePhotoUrl,\n profileUserBgImageUrl,\n pickLists,\n }: ProfileContext) => ({\n profileUser: profileUser,\n profilePhotoUrl: profilePhotoUrl,\n profileUserBgImageUrl: profileUserBgImageUrl,\n pickLists: pickLists,\n })\n )\n : \"\"}\n ${context.isSelf\n ? renderTrackedComponent(\n trackedComponents.profileUpdater,\n \"c:ProfileUpdater\",\n ({ cuid }: ProfileContext) => ({\n cuid,\n })\n )\n : \"\"}\n\n \n \n\n \n \n \n \n `;\n\n/**\n * Render the primary layout container for the profile (when rendered in the Digital App Chassis)\n */\nexport const renderContainerChassis = (context: ProfileContext) =>\n html`\n \n \n \n \n \n\n \n \n\n \n \n\n \n \n \n \n \n \n `;\n\n/**\n * Utility for rendering a list of render functions that accept `context`\n */\nexport const renderList = (list: Array<() => TemplateResult | string>) =>\n list.map((fn) => html`${fn()}`);\n\ninterface PageSections {\n mobile: (() => TemplateResult)[];\n desktopLeft: (() => TemplateResult)[];\n desktopRight: (() => TemplateResult)[];\n}\n\nconst renderSections = (\n { mobile, desktopLeft, desktopRight }: PageSections,\n isMobile: boolean\n) => {\n return isMobile\n ? html`
${mobile.map((fn) => html`${fn()}`)}
`\n : html`\n
${desktopLeft.map((fn) => html`${fn()}`)}
\n
\n ${desktopRight.map((fn) => html`${fn()}`)}\n
\n `;\n};\n\n/**\n * Render notification for public profiles.\n */\nfunction renderPublicProfileNotification(context: ProfileContext) {\n if (!context.profileUser!.Is_Public_Profile__c) {\n return html``;\n }\n\n return process.env.FEATURE_HIRE_ME === \"true\" &&\n context.isSelf &&\n !context.isAvailableForHire &&\n context.isCommunityUser\n ? html``\n : html``;\n}\n\n/**\n * Render notification for public profiles.\n */\nfunction renderPublicProfileNotificationChassis(context?: ChassisContext) {\n if (!context?.profile?.isPublicProfile) {\n return html``;\n }\n\n return process.env.FEATURE_HIRE_ME === \"true\" &&\n context.isSelf &&\n !context.profile.isAvailableForHire\n ? html``\n : html``;\n}\n\n/**\n * Fills the slots in `tbui-profile-layout`\n */\nexport const renderPublicProfile = (\n context: ProfileContext,\n isMobile: boolean\n) => {\n const notification = renderPublicProfileNotification(context);\n const { isExtProfileUser } = context;\n\n const renderRank = () => html``;\n\n const renderCommunityTags = () =>\n process.env.FEATURE_COMMUNITY_TAGS === \"true\"\n ? html``\n : html``;\n\n const renderBadges = () => html``;\n\n const renderSkills = () =>\n isTbmeSkillsComponentEnabled() ? html`` : html``;\n\n const renderCertifications = () =>\n process.env.FEATURE_NEW_CERTIFICATIONS_COMPONENT === \"true\"\n ? html``\n : html`${renderLegacyCertifications()}`;\n\n const renderSuperbadges = () => html``;\n\n const renderQuestions = () =>\n html``;\n\n const renderConnections = () => html``;\n\n const renderFiles = () => html``;\n\n const renderUserDetails = () =>\n process.env.FEATURE_NEW_USER_DETAILS_COMPONENT === \"true\"\n ? html``\n : html`${renderLegacyUserDetails()}`;\n\n const externalUserProfileSections: PageSections = {\n mobile: [renderAboutMe, renderQuestions, renderConnections, renderFiles],\n desktopLeft: [renderAboutMe],\n desktopRight: [renderQuestions, renderConnections, renderFiles],\n };\n\n const publicProfileSections: PageSections = {\n mobile: [\n renderAboutMe,\n renderMVPComponent,\n renderCertifications,\n renderSuperbadges,\n renderRank,\n renderCommunityTags,\n renderQuestions,\n renderConnections,\n renderAppExchange,\n renderSkills,\n renderBadges,\n renderUserDetails,\n renderFiles,\n ],\n desktopLeft: [\n renderAboutMe,\n renderCertifications,\n renderSuperbadges,\n renderSkills,\n renderBadges,\n renderUserDetails,\n ],\n desktopRight: [\n renderMVPComponent,\n renderRank,\n renderCommunityTags,\n renderQuestions,\n renderConnections,\n renderAppExchange,\n renderFiles,\n ],\n };\n\n return html`${notification}${renderSections(\n isExtProfileUser ? externalUserProfileSections : publicProfileSections,\n isMobile\n )}`;\n};\n\n/**\n * Fills the slots in `tbui-profile-layout`\n * To be used when rendering profile in the Digital App Chassis\n * Should not include any components that are hosted in the TBID\n * (./legacyComponents) or use the Apex data bridge to get data from TBID\n */\nexport const renderPublicProfileChassis = (\n context: ProfileContext,\n isMobile: boolean\n) => {\n const notification = renderPublicProfileNotificationChassis(context.chassis);\n\n const useChassisQuery = true;\n const renderUserDetails = () => html``;\n const renderAboutMyself = () => html``;\n const renderSuperbadges = () => html``;\n const renderRank = () => html``;\n const renderSkills = () =>\n isTbmeSkillsComponentEnabled() ? html`` : html``;\n const renderBadges = () => html``;\n const renderCommunityTags = () =>\n html``;\n const renderCertifications = () =>\n html``;\n const renderMVPComponent = () => html``;\n const renderFiles = () => html``;\n const renderQuestions = () =>\n context.chassis?.profile.lastName\n ? html``\n : html``;\n const renderConnections = () =>\n context.chassis?.profile.lastName\n ? html``\n : html``;\n const renderStamps = () =>\n window?.sfdcBase?.exp?.TRAILHEAD_COMPONENTS_BASE_URL &&\n window?.sfdcBase?.exp?.FEATURE_STAMPS === \"true\"\n ? html``\n : html``;\n\n const publicProfileSections: PageSections = {\n mobile: [\n renderAboutMyself,\n renderMVPComponent,\n renderCertifications,\n renderSuperbadges,\n renderRank,\n renderCommunityTags,\n renderQuestions,\n renderConnections,\n renderSkills,\n renderBadges,\n renderStamps,\n renderUserDetails,\n renderFiles,\n ],\n desktopLeft: [\n renderAboutMyself,\n renderCertifications,\n renderSuperbadges,\n renderSkills,\n renderBadges,\n renderStamps,\n renderUserDetails,\n ],\n desktopRight: [\n renderMVPComponent,\n renderRank,\n renderCommunityTags,\n renderQuestions,\n renderConnections,\n renderFiles,\n ],\n };\n return html`${notification}${renderSections(publicProfileSections, isMobile)}`;\n};\n\n/**\n * Used when viewing someone else's private profile.\n */\nfunction renderPrivateProfile({\n profileUser,\n profilePhotoUrl,\n}: ProfileContext) {\n return html` \n `;\n}\n\n//TODO: adapt getFullName() to be used in renderPrivateProfileChassis()\n\n/**\n * Used when viewing someone else's private profile.\n * In the context of digital-profile chassis\n */\nfunction renderPrivateProfileChassis({ chassis }: ProfileContext) {\n return html` \n `;\n}\n","import {\n legacyFormat,\n t,\n TRANSLATION_MISSING_MESSAGE,\n} from \"tbme/localization\";\nimport { LightningElement, wire } from \"lwc\";\nimport {\n LabelTranslations,\n MultiLabelAdapter,\n MultiLabelAdapterConfig,\n} from \"tbme/localization\";\nimport salesforceIconSrc from \"./images/salesforce-icon.svg\";\nimport { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport {\n GetAboutMyself,\n GetAboutMyself_chassis_profile,\n} from \"./gql/GetAboutMyself\";\nimport { showToast } from \"tds/toaster\";\nimport { logger } from \"tbme/logger\";\nimport { sharedUrls } from \"../localState/urls\";\nimport { ABOUT_MYSELF_QUERY } from \"./query\";\nimport { verifyCountry, verifyState } from \"@sfdc-www/digital-i18n\";\nimport {\n isHireMeEnabled,\n isCareerMarketplaceEnabled,\n} from \"../../../shared/feature\";\nimport { mediaQueryMobile } from \"tbme/profilePage\";\n\nexport default class extends LightningElement {\n private user: GetAboutMyself_chassis_profile = undefined!;\n private visible: boolean = false;\n private displayProfileEditModal: boolean = false;\n private isSelf?: boolean;\n\n @wire(QueryAdapter, {\n query: ABOUT_MYSELF_QUERY,\n })\n private handleResult(result: QueryAdapterValue) {\n if (!result) {\n return;\n }\n const { data, loading, error, errors } = result;\n const chassis = data?.chassis;\n if (chassis) {\n const { profile, isSelf } = chassis;\n this.isSelf = isSelf;\n if (!profile || (!profile.isPublicProfile && !isSelf)) {\n this.visible = false;\n return;\n }\n\n this.user = profile;\n this.visible = true;\n }\n }\n\n private get profileUrl() {\n return this.user?.profileUrl;\n }\n\n private get showUrlComponent(): boolean {\n return !!this.user?.profileUrl;\n }\n\n /**\n * Sanitizes from profileUrl by removing 'https://www.'. If displaying in mobile, just returns the slug\n */\n private get displayUrl() {\n if (mediaQueryMobile.matches && !!this.user?.username) {\n return this.user?.username;\n } else {\n return this.user?.profileUrl?.replace(\n /^https:\\/\\/www(?:(?:-(?!\\.))(?:.*?))?\\./,\n \"\"\n );\n }\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"aboutMe.addName\",\n \"aboutMe.edit\",\n \"aboutMe.copy\",\n \"aboutMe.emptyAddShortBio\",\n \"aboutMe.hireMeOptIn\",\n \"aboutMe.hireMeOptOut\",\n ],\n })\n private updateLabels({ aboutMe }: { aboutMe: LabelTranslations }) {\n this.labels = {\n ...aboutMe,\n };\n }\n private labels: LabelTranslations = undefined!;\n\n private get titleAtCompany() {\n const roles = t(\"profileEditModal.roleOptions\") as any;\n // We are currently saving these with the english translated version and then keying off of that\n // These should really be saved to the backend with the translation keys instead\n const roleMap: Record = {\n Developer: roles.developer,\n Administrator: roles.administrator,\n Architect: roles.architect,\n \"Sales Representative / Manager\": roles.salesRep,\n Marketer: roles.marketer,\n \"Service Agent / Supervisor\": roles.supervisor,\n \"Data Analyst\": roles.dataAnalyst,\n Consultant: roles.consultant,\n \"Business Operations Manager\": roles.businessOperationsManager,\n Designer: roles.designer,\n Educator: roles.educator,\n Student: roles.student,\n Executive: roles.executive,\n \"Product Manager\": roles.productManager,\n };\n if (this.user?.title && this.user?.company?.name) {\n return t(\"aboutMe.titleAtCompany\", {\n title: this.user.title,\n company: this.user.company?.name,\n });\n } else if (this.user?.role && this.user.company?.name) {\n let userRole;\n userRole = roleMap[this.user.role] || this.user.role;\n\n return t(\"aboutMe.titleAtCompany\", {\n title: userRole,\n company: this.user.company?.name,\n });\n }\n\n return this.user?.company?.name;\n }\n\n private get fullName() {\n const firstName = this.user?.firstName.trim() || \"\";\n const lastName = this.user?.lastName?.trim() || \"\";\n return `${firstName} ${lastName}`.trim();\n }\n\n private get country() {\n const countryCode = this.user?.address?.country;\n return countryCode ? verifyCountry(countryCode) : \"\";\n }\n\n private get state() {\n const countryCode = this.user?.address?.country;\n const stateCode = this.user?.address?.state;\n\n return countryCode && stateCode ? verifyState(countryCode, stateCode) : \"\";\n }\n\n private get location(): string {\n if (this.state) {\n return `${this.state}, ${this.country}`;\n }\n\n return this.country || \"\";\n }\n\n private get salesforceIconSrc() {\n return salesforceIconSrc;\n }\n\n private async handleCopyClick() {\n const textarea = this.template.querySelector(\n \".slug-value\"\n ) as HTMLTextAreaElement;\n\n try {\n await navigator.clipboard.writeText(textarea.value);\n showToast({\n message: t(\"aboutMe.copySuccess\"),\n variant: \"success\",\n });\n } catch (e) {\n logger.error(\"Error copying text to clipboard\", e);\n }\n }\n\n private handleAddNameClick() {\n this.displayProfileEditModal = true;\n }\n\n private handleEditClick() {\n this.displayProfileEditModal = true;\n }\n\n private handleProfileEditRequestClose() {\n this.displayProfileEditModal = false;\n }\n\n private get displayEmptyState(): boolean {\n return !!this.isSelf && !this.user.bio;\n }\n\n private get showAddName(): boolean {\n return !this.user?.firstName?.trim() && !this.user?.lastName?.trim();\n }\n\n private get showHireMeButton() {\n return (this.user.isAvailableForHire && isHireMeEnabled()) ?? false;\n }\n\n private get showAvailableForHireLink() {\n return this.isSelf && isHireMeEnabled();\n }\n\n private get showCareerMarketplace() {\n return this.isSelf && this.user.lastName && isCareerMarketplaceEnabled();\n }\n\n private get availableForHireLink() {\n const key: string =\n this.user.isAvailableForHire ?? false ? \"hireMeOptOut\" : \"hireMeOptIn\";\n return legacyFormat(this.labels[key], sharedUrls.availableForHire());\n }\n\n connectedCallback() {\n // Display the Profile Edit modal on page load if I'm looking at my own profile and the #edit hash is there. E.g. https://www.salesforce.com/trailblazer/profile#edit\n // Most likely this is coming from a redirect from the Settings page (Privacy section) or somewhere else that requires to complete the profile.\n if (\n window.location.pathname.endsWith(\"/profile\") &&\n window.location.hash === \"#edit\"\n ) {\n this.displayProfileEditModal = true;\n // this will remove the hash (#edit) from the url so page refreshes don't trigger the open modal again\n history.pushState(\n \"\",\n document.title,\n window.location.pathname + window.location.search\n );\n }\n }\n}\n","export default \"data:image/svg+xml,%3Csvg%20class%3D%22size--large%22%20aria-hidden%3D%22true%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2052%2052%22%3E%3Cpath%20fill%3D%22%231b96ff%22%20d%3D%22M21.7%2C11.9c1.7-1.7%2C4-2.8%2C6.6-2.8c3.4%2C0%2C6.4%2C1.9%2C8%2C4.7c1.4-0.6%2C2.9-1%2C4.5-1C47%2C12.8%2C52%2C17.8%2C52%2C24%20s-5%2C11.2-11.2%2C11.2c-0.8%2C0-1.5-0.1-2.2-0.2c-1.4%2C2.5-4.1%2C4.2-7.2%2C4.2c-1.3%2C0-2.5-0.3-3.6-0.8c-1.4%2C3.3-4.7%2C5.6-8.6%2C5.6%20c-4%2C0-7.5-2.5-8.8-6.1c-0.6%2C0.1-1.2%2C0.2-1.8%2C0.2c-4.8%2C0-8.7-3.9-8.7-8.7c0-3.2%2C1.7-6%2C4.3-7.5c-0.5-1.2-0.8-2.6-0.8-4%20c0-5.5%2C4.5-10%2C10.1-10C17%2C8%2C19.9%2C9.5%2C21.7%2C11.9%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E\"","import { LightningElement, api, wire } from \"lwc\";\nimport { assetsUrl } from \"tbme/localState\";\nimport {\n ReactiveVarAdapter,\n ReactiveVarAdapterConfig,\n} from \"tbme/reactiveVarAdapter\";\nimport { SiteInfo } from \"../../tbme/localState/types\";\nimport { TeamName } from \"./types\";\n\nexport type GetHeaderContextResult = {\n siteInfo: SiteInfo;\n};\nexport default class extends LightningElement {\n @api team: TeamName = undefined!;\n @api notificationHeader: string = undefined!;\n @api notificationBody: string = undefined!;\n\n notificationImages: {\n trailhead?: string;\n trailblazerCommunity?: string;\n appExchange?: string;\n developerMarketplace?: string;\n } = {};\n\n backgroundClasses = {\n trailhead: \"bg-trailhead\",\n trailblazerCommunity: \"bg-trailblazerCommunity\",\n appExchange: \"bg-appExchange\",\n developerMarketplace: \"bg-developerMarketplace\",\n };\n\n get notificationImage() {\n return this.notificationImages[this.team];\n }\n\n get className() {\n return `container ${this.backgroundClasses[this.team]}`;\n }\n\n @wire(ReactiveVarAdapter, {\n var: assetsUrl,\n })\n handleResult(prefix: string) {\n this.notificationImages = {\n trailhead: `${prefix}/images/earnie.svg`,\n trailblazerCommunity: `${prefix}/images/astro.svg`,\n appExchange: `${prefix}/images/appy.svg`,\n developerMarketplace: `${prefix}/images/codey.svg`,\n };\n }\n}\n","import { LightningElement, api } from \"lwc\";\nimport { locale } from \"tbme/localState\";\n\ntype variants = \"brand\" | \"success\" | \"neutral\";\n\nexport default class LwcTally extends LightningElement {\n @api variant: variants = \"neutral\";\n\n @api href: string = undefined!;\n @api target: string = \"_self\";\n\n @api count!: number;\n @api label!: string;\n\n get classnamesForCount() {\n return `tally__count ${this.variant ? `tally__count_${this.variant}` : \"\"}`;\n }\n\n private get localizedCount() {\n return Number(this.count).toLocaleString(locale());\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const CONNECTIONS_QUERY = gql`\n query GetTbcCommunityConnections(\n $userSlug: ID!\n $count: Int = 5\n $queryConnections: Boolean!\n ) {\n profileData(userSlug: $userSlug) @include(if: $queryConnections) {\n communityConnections {\n followers(first: $count) {\n edges {\n node {\n id\n avatar\n url\n name\n }\n }\n totalCount\n }\n following(first: $count) {\n edges {\n node {\n id\n avatar\n url\n name\n }\n }\n totalCount\n }\n groups(first: $count) {\n edges {\n node {\n id\n avatar {\n large\n }\n url\n name\n }\n }\n totalCount\n }\n }\n communityUserUrls {\n followersUrl\n followingUrl\n groupsUrl\n }\n }\n }\n`;\n\nexport const USER_CONTEXT_QUERY = gql`\n query GetUserConnectionsContext {\n chassis @client {\n profile {\n isPublicProfile\n username\n }\n isSelf\n }\n siteInfo @client {\n urls {\n tbcDefaultGroupImage\n }\n }\n }\n`;\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport classNames from \"classnames\";\nimport { CardState } from \"elements/tbui/card/types\";\nimport { LightningElement, track, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport {\n QueryAdapter as TbcQueryAdapter,\n QueryAdapterValue as TBCQueryAdapterValue,\n} from \"tbtbc/queryAdapter\";\nimport {\n GetTbcCommunityConnections,\n GetTbcCommunityConnectionsVariables,\n GetTbcCommunityConnections_profileData_communityConnections as CommunityConnections,\n GetTbcCommunityConnections_profileData_communityConnections_following as FollowingConnectionsCollection,\n GetTbcCommunityConnections_profileData_communityConnections_followers as FollowersConnectionsCollection,\n GetTbcCommunityConnections_profileData_communityConnections_groups as GroupsConnectionsCollection,\n GetTbcCommunityConnections_profileData_communityConnections_followers_edges_node as FollowersConnection,\n GetTbcCommunityConnections_profileData_communityConnections_following_edges_node as FollowingConnection,\n GetTbcCommunityConnections_profileData_communityConnections_groups_edges_node as GroupsConnection,\n GetTbcCommunityConnections_profileData_communityUserUrls,\n} from \"./gql/GetTbcCommunityConnections\";\nimport {\n GetUserConnectionsContext,\n GetUserConnectionsContext_siteInfo_urls,\n} from \"./gql/GetUserConnectionsContext\";\nimport { CONNECTIONS_QUERY, USER_CONTEXT_QUERY } from \"./query\";\n\ntype Placeholder = {\n __typename: \"Placeholder\";\n id: string;\n className?: string;\n};\n\ntype CommunityConnection =\n | FollowingConnection\n | FollowersConnection\n | GroupsConnection;\n\ntype CommunityConnectionsCollection =\n | FollowingConnectionsCollection\n | FollowersConnectionsCollection\n | GroupsConnectionsCollection;\n\ntype DisplayConnection = CommunityConnection & {\n className?: string;\n};\n\ntype ConnectionsForDisplay = {\n totalCount: number | null;\n className?: string;\n items: (DisplayConnection | Placeholder)[] | null;\n};\n\nconst imageErrors: WeakMap = new WeakMap();\n\nexport function handleImageError(event: Event, defaultImage: string) {\n const target = event.target as HTMLImageElement;\n\n if (!target) return;\n\n if (imageErrors.get(target)) return;\n\n const isGroup = target.classList.contains(\"group\");\n\n if (isGroup) {\n target.src = defaultImage;\n\n imageErrors.set(target, true);\n }\n}\n\nexport default class extends LightningElement {\n private visible: boolean = false;\n private cardState: CardState = \"loading\";\n private labels: LabelTranslations = undefined!;\n private urls: GetUserConnectionsContext_siteInfo_urls = undefined!;\n private isSelf: boolean = false;\n private variables: GetTbcCommunityConnectionsVariables = {\n userSlug: \"\",\n queryConnections: false,\n };\n\n @track\n private connections?: ConnectionsForDisplay[];\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"connections.title\",\n \"connections.followers\",\n \"connections.follower\",\n \"connections.following\",\n \"connections.followingSingular\",\n \"connections.groups\",\n \"connections.group\",\n \"connections.bannerTitle\",\n \"connections.bannerText\",\n ],\n })\n private handleLabels(labels: { connections: LabelTranslations }) {\n this.labels = {\n ...labels.connections,\n };\n }\n private get showCommunityBanner() {\n return (\n this.connections &&\n this.isSelf &&\n !this.connections.reduce(\n (acc: number, connection) => acc + (connection.totalCount ?? 0),\n 0\n )\n );\n }\n\n @wire(QueryAdapter, {\n query: USER_CONTEXT_QUERY,\n })\n handleResult({\n data,\n errors,\n error,\n }: QueryAdapterValue) {\n if (error || errors) {\n this.cardState = \"loadFailed\";\n return;\n } else if (!data) {\n return;\n }\n this.urls = data.siteInfo.urls;\n if (data.chassis?.profile?.username) {\n this.variables.userSlug = data.chassis.profile.username;\n this.variables.queryConnections = true;\n this.visible =\n data.chassis?.profile?.isPublicProfile || data.chassis?.isSelf;\n }\n if (data.chassis?.isSelf !== undefined) {\n this.isSelf = data.chassis.isSelf;\n }\n }\n\n @wire(TbcQueryAdapter, {\n query: CONNECTIONS_QUERY,\n variables: \"$variables\",\n })\n private handleResultTbc({\n data,\n error,\n errors,\n loading,\n }: TBCQueryAdapterValue) {\n if (error || errors) {\n this.cardState = \"loadFailed\";\n return;\n } else if (!data || !this.variables.queryConnections) {\n return;\n }\n\n const communityConnections = data.profileData?.communityConnections ?? null;\n const communityUrls = data.profileData?.communityUserUrls ?? null;\n\n this.setDisplayItems(\n communityConnections as GetTbcCommunityConnections | null,\n communityUrls\n );\n this.cardState = loading ? \"loading\" : \"default\";\n }\n\n private filterNull(input: object) {\n const result: any = {};\n\n for (let [key, value] of Object.entries(input)) {\n if (\n input[key as keyof typeof input] !== null &&\n input[key as keyof typeof input] !== undefined\n ) {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n private handleImageError(event: Event) {\n handleImageError(event, this.urls.tbcDefaultGroupImage);\n }\n\n private setDisplayItems(\n queryResult: GetTbcCommunityConnections | null,\n communityUrls: GetTbcCommunityConnections_profileData_communityUserUrls | null\n ) {\n const urls = new Map();\n urls.set(\"followers\", communityUrls?.followersUrl);\n urls.set(\"following\", communityUrls?.followingUrl);\n urls.set(\"groups\", communityUrls?.groupsUrl);\n this.connections = [\"followers\", \"following\", \"groups\"].map<\n ConnectionsForDisplay\n >((key) => {\n const defaultConnection: CommunityConnectionsCollection = {\n __typename: \"ActorWithTotalCountConnection\",\n totalCount: 0,\n edges: [],\n };\n const state: CommunityConnections = {\n __typename: \"CommunityConnections\",\n groups: {\n ...defaultConnection,\n __typename: \"GroupDetailWithTotalCountConnection\",\n } as GroupsConnectionsCollection,\n followers: {\n ...defaultConnection,\n } as FollowersConnectionsCollection,\n following: {\n ...defaultConnection,\n } as FollowingConnectionsCollection,\n ...(queryResult ? this.filterNull(queryResult) : {}),\n };\n const { totalCount, edges } = state[\n key as keyof CommunityConnections\n ] as CommunityConnectionsCollection;\n const count = totalCount ?? 0;\n const maxItems = 5;\n const items: (Placeholder | CommunityConnection)[] = [];\n edges?.forEach((edge: any) =>\n items.push({ ...edge.node, __typename: key })\n );\n\n while (items.length < 5) {\n items.push({\n __typename: \"Placeholder\",\n id: `placeholder-${items.length}`,\n });\n }\n const url = urls.get(key);\n const result = {\n totalCount,\n href: count > 0 ? url : null,\n className: count > 0 ? \"items has-data\" : \"items\",\n items: items.map((item: any) => ({\n ...item,\n className: classNames(\n {\n group: key === \"groups\",\n user: key !== \"groups\",\n },\n item.__typename\n ),\n avatar:\n typeof item.avatar !== \"string\" ? item.avatar?.large : item.avatar,\n })),\n };\n\n const getLabel = this.labelForConnection.bind(this);\n\n Object.defineProperty(result, \"label\", {\n get() {\n return getLabel(key, totalCount ?? 0) || \"\";\n },\n });\n\n return result;\n });\n }\n\n private labelForConnection(type: string, count: number) {\n switch (type) {\n case \"following\": {\n return t(\"connections.following\", { count });\n }\n case \"followers\": {\n return t(\"connections.followers\", { count });\n }\n case \"groups\": {\n return t(\"connections.groups\", { count });\n }\n }\n }\n}\n","import {\n LightningElement,\n createContextProvider,\n ContextConsumer,\n wire,\n api,\n} from \"lwc\";\nimport { EffectAdapter } from \"common/effectAdapter\";\nimport {\n ClientAdapter,\n ClientAdapterContext,\n ClientAdapterValue,\n} from \"tbtbc/clientAdapter\";\nimport { QueryAdapter } from \"tbtbc/queryAdapter\";\nimport { ApolloClient } from \"@apollo/client\";\n\nconst contexts = [\n createContextProvider(ClientAdapter),\n createContextProvider(QueryAdapter),\n];\n\ntype EffectContext = {\n localContext: ClientAdapterContext;\n};\n\n/**\n * This provider deviates from the base utility implementation provided by `common/context` by\n * providing \"context\" to instances of each adapter that require client from ClientAdapter.\n * This allows for declarative control over the client used by QueryAdapter without needing\n * to alter the implementation of the consumer of QueryAdapter.\n */\nexport default class extends LightningElement {\n private consumers = new Set>();\n\n @api client: ApolloClient = undefined!;\n\n @wire(EffectAdapter, {\n localContext: \"$localContext\",\n })\n private updateConsumers({ localContext }: EffectContext) {\n for (let consumer of this.consumers) {\n consumer.provide(localContext);\n }\n }\n\n @wire(ClientAdapter, {\n client: \"$client\",\n })\n private context: ClientAdapterValue = undefined!;\n\n get localContext(): ClientAdapterContext {\n return { client: this.client || this.context.client };\n }\n\n connectedCallback() {\n contexts.forEach((contextualizer) =>\n contextualizer(this, {\n consumerConnectedCallback: (\n consumer: ContextConsumer\n ) => {\n this.consumers.add(consumer);\n consumer.provide(this.localContext);\n },\n consumerDisconnectedCallback: (\n consumer: ContextConsumer\n ) => {\n this.consumers.delete(consumer);\n },\n })\n );\n }\n}\n","import {\n ApolloClient,\n NormalizedCacheObject,\n InMemoryCache,\n} from \"@apollo/client\";\nimport { MockedResponse, MockLink } from \"@apollo/client/testing\";\n\nexport const createMockClient = (\n mocks: MockedResponse[],\n addTypename: boolean = false\n) => {\n return new ApolloClient({\n cache: new InMemoryCache({ addTypename: false }),\n link: new MockLink(mocks, addTypename),\n });\n};\n","import { LightningElement, api } from \"lwc\";\n\nexport default class LwcCardFooterLink extends LightningElement {\n @api href?: string;\n @api title!: string;\n @api target?: string;\n @api isLoading?: boolean = false;\n\n labels = { loadingText: \"\" };\n\n get isButton() {\n return !this.href;\n }\n\n handleClick() {\n if (this.isLoading) return;\n\n this.dispatchEvent(new CustomEvent(\"clickfooterlink\"));\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const USER_CONTEXT_QUERY = gql`\n query GetUserContext {\n chassis @client {\n profile {\n isPublicProfile\n username\n firstName\n lastName\n }\n isSelf\n }\n }\n`;\n\nexport const TBC_USER_FILES_QUERY = gql`\n query GetFilesUrl($userSlug: ID!, $queryFiles: Boolean!) {\n profileData(userSlug: $userSlug) @include(if: $queryFiles) {\n communityUserUrls {\n filesUrl\n }\n }\n }\n`;\n","import { LightningElement, wire } from \"lwc\";\n\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\n\nimport {\n QueryAdapter as TBCQueryAdapter,\n QueryAdapterValue as TBCQueryAdapterValue,\n} from \"tbtbc/queryAdapter\";\n\nimport { GetUserContext } from \"./gql/GetUserContext\";\nimport { GetFilesUrl, GetFilesUrlVariables } from \"./gql/GetFilesUrl\";\n\nimport { USER_CONTEXT_QUERY, TBC_USER_FILES_QUERY } from \"./query\";\n\nexport default class extends LightningElement {\n private isSelf: boolean = false;\n private isPublicProfile: boolean = false;\n private variables: GetFilesUrlVariables = {\n userSlug: \"\",\n queryFiles: false,\n };\n\n filesUrl: string | null = null;\n\n get visible(): boolean {\n return (this.isSelf || this.isPublicProfile) && this.filesUrl !== null;\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\"filesTitle\", \"viewFilesButton\"],\n })\n labels: LabelTranslations = undefined!;\n\n @wire(QueryAdapter, { query: USER_CONTEXT_QUERY })\n private handleTbmeResult({ data }: QueryAdapterValue) {\n if (!data) return;\n\n if (data.chassis && data.chassis.profile && data.chassis.profile.username) {\n this.isSelf = data.chassis.isSelf;\n this.isPublicProfile = data.chassis.profile.isPublicProfile;\n this.variables.userSlug = data.chassis.profile.username;\n\n this.variables.queryFiles = Boolean(\n data.chassis?.profile?.firstName && data.chassis?.profile?.lastName\n );\n }\n }\n\n @wire(TBCQueryAdapter, {\n query: TBC_USER_FILES_QUERY,\n variables: \"$variables\",\n })\n private handleTbcResult({ data, error }: TBCQueryAdapterValue) {\n if (!data || !this.variables.queryFiles) return;\n\n if (data.profileData?.communityUserUrls?.filesUrl) {\n this.filesUrl = data.profileData.communityUserUrls.filesUrl;\n }\n }\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport { FooterContent, FooterGlobal } from \"./types\";\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\nexport default class extends LightningElement {\n private labels: LabelTranslations = undefined!;\n @api content: FooterContent | null = null;\n @wire(MultiLabelAdapter, {\n labels: [\"pageFooter.languageSelectAssistiveText\"],\n })\n private handleLabels(labels: { pageFooter: LabelTranslations }) {\n this.labels = {\n ...labels.pageFooter,\n };\n }\n get selectedLocale() {\n if (!this.content?.locales || !this.content.locales.length)\n return undefined;\n let locale = this.content.locales.find((locale) => locale.selected);\n return locale ? locale.value : this.content.locales[0].value;\n }\n\n get globalContent(): FooterGlobal | undefined {\n return this.content?.global;\n }\n\n get links() {\n return this.globalContent!.links.map((link: any) =>\n Object.assign({}, link, {\n handleClick: this.handleLinkClick.bind(this, link),\n })\n );\n }\n\n get renderLeft() {\n return this.globalContent?.logo || this.globalContent?.copyright;\n }\n\n handleGlobalTrack(e: any) {\n let eventName = e.detail.eventName;\n this.track(eventName, e.detail.payload);\n }\n\n handleLinkClick(link: any) {\n // Keep for backwards compatibility\n this.dispatchEvent(\n new CustomEvent(\"link_click\", {\n detail: link,\n })\n );\n this.track(\"link_clicked\", {\n label: link.label,\n });\n }\n\n handleLocaleChange(e: any) {\n this.dispatchEvent(\n new CustomEvent(\"locale_change\", {\n detail: {\n value: e.detail,\n },\n })\n );\n this.track(\"language_selector_changed\", {\n label: e.detail,\n });\n }\n\n track(eventName: string, payload: any) {\n const trackEvent = new CustomEvent(\"track\", {\n detail: {\n eventName,\n payload: { ...(payload ? payload : {}) },\n },\n });\n this.dispatchEvent(trackEvent);\n }\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport { FooterContent, Locale, FooterLink } from \"../../tbui/pageFooter/types\";\nimport { GetFooterContext } from \"./gql/GetFooterContext\";\nimport { gql, ApolloQueryResult } from \"@apollo/client\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\n\nexport const FOOTER_QUERY = gql`\n query GetFooterContext {\n currentUser @client {\n id\n }\n footerLinks @client {\n href\n label\n image\n }\n localeOptions @client {\n value\n label\n }\n locale @client\n siteInfo @client {\n urls {\n assets\n }\n }\n }\n`;\n\nexport default class extends LightningElement {\n @wire(MultiLabelAdapter, {\n labels: [\n {\n labelKey: \"copyright\",\n year: new Date().getFullYear(),\n salesforceCompanyName: \"Salesforce, Inc.\",\n },\n ],\n })\n private labels: LabelTranslations = {};\n\n links: FooterLink[] = [];\n locales: Locale[] = [];\n currentLocale: string = \"\";\n footerUrl: string = \"\";\n isAuthenticated: boolean = false;\n\n get footerContent(): FooterContent {\n return {\n global: {\n logo: {\n assistiveText: \"Salesforce\",\n url: this.footerUrl,\n },\n copyright: this.labels.copyright,\n links: this.links,\n },\n locales: this.locales,\n };\n }\n\n @wire(QueryAdapter, {\n query: FOOTER_QUERY,\n })\n handleResult({ data }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n this.links = [...data.footerLinks].map((link) => {\n if (link.image) {\n return {\n ...link,\n image: `${data.siteInfo.urls.assets}/images/${link.image}`,\n };\n }\n return link;\n });\n this.currentLocale = data.locale;\n this.locales = data.localeOptions.map((localeOption) => {\n return {\n ...localeOption,\n selected: localeOption.value === this.currentLocale,\n };\n });\n\n this.footerUrl = `${data.siteInfo.urls.assets}/images/salesforce.svg`;\n this.isAuthenticated = !!data.currentUser && !!data.currentUser.id;\n }\n\n private handleLanguageChange(e: CustomEvent) {\n const params = new URLSearchParams(window.location.search);\n\n // See: https://help.salesforce.com/articleView?id=faq_getstart_what_languages_does.htm&type=5\n // Salesforce uses JDK 8 format for locales. We can achieve this replacing \"hyphens\" with \"underscores\"\n // Salesforce doesn't understand \"en\", you need to indicate a territory.\n let value = e.detail.value;\n\n if (value === \"en\") {\n value = \"en_US\";\n } else {\n value = value.replace(\"-\", \"_\");\n }\n\n params.set(\"lang\", value);\n window.location.search = params.toString();\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const MVP_QUERY = gql`\n query GetMvpContext {\n chassis @client {\n profile {\n isPublicProfile\n username\n firstName\n lastName\n }\n isSelf\n }\n siteInfo @client {\n urls {\n mvpImage\n }\n }\n }\n`;\n\nexport const TBC_MVP_QUERY = gql`\n query GetTbcMvpContext($userSlug: ID!, $queryMvp: Boolean!) {\n profileData(userSlug: $userSlug) @include(if: $queryMvp) {\n isMvp\n }\n }\n`;\n","import { LightningElement, wire } from \"lwc\";\nimport { ApolloQueryResult } from \"@apollo/client\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { QueryAdapter as TbcQueryAdapter } from \"tbtbc/queryAdapter\";\nimport { GetMvpContext } from \"./gql/GetMvpContext\";\nimport {\n GetTbcMvpContext,\n GetTbcMvpContextVariables,\n} from \"./gql/GetTbcMvpContext\";\nimport { MVP_QUERY, TBC_MVP_QUERY } from \"./query\";\n\nexport default class extends LightningElement {\n private imageUrl: string = \"\";\n private imageTitle: string = \"MVP\";\n private isVisible: boolean = false;\n private isMvp: boolean = false;\n private variables: GetTbcMvpContextVariables = {\n userSlug: \"\",\n queryMvp: false,\n };\n\n @wire(QueryAdapter, {\n query: MVP_QUERY,\n })\n handleResult({ data, error }: ApolloQueryResult) {\n if (error) console.error(\"error\", error);\n if (!data) return;\n this.imageUrl = data.siteInfo.urls.mvpImage;\n if (data.chassis?.profile?.username) {\n this.variables.userSlug = data.chassis?.profile?.username;\n this.isVisible =\n data.chassis?.profile?.isPublicProfile || data.chassis?.isSelf;\n this.variables.queryMvp = Boolean(\n data.chassis?.profile?.firstName && data.chassis?.profile?.lastName\n );\n }\n }\n\n @wire(TbcQueryAdapter, {\n query: TBC_MVP_QUERY,\n variables: \"$variables\",\n })\n handleResultTbc({ data, error }: ApolloQueryResult) {\n if (error) console.error(\"error\", error);\n if (!this.variables.queryMvp) {\n return;\n }\n this.isMvp = !!data?.profileData?.isMvp;\n }\n}\n","import { LightningElement, api } from \"lwc\";\n\n/** The minimum space between a wrapped element & the left boundary */\nconst minLeft = 16;\n\n/**\n * Ensures that an element does not bleed out of the viewport.\n * Should be primarily used on absolute-positioned elements, such as popovers.\n * Adjusts the position of the wrapped element by adding a transform: translateX() style.\n * Should wrap exactly one node like so:\n *\n * Valid (1 wrapped element):\n * \n *
\n *
\n *\n * Invalid (Many wrapped elements):\n * \n *
\n *
\n *
\n */\nexport default class StayInBounds extends LightningElement {\n /** Should the component recalculate the wrapped element's position? */\n @api isActive: boolean = false;\n\n /** The \"left\" position of the wrapped element's DOMRect */\n private positionLeft: number | undefined;\n private _wrappedElement: Element = null!;\n\n /** Did we already calculate the position after isActive was set to true? */\n get didCalculate() {\n return this.isActive && this.positionLeft !== undefined;\n }\n\n /** Did we already nullify the position after isActive was set to false */\n get didReset() {\n return !this.isActive && this.positionLeft === undefined;\n }\n\n /** The amount we need to translate the wrapped element to keep it in the viewport with the minLeft */\n get offsetLeft() {\n return this.positionLeft === undefined || this.positionLeft! >= minLeft\n ? null\n : minLeft - this.positionLeft!;\n }\n\n /** The CSS transform to apply to the wrapped element based on the offsetLeft */\n get transform() {\n const { offsetLeft } = this;\n return offsetLeft === null ? \"\" : `translateX(${offsetLeft}px)`;\n }\n\n /** The element to keep in the viewport */\n get wrappedElement() {\n if (!this._wrappedElement) {\n this._wrappedElement = (this.template\n .firstChild as HTMLSlotElement)!.assignedElements()[0];\n }\n return this._wrappedElement;\n }\n\n /** Set and reset the positionLeft when needed, using the DOMRect of the wrapped element */\n renderedCallback() {\n if (this.didCalculate || this.didReset) return;\n this.positionLeft = this.isActive\n ? this.wrappedElement!.getBoundingClientRect().left\n : undefined;\n (this.wrappedElement as HTMLElement).style.transform = this.transform;\n }\n}\n","import { LightningElement, api } from \"lwc\";\nimport classNames from \"classnames\";\n\nconst sizes = [\"small\", \"large\"];\nconst variants = [\"borderless\"];\n\ntype POPOVER_SIZES = \"small\" | \"large\" | \"\";\ntype POPOVER_VARIANTS = \"borderless\" | \"\";\n\nexport function closest(element: HTMLElement | Node, selector: string) {\n if (element instanceof HTMLElement) return element.closest(selector);\n let el: HTMLElement | Node | null = element;\n\n do {\n if (el instanceof HTMLElement && el.matches(selector)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n\n return null;\n}\n\nfunction shadowedTarget(event: MouseEvent) {\n const path = event.composedPath();\n if (Array.isArray(path) && path[0]) return path[0];\n return event.target;\n}\n\nfunction closestElement(\n element: HTMLElement | Node | Document | Window | null,\n selector: string\n) {\n function __closestFrom(\n el: HTMLElement | Node | Document | Window | null\n ): Element | null {\n if (!el || el === document || el === window) return null;\n const found = closest(el as HTMLElement, selector);\n\n return found\n ? found\n : __closestFrom(((el as Node).getRootNode() as ShadowRoot).host);\n }\n\n return __closestFrom(element);\n}\n\nexport default class Popover extends LightningElement {\n @api assistiveText: string = undefined!;\n @api size: POPOVER_SIZES = undefined!;\n @api variant: POPOVER_VARIANTS = \"\";\n @api focusTrapSelector: string = undefined!;\n\n private _bodyId: string = undefined!;\n private _isOpen = false;\n\n @api\n set isOpen(value: boolean) {\n this._isOpen = value;\n value ? this.activate() : this.deactivate();\n }\n\n get isOpen() {\n return this._isOpen;\n }\n\n private get popoverClass() {\n return classNames(\"popover\", this.variantClass, {\n hidden: !this.isOpen,\n });\n }\n\n private get variantClass() {\n return variants.includes(this.variant) ? `popover_${this.variant}` : \"\";\n }\n\n private get bodyId() {\n if (this._bodyId) return this._bodyId;\n this._bodyId = Math.random().toString();\n return this._bodyId;\n }\n\n private get isFocusTrapInactive() {\n return !this.isOpen;\n }\n\n private activate() {\n window.addEventListener(\"keydown\", this.handleKeyDown);\n document.addEventListener(\"click\", this.handleClick, true);\n document.addEventListener(\"focusout\", this.handleFocusOut, true);\n }\n\n private deactivate() {\n window.removeEventListener(\"keydown\", this.handleKeyDown);\n document.removeEventListener(\"click\", this.handleClick, true);\n document.removeEventListener(\"focusout\", this.handleFocusOut, true);\n }\n\n private handleKeyDown = (e: KeyboardEventInit) => {\n if (e.key === \"Esc\" || e.key === \"Escape\") {\n this.handleClose();\n }\n };\n\n handleClose() {\n this.dispatchEvent(new CustomEvent(\"close\"));\n }\n\n handleFocusOut = (e: Event) => {\n if (!e.isTrusted) return;\n if (!document.hasFocus()) this.handleClose();\n };\n\n handleClick = (e: MouseEvent) => {\n if (!e.isTrusted) return;\n const target = shadowedTarget(e) as HTMLElement;\n const clickedOutside =\n closestElement(target, this.focusTrapSelector) !==\n closestElement(this.template.host, this.focusTrapSelector);\n if (clickedOutside) this.handleClose();\n };\n}\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { LightningElement, api, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { PrivateProfileBannerContext } from \"./gql/PrivateProfileBannerContext\";\nimport { chassis } from \"tbme/localState\";\nexport default class extends LightningElement {\n @api isSelf: boolean = undefined!;\n\n @wire(QueryAdapter, {\n query: gql`\n query PrivateProfileBannerContext {\n siteInfo @client {\n urls {\n trailheadHelpProfileOverview\n }\n }\n }\n `,\n })\n private context: ApolloQueryResult = undefined!;\n\n @wire(MultiLabelAdapter, {\n labels: [\"privateProfileMe\", \"privateProfileMeLink\", \"privateProfileOther\"],\n })\n private labels: LabelTranslations = {};\n\n get learnMoreUrl() {\n return (\n this.context &&\n this.context.data &&\n this.context.data.siteInfo.urls.trailheadHelpProfileOverview\n );\n }\n\n get isProfileIncomplete(): boolean {\n return (\n !chassis()?.profile?.firstName?.trim() &&\n !chassis()?.profile?.lastName?.trim()\n );\n }\n\n get incompleteProfileNotice(): string {\n return t(\"privateProfileMeIncomplete\", {\n profileEditModalUrl: \"/trailblazer/profile#edit\",\n });\n }\n\n get completeProfileNotice(): string {\n return t(\"privateProfileMe\", {\n learnMoreUrl: this.learnMoreUrl || \"\",\n settingsUrl: \"/trailblazer/settings\",\n });\n }\n}\n","import { api, LightningElement } from \"lwc\";\nimport { sharedUrls } from \"../../tbme/localState/urls\";\n\nexport default class extends LightningElement {\n @api avatarUrl?: string;\n @api fullName?: string;\n\n get tdsAvatarUrl() {\n return this.avatarUrl || sharedUrls.defaultAstroImage();\n }\n}\n","import { LightningElement, api } from \"lwc\";\nimport { sharedUrls } from \"../../tbme/localState/urls\";\n\nexport const mediaQueryMobile = window.matchMedia(\"(max-width: 760px)\");\n\nexport type LayoutType = \"Mobile\" | \"Desktop\" | \"AllSlots\" | \"Responsive\";\n\nexport default class extends LightningElement {\n @api backgroundImageUrl: string = undefined!;\n @api layout: LayoutType = \"AllSlots\";\n\n private isMobile: boolean = mediaQueryMobile.matches;\n\n private get bannerStyle() {\n // The value is coming in as the string 'undefined' if not defined\n if (this.backgroundImageUrl && this.backgroundImageUrl !== \"undefined\") {\n return `background-image: url(${this.backgroundImageUrl})`;\n }\n return `background-image: url(${sharedUrls.bannerBackgroundImage()})`;\n }\n\n private get showMobile() {\n return (\n this.layout === \"Mobile\" ||\n (this.layout === \"Responsive\" && this.isMobile) ||\n this.layout === \"AllSlots\"\n );\n }\n\n private get showDesktop() {\n return (\n this.layout === \"Desktop\" ||\n (this.layout === \"Responsive\" && !this.isMobile) ||\n this.layout === \"AllSlots\"\n );\n }\n\n private onMediaQueryChange = (e: MediaQueryListEvent) => {\n this.isMobile = e.matches;\n };\n\n connectedCallback() {\n if (this.layout === \"Responsive\") {\n mediaQueryMobile.addEventListener(\"change\", this.onMediaQueryChange);\n }\n }\n\n disconnectedCallback() {\n if (this.layout === \"Responsive\") {\n mediaQueryMobile.removeEventListener(\"change\", this.onMediaQueryChange);\n }\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const HEADER_QUERY = gql`\n query GetHeaderContext {\n appLauncherItems @client {\n id\n label\n link {\n href\n }\n imageUrl\n }\n currentUser @client {\n id\n avatarUrl\n fullName\n backgroundImageUrl\n }\n locale @client\n siteInfo @client {\n name\n urls {\n home\n logo\n profile\n settings\n assets\n signup\n login\n logout\n }\n }\n }\n`;\n","import { gql, ApolloQueryResult } from \"@apollo/client\";\nimport { LightningElement, wire, track } from \"lwc\";\nimport {\n GetHeaderContext,\n GetHeaderContext_appLauncherItems,\n} from \"./gql/GetHeaderContext\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\nimport { Config } from \"tds/header\";\nimport { HEADER_QUERY } from \"./query\";\nexport default class extends LightningElement {\n private apps: GetHeaderContext_appLauncherItems[] = undefined!;\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"headerDropdownMyProfile\",\n \"headerDropdownMySettings\",\n {\n labelKey: \"settingsWelcomeLogout\",\n aliasKey: \"logOut\",\n },\n ],\n })\n private labels: LabelTranslations = {};\n private locale: string = \"\";\n private config: Config = null!;\n\n @wire(QueryAdapter, {\n query: HEADER_QUERY,\n })\n handleResult({ data, error }: ApolloQueryResult) {\n if (!data) return;\n\n this.locale = data.locale;\n\n this.config = {\n logo: {\n assistiveText: data.siteInfo.name,\n link: {\n href: data.siteInfo.urls.home,\n },\n url: `${data.siteInfo.urls.logo}`,\n },\n };\n\n const { currentUser } = data;\n\n if (!currentUser) {\n // If not authenticated, show 'Sing Up' and 'Log In' buttons\n this.config.signupLink = {\n href: data.siteInfo.urls.signup,\n };\n this.config.signinLink = {\n href: data.siteInfo.urls.login,\n };\n\n return;\n }\n\n const { avatarUrl, backgroundImageUrl, fullName } = currentUser;\n\n this.config.userProfile = {\n avatarUrl: avatarUrl,\n bannerUrl: backgroundImageUrl,\n fullName: fullName,\n navItems: [\n {\n label: this.labels.headerDropdownMyProfile,\n link: { href: data.siteInfo.urls.profile! },\n mobile: true,\n },\n {\n label: this.labels.headerDropdownMySettings,\n link: { href: data.siteInfo.urls.settings! },\n mobile: true,\n },\n ],\n logout: {\n label: this.labels.logOut,\n link: {\n href: data.siteInfo.urls.logout,\n },\n },\n };\n\n this.config.skipLink = {\n href: \"#profile-sections-container\",\n };\n\n this.config.apps = data.appLauncherItems;\n }\n}\n","import { LightningElement } from \"lwc\";\n\nexport default class extends LightningElement {}\n","import { LightningElement, api, wire } from \"lwc\";\nimport classNames from \"classnames\";\nimport { MultiLabelAdapter, LabelTranslations, t } from \"tbme/localization\";\nimport { locale } from \"tbme/localState\";\n\n/**\n * Represents an earned Badge from Trailhead\n * Always shows an image and the title\n * When hovered or focused, it shows a gray border with a details button\n * When the details button is clicked, more details are shown\n */\nexport default class Badge extends LightningElement {\n /** The date the badge was awarded */\n private _awardedOn: string | null = undefined!;\n\n /** The number of points awarded for the badge */\n @api pointsAwarded: number | null = undefined!;\n\n /** The link to the badge on trailhead */\n @api learningUrl: string = undefined!;\n\n /** The title of the badge */\n @api title: string = undefined!;\n\n /** The image url for the badge */\n @api imageUrl: string = undefined!;\n\n /** If the profileUser === the currentUser */\n @api isSelf = false;\n\n /** If the award has been archived */\n @api isArchived = false;\n\n /** The locale-formatted date awarded */\n @api\n get awardedOn() {\n if (this._awardedOn === null) return null;\n\n const date = new Date(this._awardedOn);\n return date.toLocaleDateString(locale());\n }\n set awardedOn(value: string | null) {\n this._awardedOn = value;\n }\n\n /** The locale-formatted points awarded */\n private get pointsAwardedString() {\n if (this.pointsAwarded === null) return \"\";\n\n return this.pointsAwarded.toLocaleString(locale());\n }\n\n /** Is the badge being hovered? */\n private isHovering = false;\n\n /** Is the badge being focused in? */\n private isFocused = false;\n\n /** Did the user open the details menu? */\n private isDetailsOpen = false;\n\n /** The static labels in the component */\n @wire(MultiLabelAdapter, {\n labels: [\n \"trailheadBadgeDateEarned\",\n \"trailheadBadgePoints\",\n \"trailheadBadgeDetails\",\n ],\n })\n private labels: LabelTranslations = {};\n\n /** Is the component being hovered or focused? */\n private get isHighlighted() {\n return this.isHovering || this.isFocused || this.isDetailsOpen;\n }\n\n /** The container div class */\n private get containerClass() {\n return classNames(\"badge-container\", {\n \"badge-container_border\": this.isHighlighted,\n });\n }\n\n /** The class for the button that toggles the details menu */\n private get detailsTriggerClass() {\n return classNames(\"details__trigger\", {\n details__trigger_visible: this.isHighlighted,\n });\n }\n\n /** Tells the component we're hovering */\n private handleMouseEnter() {\n this.isHovering = true;\n }\n\n /** Tells the component we're not hovering */\n private handleMouseLeave() {\n this.isHovering = false;\n }\n\n /** Tells the component we're focusing */\n private handleFocusIn() {\n this.isFocused = true;\n }\n\n /** Tells the component we're no longer focused in */\n private handleFocusOut() {\n this.isFocused = false;\n }\n\n /** Toggles the details menu visibility */\n private handleToggleDetails(e: Event) {\n this.isDetailsOpen = !this.isDetailsOpen;\n }\n\n /** Closes the details menu, used when clicks occur outside of the popover */\n private handleCloseDetails() {\n this.isDetailsOpen = false;\n this.template\n .querySelector(\".details__trigger\")!\n .shadowRoot!.querySelector(\"button\")!\n .focus();\n }\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport { MultiLabelAdapter, LabelTranslations, t } from \"tbme/localization\";\nimport classNames from \"classnames\";\n\nexport default class extends LightningElement {\n @api progress!: number;\n @api imageUrl!: string;\n @api assistiveText!: string;\n\n isLong(percentage: number) {\n return percentage > 0.5 ? 1 : 0;\n }\n\n arcX(percentage: number) {\n return Math.cos(2 * Math.PI * percentage);\n }\n\n arcY(percentage: number) {\n return 0 - Math.sin(2 * Math.PI * percentage);\n }\n\n get svgRingPath() {\n const percentage = this.progress / 100;\n return `M 1 0 A 1 1 0 ${this.isLong(percentage)} 0 ${this.arcX(\n percentage\n )} ${this.arcY(percentage)} L 0 0`;\n }\n}\n","import { api, LightningElement } from \"lwc\";\n\nexport default class extends LightningElement {\n /** The image url for the status item */\n @api imageUrl: string = \"\";\n\n /** The status name of the item */\n @api statusName: string = \"\";\n\n /** The title of the item */\n @api title: string = \"\";\n\n get altText() {\n return `${this.statusName} ${this.title}`;\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const TRAILHEAD_RANKS_QUERY = gql`\n fragment TrailheadRank on TrailheadRank {\n __typename\n title\n requiredPointsSum\n requiredBadgesCount\n imageUrl\n }\n\n fragment LearnerStatusLevel on LearnerStatusLevel {\n __typename\n statusName\n title\n level\n imageUrl\n completedAt\n progress\n }\n\n fragment PublicProfile on PublicProfile {\n __typename\n trailheadStats {\n __typename\n earnedPointsSum\n earnedBadgesCount\n completedTrailCount\n rank {\n ...TrailheadRank\n }\n nextRank {\n ...TrailheadRank\n }\n learnerStatusLevels {\n ...LearnerStatusLevel\n }\n }\n }\n\n query GetTrailheadRank($slug: String, $hasSlug: Boolean!) {\n profile(slug: $slug) @include(if: $hasSlug) {\n ... on PublicProfile {\n ...PublicProfile\n }\n ... on PrivateProfile {\n __typename\n }\n }\n }\n`;\n","import { LightningElement, wire, api } from \"lwc\";\nimport { ApolloQueryResult } from \"@apollo/client\";\nimport classNames from \"classnames\";\nimport {\n MultiLabelAdapter,\n LabelTranslations,\n t,\n legacyFormat,\n} from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport {\n GetTrailheadRank,\n GetTrailheadRankVariables,\n} from \"./gql/GetTrailheadRank\";\nimport { PublicProfile_trailheadStats } from \"./gql/PublicProfile\";\nimport { TrailheadRank } from \"./gql/TrailheadRank\";\nimport { LearnerStatusLevel } from \"./gql/LearnerStatusLevel\";\nimport { TRAILHEAD_RANKS_QUERY } from \"./query\";\nimport { chassis } from \"tbme/localState\";\nimport { getSharedUrlValues } from \"../localState/urls\";\n\ntype cardStates = \"default\" | \"loading\" | \"loadFailed\";\n\nexport default class extends LightningElement {\n private isSelf: boolean = undefined!;\n private trailheadAppUrl: string = undefined!;\n private progressRingMaxValue: number = 100;\n private variables: GetTrailheadRankVariables = {\n hasSlug: false,\n };\n\n connectedCallback() {\n const urls = getSharedUrlValues() as any;\n this.trailheadAppUrl = urls.trailhead;\n this.ranksPagePath = urls.trailheadRanks;\n\n const chassisData = chassis();\n const username = chassisData?.profile?.username;\n this.isSelf = chassisData?.isSelf || false;\n\n this.variables = {\n ...this.variables,\n slug: username,\n hasSlug: !!username,\n };\n }\n\n @wire(QueryAdapter, {\n query: TRAILHEAD_RANKS_QUERY,\n variables: \"$variables\",\n })\n handleResult(result: ApolloQueryResult) {\n const { data, loading, error, errors } = result;\n\n if (loading) {\n this.cardState = \"loading\";\n return;\n }\n\n if (error || errors) {\n this.cardState = \"loadFailed\";\n return;\n }\n\n // Once is done loading (loading == false), all the client side fields are not accesible (a side effect of using GraphQL aliases in the query?)\n // All client side fields should be inspected above this line.\n\n if (\n !data.profile ||\n data.profile.__typename !== \"PublicProfile\" ||\n !data.profile.trailheadStats\n ) {\n this.cardState = \"loadFailed\";\n return;\n }\n this.updateRank(data.profile.trailheadStats);\n if (\n data.profile.trailheadStats.learnerStatusLevels &&\n data.profile.trailheadStats.learnerStatusLevels.length > 0 &&\n data.profile.trailheadStats.learnerStatusLevels[0]?.imageUrl\n ) {\n this.learnerStatusLevel =\n data.profile.trailheadStats.learnerStatusLevels[0];\n }\n }\n\n private cardState: cardStates = \"loading\";\n private rank: TrailheadRank | null = null;\n private nextRank: TrailheadRank | null = null;\n private earnedBadgeTotal = 0;\n private badgeTotalForNextRank = 0;\n private earnedPointTotal = 0;\n private pointTotalForNextRank = 0;\n private completedTrailTotal: number | null = null;\n private ranksPagePath: string = undefined!;\n private learnerStatusLevel: LearnerStatusLevel | null = null;\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"rankTitle\",\n \"failedToUpdate\",\n \"rankGoToTrailhead\",\n \"startLearning\",\n \"startLearningDesc\",\n \"rankBadges\",\n \"rankPoints\",\n \"rankTrails\",\n \"rankNextImageAlt\",\n \"nextLevelPointsAndBadges\",\n \"nextLevelBadges\",\n \"nextLevelPoints\",\n ],\n })\n private labels: LabelTranslations = {};\n\n private get showOnboardingMessage() {\n return this.hasNoActivity && this.isSelf;\n }\n private get showNextRank() {\n return this.cardState !== \"loading\" && this.isSelf && this.nextRank;\n }\n\n private get rankImageClass() {\n return classNames(\"rank-image\", {\n \"rank-image_grayscale\": this.hasNoActivity,\n });\n }\n private get tallyVariant() {\n return this.hasNoActivity ? null : \"success\";\n }\n private get hasNoActivity() {\n return this.cardState !== \"loading\" && this.earnedPointTotal === 0;\n }\n\n private get ringEarnedPointTotal() {\n return Math.min(\n this.earnedPointTotal,\n this.nextRank ? this.nextRank.requiredPointsSum : this.earnedPointTotal\n );\n }\n private get progressRingCurrValue() {\n const { nextRank, earnedBadgeTotal, earnedPointTotal } = this;\n if (!nextRank) {\n return undefined;\n }\n const percentPoints =\n (Math.min(earnedPointTotal, nextRank.requiredPointsSum) /\n nextRank.requiredPointsSum) *\n 100;\n const percentBadges =\n (Math.min(earnedBadgeTotal, nextRank.requiredBadgesCount) /\n nextRank.requiredBadgesCount) *\n 100;\n return (percentPoints + percentBadges) / 2;\n }\n private get nextRankImageAlt() {\n if (!this.nextRank) return null;\n const { nextRank } = this;\n return legacyFormat(t(\"rankNextImageAlt\"), nextRank.title);\n }\n private get nextRankText() {\n if (!this.nextRank || this.cardState === \"loading\") {\n return null;\n }\n const { badgeTotalForNextRank, pointTotalForNextRank, nextRank } = this;\n let message;\n if (badgeTotalForNextRank > 0 && pointTotalForNextRank > 0) {\n message = legacyFormat(\n this.labels.nextLevelPointsAndBadges,\n badgeTotalForNextRank.toLocaleString(),\n pointTotalForNextRank.toLocaleString(),\n this.ranksPagePath,\n nextRank.title\n );\n } else {\n if (badgeTotalForNextRank > 0) {\n message = legacyFormat(\n this.labels.nextLevelBadges,\n badgeTotalForNextRank.toLocaleString(),\n this.ranksPagePath,\n nextRank.title\n );\n } else {\n message = legacyFormat(\n this.labels.nextLevelPoints,\n pointTotalForNextRank.toLocaleString(),\n this.ranksPagePath,\n nextRank.title\n );\n }\n }\n return message;\n }\n\n updateRank = ({\n rank,\n earnedPointsSum,\n earnedBadgesCount,\n completedTrailCount,\n nextRank,\n }: PublicProfile_trailheadStats) => {\n this.cardState = \"default\";\n this.rank = rank;\n this.nextRank = nextRank;\n\n this.earnedBadgeTotal = earnedBadgesCount || 0;\n this.badgeTotalForNextRank = nextRank\n ? nextRank.requiredBadgesCount - (earnedBadgesCount || 0)\n : 0;\n\n this.earnedPointTotal = earnedPointsSum || 0;\n this.completedTrailTotal = completedTrailCount || 0;\n this.pointTotalForNextRank = nextRank\n ? nextRank.requiredPointsSum - (earnedPointsSum || 0)\n : 0;\n };\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport {\n MultiLabelAdapter,\n LabelTranslations,\n legacyFormat,\n} from \"tbme/localization\";\nimport { PresentationSkill } from \"../skillsChart/types\";\n\n// Use base10 when parsing strings for an integer.\nconst base10: number = 10;\n\nexport default class SkillsRing extends LightningElement {\n @wire(MultiLabelAdapter, {\n labels: [\n \"skillsRingSkillsNone\",\n \"skillsRingSkillsSingular\",\n \"skillsRingSkills\",\n \"percentDisplay\",\n ],\n })\n private labels: LabelTranslations = {};\n\n @api skills: PresentationSkill[] = undefined!;\n\n // hoveredSkillId and selectedSkillId are dynamically set/unset, so\n // define as \"string | null\" and initialize to null.\n @api hoveredSkillId: string | null = null;\n @api selectedSkillId: string | null = null;\n\n private get activeSkillId(): string | null {\n if (this.hoveredSkillId !== null) {\n return this.hoveredSkillId;\n } else if (this.selectedSkillId !== null) {\n return this.selectedSkillId;\n } else {\n return null;\n }\n }\n\n _ringWidth: number = 0;\n @api\n get ringWidth(): number {\n return this._ringWidth;\n }\n set ringWidth(value: number) {\n this._ringWidth = parseInt(String(value), base10);\n }\n\n _strokeWidth: number = 0;\n @api\n get strokeWidth(): number {\n return this._strokeWidth;\n }\n set strokeWidth(value: number) {\n this._strokeWidth = parseInt(String(value), base10);\n }\n\n private get activeSkill(): PresentationSkill | null {\n if (this.activeSkillId === null) {\n return null;\n }\n\n const result = this.skills.find((skill) => skill.id === this.activeSkillId);\n\n return result ? result : null;\n }\n\n private get boldText(): string {\n if (this.activeSkill) {\n return this.percentDisplay!;\n }\n\n const count: number = this.skills.length;\n if (count > 1) {\n return legacyFormat(this.labels.skillsRingSkills, count);\n } else if (count === 1) {\n return this.labels.skillsRingSkillsSingular;\n } else {\n return this.labels.skillsRingSkillsNone;\n }\n }\n\n private get weakText(): string | null {\n return this.activeSkill ? this.activeSkill.skill.name : null;\n }\n\n private get percentDisplay(): string {\n const fraction = this.skillPercent(this.activeSkill!);\n const percent = Math.max(Math.round(fraction * 100), 1);\n\n return legacyFormat(this.labels.percentDisplay, percent);\n }\n\n private get totalUnitTotalPerSkill(): number {\n return this.skills.reduce(\n (sum, skill) => sum + skill.itemProgressEntryCount,\n 0\n );\n }\n\n private get presentationSkills(): PresentationSkill[] {\n return this.skills.map((skill, i) => {\n const percent = this.skillPercent(skill);\n const degrees = this.skillDegrees(skill);\n const start = this.skillStartAngle(i);\n const isHovered =\n this.activeSkillId && this.activeSkillId === skill.id ? true : false;\n\n return {\n ...skill,\n degrees,\n percent,\n arc: this.skillArc(start, degrees),\n opacity: isHovered || !this.activeSkill ? 1 : 0.5,\n strokeWidth: isHovered ? this.strokeWidthActive : this.strokeWidth,\n };\n });\n }\n\n private get strokeWidthActive(): number {\n return this.strokeWidth * 1.5;\n }\n\n private get viewBox(): string {\n return `0 0 ${this.ringWidth} ${this.ringWidth}`;\n }\n\n private get radius(): number {\n return this.center - this.strokeWidthActive / 2;\n }\n\n private get center(): number {\n return this.ringWidth / 2;\n }\n\n skillStartAngle(index: number): number {\n return this.skills\n .slice(0, index)\n .reduce((sum, skill) => sum + this.skillDegrees(skill), 0);\n }\n\n skillPercent(skill: PresentationSkill): number {\n return skill.itemProgressEntryCount / this.totalUnitTotalPerSkill;\n }\n\n skillDegrees(skill: PresentationSkill): number {\n return this.skillPercent(skill) * 360;\n }\n\n skillArc(startAngle: number, degrees: number): string {\n const { center, radius } = this;\n const endAngle = startAngle + degrees;\n\n const start = polarToCartesian(center, center, radius, endAngle);\n const end = polarToCartesian(center, center, radius, startAngle);\n const largeArcFlag = endAngle - startAngle <= 180 ? \"0\" : \"1\";\n\n // Workaround for a bug where if there's one skill, no arc shows up.\n const endX = this.skills.length === 1 ? end.x + 0.001 : end.x;\n\n return [\n \"M\",\n start.x,\n start.y,\n \"A\",\n radius,\n radius,\n 0,\n largeArcFlag,\n 0,\n endX,\n end.y,\n ].join(\" \");\n }\n\n handleEnterSkill(event: MouseEvent): void {\n this.hoveredSkillId = (event.target as HTMLButtonElement).dataset.id!;\n this.dispatchEvent(\n new CustomEvent(\"ringsliceenter\", {\n detail: {\n id: this.hoveredSkillId,\n },\n })\n );\n }\n\n handleLeaveSkill(): void {\n this.hoveredSkillId = null;\n this.dispatchEvent(new CustomEvent(\"ringsliceleave\"));\n }\n}\n\n/**\n * Converts polar coordinates to cartesian coordinates\n * @param {number} centerX - the x-coordinate of the circle in the DOM\n * @param {number} centerY - the y-coordinate of the circle in the DOM\n * @param {number} radius - the radius of the circle in the DOM\n * @param {number} angleInDegrees - the angle of the circle in the DOM\n * @return {Object} - the cartesian coordinates of the angle\n */\nfunction polarToCartesian(\n centerX: number,\n centerY: number,\n radius: number,\n angleInDegrees: number\n) {\n const angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180.0;\n return {\n x: centerX + radius * Math.cos(angleInRadians),\n y: centerY + radius * Math.sin(angleInRadians),\n };\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport { MultiLabelAdapter, LabelTranslations, t } from \"tbme/localization\";\nimport classNames from \"classnames\";\n\nexport default class SkillButton extends LightningElement {\n @wire(MultiLabelAdapter, {\n labels: [\"skillsAriaButtonFormat\"],\n })\n private labels: LabelTranslations = {};\n\n @api skillId: string = undefined!;\n @api label: string = undefined!;\n @api unitTotalPerSkill: number = 0;\n\n @api color: string = undefined!;\n @api isHovered: boolean = false;\n @api isSelected: boolean = false;\n\n private get buttonClass(): string {\n return classNames({\n \"button-selected\": this.isSelected,\n \"button-hovered\": this.isHovered,\n });\n }\n\n private get buttonAriaLabel(): string {\n return t(\"skillsAriaButtonFormat\", {\n skill: this.label,\n percent: this.unitTotalPerSkill,\n });\n }\n\n handleClick(): void {\n this.isSelected = true;\n const button = this.template.querySelector(\"button\");\n button!.focus();\n }\n\n handleFocus(): void {\n this.isSelected = true;\n this.dispatchEvent(\n new CustomEvent(\"skillitemfocus\", {\n detail: {\n id: this.skillId,\n },\n })\n );\n }\n\n handleBlur(): void {\n this.isSelected = false;\n this.dispatchEvent(new CustomEvent(\"skillitemblur\"));\n }\n\n handleMouseEnter(): void {\n this.isHovered = true;\n this.dispatchEvent(\n new CustomEvent(\"skillitemmouseenter\", {\n detail: {\n id: this.skillId,\n },\n })\n );\n }\n\n handleMouseLeave(): void {\n this.isHovered = false;\n this.dispatchEvent(new CustomEvent(\"skillitemmouseleave\"));\n }\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\nimport { PresentationSkill } from \"./types\";\nimport { EarnedSkill } from \"../../tbme/skills/gql/EarnedSkill\";\n\n// The amount of skills to show when collapsed.\nconst initialVisible: number = 10;\n\n// The colors to loop through for the skills graph.\n// Taken from https://git.soma.salesforce.com/pages/mgeyer/chart-colors/#/themes\n// The same thing is done for mobile: https://git.soma.salesforce.com/TrailheadMobile/iOS/blob/master/Trailhead/Classes/Views/Profile/ProfileSkillsCardView.swift#L193\nconst colors: string[] = [\n \"#3296ED\",\n \"#77B9F2\",\n \"#9D53F2\",\n \"#C398F5\",\n \"#26ABA4\",\n \"#4ED4CD\",\n \"#F7A452\",\n \"#FACA9B\",\n \"#F2536D\",\n \"#F598A7\",\n \"#96D44E\",\n \"#C7F296\",\n \"#537BF2\",\n \"#7796F2\",\n \"#F253D2\",\n \"#F598E2\",\n \"#EDBE32\",\n \"#F5DE98\",\n \"#4ED469\",\n \"#7CEB92\",\n];\n\nexport default class SkillsChart extends LightningElement {\n @wire(MultiLabelAdapter, {\n labels: [\n \"skillsDescription\",\n \"skillsDescriptionThirdPerson\",\n \"showMore\",\n \"showLess\",\n ],\n })\n private labels: LabelTranslations = {};\n\n @api skills: EarnedSkill[] = [];\n @api displayAll: boolean = false;\n\n private ringWidth: number = 300;\n private strokeWidth: number = 30;\n\n // hoveredSkillId and selectedSkillId are dynamically set/unset, so\n // define as \"string | null\" and initialize to null.\n private hoveredSkillId: string | null = null;\n private selectedSkillId: string | null = null;\n\n private get presentationSkills(): PresentationSkill[] {\n const presentationSkills = this.skills.map((skill: any, index: number) => ({\n ...skill,\n color: colors[index % colors.length],\n isHovered: this.hoveredSkillId === skill.id,\n isSelected: this.selectedSkillId === skill.id,\n }));\n\n return presentationSkills;\n }\n\n private get visiblePresentationSkills(): PresentationSkill[] {\n const visibleSkills: PresentationSkill[] = this.displayAll\n ? this.presentationSkills\n : this.presentationSkills.slice(0, initialVisible);\n\n return visibleSkills;\n }\n\n handleSkillItemMouseEnter(event: any): void {\n this.hoveredSkillId = event.detail.id;\n }\n\n handleSkillItemMouseLeave(): void {\n this.hoveredSkillId = null;\n }\n\n handleSkillItemFocus(event: any): void {\n this.selectedSkillId = event.detail.id;\n }\n\n handleSkillItemBlur(): void {\n this.selectedSkillId = null;\n }\n\n handleSkillRingSliceEnter(event: any): void {\n this.hoveredSkillId = event.detail.id;\n }\n\n handleSkillRingSliceLeave(): void {\n this.hoveredSkillId = null;\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const EARNED_SKILLS_QUERY = gql`\n fragment EarnedSkill on EarnedSkill {\n __typename\n earnedPointsSum\n id\n itemProgressEntryCount\n skill {\n __typename\n apiName\n id\n name\n }\n }\n\n query GetEarnedSkills(\n $slug: String\n $hasSlug: Boolean!\n ) {\n profile(slug: $slug) @include(if: $hasSlug) {\n __typename\n ... on PublicProfile {\n id\n earnedSkills {\n ...EarnedSkill\n }\n }\n }\n }\n`;\n","import { LightningElement, wire } from \"lwc\";\nimport { ApolloQueryResult } from \"@apollo/client\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport {\n GetEarnedSkills,\n GetEarnedSkillsVariables,\n} from \"./gql/GetEarnedSkills\";\nimport { EarnedSkill } from \"./gql/EarnedSkill\";\nimport {EARNED_SKILLS_QUERY} from \"./query\";\nimport { CardState } from \"../../tbui/card/types\";\nimport {chassis} from \"tbme/localState\";\n\n// The number of skills to show when collapsed.\nconst initialVisible: number = 10;\n\nexport default class extends LightningElement {\n private isSelf: boolean = false;\n private skills: EarnedSkill[] = [];\n private displayAll: boolean = false;\n private cardState: CardState = \"loading\";\n private hasHeader: boolean = true;\n\n private variables: GetEarnedSkillsVariables = {\n slug: undefined,\n hasSlug: false\n };\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"skillsTitle\",\n \"skillsDescription\",\n \"skillsDescriptionThirdPerson\",\n \"showMore\",\n \"showLess\",\n ],\n })\n private labels: LabelTranslations = {};\n \n connectedCallback() {\n const chassisData = chassis();\n const username = chassisData?.profile?.username;\n this.isSelf = chassisData?.isSelf || false;\n this.variables = {\n ...this.variables,\n slug: username,\n hasSlug: !!username\n };\n }\n \n @wire(QueryAdapter, {\n query: EARNED_SKILLS_QUERY,\n variables: \"$variables\",\n })\n private handleResult(result: ApolloQueryResult) {\n const { data, loading, error, errors } = result;\n\n if (loading) {\n this.cardState = \"loading\";\n return;\n }\n\n if (error || errors) {\n this.cardState = \"loadFailed\";\n return;\n }\n \n if (\n !data.profile ||\n data.profile.__typename !== \"PublicProfile\"\n ) {\n this.cardState = \"loadFailed\";\n return;\n }\n\n const { profile } = data;\n if (\n !profile.earnedSkills ||\n profile.earnedSkills.length < 1\n ) {\n this.cardState = \"default\";\n return;\n }\n\n this.skills = profile.earnedSkills;\n this.cardState = \"default\";\n }\n\n private get hasFooter(): boolean {\n return this.skills!.length > initialVisible;\n }\n\n private get subtitle(): string {\n return this.isSelf\n ? this.labels.skillsDescription\n : this.labels.skillsDescriptionThirdPerson;\n }\n\n private get shouldDisplayCard(): boolean {\n return !(this.cardState === \"default\" && this.skills.length < 1);\n }\n\n private get showMoreOrShowLess(): string {\n return this.displayAll ? this.labels.showLess : this.labels.showMore;\n }\n\n handleToggleShowMoreOrShowLess(): void {\n this.displayAll = !this.displayAll;\n }\n\n private mergeVariables(updates: Partial) {\n return {\n ...this.variables,\n ...updates,\n };\n }\n}\n","import { LightningElement, api } from \"lwc\";\n\nexport default class extends LightningElement {\n @api isSelf: boolean = false;\n @api imageUrl: string = undefined!;\n @api itemUrl: string = undefined!;\n @api linkContent: string = undefined!;\n @api itemDescription: string = undefined!;\n\n handleClick() {\n this.dispatchEvent(\n new CustomEvent(\"linkclick\", {\n bubbles: true,\n composed: true,\n })\n );\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n// @generated\n// This file was automatically generated and should not be edited.\n\n//==============================================================\n// START Enums and Input Objects\n//==============================================================\n\n/**\n * The type of an Award.\n */\nexport enum AwardType {\n EVENT = \"EVENT\",\n MODULE = \"MODULE\",\n PROJECT = \"PROJECT\",\n STANDALONE = \"STANDALONE\",\n SUPERBADGE = \"SUPERBADGE\",\n}\n\n/**\n * A filter on the type of an Award.\n */\nexport enum AwardTypeFilter {\n EVENT = \"EVENT\",\n MODULE = \"MODULE\",\n PROJECT = \"PROJECT\",\n STANDALONE = \"STANDALONE\",\n SUPERBADGE = \"SUPERBADGE\",\n}\n\n/**\n * Where the message should be displayed\n */\nexport enum Location {\n BOTTOM = \"BOTTOM\",\n TOAST = \"TOAST\",\n TOP = \"TOP\",\n}\n\n/**\n * This determines the layout orientation of the message\n */\nexport enum Orientation {\n HORIZONTAL = \"HORIZONTAL\",\n VERTICAL = \"VERTICAL\",\n}\n\n//==============================================================\n// END Enums and Input Objects\n//==============================================================\n","import { gql } from \"@apollo/client\";\n\nexport default gql`\n fragment PageInfoBidirectional on PageInfo {\n __typename\n endCursor\n hasNextPage\n startCursor\n hasPreviousPage\n }\n`;\n","import { gql } from \"@apollo/client\";\nimport PageInfoBidirectionalFragment from \"../../../gql/fragments/PageInfoBidirectional\";\n\nexport const TRAILHEAD_BADGES_QUERY = gql`\n fragment EarnedAward on EarnedAwardBase {\n __typename\n id\n award {\n __typename\n id\n title\n type\n icon\n content {\n __typename\n webUrl\n description\n }\n }\n }\n\n fragment EarnedAwardSelf on EarnedAwardSelf {\n __typename\n id\n award {\n __typename\n id\n title\n type\n icon\n content {\n __typename\n webUrl\n description\n }\n }\n earnedAt\n earnedPointsSum\n }\n\n fragment StatsBadgeCount on TrailheadProfileStats {\n __typename\n earnedBadgesCount\n superbadgeCount\n }\n\n fragment ProfileBadges on PublicProfile {\n __typename\n trailheadStats {\n ... on TrailheadProfileStats {\n ...StatsBadgeCount\n }\n }\n\n earnedAwards(first: $count, after: $after, awardType: $filter) {\n edges {\n node {\n ... on EarnedAwardBase {\n ...EarnedAward\n }\n\n ... on EarnedAwardSelf {\n ...EarnedAwardSelf\n }\n }\n }\n pageInfo {\n ...PageInfoBidirectional\n }\n }\n }\n\n ${PageInfoBidirectionalFragment}\n\n query GetTrailheadBadges(\n $slug: String\n $hasSlug: Boolean!\n $count: Int = 8\n $after: String = null\n $filter: AwardTypeFilter = null\n ) { \n profile(slug: $slug) @include(if: $hasSlug){\n __typename\n ... on PublicProfile {\n ...ProfileBadges\n }\n }\n }\n`;","import { LightningElement, wire } from \"lwc\";\nimport { ApolloQueryResult } from \"@apollo/client\";\nimport {\n MultiLabelAdapter,\n LabelTranslations,\n legacyFormat,\n} from \"tbme/localization\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\n\nimport {\n GetTrailheadBadges,\n GetTrailheadBadgesVariables,\n GetTrailheadBadges_profile_PublicProfile_earnedAwards_edges,\n} from \"./gql/GetTrailheadBadges\";\nimport { EarnedAward } from \"./gql/EarnedAward\";\nimport { EarnedAwardSelf } from \"./gql/EarnedAwardSelf\";\nimport { CardState } from \"elements/tbui/card/types\";\nimport { PageInfoBidirectional } from \"gql/fragments/gql/PageInfoBidirectional\";\nimport { AwardTypeFilter } from \"../../../gql/types\";\nimport { TRAILHEAD_BADGES_QUERY } from \"./query\";\nimport { getEmptyBadge } from \"./emptyBadges\";\nimport { chassis } from \"tbme/localState\";\nimport { getSharedUrlValues } from \"../localState/urls\";\n\ninterface DisplayAward {\n id: string;\n isArchived: boolean;\n isSelf: boolean;\n title: string;\n url: string | null;\n imageUrl: string;\n earnedAt: string | null;\n earnedPointsSum: number | null;\n}\n\ntype Filter = AwardTypeFilter | \"ALL\";\n\nconst FilterTypes: {\n [k: string]: Filter;\n} = {\n ...AwardTypeFilter,\n ALL: \"ALL\",\n};\n\n/** The amount of badges initially visible */\nexport const initialVisible = 8;\n\n/** Page size for pagination */\nexport const perPage = 24;\n\nexport default class extends LightningElement {\n private isSelf: boolean = undefined!;\n private badges: DisplayAward[] = [];\n private labels: LabelTranslations = {};\n private cardState: CardState = \"loading\";\n\n private urls: { trailheadUnknownBadge: string } = undefined!;\n\n private pageInfo: PageInfoBidirectional = {\n hasNextPage: false,\n endCursor: null,\n } as PageInfoBidirectional;\n private badgeTotal: number = 0;\n private firstFetchLoading: boolean = true;\n private activeFilter: Filter = FilterTypes.ALL;\n private fetchingMore = false;\n private fetchMore?: (options: {\n variables: GetTrailheadBadgesVariables;\n }) => Promise>;\n private refetch?: (\n variables?: Partial\n ) => Promise>;\n\n /** Did the user click show less after loading all badges for the current filter? */\n private viewingLess: boolean = false;\n private shouldFocusNewBadge: boolean = false;\n private previousBadgeCount: number = initialVisible;\n\n private variables: GetTrailheadBadgesVariables = {\n count: initialVisible,\n after: null,\n filter: null,\n hasSlug: false,\n };\n\n connectedCallback() {\n this.urls = getSharedUrlValues() as any;\n const chassisData = chassis();\n const username = chassisData?.profile?.username;\n this.isSelf = chassisData?.isSelf || false;\n\n this.variables = {\n ...this.variables,\n slug: username,\n hasSlug: !!username,\n };\n }\n\n renderedCallback() {\n if (this.shouldFocusNewBadge) {\n this.focusNewBadge();\n }\n }\n\n focusNewBadge() {\n const badge = this.visibleBadges[this.previousBadgeCount];\n\n if (badge) {\n const badgeComponent = this.template.querySelectorAll(\"lwc-tbui-badge\")[\n this.previousBadgeCount\n ];\n const link = badgeComponent?.shadowRoot?.querySelector(\n `a[href='${badge.url}']`\n ) as HTMLAnchorElement;\n\n if (link) {\n requestAnimationFrame(() => {\n link.focus();\n });\n this.shouldFocusNewBadge = false;\n }\n }\n }\n\n /** Should the badges component be visible */\n get isVisible() {\n return this.isSelf || (this.hasBadges && !this.firstFetchLoading);\n }\n\n get hasBadges() {\n return this.badgeTotal > 0;\n }\n\n /** Does the user have zero trailhead badges? */\n get hasNoneAtAll() {\n return (\n this.cardState !== \"loading\" &&\n !this.hasBadges &&\n this.activeFilter === FilterTypes.ALL &&\n !this.loadFailed\n );\n }\n\n /** Does the user have some badges, but not of the active filter? */\n get hasNoneOfType() {\n return this.badges.length === 0 && this.cardState === \"default\";\n }\n\n /** The data to show if hasNoneOfType */\n get emptyItem() {\n return getEmptyBadge(\n this.activeFilter as AwardTypeFilter,\n this.isSelf,\n this.labels,\n this.urls\n );\n }\n\n /** Does the current filter have more than one page? */\n get hasManyPages() {\n return this.activeFilter === FilterTypes.ALL\n ? this.badgeTotal > initialVisible\n : this.badges.length > initialVisible ||\n (this.pageInfo && this.pageInfo.hasNextPage);\n }\n\n get showViewLess() {\n return this.hasManyPages && this.pageInfo && !this.pageInfo.hasNextPage;\n }\n\n /** Is the cardState in loadFailed? */\n get loadFailed() {\n return this.cardState === \"loadFailed\";\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"allBadges\",\n \"trailheadBasics\",\n \"trailheadBasicsDescription\",\n \"failedToUpdate\",\n \"filterByAllBadges\",\n \"badgesHeader\",\n \"superbadgesHeader\",\n \"filterBySuperBadges\",\n \"filterByModuleBadges\",\n \"moduleBadgesHeader\",\n \"filterByProjectBadges\",\n \"projectBadgesHeader\",\n \"filterByEventBadges\",\n \"eventBadgesHeader\",\n \"badgeCountHeader\",\n \"trailheadBadgesFilter\",\n \"showMore\",\n \"showLess\",\n \"filterByPeerAssessmentBadges\",\n \"peerAssessmentBadgesHeader\",\n \"unknownBadgeTitle\",\n \"noneMessageSuperbadgeAltText\",\n \"noneMessageSuperbadgeItemDescription\",\n \"noneMessageModuleItemTitle\",\n \"noneMessageModuleItemDescription\",\n \"noneMessageProjectItemTitle\",\n \"noneMessageProjectItemDescription\",\n \"noneMessageEventItemTitle\",\n \"noneMessageEventItemDescription\",\n \"noneEarned\",\n ],\n })\n private handleLabels(labels: LabelTranslations) {\n this.labels = {\n ...labels,\n emptyBadgesTitle: legacyFormat(\n labels.badgeCountHeader,\n 0,\n labels.badgesHeader\n ),\n };\n }\n\n @wire(QueryAdapter, {\n query: TRAILHEAD_BADGES_QUERY,\n variables: \"$variables\",\n })\n private handleResult(\n result: QueryAdapterValue\n ) {\n const { data, loading, error, errors, fetchMore, refetch } = result;\n\n this.fetchMore = fetchMore;\n this.refetch = refetch;\n\n if (loading) {\n this.cardState = \"loading\";\n return;\n }\n\n if (error || errors) {\n this.cardState = \"loadFailed\";\n this.firstFetchLoading = false;\n return;\n }\n\n let profile = data.profile;\n if (!profile) {\n return;\n }\n\n if (\n profile.__typename !== \"PublicProfile\" ||\n !profile.earnedAwards ||\n !profile.trailheadStats\n ) {\n this.cardState = \"default\";\n return;\n }\n\n const { earnedAwards } = profile;\n const { edges, pageInfo } = earnedAwards;\n const { earnedBadgesCount } = profile.trailheadStats;\n this.badgeTotal = earnedBadgesCount ? Number(earnedBadgesCount) : 0;\n\n this.badges = this.transformBadges(edges);\n\n this.pageInfo = pageInfo;\n this.cardState = \"default\";\n this.firstFetchLoading = false;\n }\n\n private mergeVariables(updates: Partial) {\n return {\n ...this.variables,\n ...updates,\n };\n }\n\n private handleFilterChange({ detail }: CustomEvent) {\n if (this.activeFilter === detail) {\n return;\n }\n\n this.cardState = \"loading\";\n this.badges = [];\n this.activeFilter = detail;\n this.variables = this.mergeVariables({\n count: initialVisible,\n after: null,\n filter: detail === FilterTypes.ALL ? null : detail,\n });\n }\n\n private async handleLoadMore() {\n if (!this.fetchMore) return;\n\n this.fetchingMore = true;\n this.previousBadgeCount = this.visibleBadges.length;\n\n await this.fetchMore({\n variables: this.mergeVariables({\n after: this.pageInfo.endCursor,\n count: perPage,\n }),\n });\n\n this.fetchingMore = false;\n this.shouldFocusNewBadge = true;\n }\n\n private async handleToggleViewLess() {\n if (!this.refetch) return;\n\n this.fetchingMore = true;\n await this.refetch(\n this.mergeVariables({\n after: null,\n count: initialVisible,\n })\n );\n\n this.fetchingMore = false;\n }\n\n private transformBadges(\n edges:\n | (GetTrailheadBadges_profile_PublicProfile_earnedAwards_edges | null)[]\n | null\n ): DisplayAward[] {\n if (!edges) return [];\n\n return (edges\n .filter((item) => item !== null)\n .map((item) => item && item.node) as (\n | EarnedAward\n | EarnedAwardSelf\n )[]).map((earnedAward) => {\n const { __typename, id, award } = earnedAward;\n let earnedAt = null;\n let earnedPointsSum = null;\n\n if (__typename === \"EarnedAwardSelf\") {\n earnedAt = (earnedAward as EarnedAwardSelf).earnedAt;\n earnedPointsSum = (earnedAward as EarnedAwardSelf).earnedPointsSum;\n }\n\n return {\n id,\n isArchived: !award,\n // This allows the badges to display correctly in a standalone story\n isSelf: __typename === \"EarnedAwardSelf\",\n title: award ? award.title : this.labels.unknownBadgeTitle,\n url: award && award.content ? award.content.webUrl : \"\",\n imageUrl: award ? award.icon : this.urls.trailheadUnknownBadge,\n earnedAt,\n earnedPointsSum,\n };\n });\n }\n\n /** If viewing less, show minimum. Else, show all in memory */\n get visibleBadges() {\n return this.viewingLess\n ? this.badges.slice(0, initialVisible)\n : this.badges;\n }\n\n /** The label, value, and header for the filter options */\n get filterOptions() {\n const { labels } = this;\n\n return [\n {\n label: labels.filterByAllBadges,\n value: FilterTypes.ALL,\n header: labels.badgesHeader,\n },\n {\n label: labels.filterBySuperBadges,\n value: FilterTypes.SUPERBADGE,\n header: labels.superbadgesHeader,\n },\n {\n label: labels.filterByModuleBadges,\n value: FilterTypes.MODULE,\n header: labels.moduleBadgesHeader,\n },\n {\n label: labels.filterByProjectBadges,\n value: FilterTypes.PROJECT,\n header: labels.projectBadgesHeader,\n },\n {\n label: labels.filterByEventBadges,\n value: FilterTypes.EVENT,\n header: labels.eventBadgesHeader,\n },\n {\n label: labels.filterByPeerAssessmentBadges,\n value: FilterTypes.STANDALONE,\n header: labels.peerAssessmentBadgesHeader,\n },\n ];\n }\n\n /** The header of the active filter */\n get activeFilterHeader() {\n const activeOption = this.filterOptions.find(\n (o) => o.value === this.activeFilter\n );\n\n if (activeOption && activeOption.header) {\n return activeOption.header;\n }\n\n // Ignore coverage on this return because it is not a realistic scenario\n /* istanbul ignore next */\n return \"\";\n }\n\n /**\n * The title of the Card\n * If loading the first fetch, it's \"Badges\"\n * If some load failed, it's the filter type without the number (i.e. \"Superbadges\")\n * Else, it's the filter type with the number (i.e. \"2 Superbadges\")\n */\n get cardTitle() {\n if (this.firstFetchLoading) return this.labels.allBadges;\n if (this.loadFailed) return this.activeFilterHeader;\n if (!this.hasBadges) return this.labels.allBadges;\n\n if (this.activeFilter === FilterTypes.ALL) {\n return legacyFormat(\n this.labels.badgeCountHeader,\n this.badgeTotal,\n this.filterOptions[0].header\n );\n }\n\n return this.activeFilterHeader;\n }\n}\n","import { AwardTypeFilter } from \"../../../gql/types\";\nimport { LabelTranslations } from \"tbme/localization\";\nexport interface EmptyItem {\n imageUrl: string;\n itemUrl: string;\n title: string;\n text: string;\n}\n\nexport function getEmptyBadge(\n activeFilter: AwardTypeFilter,\n isSelf: boolean,\n labels: LabelTranslations,\n urls: any\n) {\n const emptyItems: {\n [key in AwardTypeFilter]: EmptyItem;\n } = {\n EVENT: {\n imageUrl: urls.eventImage,\n itemUrl: urls.noneMessageEventItem,\n title: labels.noneMessageEventItemTitle,\n text: labels.noneMessageEventItemDescription,\n },\n MODULE: {\n imageUrl: urls.moduleImage,\n itemUrl: urls.noneMessageModuleItem,\n title: labels.noneMessageModuleItemTitle,\n text: labels.noneMessageModuleItemDescription,\n },\n PROJECT: {\n imageUrl: urls.projectImage,\n itemUrl: urls.noneMessageProjectItem,\n title: labels.noneMessageProjectItemTitle,\n text: labels.noneMessageProjectItemDescription,\n },\n STANDALONE: {\n imageUrl: urls.moduleImage,\n itemUrl: urls.noneMessageModuleItem,\n title: labels.noneMessageModuleItemTitle,\n text: labels.noneMessageModuleItemDescription,\n },\n SUPERBADGE: {\n imageUrl: urls.superbadgeImage,\n itemUrl: urls.noneMessageSuperbadgeItem,\n title: labels.noneMessageSuperbadgeAltText,\n text: labels.noneMessageSuperbadgeItemDescription,\n },\n };\n\n const thirdPersonEmptyItems: {\n [key in AwardTypeFilter]: EmptyItem;\n } = {\n EVENT: {\n imageUrl: urls.eventImage,\n itemUrl: \"\",\n title: labels.noneEarned,\n text: labels.noneMessageEventItemDescription,\n },\n MODULE: {\n imageUrl: urls.moduleImage,\n itemUrl: \"\",\n title: labels.noneEarned,\n text: labels.noneMessageModuleItemDescription,\n },\n PROJECT: {\n imageUrl: urls.projectImage,\n itemUrl: \"\",\n title: labels.noneEarned,\n text: labels.noneMessageProjectItemDescription,\n },\n STANDALONE: {\n imageUrl: urls.moduleImage,\n itemUrl: \"\",\n title: labels.noneEarned,\n text: labels.noneMessageModuleItemDescription,\n },\n SUPERBADGE: {\n imageUrl: urls.superbadgeImage,\n itemUrl: \"\",\n title: labels.noneEarned,\n text: labels.noneMessageSuperbadgeItemDescription,\n },\n };\n\n if (isSelf) {\n return emptyItems[activeFilter];\n } else {\n return thirdPersonEmptyItems[activeFilter];\n }\n}\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { GetNoActivityUrls } from \"./gql/GetNoActivityUrls\";\n\nexport default class extends LightningElement {\n @wire(MultiLabelAdapter, {\n labels: [\n \"trailblazerCommunity\",\n \"tbcNoActivity.heading\",\n \"tbcNoActivity.body\",\n \"tbcNoActivity.goToCommunityFeed\",\n ],\n })\n private labels: LabelTranslations = undefined!;\n\n @wire(QueryAdapter, {\n query: gql`\n query GetNoActivityUrls {\n siteInfo @client {\n urls @client {\n tbcCommunityFeed\n astroImage\n }\n }\n }\n `,\n })\n private context: ApolloQueryResult = undefined!;\n private get visible() {\n return this.context && this.context.data && this.context.data.siteInfo;\n }\n private get urls() {\n return this.visible ? this.context.data.siteInfo.urls : undefined!;\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const Q_AND_A_QUERY = gql`\n query GetQuestionsAndAnswers {\n profileUser @client {\n __typename\n ... on PublicProfile {\n isSelf\n\n communityUser @client {\n __typename\n ... on CommunityAsyncResponse {\n isLoading\n }\n ... on CommunityUser {\n id\n }\n }\n\n communityStats {\n __typename\n ... on CommunityAsyncResponse {\n isLoading\n error\n }\n ... on CommunityStats {\n answersCount\n bestAnswersCount\n questionsCount\n communityUserRank\n }\n }\n }\n }\n\n siteInfo @client {\n urls {\n tbcCommunityFeed\n tbcUserFeed\n tbcUserFeedQuestions\n tbcUserFeedAnswers\n tbcUserFeedBestAnswers\n }\n }\n }\n`;\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport {\n GetQuestionsAndAnswers,\n GetQuestionsAndAnswers_siteInfo_urls,\n} from \"./gql/GetQuestionsAndAnswers\";\n\nimport trophyIcon from \"./assets/trophy.svg\";\nimport { fetchCommunityProfile } from \"../communityData/communityData\";\nimport { getError, getIsLoading, getUserId } from \"../communityData/queryUtils\";\nimport {\n CommunityAsyncResponse,\n CommunityStats,\n CommunityUser,\n} from \"../communityData/types\";\nimport { CardState } from \"../../tbui/card/types\";\nimport { Q_AND_A_QUERY } from \"./query\";\n\nexport default class extends LightningElement {\n private visible: boolean = false;\n private footerUrl: string = \"\";\n private isSelf: boolean = false;\n private noActivity: boolean = false;\n private labels: LabelTranslations = undefined!;\n private cardState: CardState = \"default\";\n\n private get showNoActivity() {\n return !this.visible && this.noActivity && this.cardState === \"default\";\n }\n\n private get assets() {\n return {\n trophy: trophyIcon,\n };\n }\n\n private stats: CommunityStats | null = null;\n\n connectedCallback() {\n fetchCommunityProfile();\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"questionsAndAnswers.title\",\n \"questionsAndAnswers.goToCommunityFeed\",\n ],\n })\n private handleLabels(labels: { questionsAndAnswers: LabelTranslations }) {\n this.labels = {\n ...labels.questionsAndAnswers,\n };\n }\n\n private get answersLabel() {\n return t(\"questionsAndAnswers.answers\", {\n count: this.stats ? this.stats.answersCount : 0,\n });\n }\n\n private get bestAnswersLabel() {\n let labelName = \"questionsAndAnswers.bestAnswers\";\n if (process.env.FEATURE_ACCEPTED_ANSWERS_LABEL === \"true\") {\n labelName = \"questionsAndAnswers.acceptedAnswers\";\n }\n return t(labelName, {\n count: this.stats ? this.stats.bestAnswersCount : 0,\n });\n }\n\n private get questionsLabel() {\n return t(\"questionsAndAnswers.questions\", {\n count: this.stats ? this.stats.questionsCount : 0,\n });\n }\n\n private get rankLabel() {\n return t(\"questionsAndAnswers.rank\", {\n rank: (this.stats && this.stats.communityUserRank) || \"\",\n });\n }\n\n private get answersLink() {\n return (\n this.stats && this.stats.answersCount && this.urls.tbcUserFeedAnswers\n );\n }\n\n private get bestAnswersLink() {\n return (\n this.stats &&\n this.stats.bestAnswersCount &&\n this.urls.tbcUserFeedBestAnswers\n );\n }\n\n private get questionsLink() {\n return (\n this.stats && this.stats.questionsCount && this.urls.tbcUserFeedQuestions\n );\n }\n\n private get activityCount() {\n if (!this.stats) return 0;\n\n return [\n this.stats.questionsCount,\n this.stats.answersCount,\n this.stats.bestAnswersCount,\n ].reduce((acc, value) => {\n if (value === null) return acc;\n\n return acc + value;\n }, 0);\n }\n\n private get communityFeedLink() {\n return this.activityCount\n ? this.urls.tbcUserFeed\n : this.urls.tbcCommunityFeed;\n }\n\n private urls: GetQuestionsAndAnswers_siteInfo_urls = undefined!;\n\n @wire(QueryAdapter, {\n query: Q_AND_A_QUERY,\n returnPartialData: true,\n })\n private handleChange({ data }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n\n this.urls = data.siteInfo.urls;\n\n if (data.profileUser.__typename !== \"PublicProfile\") {\n return;\n }\n\n const profileUser = data.profileUser;\n const { isSelf, communityUser, communityStats } = profileUser;\n const isTbcUser = !!getUserId(communityUser);\n const isLoading = getIsLoading(communityStats);\n\n if ((isSelf || isTbcUser) && isLoading) {\n this.cardState = \"loading\";\n this.visible = true;\n return;\n }\n\n if (!hasResolved(communityStats)) {\n return;\n }\n\n const isError = getError(communityStats);\n\n if (!isTbcUser && !isError && !isSelf) {\n this.noActivity = true;\n this.visible = false;\n return;\n }\n\n if (isSelf && isError) {\n this.cardState = \"loadFailed\";\n this.visible = true;\n this.noActivity = false;\n return;\n } else if (isError) {\n this.visible = false;\n this.noActivity = false;\n return;\n }\n\n if (communityStats && communityStats.__typename === \"CommunityStats\") {\n this.stats = communityStats;\n } else if (isSelf && !communityStats) {\n this.stats = {\n questionsCount: 0,\n answersCount: 0,\n bestAnswersCount: 0,\n } as CommunityStats;\n }\n\n this.cardState = \"default\";\n this.visible = !!this.stats;\n }\n}\n\nfunction hasResolved(\n check:\n | Partial\n | Partial\n | Partial\n | null\n) {\n return (\n check === null ||\n getError(check) ||\n (check && check.__typename !== \"CommunityAsyncResponse\")\n );\n}\n","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2022%2022%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20transform%3D%22translate%28-49%20-181%29%22%20d%3D%22m70.267%20182.46h-3.6667v-0.72998c0-0.40149-0.33-0.72998-0.73333-0.72998h-11.733c-0.40333%200-0.73333%200.32849-0.73333%200.72998v0.72998h-3.6667c-0.40333%200-0.73333%200.32849-0.73333%200.72998v4.7449c0%201.825%201.4667%203.2849%203.3%203.2849h1.6867c1.0267%202.336%203.2633%203.9784%205.9767%204.0149%202.7867%200.0365%205.1333-1.6425%206.1233-4.0149h1.6133c1.8333%200%203.3-1.46%203.3-3.2849v-4.7449c0-0.40149-0.33-0.72998-0.73333-0.72998zm-17.724%206.9518c-0.54098%200-0.95468-0.49069-0.95468-1.1324v-3.3971h1.9094v4.001c0%200.18873%200%200.33971%200.031823%200.52843zm15.869-1.1324c0%200.64167-0.41369%201.1324-0.95468%201.1324h-0.9865c0-0.15098%200.031823-0.33971%200.031823-0.49069v-4.0387h1.9094zm-4.6373%2012.391h-0.37745c-1.2456%200-2.2647-1.0482-2.2647-2.3294v-0.77647c0-0.23294-0.15098-0.38824-0.37745-0.38824h-1.5098c-0.22647%200-0.37745%200.15529-0.37745%200.38824v0.77647c0%201.2812-1.0191%202.3294-2.2647%202.3294h-0.37745c-0.4152%200-0.7549%200.34941-0.7549%200.77647v0.77647c0%200.42706%200.33971%200.77647%200.7549%200.77647h7.549c0.4152%200%200.7549-0.34941%200.7549-0.77647v-0.77647c0-0.42706-0.33971-0.77647-0.7549-0.77647z%22%20fill%3D%22%23ec8c25%22%2F%3E%3C%2Fsvg%3E\"","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport classNames from \"classnames\";\nimport { CardState } from \"elements/tbui/card/types\";\nimport { LightningElement, track, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { fetchCommunityProfile } from \"tbtbc/communityData\";\nimport { getError, getIsLoading, getUserId } from \"../communityData/queryUtils\";\nimport {\n CommunityConnection,\n CommunityConnectionCollection,\n LegacyCommunityConnections,\n} from \"../communityData/types\";\nimport {\n GetCommunityConnections,\n GetCommunityConnections_siteInfo_urls,\n} from \"./gql/GetCommunityConnections\";\n\ntype Placeholder = {\n __typename: \"Placeholder\";\n id: string;\n className?: string;\n};\n\ninterface DisplayConnection extends CommunityConnection {\n className?: string;\n}\n\ntype ConnectionsForDisplay = {\n count: number;\n className: string;\n href: string | null;\n items: (DisplayConnection | Placeholder)[] | null;\n};\n\nconst imageErrors: WeakMap = new WeakMap();\n\nexport function handleImageError(event: Event, defaultImage: string) {\n const target = event.target as HTMLImageElement;\n\n if (!target) return;\n\n if (imageErrors.get(target)) return;\n\n const isGroup = target.classList.contains(\"group\");\n\n if (isGroup) {\n target.src = defaultImage;\n\n imageErrors.set(target, true);\n }\n}\n\nexport const CONNECTIONS_QUERY = gql`\n fragment LocalConnections on CommunityConnectionCollection {\n __typename\n count\n url\n connections {\n __typename\n id\n url\n imageUrl\n name\n }\n }\n\n query GetCommunityConnections {\n profileUser @client {\n __typename\n ... on PublicProfile {\n isSelf\n\n communityUser @client {\n __typename\n ... on CommunityAsyncResponse {\n isLoading\n }\n ... on CommunityUser {\n id\n }\n }\n\n legacyCommunityConnections @client {\n __typename\n ... on CommunityAsyncResponse {\n isLoading\n error\n }\n ... on LegacyCommunityConnections {\n groups {\n ...LocalConnections\n }\n followers {\n ...LocalConnections\n }\n following {\n ...LocalConnections\n }\n }\n }\n }\n }\n\n siteInfo @client {\n urls {\n tbcDefaultGroupImage\n }\n }\n }\n`;\n\nexport default class extends LightningElement {\n private visible: boolean = false;\n private cardState: CardState = \"default\";\n private labels: LabelTranslations = undefined!;\n private urls: GetCommunityConnections_siteInfo_urls = undefined!;\n private isSelf: boolean = false;\n\n @track\n private connections?: ConnectionsForDisplay[];\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"connections.title\",\n \"connections.followers\",\n \"connections.follower\",\n \"connections.following\",\n \"connections.followingSingular\",\n \"connections.groups\",\n \"connections.group\",\n \"connections.bannerTitle\",\n \"connections.bannerText\",\n ],\n })\n private handleLabels(labels: { connections: LabelTranslations }) {\n this.labels = {\n ...labels.connections,\n };\n }\n private get showCommunityBanner() {\n return (\n this.connections &&\n this.isSelf &&\n !this.connections.reduce(\n (acc: number, connection) => acc + connection.count,\n 0\n )\n );\n }\n\n @wire(QueryAdapter, {\n query: CONNECTIONS_QUERY,\n returnPartialData: true,\n })\n private handleResult({\n data,\n error,\n }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n\n this.urls = data.siteInfo.urls;\n\n if (data.profileUser.__typename !== \"PublicProfile\") {\n return;\n }\n\n const profileUser = data.profileUser;\n const { isSelf, communityUser, legacyCommunityConnections } = profileUser;\n const isTbcUser = !!getUserId(communityUser);\n\n if ((isSelf || isTbcUser) && getIsLoading(legacyCommunityConnections)) {\n this.cardState = \"loading\";\n this.visible = true;\n return;\n } else if (getIsLoading(legacyCommunityConnections)) {\n this.visible = false;\n return;\n }\n\n if (isTbcUser && getError(legacyCommunityConnections)) {\n this.cardState = \"loadFailed\";\n this.visible = true;\n return;\n } else if (getError(legacyCommunityConnections)) {\n this.visible = false;\n return;\n }\n\n if (!isSelf && !legacyCommunityConnections) {\n this.visible = false;\n return;\n }\n\n this.setDisplayItems(\n legacyCommunityConnections as LegacyCommunityConnections | null\n );\n\n this.visible = true;\n this.isSelf = isSelf;\n this.cardState = \"default\";\n }\n\n private filterNull(input: object) {\n const result: any = {};\n\n for (let [key, value] of Object.entries(input)) {\n if (\n input[key as keyof typeof input] !== null &&\n input[key as keyof typeof input] !== undefined\n ) {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n connectedCallback() {\n fetchCommunityProfile();\n }\n\n private handleImageError(event: Event) {\n handleImageError(event, this.urls.tbcDefaultGroupImage);\n }\n\n private setDisplayItems(queryResult: LegacyCommunityConnections | null) {\n this.connections = [\"followers\", \"following\", \"groups\"].map<\n ConnectionsForDisplay\n >((key) => {\n const defaultConnection: CommunityConnectionCollection = {\n __typename: \"CommunityConnectionCollection\",\n count: 0,\n url: \"\",\n connections: [],\n };\n const state: LegacyCommunityConnections = {\n __typename: \"LegacyCommunityConnections\",\n viewerEntitySubscriptionId: null,\n groups: {\n ...defaultConnection,\n },\n followers: {\n ...defaultConnection,\n },\n following: {\n ...defaultConnection,\n },\n ...(queryResult ? this.filterNull(queryResult) : {}),\n };\n const { count, connections, url } = state[\n key as keyof LegacyCommunityConnections\n ] as CommunityConnectionCollection;\n\n // W-9489334: need to ensure that a max of 5 items are displayed.\n const maxItems = 5;\n const items: (Placeholder | CommunityConnection)[] = connections\n ? Array.from(connections).splice(0, maxItems)\n : [];\n\n while (items.length < 5) {\n items.push({\n __typename: \"Placeholder\",\n id: `placeholder-${items.length}`,\n });\n }\n const result = {\n count,\n href: count > 0 ? url : null,\n className: count > 0 ? \"items has-data\" : \"items\",\n items: items.map((item) => ({\n ...item,\n className: classNames(\n {\n group: key === \"groups\",\n user: key !== \"groups\",\n },\n item.__typename\n ),\n })),\n };\n\n const getLabel = this.labelForConnection.bind(this);\n\n Object.defineProperty(result, \"label\", {\n get() {\n return getLabel(key, count) || \"\";\n },\n });\n\n return result;\n });\n }\n\n private labelForConnection(type: string, count: number) {\n switch (type) {\n case \"following\": {\n // TODO: Switch to correct pluralization format after they are translated\n // e.g. the ternery can be removed and `t` can determine the label to use\n return count === 1\n ? this.labels.followingSingular\n : t(\"connections.following\", { count });\n }\n case \"followers\": {\n // TODO: Switch to correct pluralization format after they are translated\n // e.g. the ternery can be removed and `t` can determine the label to use\n return count === 1\n ? this.labels.follower\n : t(\"connections.followers\", { count });\n }\n case \"groups\": {\n // TODO: Switch to correct pluralization format after they are translated\n // e.g. the ternery can be removed and `t` can determine the label to use\n return count === 1\n ? this.labels.group\n : t(\"connections.groups\", { count });\n }\n }\n }\n}\n","import { LightningElement, api } from \"lwc\";\nimport { ApolloClient, DataProxy, NormalizedCacheObject } from \"@apollo/client\";\nimport { createMockClient } from \"./mockClient\";\nimport { MockedResponse } from \"@apollo/client/testing\";\nimport { memoizeOnce } from \"../../../shared/memoize\";\n\nexport interface MockConfig {\n mocks: MockedResponse[];\n writeQueries: DataProxy.WriteQueryOptions[];\n writeFragments: DataProxy.WriteFragmentOptions[];\n}\n\nexport default class extends LightningElement {\n private mockClient: ApolloClient = undefined!;\n private pending?: Promise | null;\n private config: MockConfig = {\n mocks: [],\n writeQueries: [],\n writeFragments: [],\n };\n\n /**\n * Providing the getter allows for the `client` to be retrieved from the property on the element. The setter should\n * never be used.\n */\n @api get client(): ApolloClient {\n return this.mockClient;\n }\n /**\n * This setter is provided because it is required by lwc, however, it should never be used as the client will be\n * re-created when the config properties change. Providing the getter allows for the `client` to be retrieved from\n * the property on the element.\n */\n set client(value) {\n return;\n }\n\n @api\n get mocks() {\n return this.config.mocks;\n }\n set mocks(value) {\n this.config.mocks = value;\n\n this.updateClient();\n }\n\n @api\n get writeQueries() {\n return this.config.writeQueries;\n }\n set writeQueries(value) {\n this.config.writeQueries = value;\n\n this.updateClient();\n }\n\n @api\n get writeFragments() {\n return this.config.writeFragments;\n }\n set writeFragments(value) {\n this.config.writeFragments = value;\n\n this.updateClient();\n }\n\n private updateClient() {\n const { mocks, writeQueries, writeFragments } = this;\n this.memoizedUpdate({ mocks, writeQueries, writeFragments });\n }\n\n private memoizedUpdate = memoizeOnce(\n ({ mocks, writeQueries, writeFragments }: MockConfig) => {\n this.mockClient = createMockClient(mocks);\n\n writeQueries.forEach((options) => {\n this.client.writeQuery(options);\n });\n\n writeFragments.forEach((options) => {\n this.client.writeFragment(options);\n });\n }\n );\n\n connectedCallback() {\n this.updateClient();\n }\n}\n","import { LightningElement, wire } from \"lwc\";\nimport { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { GetProfileUser } from \"./gql/GetProfileUser\";\nimport { t } from \"tbme/localization\";\n\nexport const PROFILE_USER_QUERY = gql`\n query GetProfileUser {\n profileUser @client {\n __typename\n fullName\n ... on PublicProfile {\n bio\n title\n companyName\n slug\n }\n ... on PrivateProfile {\n __typename\n }\n }\n\n siteInfo @client {\n urls {\n profile\n }\n }\n }\n`;\n\nexport default class extends LightningElement {\n @wire(QueryAdapter, {\n query: PROFILE_USER_QUERY,\n })\n private handleResult({ data }: ApolloQueryResult) {\n this.setTitle(data);\n this.setDescription(data);\n this.setCanonicalLink(data);\n }\n\n private setTitle(data: GetProfileUser) {\n const defaultTitle = t(\"profileMetadata.defaultPageTitle\");\n\n if (!data) {\n document.title = defaultTitle;\n return;\n }\n\n const { profileUser } = data;\n if (!profileUser) {\n document.title = defaultTitle;\n return;\n }\n\n if (profileUser.__typename !== \"PublicProfile\") {\n document.title = t(\"profileMetadata.pageTitle\", {\n fullName: profileUser.fullName,\n });\n return;\n }\n\n if (profileUser.title && profileUser.companyName) {\n document.title = t(\"profileMetadata.pageTitleWithTitleAndCompany\", {\n fullName: profileUser.fullName,\n title: profileUser.title,\n company: profileUser.companyName,\n });\n } else if (profileUser.title) {\n document.title = t(\"profileMetadata.pageTitleWithTitle\", {\n fullName: profileUser.fullName,\n title: profileUser.title,\n });\n } else if (profileUser.companyName) {\n document.title = t(\"profileMetadata.pageTitleWithCompany\", {\n fullName: profileUser.fullName,\n company: profileUser.companyName,\n });\n } else {\n document.title = t(\"profileMetadata.pageTitle\", {\n fullName: profileUser.fullName,\n });\n }\n }\n\n private setDescription(data: GetProfileUser) {\n const defaultDescription = t(\"profileMetadata.defaultPageDescription\");\n\n // Guard against the description meta tag not being present in the page.\n let descriptionMetaElement = document.querySelector(\n 'meta[name=\"description\"]'\n ) as HTMLMetaElement;\n if (!descriptionMetaElement) {\n descriptionMetaElement = document.createElement(\"meta\");\n descriptionMetaElement.setAttribute(\"name\", \"description\");\n descriptionMetaElement.content = defaultDescription;\n document\n .getElementsByTagName(\"head\")[0]\n .appendChild(descriptionMetaElement);\n }\n\n if (!data) {\n descriptionMetaElement.setAttribute(\"content\", defaultDescription);\n return;\n }\n\n let description = defaultDescription;\n const { profileUser } = data;\n if (!profileUser) {\n descriptionMetaElement.setAttribute(\"content\", defaultDescription);\n return;\n }\n\n if (profileUser.__typename === \"PublicProfile\") {\n if (profileUser.bio) {\n const maxBioLength = 160;\n description =\n profileUser.bio.length > maxBioLength\n ? profileUser.bio.slice(0, maxBioLength)\n : profileUser.bio;\n } else {\n description = profileUser.title\n ? t(\"profileMetadata.titleAtCompany\", {\n title: profileUser.title,\n company: profileUser.companyName,\n })\n : t(\"profileMetadata.trailblazerAtCompany\", {\n company: profileUser.companyName,\n });\n }\n }\n\n descriptionMetaElement.setAttribute(\"content\", description);\n }\n\n private setCanonicalLink(data: GetProfileUser) {\n if (!data) {\n return;\n }\n\n const { profileUser, siteInfo } = data;\n if (!profileUser) {\n return;\n }\n\n if (profileUser.__typename === \"PublicProfile\") {\n if (profileUser.slug) {\n // Guard against the canonical link not being present in the page.\n let canonicalLinkElement = document.querySelector(\n 'link[rel=\"canonical\"]'\n ) as HTMLLinkElement;\n if (!canonicalLinkElement) {\n canonicalLinkElement = document.createElement(\"link\");\n canonicalLinkElement.setAttribute(\"rel\", \"canonical\");\n document\n .getElementsByTagName(\"head\")[0]\n .appendChild(canonicalLinkElement);\n }\n\n canonicalLinkElement.setAttribute(\n \"href\",\n `${siteInfo.urls.profile}/${profileUser.slug}`\n );\n }\n }\n }\n}\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { LightningElement, api, wire } from \"lwc\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { GetEmptySuperbadgeItemUrls } from \"./gql/GetEmptySuperbadgeItemUrls\";\n\nexport default class extends LightningElement {\n @api isSelf: boolean = false;\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"superbadges.emptySuperbadgeContent\",\n \"superbadges.emptySuperbadgeDescription\",\n ],\n })\n private labels: LabelTranslations = {};\n\n @wire(QueryAdapter, {\n query: gql`\n query GetEmptySuperbadgeItemUrls {\n siteInfo @client {\n urls @client {\n defaultSuperbadgeImage\n defaultSuperbadge\n }\n }\n }\n `,\n })\n private context: ApolloQueryResult = undefined!;\n\n private get visible() {\n return this.context && this.context.data && this.context.data.siteInfo;\n }\n\n private get urls() {\n return this.visible\n ? this.context.data.siteInfo.urls\n : {\n defaultSuperbadgeImage: \"\",\n defaultSuperbadge: \"\",\n };\n }\n}\n","import { LightningElement, api } from \"lwc\";\nimport { t } from \"tbme/localization\";\nimport { locale } from \"tbme/localState\";\n\nexport default class extends LightningElement {\n @api imageUrl: string = \"\";\n @api itemUrl: string = \"\";\n @api completedDate: string | number | Date = \"\";\n @api linkContent: string = \"\";\n @api itemDescription: string = \"\";\n\n get completedDateString() {\n const date = new Date(this.completedDate);\n const dateFormatOptions: Intl.DateTimeFormatOptions = {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n };\n const localeDateString = date.toLocaleDateString(\n locale().replace(\"_\", \"-\"),\n dateFormatOptions\n );\n\n return t(\"superbadges.completedDate\", {\n localeDateString,\n });\n }\n}\n","import { LightningElement, api, wire } from \"lwc\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\nimport { t } from \"tbme/localization\";\nimport { CardState } from \"../../tbui/card/types\";\nimport { ApolloQueryResult } from \"@apollo/client\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport {\n GetTrailheadBadges,\n GetTrailheadBadgesVariables,\n GetTrailheadBadges_profile_PublicProfile_earnedAwards_edges,\n} from \"../profileBadges/gql/GetTrailheadBadges\";\nimport { EarnedAward } from \"../profileBadges/gql/EarnedAward\";\nimport { EarnedAwardSelf } from \"../profileBadges/gql/EarnedAwardSelf\";\nimport { TRAILHEAD_BADGES_QUERY } from \"../profileBadges/query\";\nimport { AwardTypeFilter } from \"../../../gql/types\";\nimport { PageInfoBidirectional } from \"gql/fragments/gql/PageInfoBidirectional\";\nimport { chassis } from \"tbme/localState\";\nimport { getSharedUrlValues } from \"../localState/urls\";\n\ninterface Superbadge {\n id: string;\n title: string;\n url: string | null;\n imageUrl: string;\n earnedAt: string | null;\n}\n\n// The number of superbadges to show when collapsed.\nconst initialVisible: number = 3;\nconst initialCount: number = 8;\nconst perPage = 8;\nexport default class extends LightningElement {\n private isSelf: boolean = false;\n private cardState: CardState = \"loading\";\n private hasHeader: boolean = true;\n private superbadges = Array();\n private fetchingMore = false;\n private viewingLess: boolean = true;\n private superbadgeCount: number | null = 0;\n\n private fetchMore?: (options: {\n variables: GetTrailheadBadgesVariables;\n }) => Promise>;\n\n private refetch?: (\n variables?: Partial\n ) => Promise>;\n\n private pageInfo: PageInfoBidirectional = {\n hasNextPage: false,\n endCursor: null,\n } as PageInfoBidirectional;\n\n private variables: GetTrailheadBadgesVariables = {\n count: initialCount,\n after: null,\n filter: AwardTypeFilter.SUPERBADGE,\n hasSlug: false,\n };\n\n private defaultImageUrls: { trailheadUnknownBadge: string } = undefined!;\n private shouldFocusNewSuperbadge: boolean = false;\n private previousSuperbadgeCount: number = initialCount;\n\n connectedCallback() {\n this.defaultImageUrls = getSharedUrlValues() as any;\n\n const chassisData = chassis();\n const username = chassisData?.profile?.username;\n this.isSelf = chassisData?.isSelf || false;\n\n this.variables = {\n ...this.variables,\n slug: username,\n hasSlug: !!username,\n };\n }\n\n renderedCallback() {\n if (this.shouldFocusNewSuperbadge) {\n this.focusNewSuperbadge();\n }\n }\n\n focusNewSuperbadge() {\n const badge = this.filteredSuperbadges[this.previousSuperbadgeCount];\n\n if (badge) {\n const superBadgeComponent = this.template.querySelectorAll(\n \"lwc-tbui-superbadge-item\"\n )[this.previousSuperbadgeCount];\n const link = superBadgeComponent?.shadowRoot?.querySelector(\n `a[href='${badge.url}']`\n ) as HTMLAnchorElement;\n\n if (link) {\n requestAnimationFrame(() => {\n link.focus();\n });\n this.shouldFocusNewSuperbadge = false;\n }\n }\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\"showMore\", \"showLess\"],\n })\n private labels: LabelTranslations = {};\n\n @wire(QueryAdapter, {\n query: TRAILHEAD_BADGES_QUERY,\n variables: \"$variables\",\n })\n private handleResult(\n result: QueryAdapterValue\n ) {\n const { data, loading, error, errors, fetchMore, refetch } = result;\n\n this.fetchMore = fetchMore;\n this.refetch = refetch;\n\n if (loading) {\n this.cardState = \"loading\";\n return;\n }\n\n if (error || errors) {\n this.cardState = \"loadFailed\";\n console.log(error + \" \" + errors);\n return;\n }\n\n let profile = data.profile;\n if (!profile) {\n return;\n }\n\n if (\n profile.__typename !== \"PublicProfile\" ||\n !profile.earnedAwards ||\n !profile.trailheadStats\n ) {\n this.cardState = \"default\";\n return;\n }\n\n const { earnedAwards, trailheadStats } = profile;\n const { edges, pageInfo } = earnedAwards;\n this.superbadges = this.transformBadges(edges);\n this.superbadgeCount = trailheadStats.superbadgeCount;\n this.cardState = \"default\";\n this.pageInfo = pageInfo;\n }\n\n private mergeVariables(updates: Partial) {\n return {\n ...this.variables,\n ...updates,\n };\n }\n\n private transformBadges(\n edges:\n | (GetTrailheadBadges_profile_PublicProfile_earnedAwards_edges | null)[]\n | null\n ): Superbadge[] {\n if (!edges || edges.length < 1) return [];\n\n return (edges\n .filter((item) => item !== null)\n .map((item) => item && item.node) as (\n | EarnedAward\n | EarnedAwardSelf\n )[]).map((earnedAward) => {\n const { __typename, id, award } = earnedAward;\n\n return {\n id,\n title: award ? award.title : this.labels.unknownBadgeTitle,\n description: award && award.content ? award.content.description : \"\",\n url: award && award.content ? award.content.webUrl : \"\",\n imageUrl: award\n ? award.icon\n : this.defaultImageUrls.trailheadUnknownBadge,\n earnedAt:\n __typename === \"EarnedAwardSelf\"\n ? (earnedAward as EarnedAwardSelf).earnedAt\n : null,\n };\n });\n }\n\n private get shouldDisplayCard(): boolean {\n if (!this.isSelf && this.superbadges.length < 1) {\n return false;\n }\n\n return true;\n }\n\n private get filteredSuperbadges(): Array {\n return this.viewingLess\n ? this.superbadges.slice(0, initialVisible)\n : this.superbadges;\n }\n\n private get formattedSuperbadgesCount(): string {\n const count =\n !this.superbadges || this.superbadges.length < 1\n ? 0\n : this.superbadgeCount;\n\n return t(\"superbadges.title\", { count });\n }\n\n private get superbadgesAreAvailable(): boolean {\n return this.superbadges && this.superbadges.length > 0;\n }\n\n private get hasFooter(): boolean {\n return this.superbadges!.length > initialVisible;\n }\n\n private async handleLoadMore() {\n if (!this.fetchMore) return;\n\n this.fetchingMore = true;\n this.previousSuperbadgeCount = this.filteredSuperbadges.length;\n\n await this.fetchMore({\n variables: this.mergeVariables({\n after: this.pageInfo.endCursor,\n count: perPage,\n }),\n });\n this.viewingLess = false;\n this.fetchingMore = false;\n this.shouldFocusNewSuperbadge = true;\n }\n\n private async handleToggleViewLess() {\n if (!this.refetch) return;\n\n this.fetchingMore = true;\n await this.refetch(\n this.mergeVariables({\n after: null,\n count: initialCount,\n })\n );\n this.viewingLess = true;\n this.fetchingMore = false;\n }\n\n get hasManyPages() {\n return (\n this.superbadges.length > initialVisible ||\n (this.pageInfo && this.pageInfo.hasNextPage)\n );\n }\n\n get showViewLess() {\n return (\n this.hasManyPages &&\n this.pageInfo &&\n !this.pageInfo.hasNextPage &&\n !this.viewingLess\n );\n }\n\n get showViewMore() {\n return (\n (this.pageInfo && this.pageInfo.hasNextPage) ||\n (this.filteredSuperbadges.length === initialVisible &&\n this.superbadges.length > initialVisible)\n );\n }\n}\n","import { api, LightningElement } from \"lwc\";\n\nexport default class extends LightningElement {\n /** The image url for the tag */\n @api imageUrl: string = \"\";\n\n /** The title of the tag */\n @api title: string = \"\";\n}\n","import { api, wire, LightningElement } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { GetCommunityTags_profile_PublicProfile_communityTags as CommunityTags } from \"../../tbme/communityTags/gql/GetCommunityTags\";\n\nexport default class extends LightningElement {\n private labels: LabelTranslations = undefined!;\n\n @api open: boolean = false;\n @api communityTags: CommunityTags[] = [];\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"communityTags.title\",\n \"communityTags.viewTagsTitle\",\n \"communityTags.close\",\n ],\n })\n private handleLabels(labels: { communityTags: LabelTranslations }) {\n this.labels = {\n ...labels.communityTags,\n };\n }\n\n handleHide() {\n this.dispatchEvent(new CustomEvent(\"hide\"));\n }\n}\n","/*\n File copied from https://github.com/salesforce/base-components-recipes/blob/master/force-app/main/default/lwc/dualListbox/keyboard.js\n*/\nconst keyCodes = {\n tab: 9,\n backspace: 8,\n enter: 13,\n escape: 27,\n space: 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n delete: 46,\n shift: 16,\n};\n\nfunction preventDefaultAndStopPropagation(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nfunction setFocusOnNextOption(option: any, moveUp: any, intf: any) {\n const index = parseInt(option.getAttribute(\"data-index\"), 10);\n const i = index + (moveUp ? -1 : 1);\n const options = intf.getElementsOfList(option.getAttribute(\"data-type\"));\n const next = options[i];\n if (next) {\n next.focus();\n }\n}\n\nfunction selectNextOption(option: any, moveUp: any, intf: any) {\n const selected = option.getAttribute(\"aria-selected\") === \"true\";\n const index = parseInt(option.getAttribute(\"data-index\"), 10);\n const i = index + (selected ? (moveUp ? -1 : 1) : 0);\n const options = intf.getElementsOfList(option.getAttribute(\"data-type\"));\n const next = options[i];\n if (next) {\n intf.updateSelectedOptions(next, true, false);\n }\n}\n\nfunction selectNextOptionFromShift(\n option: any,\n moveUp: any,\n isMultiple: any,\n intf: any\n) {\n const curr = parseInt(option.getAttribute(\"data-index\"), 10);\n if (intf.getShiftIndex() < 0) {\n intf.setShiftIndex(curr);\n intf.setLastShift(moveUp);\n }\n const next = curr + (intf.getLastShift() !== moveUp ? 0 : moveUp ? -1 : 1);\n const pos = next < intf.getShiftIndex();\n const shiftAdd = pos === moveUp || intf.getShiftIndex() === next;\n const options = intf.getElementsOfList(option.getAttribute(\"data-type\"));\n const nextOption = options[next];\n if (nextOption) {\n intf.updateSelectedOptions(nextOption, shiftAdd, true);\n intf.setLastShift(moveUp);\n }\n}\n\nexport function handleKeyDownOnOption(event: any, keyboardInterface: any) {\n if (event.metaKey || event.ctrlKey) {\n keyboardInterface.setShiftIndex(-1);\n const keyCodesA = \"A\".charCodeAt(0);\n const selected = event.target.getAttribute(\"aria-selected\") === \"true\";\n switch (event.keyCode) {\n case keyCodes.up:\n preventDefaultAndStopPropagation(event);\n setFocusOnNextOption(event.target, true, keyboardInterface);\n break;\n case keyCodes.down:\n preventDefaultAndStopPropagation(event);\n setFocusOnNextOption(event.target, false, keyboardInterface);\n break;\n case keyCodes.right:\n preventDefaultAndStopPropagation(event);\n keyboardInterface.moveOptionsBetweenLists(true);\n break;\n case keyCodes.left:\n preventDefaultAndStopPropagation(event);\n keyboardInterface.moveOptionsBetweenLists(false);\n break;\n case keyCodes.space:\n preventDefaultAndStopPropagation(event);\n keyboardInterface.updateSelectedOptions(event.target, !selected, true);\n\n break;\n case keyCodesA:\n preventDefaultAndStopPropagation(event);\n keyboardInterface.selectAllOptions(event.target);\n break;\n default:\n }\n } else if (event.shiftKey) {\n switch (event.keyCode) {\n case keyCodes.up:\n preventDefaultAndStopPropagation(event);\n selectNextOptionFromShift(event.target, true, true, keyboardInterface);\n\n break;\n case keyCodes.down:\n preventDefaultAndStopPropagation(event);\n selectNextOptionFromShift(event.target, false, true, keyboardInterface);\n\n break;\n default:\n }\n } else {\n keyboardInterface.setShiftIndex(-1);\n switch (event.keyCode) {\n case keyCodes.up:\n preventDefaultAndStopPropagation(event);\n selectNextOption(event.target, true, keyboardInterface);\n break;\n case keyCodes.down:\n preventDefaultAndStopPropagation(event);\n selectNextOption(event.target, false, keyboardInterface);\n break;\n default:\n }\n }\n}\n","/*\n Source code adapted from https://github.com/salesforce/base-components-recipes/tree/master/force-app/main/default/lwc/dualListbox\n Description of changes:\n - The ability to make options required has not been implemented\n - The ability to disable the component has not been implemented\n - Labeling has been altered to receive labels from the parent component\n - The following imports were not implemented:\n InteractingState,\n FieldConstraintApi,\n normalizeVariant,\n VARIANT\n - getRealDOMId has been put directly into the functions that\n used it instead of importing since it was a simple function\n - focus method will not select first element but clear selections instead\n*/\n\nimport { api, LightningElement, track, wire } from \"lwc\";\nimport { handleKeyDownOnOption } from \"./keyboard\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\n\nexport default class extends LightningElement {\n private labels: LabelTranslations = undefined!;\n\n @api options!: any[];\n @api sourceLabel?: undefined;\n @api selectedLabel?: undefined;\n @api label?: undefined;\n\n @track focusableInSource?: string;\n @track focusableInSelected?: string;\n\n @track _selectedValues: any[] = [];\n @track highlightedOptions: any[] = [];\n @track optionToFocus?: String | null;\n @track isFocusOnList: boolean = false;\n @track lastSelected?: number;\n @track selectedList?: string;\n @track keyboardInterface: any;\n @track shiftIndex: number = -1;\n @track lastShift: any;\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"duelingPicklist.upButton\",\n \"duelingPicklist.downButton\",\n \"duelingPicklist.leftButton\",\n \"duelingPicklist.rightButton\",\n ],\n })\n private handleLabels(labels: { duelingPicklist: LabelTranslations }) {\n this.labels = {\n ...labels.duelingPicklist,\n };\n }\n\n connectedCallback(): void {\n this.keyboardInterface = this.selectKeyboardInterface();\n }\n renderedCallback(): void {\n if (this.optionToFocus) {\n const option = this.template.querySelector(\n `div[data-value='${this.optionToFocus.replace(/'/g, \"\\\\'\")}']`\n ) as HTMLElement;\n if (option) {\n this.isFocusOnList = true;\n option.focus();\n }\n }\n }\n selectKeyboardInterface() {\n const that = this;\n that.shiftIndex = -1;\n that.lastShift = null;\n return {\n getShiftIndex() {\n return that.shiftIndex;\n },\n setShiftIndex(value: any) {\n that.shiftIndex = value;\n },\n getLastShift() {\n return that.lastShift;\n },\n setLastShift(value: any) {\n that.lastShift = value;\n },\n getElementsOfList(listId: any) {\n return that.getElementsOfList(listId);\n },\n selectAllOptions(option: any) {\n that.selectAllFromLastSelectedToOption(option, true);\n },\n updateSelectedOptions(option: any, select: any, isMultiple: any) {\n that.updateSelectedOptions(option, select, isMultiple);\n },\n moveOptionsBetweenLists(addToSelect: any) {\n that.moveOptionsBetweenLists(addToSelect, true);\n },\n };\n }\n @api\n focus() {\n this.isFocusOnList = false;\n this.highlightedOptions = [];\n this.optionToFocus = null;\n }\n @api get value() {\n return this._selectedValues;\n }\n set value(newValue: string[]) {\n this._selectedValues = newValue || [];\n }\n get computedSourceListId() {\n return this.template\n .querySelector(\"[data-source-list]\")\n ?.getAttribute(\"id\");\n }\n get computedSelectedListId() {\n return this.template\n .querySelector(\"[data-selected-list]\")\n ?.getAttribute(\"id\");\n }\n get computedSourceList() {\n let sourceListOptions: any[] = [];\n if (this.options) {\n const values: any[] = this.value;\n sourceListOptions = this.options.filter(\n (option: any) => values.indexOf(option.value) === -1\n );\n }\n return this.computeListOptions(sourceListOptions, this.focusableInSource);\n }\n get computedSelectedList() {\n const selectedListOptions: any[] = [];\n if (this.options) {\n const optionsMap: any = {};\n this.options.forEach((option: any) => {\n optionsMap[option.value] = { ...option };\n });\n this.value.forEach((optionValue: any) => {\n const option = optionsMap[optionValue];\n if (option) {\n option.isSelected = true;\n }\n });\n this.value.forEach((optionValue: any) => {\n const option: any = optionsMap[optionValue];\n if (option) {\n selectedListOptions.push(option);\n }\n });\n }\n return this.computeListOptions(\n selectedListOptions,\n this.focusableInSelected\n );\n }\n private getOptionIndex(optionElement: any) {\n return parseInt(optionElement.getAttribute(\"data-index\"), 10);\n }\n private getListId(optionElement: any): string {\n return optionElement.parentElement.parentElement.getAttribute(\"id\");\n }\n\n computeListOptions(options: any[], focusableOptionValue: any) {\n if (options.length > 0) {\n const focusableOption = options.find((option: any) => {\n return option.value === focusableOptionValue;\n });\n const focusableValue = focusableOption\n ? focusableOption.value\n : options[0].value;\n return options.map((option: any) => {\n return this.computeOptionProperties(option, focusableValue);\n });\n }\n return [];\n }\n computeOptionProperties(option: any, focusableValue: any) {\n const isSelected = this.highlightedOptions.indexOf(option.value) > -1;\n const classList = isSelected\n ? \"listbox__option listbox__option_plain media media_small media_inline is-selected\"\n : \"listbox__option listbox__option_plain media media_small media_inline\";\n return {\n ...option,\n tabIndex: option.value === focusableValue ? \"0\" : \"-1\",\n selected: isSelected ? \"true\" : \"false\",\n classList,\n };\n }\n handleOptionClick(event: any) {\n const selectMultiple = event.metaKey || event.ctrlKey || event.shiftKey;\n const option = event.currentTarget as HTMLElement;\n if (event.shiftKey) {\n this.selectAllFromLastSelectedToOption(option, false);\n return;\n }\n const selected =\n selectMultiple && option.getAttribute(\"aria-selected\") === \"true\";\n this.updateSelectedOptions(option, !selected, selectMultiple);\n this.shiftIndex = -1;\n }\n handleOptionKeyDown(event: Event) {\n handleKeyDownOnOption(event, this.keyboardInterface);\n }\n updateSelectedOptions(\n option: HTMLElement,\n select: boolean,\n isMultiple = false\n ) {\n const value = option.getAttribute(\"data-value\")!;\n const listId = this.getListId(option);\n const optionIndex = this.getOptionIndex(option);\n this.updateCurrentSelectedList(listId, isMultiple);\n if (select) {\n if (this.highlightedOptions.indexOf(value) === -1) {\n this.highlightedOptions.push(value);\n }\n } else {\n this.highlightedOptions.splice(this.highlightedOptions.indexOf(value), 1);\n }\n this.updateFocusableOption(listId, value);\n this.lastSelected = optionIndex;\n }\n updateCurrentSelectedList(currentList: string, isMultiple: boolean) {\n if (this.selectedList !== currentList || !isMultiple) {\n if (this.selectedList) {\n this.highlightedOptions = [];\n this.lastSelected = -1;\n }\n this.selectedList = currentList;\n }\n }\n updateFocusableOption(listId: string, value: string) {\n if (listId === this.computedSourceListId) {\n this.focusableInSource = value;\n } else if (listId === this.computedSelectedListId) {\n this.focusableInSelected = value;\n }\n this.optionToFocus = value;\n }\n handleFocus(event: Event) {\n const element = event.target as HTMLElement;\n if (element.getAttribute(\"role\") === \"option\") {\n if (!this.isFocusOnList) {\n this.isFocusOnList = true;\n this.updateSelectedOptions(element, true, false);\n }\n }\n }\n handleBlur(event: Event) {\n const element = event.target as HTMLElement;\n if (element.getAttribute(\"role\") !== \"option\") {\n this.isFocusOnList = false;\n }\n }\n moveOptionsBetweenLists(addToSelect: any, retainFocus: boolean = true) {\n const isValidList = addToSelect\n ? this.selectedList === this.computedSourceListId\n : this.selectedList === this.computedSelectedListId;\n if (!isValidList) {\n return;\n }\n const toMove = this.highlightedOptions;\n const values = this.computedSelectedList.map((option: any) => option.value);\n let newValues: any[] = [];\n if (addToSelect) {\n newValues = values.concat(toMove);\n } else {\n newValues = values.filter((value) => toMove.indexOf(value) === -1);\n }\n const oldSelectedValues: any[] = this._selectedValues;\n this._selectedValues = newValues;\n if (toMove.length === 0) {\n this._selectedValues = oldSelectedValues;\n return;\n }\n if (retainFocus) {\n const listId = addToSelect\n ? this.computedSelectedListId\n : this.computedSourceListId;\n this.selectedList = listId!;\n this.updateFocusableOption(listId!, toMove[0]);\n } else {\n this.isFocusOnList = false;\n this.highlightedOptions = [];\n this.optionToFocus = null;\n }\n\n this.dispatchChangeEvent(newValues);\n }\n handleRightButtonClick() {\n this.moveOptionsBetweenLists(true);\n }\n handleLeftButtonClick() {\n this.moveOptionsBetweenLists(false);\n }\n handleUpButtonClick() {\n this.changeOrderOfOptionsInList(true);\n }\n handleDownButtonClick() {\n this.changeOrderOfOptionsInList(false);\n }\n dispatchChangeEvent(values: any) {\n this.dispatchEvent(\n new CustomEvent(\"change\", {\n composed: true,\n bubbles: true,\n detail: { value: values },\n })\n );\n }\n changeOrderOfOptionsInList(moveUp: any) {\n const elementList = this.getElementsOfList(this.selectedList!);\n const values = this.computedSelectedList.map((option) => option.value);\n const toMove = values.filter(\n (option: any) => this.highlightedOptions.indexOf(option) > -1\n );\n const validSelection =\n toMove.length === 0 || this.selectedList !== this.computedSelectedListId;\n if (validSelection) {\n return;\n }\n let start = moveUp ? 0 : toMove.length - 1;\n let index = values.indexOf(toMove[start]);\n const validMove =\n (moveUp && index === 0) || (!moveUp && index === values.length - 1);\n if (validMove) {\n return;\n }\n if (moveUp) {\n while (start < toMove.length) {\n index = values.indexOf(toMove[start]);\n //elementList\n this.swapOptions(index, index - 1, values);\n start++;\n }\n } else {\n while (start > -1) {\n index = values.indexOf(toMove[start]);\n //elementList\n this.swapOptions(index, index + 1, values);\n start--;\n }\n }\n this._selectedValues = values;\n this.updateFocusableOption(this.selectedList!, toMove[0]);\n this.optionToFocus = null;\n this.dispatchChangeEvent(values);\n }\n swapOptions(i: any, j: any, array: any) {\n const temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n\n getElementsOfList(listId: string) {\n const elements = this.template.querySelectorAll(\n `div[data-type='${listId}']`\n );\n\n return elements ? elements : [];\n }\n\n selectAllFromLastSelectedToOption(option: any, all: any) {\n const listId = option.getAttribute(\"data-type\");\n this.updateCurrentSelectedList(listId, true);\n const options = this.getElementsOfList(listId);\n const end = all ? 0 : this.getOptionIndex(option);\n this.lastSelected = this.lastSelected! < 0 ? end : this.lastSelected;\n const start = all ? options.length : this.lastSelected;\n let val, select;\n this.highlightedOptions = [];\n for (let i = 0; i < options.length; i++) {\n select = (i - start!) * (i - end) <= 0;\n if (select) {\n val = options[i].getAttribute(\"data-value\");\n this.highlightedOptions.push(val);\n }\n }\n }\n}\n","import { api, wire, LightningElement } from \"lwc\";\nimport { LabelTranslations, t, MultiLabelAdapter } from \"tbme/localization\";\nimport { showToast } from \"tds/toaster\";\n\nexport default class extends LightningElement {\n @api title!: string;\n @api selectedLabel!: string;\n @api sourceLabel!: string;\n @api label!: string;\n isLoading: boolean = false;\n _isEdit?: boolean = false;\n _selection?: any[];\n _options?: any[];\n _isModified: boolean = false;\n\n @api\n onSave(status: string) {\n this.isLoading = false;\n if (status === \"SUCCESS\") {\n this.dispatchEvent(new CustomEvent(\"requestclose\"));\n showToast({\n message: t(\"communityTags.successToast\"),\n variant: \"success\",\n });\n } else {\n showToast({\n message: t(\"communityTags.errorToast\"),\n variant: \"error\",\n });\n }\n }\n\n @api get isEdit() {\n return this._isEdit;\n }\n set isEdit(val: boolean | undefined) {\n this._isEdit = val;\n\n if (this._isEdit) {\n this._isModified = false;\n }\n const picklist = this.template.querySelector(\n `[data-id=\"dueling-picklist\"]`\n ) as any;\n picklist?.focus();\n }\n\n @api get options() {\n return this._options;\n }\n set options(vals: any[] | undefined) {\n this._options = vals?.map((tag: any) => {\n return { value: tag.id, label: tag.title };\n });\n }\n\n @api get selection() {\n return this._selection;\n }\n set selection(vals: any[] | undefined) {\n this._selection = vals?.map((tag: any) => {\n return tag.id;\n });\n }\n\n get saveDisabled(): boolean {\n return this.isLoading || !this._isModified;\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\"saveButton\", \"cancelButton\"],\n })\n private labels: LabelTranslations = {};\n private handleRequestClose = () => {\n if (!this.isLoading && this.isEdit) {\n const picklist = this.template.querySelector(\n `[data-id=\"dueling-picklist\"]`\n ) as any;\n picklist.value = this.selection;\n this.dispatchEvent(new CustomEvent(\"requestclose\"));\n picklist.focus();\n }\n };\n private handleSaveButtonClick = () => {\n if (!this.saveDisabled) {\n this.isLoading = true;\n const picklist = this.template.querySelector(\n `[data-id=\"dueling-picklist\"]`\n ) as any;\n const saveVals = picklist.value;\n this.dispatchEvent(\n new CustomEvent(\"saverequest\", {\n composed: true,\n bubbles: true,\n detail: { value: saveVals },\n })\n );\n }\n };\n\n private handleOnChange(event: CustomEvent) {\n this._isModified =\n event?.detail?.value != null &&\n this.selection != null &&\n event.detail.value.toString() !== this.selection.toString();\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const COMMUNITY_TAGS_QUERY = gql`\n query GetCommunityTags(\n $slug: String\n $hasSlug: Boolean!\n $queryCommunityTags: Boolean!\n ) {\n profile(slug: $slug) @include(if: $hasSlug) {\n __typename\n id\n ... on PublicProfile {\n communityTags {\n id\n title\n imageUrl\n }\n }\n }\n\n communityTags @include(if: $queryCommunityTags) {\n id\n title\n imageUrl\n }\n }\n`;\n\n","import { gql } from \"@apollo/client\";\n\nexport const COMMUNITY_TAGS_MUTATION = gql`\n mutation updateCommunityTags($tags: [String!]!) {\n updateCommunityTags(input: { tags: $tags }) {\n ... on UpdateCommunityTagsPayload {\n communityTags {\n id\n title\n imageUrl\n }\n }\n }\n }\n`;\n","import { api, LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { CardState } from \"../../tbui/card/types\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport { getClient } from \"tbme/clientAdapter\";\nimport {\n GetCommunityTags,\n GetCommunityTags_communityTags,\n GetCommunityTags_profile_PublicProfile_communityTags,\n GetCommunityTagsVariables,\n} from \"./gql/GetCommunityTags\";\nimport {COMMUNITY_TAGS_QUERY} from \"./query\";\nimport { COMMUNITY_TAGS_MUTATION } from \"./mutation\";\nimport { updateCommunityTagsVariables } from \"./gql/updateCommunityTags\";\nimport {chassis} from \"tbme/localState\";\n\ninterface CommunityTag {\n id: string;\n title: string;\n imageUrl: string;\n}\n\nexport default class extends LightningElement {\n private isSelf: boolean = false;\n private labels: LabelTranslations = undefined!;\n private communityTags: GetCommunityTags_profile_PublicProfile_communityTags[] = [];\n private firstFetchLoading: boolean = true;\n private cardState: CardState = \"loading\";\n private showMoreTags: boolean = false;\n private tags: any[] = undefined!;\n private disabled: boolean = false;\n\n private variables: GetCommunityTagsVariables = {\n queryCommunityTags: false,\n hasSlug: false,\n };\n\n private options: GetCommunityTags_communityTags[] = [];\n private isEdit: boolean = false;\n\n @api initialTagsMax: number = 3;\n\n /** Should the community tags component be visible */\n get isVisible() {\n return (\n !this.disabled &&\n (this.isSelf || (this.hasCommunityTags && !this.firstFetchLoading))\n );\n }\n\n /* Are there any tags associated with this profile */\n get hasCommunityTags() {\n return this.communityTags.length > 0;\n }\n\n /** The subset of community tags that are initially visible */\n get visibleTags() {\n return this.communityTags.slice(0, this.initialTagsMax);\n }\n\n /** Are there more tags that aren't being displayed */\n get moreTags() {\n return (\n this.initialTagsMax >= 0 &&\n this.communityTags?.length > this.initialTagsMax\n );\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"communityTags.title\",\n \"communityTags.emptyCommunityTagsContent\",\n \"communityTags.viewAllTags\",\n \"communityTags.sourceLabel\",\n \"communityTags.selectedLabel\",\n \"communityTags.label\",\n \"communityTags.editButton\",\n \"aboutMe.edit\",\n ],\n })\n private handleLabels(labels: {\n communityTags: LabelTranslations;\n aboutMe: LabelTranslations;\n }) {\n this.labels = {\n ...labels.communityTags,\n ...labels.aboutMe,\n };\n }\n\n private handleEditClick() {\n this.isEdit = !this.isEdit;\n }\n\n private async handleSaveRequest(event: CustomEvent) {\n const editModal = this.template.querySelector(\n `[data-id=\"edit-modal\"]`\n ) as any;\n\n const options = {\n variables: { tags: event.detail.value } as updateCommunityTagsVariables,\n mutation: COMMUNITY_TAGS_MUTATION,\n };\n\n const request = () => getClient().mutate(options);\n\n try {\n const { data, errors } = await request();\n if (errors || !data.updateCommunityTags.communityTags) {\n editModal.onSave(\"ERRORS\");\n } else {\n editModal.onSave(\"SUCCESS\");\n this.communityTags = data.updateCommunityTags.communityTags;\n }\n } catch (error) {\n editModal.onSave(\"ERROR\");\n }\n }\n\n private handleViewAll() {\n this.showMoreTags = true;\n }\n\n private handleHide() {\n this.showMoreTags = false;\n }\n\n connectedCallback() {\n const chassisData = chassis();\n const username = chassisData?.profile?.username;\n const isSelf = chassisData?.isSelf || false;\n \n const queryCommunityTags = !!isSelf;\n this.isSelf = isSelf;\n \n this.variables = {\n slug: username,\n hasSlug: !!username,\n queryCommunityTags,\n };\n }\n\n @wire(QueryAdapter, {\n query: COMMUNITY_TAGS_QUERY,\n variables: \"$variables\",\n })\n private handleResult(result: QueryAdapterValue) {\n const { data, loading, error, errors } = result;\n if (loading) {\n this.cardState = \"loading\";\n return;\n }\n \n const profile = data.profile;\n if (!profile) {\n return;\n }\n \n if (\n error ||\n errors ||\n profile.__typename !== \"PublicProfile\" ||\n !profile.communityTags ||\n (this.isSelf && !data.communityTags)\n ) {\n if (\n errors?.some(\n (e) =>\n e.extensions?.statusCode == \"503\" &&\n e.path?.includes(\"communityTags\")\n )\n ) {\n this.disabled = true;\n }\n this.cardState = \"loadFailed\";\n this.firstFetchLoading = false;\n return;\n }\n\n this.communityTags = profile.communityTags ?? [];\n this.options = data.communityTags ?? [];\n this.cardState = \"default\";\n this.firstFetchLoading = false;\n }\n}\n","import { api, LightningElement, wire } from \"lwc\";\nimport {\n LabelTranslations,\n legacyFormat,\n MultiLabelAdapter,\n} from \"tbme/localization\";\nimport { sharedUrls } from \"../../tbme/localState/urls\";\n\nexport default class extends LightningElement {\n @api userId = \"\";\n\n private isClosed = false;\n private isRendered = false;\n\n @wire(MultiLabelAdapter, {\n labels: [\"hireMeBanner\"],\n })\n private labels: LabelTranslations = {};\n\n renderedCallback() {\n if (!this.isRendered) {\n this.markSeen();\n this.isRendered = true;\n }\n }\n\n private close() {\n this.isClosed = true;\n }\n\n private get isVisible() {\n return !(this.isClosed || this.hasBeenSeen());\n }\n\n private get htmlContent() {\n return legacyFormat(this.labels.hireMeBanner, sharedUrls.settings());\n }\n\n private hasBeenSeen() {\n return !!localStorage.getItem(this.getStorageKey());\n }\n\n private markSeen() {\n localStorage.setItem(this.getStorageKey(), \"1\");\n }\n\n private getStorageKey() {\n return `tbme__hire_me_banner_seen_${this.userId}`;\n }\n}\n","import { api, LightningElement } from \"lwc\";\nimport { GetUserCertifications_profile_PublicProfile_credential_messages as Message } from \"../../tbme/certifications/gql/GetUserCertifications\";\nimport { Orientation } from \"../../../gql/types\";\n\nexport default class extends LightningElement {\n @api message: Message | null = null;\n sanitizedHTMLConfig = {\n ALLOWED_TAGS: [\"b\", \"div\", \"span\", \"p\"],\n ALLOWED_ATTR: [\"style\", \"class\"],\n };\n\n get isHorizontal() {\n return this.message?.orientation === Orientation.HORIZONTAL;\n }\n\n get isVertical() {\n return this.message?.orientation === Orientation.VERTICAL;\n }\n\n get hasCta() {\n return this.message?.cta ? true : false;\n }\n\n get htmlBody() {\n return `${this.message!.body}`;\n }\n}\n","import { api, LightningElement, wire } from \"lwc\";\nimport { Certification } from \"tbme/certifications\";\nimport { locale } from \"tbme/localState\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nexport default class extends LightningElement {\n @api certification?: Certification;\n @api isSelf: boolean = false;\n sanitizedHTMLConfig = {\n ALLOWED_TAGS: [\"b\", \"div\", \"span\", \"p\"],\n ALLOWED_ATTR: [\"style\", \"class\"],\n };\n _statusColor = \"\";\n _htmlBody = \"\";\n private labels: LabelTranslations = undefined!;\n\n /** Getter for the inline styling status color */\n get statusColor() {\n return `color:${this.certification?.status.color}`;\n }\n\n /** Getter for the body of the certification to be rendered as html */\n get htmlBody() {\n return `${this.certification?.publicDescription}`;\n }\n\n /** Getter for the formatted status date */\n get statusDate() {\n const date = this.certification!.status.date\n ? new Date(\n this.certification!.status.date.replace(/-/g, \"/\")\n ).toLocaleDateString(locale(), {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n })\n : null;\n return date\n ? t(\"certifications.maintenanceDueDateLabel\", {\n status: this.certification?.status.title,\n dueDate: date,\n })\n : null;\n }\n\n /** Getter for the colored status.\n * Returns the colored status and the maintenance due date\n * Or\n * Returns just the colored status\n */\n get status() {\n if (this.statusDate) {\n return this.statusDate.replace(\n this.certification!.status.title as string,\n `${\n this.certification!.status.title\n }`\n );\n }\n return `${\n this.certification!.status.title\n }`;\n }\n\n /** Returns true if the certification has a download url, is sorting by status, and false otherwise */\n get hasDownloadLogoLink() {\n return !!this.certification?.downloadLogoUrl && this.isSelf;\n }\n\n /** Getter for either the expired label or issued label depending on the status */\n get completedExpiredDate() {\n const dateOptions: Intl.DateTimeFormatOptions = {\n month: \"short\",\n year: \"numeric\",\n };\n if (\n this.certification?.dateExpired &&\n this.certification.status.expired &&\n this.isSelf\n ) {\n const dateExpired = new Date(\n this.certification.dateExpired.replace(/-/g, \"/\")\n ).toLocaleDateString(locale(), dateOptions);\n return dateExpired\n ? t(\"certifications.expiredLabel\", {\n dateExpired: dateExpired,\n })\n : null;\n }\n if (this.certification?.dateExpired) {\n const dateIssued = new Date(\n this.certification!.dateCompleted!.replace(/-/g, \"/\")\n ).toLocaleDateString(locale(), dateOptions);\n const dateExpired = new Date(\n this.certification!.dateExpired!.replace(/-/g, \"/\")\n ).toLocaleDateString(locale(), dateOptions);\n return `${dateIssued} - ${dateExpired}`;\n }\n const dateIssued = new Date(\n this.certification!.dateCompleted.replace(/-/g, \"/\")\n ).toLocaleDateString(locale(), dateOptions);\n return dateIssued\n ? t(\"certifications.issuedLabel\", {\n dateIssued: dateIssued,\n })\n : null;\n }\n\n /** Getter for the user legal name */\n get userLegalName() {\n if (this.certification?.certificationUserLegalName && !this.isSelf) {\n return t(\"certifications.certificationUserLegalName\", {\n userLegalName: this.certification.certificationUserLegalName,\n });\n }\n }\n\n /** Getter for whether or not to show the CTA */\n get showActionButton() {\n return (\n this.certification?.cta?.label &&\n this.certification?.cta?.url &&\n this.isSelf\n );\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\"certifications.downloadLogo\"],\n })\n private handleLabels(labels: { certifications: LabelTranslations }) {\n this.labels = {\n ...labels.certifications,\n };\n }\n}\n","import { api, LightningElement, wire } from \"lwc\";\n\nimport { MultiLabelAdapter, LabelTranslations, t } from \"tbme/localization\";\nimport { Certification } from \"tbme/certifications\";\n\nexport default class extends LightningElement {\n @api product: string = \"\";\n @api logoUrl: string = \"\";\n @api certifications: Certification[] = [];\n @api isSelf: boolean = false;\n\n isExpanded: boolean = false;\n\n @wire(MultiLabelAdapter, {\n labels: [\"certifications.title\"],\n })\n private labels: Record = {};\n\n get subtitle(): string {\n return t(\"certifications.productCount\", {\n count: this.certifications.length,\n });\n }\n\n toggleVisibility(event: CustomEvent): void {\n this.isExpanded = !this.isExpanded;\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const USER_CERTIFICATIONS_QUERY = gql`\n query GetUserCertifications($slug: String, $hasSlug: Boolean!) {\n profile(slug: $slug) @include(if: $hasSlug) {\n __typename\n id\n ... on PublicProfile {\n credential {\n messages {\n __typename\n body\n header\n location\n image\n cta {\n __typename\n label\n url\n }\n orientation\n }\n messagesOnly\n certificationsHistoryUrl\n certificationsPrivacy\n brands {\n __typename\n id\n name\n logo\n }\n certifications {\n cta {\n __typename\n label\n url\n }\n dateCompleted\n dateExpired\n downloadLogoUrl\n logoUrl\n infoUrl\n maintenanceDueDate\n product\n publicDescription\n status {\n __typename\n title\n expired\n date\n color\n order\n }\n title\n certificationUserLegalName\n }\n }\n }\n }\n }\n`;\n","import { LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport { CardState } from \"../../tbui/card/types\";\nimport {\n GetUserCertifications,\n GetUserCertificationsVariables,\n GetUserCertifications_profile_PublicProfile_credential_brands,\n GetUserCertifications_profile_PublicProfile_credential_certifications,\n GetUserCertifications_profile_PublicProfile_credential_messages as Message,\n} from \"./gql/GetUserCertifications\";\nimport { Location } from \"../../../gql/types\";\nimport { showToast } from \"tds/toaster\";\nimport { USER_CERTIFICATIONS_QUERY } from \"./query\";\nimport { chassis } from \"tbme/localState\";\n\nexport type Certification = Omit<\n GetUserCertifications_profile_PublicProfile_credential_certifications,\n \"__typename\"\n> & { key: string | null };\n\nexport type Brand = Omit<\n GetUserCertifications_profile_PublicProfile_credential_brands,\n \"__typename\"\n>;\n\nexport const MINIMUM_CERTIFICATIONS_THRESHOLD = 3;\n\ntype SortOption = \"recent\" | \"product\" | \"status\";\n\nexport const SortType: Record = {\n recent: \"recent\",\n product: \"product\",\n status: \"status\",\n};\n\ninterface CertificationSortOption {\n label: string;\n value: SortOption;\n}\n\ntype CertificationGroup = {\n product: string;\n logoUrl: string;\n certifications: Certification[];\n};\n\nexport default class extends LightningElement {\n private isSelf: boolean = false;\n private labels: LabelTranslations = undefined!;\n private firstFetchLoading: boolean = true;\n private cardState: CardState = \"default\";\n private brands: Brand[] = Array();\n private certifications: Certification[] | null = Array();\n private messagesOnly: boolean = false;\n private certificationsHistoryUrl?: string | null;\n private certificationsPrivacy?: string | null;\n private topMessages: Message[] | null = Array();\n private bottomMessages: Message[] | null = Array();\n private searchText: string | null = null;\n private showMoreCertifications: boolean = false;\n private defaultOption: SortOption = SortType.product;\n private selectedSortOption: SortOption = SortType.product;\n\n private variables: GetUserCertificationsVariables = {\n hasSlug: false,\n };\n\n connectedCallback() {\n const chassisData = chassis();\n const username = chassisData?.profile?.username;\n this.isSelf = chassisData?.isSelf || false;\n\n this.variables = {\n hasSlug: !!username,\n slug: username,\n };\n }\n\n renderedCallback() {\n this.focusNewCertification();\n }\n\n focusNewCertification() {\n if (this.showMoreCertifications) {\n const certification = this.sortedCertifications?.[\n MINIMUM_CERTIFICATIONS_THRESHOLD\n ];\n\n if (certification) {\n const certItems = this.template.querySelectorAll(\n \"lwc-tbui-certification-item\"\n );\n const certItemToFocus = certItems[MINIMUM_CERTIFICATIONS_THRESHOLD];\n const link = certItemToFocus?.shadowRoot?.querySelector(\n `a[href='${certification.infoUrl}']`\n ) as HTMLAnchorElement;\n if (link) {\n requestAnimationFrame(() => {\n link.focus();\n });\n }\n }\n }\n }\n\n /** Formats the results label */\n get searchResultLabel() {\n return t(\"certifications.searchResultLabel\", {\n resultsCount: this.filteredCertifications?.length,\n searchTerm: this.searchText,\n });\n }\n\n /** Boolean method for whether or not the user is searching */\n get isSearching() {\n return !!this.searchText;\n }\n\n /** Determines the title of the component */\n get cardTitle() {\n return this.certifications &&\n this.certifications.length > 1 &&\n !this.messagesOnly\n ? `${this.certifications.length} ${this.labels.title}`\n : this.labels.title;\n }\n\n /** Shows or hides the card actions (ie. Search and Sort) */\n get showActions() {\n return !this.messagesOnly && this.certifications?.length !== 0;\n }\n\n /** Shows or hides the certifications history url */\n get showCertificationsHistoryUrl() {\n return (\n !this.messagesOnly &&\n this.certificationsHistoryUrl &&\n this.isSelf &&\n this.certifications?.length !== 0\n );\n }\n\n get filteredCertifications(): Certification[] {\n if (this.searchText === null || this.certifications === null) {\n return [];\n }\n\n return this.certifications!.filter((cert) => {\n const title = cert.title.toLowerCase();\n\n return title.includes(this.searchText!.toLowerCase());\n });\n }\n\n get showGroupedCertifications(): boolean {\n return this.selectedSortOption === SortType.product;\n }\n\n get groupedCertifications(): CertificationGroup[] {\n if (this.certifications === null) {\n return [];\n }\n\n const groups = this.certifications!.reduce((record, certification) => {\n if (record[certification.product]) {\n record[certification.product].push(certification);\n } else {\n record[certification.product] = [certification];\n }\n\n return record;\n }, {} as Record);\n\n return Object.keys(groups)\n .sort((left, right) => left.localeCompare(right))\n .map((key) => {\n const brand = this.brands.find(\n (brand) => brand.name.toLocaleLowerCase() === key.toLocaleLowerCase()\n );\n\n return {\n product: brand?.name,\n logoUrl: brand?.logo,\n certifications: this.sortAlphabetically(groups[key]),\n } as CertificationGroup;\n });\n }\n\n get sortedCertifications(): Certification[] | null {\n if (this.selectedSortOption === SortType.status && this.isSelf) {\n return this.sortByStatus(this.certifications);\n }\n\n return this.sortByMostRecent(this.certifications);\n }\n\n get isVisible(): boolean {\n return !(\n !this.isSelf &&\n (this.certifications?.length === 0 || this.messagesOnly || this.certificationsPrivacy === \"PRIVATE\") \n );\n }\n\n private sortByMostRecent(\n certifications: Certification[] | null\n ): Certification[] | null {\n if (certifications === null) {\n return certifications;\n }\n\n return [...certifications].sort((left, right) => {\n const [leftCompletionDate, rightCompletionDate] = [left, right].map(\n (certification) => new Date(certification.dateCompleted)\n );\n\n if (leftCompletionDate < rightCompletionDate) {\n return 1;\n }\n\n if (leftCompletionDate > rightCompletionDate) {\n return -1;\n }\n\n return 0;\n });\n }\n\n private sortAlphabetically(\n certifications: Certification[] | null\n ): Certification[] | null {\n if (certifications === null) {\n return certifications;\n }\n\n return [...certifications].sort((left, right) => {\n return left.title.localeCompare(right.title);\n });\n }\n\n private sortByStatus(\n certifications: Certification[] | null\n ): Certification[] | null {\n if (certifications === null) {\n return certifications;\n }\n\n return [...certifications].sort(\n (a, b) =>\n a.status.order! - b.status.order! || a.product.localeCompare(b.product)\n );\n }\n\n /** The certifications that the user sees */\n get visibleCertifications() {\n if (this.isSearching) {\n return this.filteredCertifications;\n }\n\n if (!this.showFooter) {\n return this.sortedCertifications;\n }\n return this.showMoreCertifications\n ? this.sortedCertifications\n : this.sortedCertifications?.slice(0, MINIMUM_CERTIFICATIONS_THRESHOLD);\n }\n\n /** The collection of sort options */\n get sortOptions(): CertificationSortOption[] {\n return [\n ...(this.isSelf\n ? [\n {\n label: this.labels.sortByStatus,\n value: SortType.status,\n },\n ]\n : []),\n {\n label: this.labels.sortByProduct,\n value: SortType.product,\n },\n {\n label: this.labels.sortByMostRecent,\n value: SortType.recent,\n },\n ];\n }\n\n get showFooter(): boolean {\n return !this.messagesOnly &&\n !this.isSearching &&\n !this.showGroupedCertifications &&\n this.certifications &&\n this.certifications.length > MINIMUM_CERTIFICATIONS_THRESHOLD\n ? true\n : false;\n }\n\n get footerTitle(): string {\n return this.showMoreCertifications\n ? this.labels[\"showLess\"]\n : this.labels[\"showMore\"];\n }\n\n handleFooterClick(): void {\n this.showMoreCertifications = !this.showMoreCertifications;\n }\n\n /** Handles the search event */\n handleSearchEvent(event: CustomEvent) {\n this.searchText = event.detail.value;\n this.resetSelectedSortOption();\n }\n\n /** Resets the filter selector back to its default value */\n private resetSelectedSortOption(): void {\n this.selectedSortOption = this.isSearching\n ? SortType.recent\n : this.defaultOption;\n }\n\n /** Handles the tds-select component value change */\n handleSortChange(event: CustomEvent) {\n this.resetSearch();\n this.selectedSortOption = event.detail as SortOption;\n }\n\n /** Resets the search component */\n private resetSearch() {\n this.searchText = null;\n const element = this.template.querySelector(`[data-id=\"cert-search\"]`);\n const searchInput = element?.shadowRoot?.querySelector(\n \".search-input__input\"\n ) as HTMLInputElement;\n if (searchInput) searchInput.value = \"\";\n }\n\n @wire(QueryAdapter, {\n query: USER_CERTIFICATIONS_QUERY,\n variables: \"$variables\",\n })\n private handleResult(result: QueryAdapterValue) {\n const { data, loading, error, errors } = result;\n if (loading) {\n this.cardState = \"loading\";\n return;\n }\n\n let profile = data.profile;\n if (!profile) {\n return;\n }\n\n if (error || errors || profile.__typename !== \"PublicProfile\") {\n this.cardState = \"loadFailed\";\n this.firstFetchLoading = false;\n return;\n }\n this.brands = profile.credential?.brands ?? [];\n this.defaultOption = this.isSelf\n ? SortType.status\n : this.brands.length > 1\n ? SortType.product\n : SortType.recent;\n this.selectedSortOption = this.defaultOption;\n this.messagesOnly = profile.credential?.messagesOnly ?? false;\n this.certificationsHistoryUrl =\n profile.credential?.certificationsHistoryUrl;\n this.certificationsPrivacy =\n profile.credential?.certificationsPrivacy?.toUpperCase();\n\n this.certifications = this.formatCertifications(\n profile.credential?.certifications ?? []\n );\n\n this.bottomMessages = [];\n this.topMessages = [];\n profile.credential?.messages?.forEach((item) => {\n switch (item.location) {\n case Location.BOTTOM:\n this.bottomMessages?.push(item);\n break;\n case Location.TOP:\n this.topMessages?.push(item);\n break;\n case Location.TOAST:\n showToast({ message: item.body, variant: \"error\" });\n break;\n }\n });\n this.cardState = \"default\";\n this.firstFetchLoading = false;\n }\n\n /** Formats the certifications to be displayed */\n private formatCertifications(\n edges: GetUserCertifications_profile_PublicProfile_credential_certifications[]\n ): Certification[] {\n if (!edges) return [];\n return edges.map((item, index) => {\n return {\n ...item,\n key: `${index} ${item!.title}`,\n status: {\n ...item!.status,\n title: item!.status!.title!.replace(\"_\", \" \"),\n },\n } as Certification;\n });\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"certifications.certificationsHistoryLink\",\n \"certifications.title\",\n \"certifications.searchPlaceholder\",\n \"certifications.sortByProduct\",\n \"certifications.sortByStatus\",\n \"certifications.sortByMostRecent\",\n \"certifications.searchResultLabel\",\n \"certifications.sortAssistiveText\",\n \"certifications.showMore\",\n \"certifications.showLess\",\n ],\n })\n private handleLabels(labels: { certifications: LabelTranslations }) {\n this.labels = {\n ...labels.certifications,\n };\n }\n}\n","import { api, LightningElement, wire } from \"lwc\";\nimport { MultiLabelAdapter, LabelTranslations } from \"tbme/localization\";\n\nexport default class extends LightningElement {\n @api isSelf: boolean = false;\n @api label: string | null = null;\n @api value: string | null = null;\n\n private labels: LabelTranslations = undefined!;\n\n get isVisible() {\n return this.isSelf || this.value;\n }\n\n get showAddButton() {\n return !this.value && this.isSelf;\n }\n\n addDetail() {\n this.dispatchEvent(new CustomEvent(\"add\"));\n }\n\n @wire(MultiLabelAdapter, { labels: [\"userDetails.add\"] })\n private handleLabels(labels: { userDetails: LabelTranslations }) {\n this.labels = { ...labels.userDetails };\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const USER_DETAILS_QUERY = gql`\n query GetUserDetails {\n chassis @client {\n profile {\n pronoun\n role\n relationshipToSalesforce\n company {\n name\n size\n website\n }\n address {\n country\n state\n }\n }\n isSelf\n }\n }\n`;\n","import { LightningElement, wire } from \"lwc\";\n\nimport {\n LabelTranslations,\n MultiLabelAdapter,\n t,\n TRANSLATION_MISSING_MESSAGE,\n} from \"tbme/localization\";\nimport { CardState } from \"elements/tbui/card/types\";\n\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport { USER_DETAILS_QUERY } from \"./query\";\nimport {\n GetUserDetails,\n GetUserDetails_chassis_profile,\n} from \"./gql/GetUserDetails\";\nimport { verifyCountry, verifyState } from \"@sfdc-www/digital-i18n\";\n\nexport type UserDetails = Omit;\n\nexport default class extends LightningElement {\n private isSelf: boolean = false;\n private user: UserDetails = undefined!;\n\n private cardState: CardState = \"loading\";\n private displayProfileEditModal: boolean = false;\n\n private labels: LabelTranslations = undefined!;\n\n handleEditDetails() {\n this.displayProfileEditModal = true;\n }\n\n handleProfileEditRequestClose() {\n this.displayProfileEditModal = false;\n }\n\n get displayField(): {\n pronoun: boolean;\n companyName: boolean;\n companyWebsite: boolean;\n state: boolean;\n role: boolean;\n companySize: boolean;\n country: boolean;\n relationshipToSalesforce: boolean;\n } {\n return {\n pronoun: !!(this.isSelf || this.pronoun),\n companyName: !!(this.isSelf || this.user.company?.name),\n companyWebsite: !!(this.isSelf || this.user.company?.website),\n state: !!(this.isSelf || this.state),\n role: !!(this.isSelf || this.role),\n companySize: !!(this.isSelf || this.companySize),\n country: !!(this.isSelf || this.country),\n relationshipToSalesforce: !!(\n this.isSelf || this.relationshipToSalesforce\n ),\n };\n }\n\n get role() {\n switch (this.user.role) {\n case \"Developer\":\n return t(\"profileEditModal.roleOptions.developer\");\n case \"Administrator\":\n return t(\"profileEditModal.roleOptions.administrator\");\n case \"Architect\":\n return t(\"profileEditModal.roleOptions.architect\");\n case \"Sales Representative / Manager\":\n return t(\"profileEditModal.roleOptions.salesRep\");\n case \"Marketer\":\n return t(\"profileEditModal.roleOptions.marketer\");\n case \"Service Agent / Supervisor\":\n return t(\"profileEditModal.roleOptions.supervisor\");\n case \"Data Analyst\":\n return t(\"profileEditModal.roleOptions.dataAnalyst\");\n case \"Consultant\":\n return t(\"profileEditModal.roleOptions.consultant\");\n case \"Business Operations Manager\":\n return t(\"profileEditModal.roleOptions.businessOperationsManager\");\n case \"Designer\":\n return t(\"profileEditModal.roleOptions.designer\");\n case \"Educator\":\n return t(\"profileEditModal.roleOptions.educator\");\n case \"Student\":\n return t(\"profileEditModal.roleOptions.student\");\n case \"Executive\":\n return t(\"profileEditModal.roleOptions.executive\");\n case \"Product Manager\":\n return t(\"profileEditModal.roleOptions.productManager\");\n default:\n return \"\";\n }\n }\n\n get pronoun() {\n switch (this.user.pronoun) {\n case \"he/him/his\":\n return t(\"profileEditModal.pronounOptions.heHimHis\");\n case \"other/ask me\":\n return t(\"profileEditModal.pronounOptions.otherAskMe\");\n case \"she/her/hers\":\n return t(\"profileEditModal.pronounOptions.sheHerHers\");\n case \"they/them/theirs\":\n return t(\"profileEditModal.pronounOptions.theyThemTheirs\");\n default:\n return \"\";\n }\n }\n\n get state() {\n const countryCode = this.user?.address?.country;\n const stateCode = this.user?.address?.state;\n\n return countryCode && stateCode ? verifyState(countryCode, stateCode) : \"\";\n }\n\n get country() {\n const countryCode = this.user?.address?.country;\n return countryCode ? verifyCountry(countryCode) : \"\";\n }\n\n get relationshipToSalesforce() {\n switch (this.user.relationshipToSalesforce) {\n case \"Customer\":\n return t(\"profileEditModal.relationshipOptions.customer\");\n case \"Partner\":\n return t(\"profileEditModal.relationshipOptions.partner\");\n case \"Non-Customer / Prospect\":\n return t(\"profileEditModal.relationshipOptions.nonCustomerProspect\");\n case \"Salesforce Employee\":\n return t(\"profileEditModal.relationshipOptions.salesforceEmployee\");\n default:\n return \"\";\n }\n }\n\n get companyName() {\n return this.user?.company?.name || \"\";\n }\n\n get companySize() {\n switch (this.user?.company?.size?.toLowerCase()) {\n case \"1-20 employees\":\n return t(\"profileEditModal.companySizeOptions.oneToTwenty\");\n case \"21-100 employees\":\n return t(\"profileEditModal.companySizeOptions.twentyOneToOneHundred\");\n case \"101-500 employees\":\n return t(\"profileEditModal.companySizeOptions.oneHundredToFiveHundred\");\n case \"501-3500 employees\":\n return t(\n \"profileEditModal.companySizeOptions.fiveHundredToThreeThousand\"\n );\n case \"3500+ employees\":\n case \"3501+ employees\":\n return t(\"profileEditModal.companySizeOptions.threeThousandPlus\");\n default:\n return \"\";\n }\n }\n\n get companyWebsite() {\n return this.user?.company?.website || \"\";\n }\n\n @wire(QueryAdapter, { query: USER_DETAILS_QUERY })\n private handleResult(result: QueryAdapterValue) {\n const { data, loading, error, errors } = result;\n\n if (loading && !data?.chassis?.profile) {\n this.cardState = \"loading\";\n return;\n }\n\n if (error || errors) {\n this.cardState = \"loadFailed\";\n return;\n }\n\n if (!data?.chassis?.profile) {\n return;\n }\n\n this.cardState = \"default\";\n this.isSelf = data.chassis.isSelf;\n this.user = { ...data.chassis.profile } as UserDetails;\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"userDetails.edit\",\n \"userDetails.title\",\n \"userDetails.subtitle\",\n \"userDetails.fieldRole\",\n \"profileEditModal.fieldPronoun\",\n \"profileEditModal.fieldCompanyName\",\n \"profileEditModal.fieldCompanySize\",\n \"profileEditModal.fieldCompanyWebsite\",\n \"profileEditModal.fieldCountryCode\",\n \"profileEditModal.fieldStateCode\",\n \"profileEditModal.fieldRelationshipToSalesforce\",\n ],\n })\n private handleLabels({\n userDetails,\n profileEditModal,\n }: {\n userDetails: LabelTranslations;\n profileEditModal: LabelTranslations;\n }) {\n this.labels = {\n ...profileEditModal,\n ...userDetails,\n };\n }\n}\n","import { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter } from \"tbme/localization\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { fetchCommunityProfile } from \"../communityData/communityData\";\nimport { getError, getIsLoading, getUserId } from \"../communityData/queryUtils\";\nimport {\n GetFilesContext,\n GetFilesContext_profileUser_PublicProfile,\n} from \"./gql/GetFilesContext\";\n\nexport const FILES_QUERY = gql`\n query GetFilesContext {\n profileUser @client {\n __typename\n ... on PublicProfile {\n __typename\n communityUser {\n __typename\n ... on CommunityAsyncResponse {\n isLoading\n error\n }\n ... on CommunityUser {\n id\n }\n }\n }\n }\n\n siteInfo @client {\n urls {\n tbcUserFiles\n }\n }\n }\n`;\n\nexport default class extends LightningElement {\n private visible: boolean = false;\n private filesUrl: string = \"\";\n\n @wire(MultiLabelAdapter, {\n labels: [\"filesTitle\", \"viewFilesButton\"],\n })\n private labels: LabelTranslations = undefined!;\n\n connectedCallback() {\n fetchCommunityProfile();\n }\n\n @wire(QueryAdapter, {\n query: FILES_QUERY,\n })\n private handleChange({ data }: ApolloQueryResult) {\n if (!data) {\n return;\n }\n\n if (data.profileUser && data.profileUser.__typename === \"PrivateProfile\") {\n return;\n }\n\n const profileUser = data.profileUser as GetFilesContext_profileUser_PublicProfile;\n const { communityUser } = profileUser;\n\n if (getIsLoading(communityUser) || getError(communityUser)) {\n this.visible = false;\n return;\n }\n\n this.visible = !!getUserId(communityUser);\n this.filesUrl = data.siteInfo.urls.tbcUserFiles;\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const USER_CONTEXT_QUERY = gql`\n query GetQAndAUserContext {\n chassis @client {\n profile {\n isPublicProfile\n username\n }\n isSelf\n }\n }\n`;\n\nexport const Q_AND_A_QUERY = gql`\n query GetQuestionsAndAnswersStats(\n $userSlug: ID!\n $queryQuestionsAndAnswers: Boolean!\n ) {\n profileData(userSlug: $userSlug) @include(if: $queryQuestionsAndAnswers) {\n communityUserId\n questionAndAnswersStats {\n answersCount\n bestAnswersCount\n communityUserRank\n questionsCount\n }\n communityUserUrls {\n answersUrl\n bestAnswersUrl\n feedUrl\n questionsUrl\n }\n }\n }\n`;\n","import { ApolloQueryResult } from \"@apollo/client\";\nimport { LightningElement, track, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { QueryAdapter, QueryAdapterValue } from \"tbme/queryAdapter\";\nimport { QueryAdapter as TBCQueryAdapter } from \"tbtbc/queryAdapter\";\nimport trophyIcon from \"./assets/trophy.svg\";\nimport { CardState } from \"../../tbui/card/types\";\nimport { Q_AND_A_QUERY, USER_CONTEXT_QUERY } from \"./query\";\n\nimport {\n GetQuestionsAndAnswersStats,\n GetQuestionsAndAnswersStats_profileData_communityUserUrls,\n GetQuestionsAndAnswersStats_profileData_questionAndAnswersStats,\n GetQuestionsAndAnswersStatsVariables,\n} from \"./gql/GetQuestionsAndAnswersStats\";\nimport { GetQAndAUserContext } from \"./gql/GetQAndAUserContext\";\nimport { isAcceptedAnswersLabelEnabled } from \"../../../shared/feature\";\n\nexport default class extends LightningElement {\n @track\n private variables: GetQuestionsAndAnswersStatsVariables = {\n userSlug: \"\",\n queryQuestionsAndAnswers: false,\n };\n\n private visible: boolean = false;\n private footerUrl: string = \"\";\n private isSelf: boolean = false;\n private isPublicProfile: boolean = false;\n private noActivity: boolean = false;\n private labels: LabelTranslations = undefined!;\n private cardState: CardState = \"default\";\n\n private get showNoActivity() {\n return !this.visible && this.noActivity && this.cardState === \"default\";\n }\n\n private get assets() {\n return {\n trophy: trophyIcon,\n };\n }\n private stats: GetQuestionsAndAnswersStats_profileData_questionAndAnswersStats | null = null;\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"questionsAndAnswers.title\",\n \"questionsAndAnswers.goToCommunityFeed\",\n ],\n })\n private handleLabels(labels: { questionsAndAnswers: LabelTranslations }) {\n this.labels = {\n ...labels.questionsAndAnswers,\n };\n }\n\n private get answersLabel() {\n return t(\"questionsAndAnswers.answers\", {\n count: this.stats ? this.stats.answersCount : 0,\n });\n }\n\n private get bestAnswersLabel() {\n let labelName = \"questionsAndAnswers.bestAnswers\";\n if (isAcceptedAnswersLabelEnabled()) {\n labelName = \"questionsAndAnswers.acceptedAnswers\";\n }\n return t(labelName, {\n count: this.stats ? this.stats.bestAnswersCount : 0,\n });\n }\n\n private get questionsLabel() {\n return t(\"questionsAndAnswers.questions\", {\n count: this.stats ? this.stats.questionsCount : 0,\n });\n }\n\n private get rankLabel() {\n return t(\"questionsAndAnswers.rank\", {\n rank: (this.stats && this.stats.communityUserRank) || \"\",\n });\n }\n\n private get answersLink() {\n return this.stats && this.stats.answersCount && this.urls?.answersUrl;\n }\n\n private get bestAnswersLink() {\n return (\n this.stats && this.stats.bestAnswersCount && this.urls?.bestAnswersUrl\n );\n }\n\n private get questionsLink() {\n return this.stats && this.stats.questionsCount && this.urls?.questionsUrl;\n }\n\n private get activityCount() {\n if (!this.stats) return 0;\n\n return [\n this.stats.questionsCount,\n this.stats.answersCount,\n this.stats.bestAnswersCount,\n ].reduce((acc, value) => {\n if (value === null) return acc;\n\n return acc + value;\n }, 0);\n }\n\n private get communityFeedLink() {\n return this.urls?.feedUrl;\n }\n\n private urls: GetQuestionsAndAnswersStats_profileData_communityUserUrls | null = null;\n\n @wire(QueryAdapter, { query: USER_CONTEXT_QUERY })\n handleResult({ data, error }: QueryAdapterValue) {\n if (!data) {\n return;\n }\n\n if (data.chassis && data.chassis.profile && data.chassis.profile.username) {\n this.isSelf = data.chassis.isSelf;\n this.isPublicProfile = data.chassis.profile.isPublicProfile;\n this.variables.userSlug = data.chassis.profile.username;\n this.variables.queryQuestionsAndAnswers = true;\n }\n }\n\n @wire(TBCQueryAdapter, {\n query: Q_AND_A_QUERY,\n variables: \"$variables\",\n })\n handleResultTbc({\n data,\n error,\n errors,\n }: ApolloQueryResult) {\n const hasErrors = !!error || !!errors;\n if (this.isSelf && hasErrors) {\n this.cardState = \"loadFailed\";\n this.visible = true;\n this.noActivity = false;\n return;\n } else if (hasErrors) {\n this.visible = false;\n this.noActivity = false;\n return;\n }\n\n if (\n !data ||\n (!this.isPublicProfile && !this.isSelf) ||\n !this.variables.queryQuestionsAndAnswers\n ) {\n return;\n }\n this.urls = data?.profileData?.communityUserUrls;\n\n const profileData = data.profileData;\n if (!profileData) {\n return;\n }\n\n if (!this.isSelf && !profileData.communityUserId) {\n this.noActivity = true;\n this.visible = false;\n return;\n }\n\n if (profileData.questionAndAnswersStats) {\n this.stats = profileData.questionAndAnswersStats;\n } else if (this.isSelf && !profileData.questionAndAnswersStats) {\n this.stats = {\n questionsCount: 0,\n answersCount: 0,\n bestAnswersCount: 0,\n communityUserRank: null,\n } as GetQuestionsAndAnswersStats_profileData_questionAndAnswersStats;\n }\n\n this.cardState = \"default\";\n this.visible = !!this.stats;\n }\n}\n","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2022%2022%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20transform%3D%22translate%28-49%20-181%29%22%20d%3D%22m70.267%20182.46h-3.6667v-0.72998c0-0.40149-0.33-0.72998-0.73333-0.72998h-11.733c-0.40333%200-0.73333%200.32849-0.73333%200.72998v0.72998h-3.6667c-0.40333%200-0.73333%200.32849-0.73333%200.72998v4.7449c0%201.825%201.4667%203.2849%203.3%203.2849h1.6867c1.0267%202.336%203.2633%203.9784%205.9767%204.0149%202.7867%200.0365%205.1333-1.6425%206.1233-4.0149h1.6133c1.8333%200%203.3-1.46%203.3-3.2849v-4.7449c0-0.40149-0.33-0.72998-0.73333-0.72998zm-17.724%206.9518c-0.54098%200-0.95468-0.49069-0.95468-1.1324v-3.3971h1.9094v4.001c0%200.18873%200%200.33971%200.031823%200.52843zm15.869-1.1324c0%200.64167-0.41369%201.1324-0.95468%201.1324h-0.9865c0-0.15098%200.031823-0.33971%200.031823-0.49069v-4.0387h1.9094zm-4.6373%2012.391h-0.37745c-1.2456%200-2.2647-1.0482-2.2647-2.3294v-0.77647c0-0.23294-0.15098-0.38824-0.37745-0.38824h-1.5098c-0.22647%200-0.37745%200.15529-0.37745%200.38824v0.77647c0%201.2812-1.0191%202.3294-2.2647%202.3294h-0.37745c-0.4152%200-0.7549%200.34941-0.7549%200.77647v0.77647c0%200.42706%200.33971%200.77647%200.7549%200.77647h7.549c0.4152%200%200.7549-0.34941%200.7549-0.77647v-0.77647c0-0.42706-0.33971-0.77647-0.7549-0.77647z%22%20fill%3D%22%23ec8c25%22%2F%3E%3C%2Fsvg%3E\"","import { LightningElement, api } from \"lwc\";\nimport { ApolloClient, DataProxy, NormalizedCacheObject } from \"@apollo/client\";\nimport { createMockClient } from \"../mockProvider/mockClient\";\nimport { MockedResponse } from \"@apollo/client/testing\";\nimport { memoizeOnce } from \"../../../shared/memoize\";\n\nexport interface MockConfig {\n mocks: MockedResponse[];\n writeQueries: DataProxy.WriteQueryOptions[];\n writeFragments: DataProxy.WriteFragmentOptions[];\n}\n\nexport default class extends LightningElement {\n private mockClient: ApolloClient = undefined!;\n private pending?: Promise | null;\n private config: MockConfig = {\n mocks: [],\n writeQueries: [],\n writeFragments: [],\n };\n\n /**\n * Providing the getter allows for the `client` to be retrieved from the property on the element. The setter should\n * never be used.\n */\n @api get client(): ApolloClient {\n return this.mockClient;\n }\n /**\n * This setter is provided because it is required by lwc, however, it should never be used as the client will be\n * re-created when the config properties change. Providing the getter allows for the `client` to be retrieved from\n * the property on the element.\n */\n set client(value) {\n return;\n }\n\n @api\n get mocks() {\n return this.config.mocks;\n }\n set mocks(value) {\n this.config.mocks = value;\n\n this.updateClient();\n }\n\n @api\n get writeQueries() {\n return this.config.writeQueries;\n }\n set writeQueries(value) {\n this.config.writeQueries = value;\n\n this.updateClient();\n }\n\n @api\n get writeFragments() {\n return this.config.writeFragments;\n }\n set writeFragments(value) {\n this.config.writeFragments = value;\n\n this.updateClient();\n }\n\n private updateClient() {\n const { mocks, writeQueries, writeFragments } = this;\n this.memoizedUpdate({ mocks, writeQueries, writeFragments });\n }\n\n private memoizedUpdate = memoizeOnce(\n ({ mocks, writeQueries, writeFragments }: MockConfig) => {\n this.mockClient = createMockClient(mocks);\n\n writeQueries.forEach((options) => {\n this.client.writeQuery(options);\n });\n\n writeFragments.forEach((options) => {\n this.client.writeFragment(options);\n });\n }\n );\n\n connectedCallback() {\n this.updateClient();\n }\n}\n","import { gql } from \"@apollo/client\";\n\nexport const PROFILE_METADATA_QUERY = gql`\n query GetChassisProfileMetadata {\n chassis @client {\n profile {\n isPublicProfile\n firstName\n lastName\n bio\n title\n role\n company {\n name\n }\n username\n }\n }\n\n siteInfo @client {\n urls {\n profile\n }\n }\n }\n`;\n","import { LightningElement, wire } from \"lwc\";\nimport { ApolloQueryResult, gql } from \"@apollo/client\";\nimport { QueryAdapter } from \"tbme/queryAdapter\";\nimport { GetChassisProfileMetadata } from \"./gql/GetChassisProfileMetadata\";\nimport { t } from \"tbme/localization\";\nimport { PROFILE_METADATA_QUERY } from \"./query\";\nimport { getFullName } from \"../profilePage/contexts/chassis\";\n\nexport default class extends LightningElement {\n documentTitle?: string;\n documentDescription?: string;\n\n @wire(QueryAdapter, {\n query: PROFILE_METADATA_QUERY,\n })\n private handleResult({ data }: ApolloQueryResult) {\n this.setTitle(data);\n this.setDescription(data);\n this.setCanonicalLink(data);\n this.setRobotsTag(data);\n }\n\n private setTitle(data: GetChassisProfileMetadata) {\n const defaultTitle = t(\"profileMetadata.defaultPageTitle\");\n\n if (!data || JSON.stringify(data) === \"{}\") {\n if (!this.documentTitle) {\n document.title = defaultTitle;\n this.documentTitle = defaultTitle;\n }\n return;\n }\n\n const { chassis } = data;\n if (!chassis?.profile) {\n if (!this.documentTitle) {\n document.title = defaultTitle;\n this.documentTitle = defaultTitle;\n }\n return;\n }\n const { profile } = chassis;\n const fullName = getFullName(profile);\n\n if (!profile.isPublicProfile) {\n document.title = t(\"profileMetadata.pageTitle\", {\n fullName,\n });\n return;\n }\n\n if (profile.title && profile.company?.name) {\n document.title = t(\"profileMetadata.pageTitleWithTitleAndCompany\", {\n fullName,\n title: profile.title,\n company: profile.company.name,\n });\n } else if (profile.title) {\n document.title = t(\"profileMetadata.pageTitleWithTitle\", {\n fullName,\n title: profile.title,\n });\n } else if (profile.company?.name) {\n document.title = t(\"profileMetadata.pageTitleWithCompany\", {\n fullName,\n company: profile.company.name,\n });\n } else {\n document.title = t(\"profileMetadata.pageTitle\", {\n fullName,\n });\n }\n }\n\n private setDescription(data: GetChassisProfileMetadata) {\n const defaultDescription = t(\"profileMetadata.defaultPageDescription\");\n\n // Guard against the description meta tag not being present in the page.\n let descriptionMetaElement = document.querySelector(\n 'meta[name=\"description\"]'\n ) as HTMLMetaElement;\n if (!descriptionMetaElement) {\n descriptionMetaElement = document.createElement(\"meta\");\n descriptionMetaElement.setAttribute(\"name\", \"description\");\n descriptionMetaElement.content = defaultDescription;\n document\n .getElementsByTagName(\"head\")[0]\n .appendChild(descriptionMetaElement);\n }\n\n if (!data || JSON.stringify(data) === \"{}\") {\n if (!this.documentDescription) {\n descriptionMetaElement.setAttribute(\"content\", defaultDescription);\n this.documentDescription = defaultDescription;\n }\n return;\n }\n\n let description = defaultDescription;\n const { chassis } = data;\n if (!chassis?.profile) {\n if (!this.documentDescription) {\n descriptionMetaElement.setAttribute(\"content\", defaultDescription);\n this.documentDescription = defaultDescription;\n }\n return;\n }\n const { profile } = chassis;\n\n if (profile.isPublicProfile) {\n if (profile.bio) {\n const maxBioLength = 160;\n description =\n profile.bio.length > maxBioLength\n ? profile.bio.slice(0, maxBioLength)\n : profile.bio;\n } else {\n description = profile.title\n ? t(\"profileMetadata.titleAtCompany\", {\n title: profile.title,\n company: profile.company?.name,\n })\n : t(\"profileMetadata.trailblazerAtCompany\", {\n company: profile.company?.name,\n });\n }\n }\n\n descriptionMetaElement.setAttribute(\"content\", description);\n }\n\n private setCanonicalLink(data: GetChassisProfileMetadata) {\n if (!data) {\n return;\n }\n\n const { chassis, siteInfo } = data;\n if (!chassis?.profile) {\n return;\n }\n const { profile } = chassis;\n\n if (profile.isPublicProfile) {\n if (profile.username) {\n // Guard against the canonical link not being present in the page.\n let canonicalLinkElement = document.querySelector(\n 'link[rel=\"canonical\"]'\n ) as HTMLLinkElement;\n if (!canonicalLinkElement) {\n canonicalLinkElement = document.createElement(\"link\");\n canonicalLinkElement.setAttribute(\"rel\", \"canonical\");\n document\n .getElementsByTagName(\"head\")[0]\n .appendChild(canonicalLinkElement);\n }\n\n canonicalLinkElement.setAttribute(\n \"href\",\n `${siteInfo.urls.profile.substring(\n 0,\n siteInfo.urls.profile.lastIndexOf(\"/\")\n )}/${profile.username}`\n );\n }\n }\n }\n\n private setRobotsTag(data: GetChassisProfileMetadata) {\n if (!data) {\n return;\n }\n const { chassis } = data;\n if (!chassis?.profile) {\n return;\n }\n const { profile } = chassis;\n if (!profile.isPublicProfile) {\n let robotsMetaElement = document.querySelector(\n 'meta[name=\"robots\"]'\n ) as HTMLMetaElement;\n if (!robotsMetaElement) {\n robotsMetaElement = document.createElement(\"meta\");\n robotsMetaElement.setAttribute(\"name\", \"robots\");\n robotsMetaElement.content = \"noindex\";\n document.getElementsByTagName(\"head\")[0].appendChild(robotsMetaElement);\n } else {\n robotsMetaElement.setAttribute(\"content\", \"noindex\");\n }\n }\n }\n}\n","import { WireAdapter } from \"lwc\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getIISImport = (): Promise => {\n try {\n // @ts-ignore\n return import(\"https://a.sfdcstatic.com/digital/iis/v1-latest/iis.js\");\n } catch {\n console.info(\n `Unable to find IIS at https://a.sfdcstatic.com/digital/iis/v1-latest/iis.js, falling back to https://www.salesforce.com/c/public/redirect/auth.js instead`\n );\n try {\n return import(\n // @ts-ignore\n \"https://www.salesforce.com/c/public/redirect/auth.js\"\n );\n } catch {\n throw new Error(\"Authentication disabled\");\n }\n }\n};\n\nexport type WireDataCallback = (value: any) => void;\nexport type WireConfigValue = Record;\n\nexport type IISResponse = {\n isAuthenticated: boolean;\n accessToken: string;\n firstName: string;\n lastName: string;\n profileImageUrl: string;\n authHref: string;\n logoutHref: string;\n profileHref: string;\n settingsHref: string;\n iisError: string;\n};\n\nexport class getIISModule\n implements WireAdapter {\n callback: WireDataCallback;\n\n isAuthenticated: boolean | undefined = undefined;\n accessToken: string | undefined = undefined;\n firstName: string | undefined = undefined;\n lastName: string | undefined = undefined;\n profileImageUrl: string | undefined = undefined;\n authHref: string | undefined = \"\";\n logoutHref: string | undefined = \"\";\n profileHref: string | undefined = \"\";\n settingsHref: string | undefined = \"\";\n\n constructor(callback: WireDataCallback) {\n this.callback = callback;\n }\n\n private async initIIS(config?: WireConfigValue) {\n // Import the IIS module. In case it isn't found,\n // fallback to importing it from the prod URL\n const iisImport = getIISImport();\n\n iisImport\n .then((module) => {\n if (typeof module === \"object\" && module.default) {\n const allFields = JSON.stringify(config) === \"{}\";\n if (!allFields && config && !(\"fields\" in config)) {\n throw new Error(\n 'Config must contain \"fields\" property if a config is passed'\n );\n }\n if (allFields || config?.fields.includes(\"isAuthenticated\")) {\n module.default\n .isUserAuthenticated()\n .then((val: boolean) => {\n this.isAuthenticated = val;\n this.callback({\n isAuthenticated: this.isAuthenticated,\n } as Partial);\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n\n if (allFields || config?.fields.includes(\"accessToken\")) {\n module.default\n .getAccessToken()\n .then((val: string) => {\n this.accessToken = val;\n this.callback({\n accessToken: this.accessToken,\n } as Partial);\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n\n if (allFields || config?.fields.includes(\"authHref\")) {\n module.default\n .getAuthLoginUrl()\n .then((val: string) => {\n if (val) {\n this.authHref = val;\n this.callback({\n authHref: this.authHref,\n } as Partial);\n }\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n\n if (allFields || config?.fields.includes(\"logoutHref\")) {\n module.default\n .getAuthLogoutUrl()\n .then((val: string) => {\n if (val) {\n this.logoutHref = val;\n this.callback({\n logoutHref: this.logoutHref,\n } as Partial);\n }\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n\n if (allFields || config?.fields.includes(\"profileHref\")) {\n module.default\n .getProfileUrl()\n .then((val: string) => {\n if (val) {\n this.profileHref = val;\n this.callback({\n profileHref: this.profileHref,\n } as Partial);\n }\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n\n if (allFields || config?.fields.includes(\"settingsHref\")) {\n module.default\n .getSettingsUrl()\n .then((val: string) => {\n if (val) {\n this.settingsHref = val;\n this.callback({\n settingsHref: this.settingsHref,\n } as Partial);\n }\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n\n // update user info as soon as it's available\n if (allFields || config?.fields.includes(\"userInfo\")) {\n module.default\n .getUserInfo()\n .then((userinfo: any) => {\n if (typeof userinfo === \"object\") {\n this.firstName = userinfo.given_name\n ? userinfo.given_name\n : \"\";\n this.lastName = userinfo.family_name\n ? userinfo.family_name\n : \"\";\n this.profileImageUrl = userinfo.picture;\n // Add in additional IIS properties as needed\n\n this.callback({\n firstName: this.firstName,\n lastName: this.lastName,\n profileImageUrl: this.profileImageUrl,\n } as Partial);\n }\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n }\n })\n .catch((error: Error) => {\n this.handleIISError(error);\n });\n }\n\n private handleIISError(error: Error) {\n const msg = error.message;\n if (msg && msg.includes(\"Authentication disabled\")) {\n console.warn(\"Authentication is currently unavailable\");\n this.callback({\n iisError: \"Authentication unavailable\",\n } as Partial);\n } else {\n console.error(\"iis error: \", error);\n }\n }\n\n update(config?: WireConfigValue): void {\n this.initIIS(config);\n }\n\n /**\n * required by interface\n */\n connect(): void {\n //\n }\n\n /**\n * required by interface\n */\n disconnect(): void {\n //\n }\n}\n","import Header from \"tbme/header\";\nimport Footer from \"wes/footer\";\nimport ClientProvider from \"tbme/clientProvider\";\nimport TbcClientProvider from \"tbtbc/clientProvider\";\nimport CommunityBanner from \"tbui/communityBanner\";\nimport Tally from \"tbui/tally\";\nimport CardFooterLink from \"tbui/cardFooterLink\";\nimport Card from \"tbui/card\";\nimport ProfileLayout from \"tbui/profileLayout\";\nimport PrivateProfileBanner from \"tbui/privateProfileBanner\";\nimport TdsThemeProvider from \"tds/themeProvider\";\nimport PrivateProfile from \"tbui/privateProfile\";\nimport PageLayout from \"tbui/pageLayout\";\nimport Badge from \"tbui/badge\";\nimport Popover from \"tbui/popover\";\nimport StayInBounds from \"tbui/stayInBounds\";\nimport Rank from \"tbme/rank\";\nimport Skills from \"tbme/skills\";\nimport SkillButton from \"tbui/skillButton\";\nimport SkillsRing from \"tbui/skillsRing\";\nimport SkillsChart from \"tbui/skillsChart\";\nimport ProgressAvatar from \"tbui/progressAvatar\";\nimport EmptyItem from \"tbui/emptyItem\";\nimport ProfileBadges from \"tbme/profileBadges\";\nimport QuestionsAndAnswers from \"tbtbc/questionsAndAnswers\";\nimport Connections from \"tbtbc/connections\";\nimport TbcUserActions from \"tbtbc/userActions\";\nimport ButtonIconText from \"tbui/buttonIconText\";\nimport ButtonStateful from \"tbui/buttonStateful\";\nimport AboutMe from \"tbme/aboutMe\";\nimport TbcFollowButton from \"tbtbc/followButton\";\nimport IconText from \"tbui/iconText\";\nimport ButtonIconTextLink from \"tbui/buttonIconTextLink\";\nimport NoActivity from \"tbtbc/noActivity\";\nimport MockProvider from \"tbme/mockProvider\";\nimport ProfileMetadata from \"tbme/profileMetadata\";\nimport LocalState from \"tbme/localState\";\nimport EmptySuperbadgeItem from \"tbui/emptySuperbadgeItem\";\nimport SuperbadgeItem from \"tbui/superbadgeItem\";\nimport Superbadges from \"tbme/superbadges\";\nimport CommunityTags from \"tbme/communityTags\";\nimport CommunityTag from \"tbui/communityTag\";\nimport CommunityTagsEdit from \"tbme/communityTagsEdit\";\nimport CommunityTagModal from \"tbui/communityTagModal\";\nimport DuelingPicklist from \"tbui/duelingPicklist\";\nimport HireMeBanner from \"tbui/hireMeBanner\";\nimport Certifications from \"tbme/certifications\";\nimport CertificationItem from \"tbui/certificationItem\";\nimport CertificationMessage from \"tbui/certificationMessage\";\nimport CertificationsGroup from \"tbui/certificationsGroup\";\nimport PageFooter from \"tbui/pageFooter\";\nimport ProfileEdit from \"tbme/profileEdit\";\nimport Avatar from \"tbme/avatar\";\nimport AvatarUpload from \"tbui/avatarUpload\";\nimport FileUploader from \"tbui/fileUploader\";\nimport UserDetails from \"tbme/userDetails\";\nimport UserDetailItem from \"tbui/userDetailItem\";\nimport AboutMyself from \"tbme/aboutMyself\";\nimport Mvp from \"tbme/mvp\";\nimport TbcConnections from \"tbme/connections\";\nimport Files from \"tbme/files\";\nimport TBTBCFiles from \"tbtbc/files\";\nimport SocialLinks from \"tbme/socialLinks\";\nimport TbmeQuestionsAndAnswers from \"tbme/questionsAndAnswers\";\nimport MockTbtbcProvider from \"../elements/tbme/mockTbtbcProvider/mockTbtbcProvider\";\nimport UserActions from \"tbme/userActions\";\nimport FollowButton from \"tbme/followButton\";\nimport ChassisProfileMetadata from \"tbme/chassisProfileMetadata\";\nimport CareerMarketplace from \"tbme/careerMarketplace\";\nimport learnerStatusLevel from \"tbui/learnerStatusLevel\";\n\nexport * as localState from \"tbme/localState\";\nexport * as clientAdapter from \"tbme/clientAdapter\";\nexport * as localization from \"tbme/localization\";\nexport * as IisModuleAdapter from \"tbme/iisModuleAdapter\";\nexport * as profilePage from \"tbme/profilePage\";\n\n/** Define Elements */\ncustomElements.define(\n \"tds-theme-provider\",\n TdsThemeProvider.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-client-provider\",\n ClientProvider.CustomElementConstructor\n);\ncustomElements.define(\n \"tbtbc-client-provider\",\n TbcClientProvider.CustomElementConstructor\n);\ncustomElements.define(\"tbme-header\", Header.CustomElementConstructor);\ncustomElements.define(\n \"tbui-community-banner\",\n CommunityBanner.CustomElementConstructor\n);\ncustomElements.define(\"tbui-tally\", Tally.CustomElementConstructor);\ncustomElements.define(\n \"tbui-card-footer-link\",\n CardFooterLink.CustomElementConstructor\n);\ncustomElements.define(\"wes-footer\", Footer.CustomElementConstructor);\ncustomElements.define(\"tbui-card\", Card.CustomElementConstructor);\ncustomElements.define(\"tbme-local-state\", LocalState.CustomElementConstructor);\ncustomElements.define(\n \"tbui-learner-status-level\",\n learnerStatusLevel.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-profile-layout\",\n ProfileLayout.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-private-profile-banner\",\n PrivateProfileBanner.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-private-profile\",\n PrivateProfile.CustomElementConstructor\n);\ncustomElements.define(\"tbui-page-layout\", PageLayout.CustomElementConstructor);\ncustomElements.define(\"tbui-badge\", Badge.CustomElementConstructor);\ncustomElements.define(\"tbui-popover\", Popover.CustomElementConstructor);\ncustomElements.define(\n \"tbui-stay-in-bounds\",\n StayInBounds.CustomElementConstructor\n);\ncustomElements.define(\"tbme-rank\", Rank.CustomElementConstructor);\ncustomElements.define(\"tbme-skills\", Skills.CustomElementConstructor);\ncustomElements.define(\n \"tbui-skill-button\",\n SkillButton.CustomElementConstructor\n);\ncustomElements.define(\"tbui-skills-ring\", SkillsRing.CustomElementConstructor);\ncustomElements.define(\n \"tbui-skills-chart\",\n SkillsChart.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-progress-avatar\",\n ProgressAvatar.CustomElementConstructor\n);\ncustomElements.define(\"tbui-empty-item\", EmptyItem.CustomElementConstructor);\ncustomElements.define(\n \"tbme-profile-badges\",\n ProfileBadges.CustomElementConstructor\n);\ncustomElements.define(\n \"tbtbc-questions-and-answers\",\n QuestionsAndAnswers.CustomElementConstructor\n);\ncustomElements.define(\n \"tbtbc-connections\",\n Connections.CustomElementConstructor\n);\ncustomElements.define(\n \"tbtbc-user-actions\",\n TbcUserActions.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-button-icon-text\",\n ButtonIconText.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-button-stateful\",\n ButtonStateful.CustomElementConstructor\n);\ncustomElements.define(\"tbme-about-me\", AboutMe.CustomElementConstructor);\ncustomElements.define(\n \"tbtbc-follow-button\",\n TbcFollowButton.CustomElementConstructor\n);\ncustomElements.define(\"tbui-icon-text\", IconText.CustomElementConstructor);\ncustomElements.define(\n \"tbui-button-icon-text-link\",\n ButtonIconTextLink.CustomElementConstructor\n);\ncustomElements.define(\"tbtbc-no-activity\", NoActivity.CustomElementConstructor);\ncustomElements.define(\n \"tbme-mock-provider\",\n MockProvider.CustomElementConstructor\n);\ncustomElements.define(\n \"tbtbc-mock-provider\",\n MockTbtbcProvider.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-profile-metadata\",\n ProfileMetadata.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-empty-superbadge-item\",\n EmptySuperbadgeItem.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-superbadge-item\",\n SuperbadgeItem.CustomElementConstructor\n);\ncustomElements.define(\"tbme-superbadges\", Superbadges.CustomElementConstructor);\ncustomElements.define(\n \"tbme-community-tags\",\n CommunityTags.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-community-tag\",\n CommunityTag.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-community-tag-modal\",\n CommunityTagModal.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-dueling-picklist\",\n DuelingPicklist.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-community-tags-edit\",\n CommunityTagsEdit.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-hire-me-banner\",\n HireMeBanner.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-certifications\",\n Certifications.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-certification-item\",\n CertificationItem.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-certification-message\",\n CertificationMessage.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-certifications-group\",\n CertificationsGroup.CustomElementConstructor\n);\ncustomElements.define(\"tbui-page-footer\", PageFooter.CustomElementConstructor);\ncustomElements.define(\n \"tbme-profile-edit\",\n ProfileEdit.CustomElementConstructor\n);\ncustomElements.define(\"tbme-avatar\", Avatar.CustomElementConstructor);\ncustomElements.define(\n \"tbui-avatar-upload\",\n AvatarUpload.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-file-uploader\",\n FileUploader.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-user-details\",\n UserDetails.CustomElementConstructor\n);\ncustomElements.define(\n \"tbui-user-detail-item\",\n UserDetailItem.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-about-myself\",\n AboutMyself.CustomElementConstructor\n);\ncustomElements.define(\"tbme-mvp\", Mvp.CustomElementConstructor);\ncustomElements.define(\n \"tbme-connections\",\n TbcConnections.CustomElementConstructor\n);\ncustomElements.define(\"tbme-files\", Files.CustomElementConstructor);\ncustomElements.define(\"tbtbc-files\", TBTBCFiles.CustomElementConstructor);\ncustomElements.define(\n \"tbme-social-links\",\n SocialLinks.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-questions-and-answers\",\n TbmeQuestionsAndAnswers.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-user-actions\",\n UserActions.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-follow-button\",\n FollowButton.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-chassis-profile-metadata\",\n ChassisProfileMetadata.CustomElementConstructor\n);\ncustomElements.define(\n \"tbme-career-marketplace\",\n CareerMarketplace.CustomElementConstructor\n);\n"],"names":["FileUploader","_registerComponent","_registerDecorators","LightningElement","constructor","args","super","this","buttonText","additionalText","acceptedFileTypes","errorText","handleFileUpload","event","files","currentTarget","dispatchEvent","CustomEvent","composed","bubbles","detail","handleDragOver","preventDefault","el","template","querySelector","classList","contains","add","handleDragLeave","remove","publicProps","config","tmpl","_tmpl","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","key","value","i","Symbol","toPrimitive","call","TypeError","String","Number","_toPrimitive","_toPropertyKey","configurable","writable","appLauncherItems","makeVar","currentUser","profileUser","isSelf","id","baseUrl","window","sfdcBase","exp","process","assetsUrl","trailheadUrl","locale","siteInfo","name","logoUrl","tbcCurrentUserId","tbcProfileUserId","localeOptions","label","footerLinks","href","image","chassis","isRenderProfileChassis","LocalState","profile","company","address","isPublic","isPublicProfile","unsubscribers","WeakMap","subscribeToVar","reactiveVar","listener","has","set","unsubscriber","unsubs","get","unsubscribe","onNextChange","adapters","Set","i18n","defaultLocale","fallbacks","setLocale","updateAdapters","setTranslations","locales","options","scope","merge","labels","entries","localeKey","toLocaleKey","translations","collectValues","adapter","updateValue","replace","_","lang","country","toUpperCase","translate","defaultLocales","legacyFormat","Error","reduce","sum","arg","RegExp","BaseAdapter","setValue","update","connect","disconnect","delete","LabelAdapter","labelKey","LegacyLabelAdapter","isNaN","parseInt","MultiLabelAdapter","childAdapters","setChildValue","previousTranslations","size","unpackTranslations","isEqual","assignedKeys","disconnectChildren","item","childConfig","valueKey","adapterType","formattingType","aliasKey","includes","bind","result","omitKeys","hasOwnProperty","fields","AvatarUpload","uid","photoUrl","photoTitle","hasCustomPhoto","photoHasChanged","photoIsSaving","minimumFileSize","maximumFileSize","contentType","uploadButtonLabel","displayUploadPhotoModal","openRemovePhotoConfirmation","undefined","isChangedCustomPhoto","handleLabels","avatarUpload","fileUploader","handleHideUploadPhotoModal","handleDisplayUploadPhotoModal","indexOf","handleFileChanged","uploadedFiles","uploadedFile","fileNameExtension","toLowerCase","split","pop","fileSize","sizeTooBigError","sizeTooSmallError","reader","FileReader","onload","evnt","createCroppieObj","bindCroppie","target","readAsDataURL","type","croppieObj","destroy","element","Croppie","viewport","width","height","photo","setZoom","url","handleRemovePhotoModal","handleRemoveButtonClick","Event","handleSave","then","croppedImageBlob","URL","createObjectURL","catch","err","console","error","finally","isSaveButtonDisabled","uploadPhotoModalClass","wire","dynamic","method","$cmp","BASE_URL","PROFILE_SERVICE_INTERNAL_API_BASE_URL","EXTERNAL_BASE_URL","PROFILE_SERVICE_EXTERNAL_API_BASE_URL","uploadUserImage","async","imageUrl","fileName","upload","headers","credentials","response","fetch","ok","text","json","JSON","stringify","getUserImageUploadResponse","blob","form","FormData","field","append","File","body","revokeObjectURL","responseText","parser","DOMParser","parseFromString","getElementsByTagName","childNodes","nodeValue","Promise","resolve","substring","lastIndexOf","pendingValue","__typename","isLoading","currentCommunityUser","profileCommunityUser","communityStats","legacyCommunityConnections","resetState","map","fn","getCurrentCommunityUserId","user","getProfileCommunityUserId","TRAILHEAD_LOCALES","trailheadLocaleFor","sharedUrls","base","parametizedUrl","home","settings","availableForHire","assets","logo","bannerBackgroundImage","astroImage","defaultAstroImage","mvpImage","noneMessageSuperbadgeItem","noneMessageModuleItem","noneMessageProjectItem","noneMessageEventItem","superbadgeImage","moduleImage","projectImage","eventImage","trailheadUnknownBadge","trailheadFirstModule","trailheadFirstModuleImage","trailhead","trailheadHelpProfileOverview","trailheadRanks","signup","login","logout","defaultSuperbadgeImage","defaultSuperbadge","tbcDefaultGroupImage","tbcUserFiles","tbcSearchFiles","tbcCommunityFeed","tbcUserFeedQuestions","tbcUserFeedAnswers","tbcUserFeedBestAnswers","tbcUserGroups","tbcUserFeed","tbcUserConnections","tab","tbcGroupDetail","tbcHireMe","tbcMessageUser","urlFieldPolicies","read","cv","getUrl","getSharedUrlValues","urls","pattern","defaults","params","match","param","placeholder","paramsFor","formatter","values","trailheadLocale","profileUserId","currentUserId","acc","createCache","InMemoryCache","addTypename","typePolicies","SiteUrls","User","communityUser","TrailheadProfileStats","keyFields","PublicProfile","earnedAwards","relayStylePagination","tbcUserId","SiteInfo","Query","items","appLauncherItem","find","links","cache","localSchema","gql","_t","adapterContextSchema","client","profileApiBffUrl","PROFILE_API_BFF_URL","getDefaultConfig","accessToken","accessTokenType","uri","createClient","ClientAdapter","createContextAdapter","setGlobalClient","setGlobalContext","setAccessToken","setAccessTokenType","setUri","getClient","getConfig","httpLink","createHttpLink","headersLink","setContext","authorization","ApolloClient","link","concat","defaultOptions","watchQuery","errorPolicy","returnPartialData","typeDefs","logger","Logger","prefix","QueryAdapter","defaultData","loading","networkStatus","NetworkStatus","previousData","makeQuery","observable","variables","resetData","getValue","subscription","subscribe","data","reset","fetchMore","refetch","context","contextSchema","AVATAR_QUERY","IISUtilAdapter","cb","dataCallback","iisUtil","getIISUtil","IISUtil","loadIIS","env","getEnv","version","artifactVersionMap","iisVersion","asset","default","iis","import","getUserInfo","refreshUserInfo","u","decodeJSONObject","userInfo","encodedUserInfoFields","location","host","subdomain","startsWith","qa","uat","prod","dev","int","hotfix","perf","onboard","object","applyTo","fieldPath","fieldValue","decodeURIComponent","string","decodedString","parse","Avatar","profilePhotoUrl","isExpanded","isSaving","avatar","handleResult","errors","defaultImage","firstName","lastName","loadIISUtil","warn","imageStyle","altText","closeModal","expandImage","handleImageError","updateChassisProfile","showToast","message","variant","handleRemove","deleteUserImage","assign","query","convertPhoneNumberToE164","phoneNumber","parsePhoneNumberFromString","format","validatePhoneNumber","phoneNumberString","isPossiblePhone","isPossiblePhoneNumber","validationError","validatePhoneNumberLength","validateWebsite","website","protocol","validateRequiredTextInput","trim","validateSocialHandle","searchParams","toString","hash","pathname","validateMaximumCharacterLength","maxCharacterLength","profileEditForm","givenName","validationRules","errorLabel","familyName","title","role","pronoun","relationshipToSalesforce","bio","slug","str","test","charAt","every","rule","validateSlug","countryCode","stateCode","companyName","companySize","companyWebsite","facebook","linkedIn","twitter","workEmail","emailInput","document","createElement","checkValidity","validateEmail","workPhone","mobilePhone","phone","PROFILE_EDIT_QUERY","isHireMeEnabled","FEATURE_HIRE_ME","isTbmeSkillsComponentEnabled","FEATURE_TBME_SKILLS_COMPONENT","ProfileEdit","open","cancelButtonDisabled","saveButtonDisabled","settingsUrl","countryHandler","errorMessage","handleFieldChange","areVirtualRegistrationFieldsEnabled","FEATURE_VIRTUAL_REG_FIELDS","countryOptions","validatedCountry","verifyCountry","fieldCountryCodePlaceholder","sort","sortOptions","bannerStyle","backgroundImageUrl","stateOptions","states","state","validatedState","verifyState","fieldStateCodePlaceholder","stateOptionsDisabled","stateRequired","roleOptions","developer","administrator","architect","salesRep","marketer","supervisor","dataAnalyst","consultant","businessOperationsManager","designer","educator","student","executive","productManager","relationshipToSalesforceOptions","relationshipOptions","customer","partner","nonCustomerProspect","salesforceEmployee","pronounOptions","heHimHis","otherAskMe","sheHerHers","theyThemTheirs","companySizeOptions","oneToTwenty","twentyOneToOneHundred","oneHundredToFiveHundred","fiveHundredToThreeThousand","threeThousandPlus","identifier","dataset","profileEditModal","settingsNoticeClass","settingsNotice","FEATURE_HIDE_PROFILE_EDIT_SETTINGS_BANNER","settingsNoticeLabel","assignToForm","getTextArea","username","facebookHandle","linkedinHandle","twitterHandle","websiteUrl","mobile","work","getInput","dataId","shadowRoot","getSelect","validateInput","input","inputValue","getInputValue","required","isInputRequired","validationRequired","regex","validate","isFormValid","fieldName","isFieldValid","handleRequestClose","assemblePayload","virtualRegistrationFields","phoneFields","handleRequestSave","payload","FEATURE_IIS_UPDATE_PROFILE","updateProfile","getProfile","toastUpdateSuccess","translateProfileUpdateError","toastFieldInvalid","track","IconText","Icon","ButtonIconText","Button","iconSymbol","iconSprite","iconSize","ButtonIconTextLink","rel","defaultState","active","focused","inactive","ButtonStateful","updateState","attrToBool","activeVariant","updateConfig","classes","classNames","connectedCallback","updates","updateVariant","handleEvent","disabled","attr","checkForTypename","getIsLoading","getError","getUserId","bridgeComponent","componentTimeout","pendingCalls","resolvePendingCalls","shift","setBridgeComponent","component","clearTimeout","useApexMethod","path","resolver","rejecter","setTimeout","promise","reject","callback","BRIDGE_COMPONENT_TIMEOUT","getApexMethod","getErrorMessage","memoizeOnce","resultFn","deepEqual","lastThis","lastResult","lastArgs","calledOnce","memoized","newArgs","resetCache","shouldFetchUsers","localUserRecords","tz","tbc2","setShouldFetchUsers","setLocalUserRecords","getCommunityUsers","fetchUsersFromApexOrContext","source","isExternalUser","recordsFromContext","getLocalUserRecords","fetchTbcUsers","fetchTzUsers","fetchUsers","contextUser","contextProfileTbc2User","ExternalId","secondaryIds","aggregatedTbc2UserIds","setUserStateFromApexResponse","varFn","apexFollow","apexUnfollow","follow","isMockProfile","contextProfileUserCommunityUserId","getCurrentUser","viewer","avatarUrl","fullName","currentValue","subscriptionId","fillFollowers","followers","count","connections","viewerSubscriptionId","updateConnectionsOnFollow","unfollow","existingEntitySubscriptionId","updateConnectionsOnUnfollow","filterNull","FOLLOWING_QUERY","TbcFollowButton","following","visible","pending","userId","viewerCanFollow","handleFollowClick","isFollowing","tbcUserActions","followError","ComponentTracker","trackedChanges","Map","onContextChange","contextSelector","attrs","setComponent","commitPendingChanges","getComponent","setSelector","selector","trackedComponents","userDetails","aboutMeSocialLinks","aboutMeAvatar","profileEdit","helper","initializeProfileEdit","close","achievements","skills","badges","recognitions","appExchange","developerMarketplace","mvp","rank","profileUpdater","certifications","tbcSchema","tbcApiBffUrl","TBC_API_BFF_URL","profileData","existing","incoming","CurrentUserContextError","setChassisCurrentUserState","setAccessTokenTypeTbtbc","token","AppLauncherContextError","fieldMapping","setProfileUserState","profileUserBgImageUrl","isAvailableForHire","isCommunityUser","isExtProfileUser","getFullName","setProfileUser","translateFields","FirstName","LastName","getProfileUserId","Id","convertLocale","legacyContextVar","subscribeToContextChange","tracker","setAssetsState","profileResourceUrl","setTdsContext","crossOriginAssets","setAppLauncherState","appLauncherLinks","a","b","aKey","aEntry","bKey","bEntry","UserInterfacePosition__c","AppUrl__c","ImageUrl__c","Label","setLocaleState","languageParam","setLanguage","setLocaleOptionsState","languageOptions","Array","isArray","languageOption","fromContext","setFooterLinksState","DIGITAL_PROFILE_BASE_URL","TRAILHEAD_URL","setChassisState","setLegacyBaseUrlState","communityUrl","setLegacyTrailheadUrlState","setLegacyCurrentUserState","cuid","identity","ProfilePictureUrl","access_token","getContext","getCommunityStats","fetchCommunityStats","communityUserId","status","questionsCount","answersCount","bestAnswersCount","communityUserRank","apexGetConnections","fetchApexConnections","tbcUsers","contextProfileCommunityUser","fetchConnections","collaborationDataWrappers","groups","communityUserStatus","runningUserCommunityUserId","contextProfileUserIsActive","typeName","collaborationData","communityIdentifier","linkUrl","groupId","transformResponse","fetchCommunityProfile","fetchData","isEmptyUsers","check","featureFlags","isDeferCommunityUsersToClientOn","tzUserRecords","tbc2UserRecords","resolved","updateTzUserFetchingState","updateTbc2UserFetchingState","USER_ACTIONS_QUERY","TbcUserActions","showHireMeButton","isTbcUser","Card","subtitle","flush","hasHeader","_hasFooter","slots","_errorText","failedToUpdate","hasFooter","isDefault","className","card_loading","card_flush","hasBodySlot","isLoadFailed","bodyClass","card__body_inner","onSlotChange","assignedSlotNames","ABOUT_ME_QUERY","AboutMe","displayProfileEditModal","profileUrl","showUrlComponent","displayUrl","updateLabels","aboutMe","titleAtCompany","dotMeSrc","handleCopyClick","textarea","navigator","clipboard","writeText","featureNewProfileEditComponent","handleEditClick","handleProfileEditRequestClose","displayEmptyState","showAvailableForHireLink","availableForHireLink","contexts","createContextProvider","ClientProvider","consumers","updateConsumers","localContext","consumer","provide","contextualizer","consumerConnectedCallback","consumerDisconnectedCallback","EffectAdapter","createMockClient","mocks","MockLink","SocialLinks","_twitterHandle","class","assistiveText","_linkedinHandle","_facebookHandle","_websiteUrl","socialLinks","isVisible","TBC_FOLLOWING_QUERY","_t2","FOLLOW_USER_MUTATION","UNFOLLOW_USER_MUTATION","FollowButton","userSlug","queryUser","queryUserData","handleTbcResult","isCurrentUser","operation","mutation","request","mutate","followResult","followUser","unfollowResult","unfollowUser","TBCQueryAdapter","TBC_USER_ACTIONS_QUERY","mediaQueryMobile","matchMedia","UserActions","notMobile","matches","queryUserActions","inboxUrl","showLinkButtons","Boolean","communityUserUrls","requestBody","operationName","EXPERIENCE_API_BFF_URL","CareerMarketplace","digitalResume","isEnrolled","isCareerModeEnabled","showInSearchResults","hasErrors","isSuccessful","buttonLink","containerClass","careerModeStatusText","bodyText","careerMarketplaceLink","settingsLink","handleAnalytics","tagName","sendAnalyticEvent","bladeName","analyticModule","eventName","dataLayer","blade","module","elementType","textContent","Authorization","iisToken","getDigitalResume","ABOUT_MYSELF_QUERY","auraService","AuraService","lightningOut","appRef","lightningIsReady","pendingCallbacks","loadAura","use","lightningReadyCallback","patch","oldDef","Node","prototype","v","$A","resolvePendingCallbacks","ready","createComponent","componentRef","elementId","componentIds","directiveCache","auraComponent","directive","part","getState","onRender","newId","newState","html","commit","container","getElementById","placeholderEl","removeChild","withContext","previous","newValue","renderTrackedComponent","cmpRef","shouldRender","rendered","previousResult","c","render","modalContainer","renderTogether","triggerClick","index","querySelectorAll","click","addEventListener","closest","button","parentNode","children","_t9","cmp","renderAppExchangeWithModalHack","_t4","_t5","renderLegacyCard","_t6","renderAboutMe","_t7","_t8","google","GoogleProfileLink__c","TwitterProfileLink__c","FacebookProfileLink__c","linkedin","LinkedInProfileLink__c","WebsiteLink__c","renderAppExchange","extProfileUserCmty","isAppExchangeOn","renderMVPComponent","aggregatedMvpExtUserIds","userRecords","shouldRenderCommunityComponent","isRecognitionsOn","handleAuraToast","getParams","unsafeMessage","handleOnCoreLwcToast","handleAuraAvatarUpload","handleAuraContextChange","renderProfileSections","isMobile","renderContent","Is_Public_Profile__c","renderPublicProfile","renderPrivateProfile","renderProfileSectionsChassis","renderPublicProfileChassis","renderPrivateProfileChassis","renderContainer","thLanguage","pickLists","renderContainerChassis","renderSections","desktopLeft","desktopRight","notification","_t10","_t11","renderPublicProfileNotification","renderRank","renderCommunityTags","renderBadges","renderSkills","_t19","_t20","renderCertifications","featureAdditionalCerts","renderSuperbadges","renderQuestions","renderConnections","renderFiles","renderUserDetails","trailheadEmail","email","_t29","_t13","_t14","_t12","renderPublicProfileNotificationChassis","renderAboutMyself","_t34","_t35","_t41","_t43","renderStamps","TRAILHEAD_COMPONENTS_BASE_URL","FEATURE_STAMPS","_t45","_t46","_t47","_t48","getFullNameLegacy","_t49","$lightning","setupAura","lightning","eventService","addHandler","handler","list","_t3","AboutMyself","roles","roleMap","Developer","Administrator","Architect","Marketer","Consultant","Designer","Educator","Student","Executive","userRole","salesforceIconSrc","handleAddNameClick","showAddName","showCareerMarketplace","FEATURE_CAREER_MARKET","endsWith","history","pushState","search","CommunityBanner","team","notificationHeader","notificationBody","notificationImages","backgroundClasses","trailblazerCommunity","notificationImage","var","LwcTally","classnamesForCount","localizedCount","toLocaleString","CONNECTIONS_QUERY","USER_CONTEXT_QUERY","imageErrors","TbcConnections","cardState","queryConnections","showCommunityBanner","connection","totalCount","handleResultTbc","communityConnections","communityUrls","setDisplayItems","src","queryResult","followersUrl","followingUrl","groupsUrl","defaultConnection","edges","edge","node","group","large","getLabel","labelForConnection","TbcQueryAdapter","TbcClientProvider","LwcCardFooterLink","loadingText","isButton","handleClick","TBC_USER_FILES_QUERY","Files","queryFiles","filesUrl","handleTbmeResult","PageFooter","content","pageFooter","selectedLocale","selected","globalContent","global","handleLinkClick","renderLeft","copyright","handleGlobalTrack","handleLocaleChange","trackEvent","FOOTER_QUERY","_tbmeFooter","currentLocale","footerUrl","isAuthenticated","footerContent","localeOption","handleLanguageChange","URLSearchParams","year","Date","getFullYear","salesforceCompanyName","MVP_QUERY","TBC_MVP_QUERY","Mvp","imageTitle","isMvp","queryMvp","StayInBounds","isActive","_wrappedElement","didCalculate","positionLeft","didReset","offsetLeft","transform","wrappedElement","firstChild","assignedElements","renderedCallback","getBoundingClientRect","left","style","variants","closestElement","__closestFrom","found","HTMLElement","parentElement","nodeType","getRootNode","Popover","focusTrapSelector","_bodyId","_isOpen","handleKeyDown","handleClose","handleFocusOut","isTrusted","hasFocus","composedPath","shadowedTarget","isOpen","activate","deactivate","popoverClass","variantClass","hidden","bodyId","Math","random","isFocusTrapInactive","removeEventListener","PrivateProfileBanner","learnMoreUrl","isProfileIncomplete","incompleteProfileNotice","profileEditModalUrl","completeProfileNotice","PrivateProfile","tdsAvatarUrl","ProfileLayout","layout","onMediaQueryChange","showMobile","showDesktop","disconnectedCallback","HEADER_QUERY","Header","apps","signupLink","signinLink","userProfile","bannerUrl","navItems","headerDropdownMyProfile","headerDropdownMySettings","logOut","skipLink","PageLayout","Badge","_awardedOn","pointsAwarded","learningUrl","isArchived","isHovering","isFocused","isDetailsOpen","awardedOn","toLocaleDateString","pointsAwardedString","isHighlighted","detailsTriggerClass","details__trigger_visible","handleMouseEnter","handleMouseLeave","handleFocusIn","handleToggleDetails","handleCloseDetails","focus","ProgressAvatar","progress","isLong","percentage","arcX","cos","PI","arcY","sin","svgRingPath","learnerStatusLevel","statusName","TRAILHEAD_RANKS_QUERY","Rank","trailheadAppUrl","progressRingMaxValue","hasSlug","nextRank","earnedBadgeTotal","badgeTotalForNextRank","earnedPointTotal","pointTotalForNextRank","completedTrailTotal","ranksPagePath","updateRank","earnedPointsSum","earnedBadgesCount","completedTrailCount","requiredBadgesCount","requiredPointsSum","chassisData","trailheadStats","learnerStatusLevels","showOnboardingMessage","hasNoActivity","showNextRank","rankImageClass","tallyVariant","ringEarnedPointTotal","min","progressRingCurrValue","nextRankImageAlt","nextRankText","nextLevelPointsAndBadges","nextLevelBadges","nextLevelPoints","SkillsRing","hoveredSkillId","selectedSkillId","_ringWidth","_strokeWidth","activeSkillId","ringWidth","strokeWidth","activeSkill","skill","boldText","percentDisplay","skillsRingSkills","skillsRingSkillsSingular","skillsRingSkillsNone","weakText","fraction","skillPercent","percent","max","round","totalUnitTotalPerSkill","itemProgressEntryCount","presentationSkills","degrees","skillDegrees","start","skillStartAngle","isHovered","arc","skillArc","opacity","strokeWidthActive","viewBox","radius","center","slice","startAngle","endAngle","polarToCartesian","end","largeArcFlag","endX","x","y","join","handleEnterSkill","handleLeaveSkill","centerX","centerY","angleInDegrees","angleInRadians","SkillButton","skillId","unitTotalPerSkill","color","isSelected","buttonClass","buttonAriaLabel","handleFocus","handleBlur","colors","SkillsChart","displayAll","visiblePresentationSkills","handleSkillItemMouseEnter","handleSkillItemMouseLeave","handleSkillItemFocus","handleSkillItemBlur","handleSkillRingSliceEnter","handleSkillRingSliceLeave","EARNED_SKILLS_QUERY","Skills","earnedSkills","skillsDescription","skillsDescriptionThirdPerson","shouldDisplayCard","showMoreOrShowLess","showLess","showMore","handleToggleShowMoreOrShowLess","mergeVariables","EmptyItem","itemUrl","linkContent","itemDescription","AwardType","AwardTypeFilter","Location","Orientation","PageInfoBidirectionalFragment","TRAILHEAD_BADGES_QUERY","FilterTypes","ALL","ProfileBadges","pageInfo","hasNextPage","endCursor","badgeTotal","firstFetchLoading","activeFilter","fetchingMore","viewingLess","shouldFocusNewBadge","previousBadgeCount","after","focusNewBadge","badge","visibleBadges","requestAnimationFrame","hasBadges","hasNoneAtAll","loadFailed","hasNoneOfType","emptyItem","emptyItems","EVENT","noneMessageEventItemTitle","noneMessageEventItemDescription","MODULE","noneMessageModuleItemTitle","noneMessageModuleItemDescription","PROJECT","noneMessageProjectItemTitle","noneMessageProjectItemDescription","STANDALONE","SUPERBADGE","noneMessageSuperbadgeAltText","noneMessageSuperbadgeItemDescription","thirdPersonEmptyItems","noneEarned","getEmptyBadge","hasManyPages","showViewLess","emptyBadgesTitle","badgeCountHeader","badgesHeader","transformBadges","handleFilterChange","handleLoadMore","handleToggleViewLess","earnedAward","award","earnedAt","unknownBadgeTitle","webUrl","icon","filterOptions","filterByAllBadges","header","filterBySuperBadges","superbadgesHeader","filterByModuleBadges","moduleBadgesHeader","filterByProjectBadges","projectBadgesHeader","filterByEventBadges","eventBadgesHeader","filterByPeerAssessmentBadges","peerAssessmentBadgesHeader","activeFilterHeader","activeOption","cardTitle","allBadges","NoActivity","Q_AND_A_QUERY","QuestionsAndAnswers","noActivity","stats","showNoActivity","trophy","questionsAndAnswers","answersLabel","bestAnswersLabel","questionsLabel","rankLabel","answersLink","bestAnswersLink","questionsLink","activityCount","communityFeedLink","handleChange","isError","Connections","viewerEntitySubscriptionId","from","splice","followingSingular","follower","MockProvider","mockClient","writeQueries","writeFragments","memoizedUpdate","writeQuery","writeFragment","updateClient","PROFILE_USER_QUERY","ProfileMetadata","setTitle","setDescription","setCanonicalLink","defaultTitle","defaultDescription","descriptionMetaElement","setAttribute","appendChild","description","maxBioLength","canonicalLinkElement","EmptySuperbadgeItem","SuperbadgeItem","completedDate","completedDateString","localeDateString","month","day","Superbadges","superbadges","superbadgeCount","defaultImageUrls","shouldFocusNewSuperbadge","previousSuperbadgeCount","focusNewSuperbadge","filteredSuperbadges","log","formattedSuperbadgesCount","superbadgesAreAvailable","showViewMore","CommunityTag","CommunityTagModal","communityTags","handleHide","keyCodes","preventDefaultAndStopPropagation","stopPropagation","setFocusOnNextOption","option","moveUp","intf","getAttribute","next","getElementsOfList","selectNextOption","updateSelectedOptions","selectNextOptionFromShift","isMultiple","curr","getShiftIndex","setShiftIndex","setLastShift","getLastShift","shiftAdd","nextOption","DuelingPicklist","sourceLabel","selectedLabel","focusableInSource","focusableInSelected","_selectedValues","highlightedOptions","optionToFocus","isFocusOnList","lastSelected","selectedList","keyboardInterface","shiftIndex","lastShift","duelingPicklist","selectKeyboardInterface","that","listId","selectAllOptions","selectAllFromLastSelectedToOption","select","moveOptionsBetweenLists","addToSelect","computedSourceListId","computedSelectedListId","computedSourceList","sourceListOptions","computeListOptions","computedSelectedList","selectedListOptions","optionsMap","optionValue","getOptionIndex","optionElement","getListId","focusableOptionValue","focusableOption","focusableValue","computeOptionProperties","tabIndex","handleOptionClick","selectMultiple","metaKey","ctrlKey","shiftKey","handleOptionKeyDown","keyCodesA","charCodeAt","keyCode","handleKeyDownOnOption","optionIndex","updateCurrentSelectedList","updateFocusableOption","currentList","retainFocus","toMove","newValues","oldSelectedValues","dispatchChangeEvent","handleRightButtonClick","handleLeftButtonClick","handleUpButtonClick","changeOrderOfOptionsInList","handleDownButtonClick","swapOptions","j","array","temp","elements","all","val","publicMethods","CommunityTagsEdit","_isEdit","_isModified","isEdit","picklist","selection","handleSaveButtonClick","saveDisabled","saveVals","onSave","_options","vals","tag","_selection","handleOnChange","COMMUNITY_TAGS_QUERY","COMMUNITY_TAGS_MUTATION","CommunityTags","showMoreTags","tags","queryCommunityTags","initialTagsMax","hasCommunityTags","visibleTags","moreTags","handleSaveRequest","editModal","updateCommunityTags","handleViewAll","some","extensions","statusCode","HireMeBanner","isClosed","isRendered","markSeen","hasBeenSeen","htmlContent","hireMeBanner","localStorage","getItem","getStorageKey","setItem","CertificationMessage","sanitizedHTMLConfig","ALLOWED_TAGS","ALLOWED_ATTR","isHorizontal","orientation","HORIZONTAL","isVertical","VERTICAL","hasCta","cta","htmlBody","CertificationItem","certification","_statusColor","_htmlBody","statusColor","publicDescription","statusDate","date","dueDate","hasDownloadLogoLink","downloadLogoUrl","completedExpiredDate","dateOptions","dateExpired","expired","dateIssued","dateCompleted","userLegalName","certificationUserLegalName","showActionButton","CertificationsGroup","product","toggleVisibility","USER_CERTIFICATIONS_QUERY","SortType","Certifications","brands","messagesOnly","topMessages","bottomMessages","searchText","showMoreCertifications","defaultOption","selectedSortOption","focusNewCertification","sortedCertifications","infoUrl","searchResultLabel","resultsCount","filteredCertifications","searchTerm","isSearching","showActions","showCertificationsHistoryUrl","certificationsHistoryUrl","cert","showGroupedCertifications","groupedCertifications","record","right","localeCompare","brand","toLocaleLowerCase","sortAlphabetically","sortByStatus","sortByMostRecent","certificationsPrivacy","leftCompletionDate","rightCompletionDate","order","visibleCertifications","showFooter","sortByProduct","footerTitle","handleFooterClick","handleSearchEvent","resetSelectedSortOption","handleSortChange","resetSearch","searchInput","credential","formatCertifications","messages","BOTTOM","TOP","TOAST","UserDetailItem","showAddButton","addDetail","USER_DETAILS_QUERY","UserDetails","handleEditDetails","displayField","FILES_QUERY","TBTBCFiles","TbmeQuestionsAndAnswers","queryQuestionsAndAnswers","labelName","FEATURE_ACCEPTED_ANSWERS_LABEL","answersUrl","bestAnswersUrl","questionsUrl","feedUrl","questionAndAnswersStats","MockTbtbcProvider","PROFILE_METADATA_QUERY","ChassisProfileMetadata","setRobotsTag","documentTitle","documentDescription","robotsMetaElement","getIISModule","profileImageUrl","authHref","logoutHref","profileHref","settingsHref","initIIS","getIISImport","info","allFields","isUserAuthenticated","handleIISError","getAccessToken","getAuthLoginUrl","getAuthLogoutUrl","getProfileUrl","getSettingsUrl","userinfo","given_name","family_name","picture","msg","iisError","customElements","define","TdsThemeProvider","CustomElementConstructor","Tally","CardFooterLink","Footer"],"mappings":"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"}