{"version":3,"file":"bundle-dee89aa8.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/tbme/certificationEmailRequestAction/mutation.ts","../../src/elements/tbme/certificationEmailRequestAction/certificationEmailRequestAction.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 Certification Item Actions Menu feature is enabled false otherwise.\n */\nexport function isCertificationItemActionsMenuEnabled() {\n return window?.sfdcBase?.exp?.FEATURE_CERTIFICATION_ITEM_ACTIONS_MENU === \"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\", \"borderless_small\"];\n\ntype POPOVER_SIZES = \"small\" | \"large\" | \"\";\ntype POPOVER_VARIANTS = \"borderless\" | \"borderless_small\" | \"\";\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 { gql } from \"@apollo/client\";\n\nexport const CERTIFICATION_EMAIL_REQUEST_MUTATION = gql`\nmutation requestCertificationByEmail($certificationId: String!) {\n requestCertificationByEmail(input: { certificationId: $certificationId }) {\n ... on RequestCertificationByEmailPayload {\n certificationEmailRequest {\n status\n errorCode\n displayMessage, \n detail\n }\n }\n }\n}\n`;","import { api, LightningElement, wire } from \"lwc\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport { getClient } from \"tbme/clientAdapter\";\nimport { CERTIFICATION_EMAIL_REQUEST_MUTATION } from \"./mutation\";\nimport {chassis} from \"tbme/localState\";\nimport { showToast } from \"tds/toaster\";\nimport { logger } from \"tbme/logger\";\nimport { requestCertificationByEmailVariables } from \"./gql/requestCertificationByEmail\";\n\nexport default class extends LightningElement {\n private isSelf: boolean = false;\n private labels: LabelTranslations = undefined!;\n\n @api certificateId: string = \"\";\n\n /** Should the action to request Certificate by email be visible */\n get isVisible() {\n return (\n this.isSelf &&\n this.certificateId\n );\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\n \"certifications.requestCertificationByEmailActionName\",\n \"certifications.requestCertificationByEmailError\",\n ],\n })\n private handleLabels(labels: {\n certifications: LabelTranslations;\n }) {\n this.labels = {\n ...labels.certifications,\n };\n }\n\n private async handleCertificationEmailRequest(event: CustomEvent) {\n event.preventDefault();\n event.stopPropagation();\n const element = event.target as HTMLElement;\n if(!this.certificateId) {\n // If there is no certification id, we can't really take any action.\n return;\n }\n\n const options = {\n variables: { certificationId: this.certificateId } as requestCertificationByEmailVariables,\n mutation: CERTIFICATION_EMAIL_REQUEST_MUTATION,\n };\n\n try {\n const request = () => getClient().mutate(options);\n const { data, errors } = await request();\n const { requestCertificationByEmail: { certificationEmailRequest: { status, displayMessage } } } = data;\n\n // \"errors\" are actual system errors related to the mutation request. These are unexpected and should be investigated.\n if (errors || status == \"error\") {\n if (errors) logger.error(\"errors\", errors);\n showToast({\n message: displayMessage || t(\"certifications.requestCertificationByEmailError\"),\n variant: \"error\",\n });\n } else if (status == \"success\" && displayMessage) {\n showToast({\n message: displayMessage,\n variant: \"success\",\n });\n }\n } catch (e) {\n logger.error(\"Error requesting certificate by email\", e);\n showToast({\n message: t(\"certifications.requestCertificationByEmailError\"),\n variant: \"error\",\n });\n }\n }\n\n connectedCallback() {\n const chassisData = chassis();\n this.isSelf = chassisData?.isSelf || false;\n }\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 { isCertificationItemActionsMenuEnabled } from \"../../../shared/feature\";\nimport { Certification } from \"tbme/certifications\";\nimport { locale } from \"tbme/localState\";\nimport { LabelTranslations, MultiLabelAdapter, t } from \"tbme/localization\";\nimport classNames from \"classnames\";\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 /** Did the user open the actions menu? */\n private isActionsOpen = false;\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 /** Prevents the action button (CTA button) to overalp with the the actions menu button (down arrow/caret that opens the popuover) */\n get titleClass() {\n return classNames(\"title\", {\n \"title__margin-right\": this.showActionsMenu,\n });\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 /** Returns true if the certification has a certificationId id */\n get hasCertificationId() {\n return !!this.certification?.certificationId && 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 \n /** Getter for whether or not to show the actions menu */\n get showActionsMenu() {\n return (isCertificationItemActionsMenuEnabled() && \n (this.hasDownloadLogoLink || this.hasCertificationId)\n );\n }\n \n /** Getter for whether or not to show the download logo lin */\n get showDownloadLogoLink() {\n return (!isCertificationItemActionsMenuEnabled() && \n this.hasDownloadLogoLink \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 /** Toggles the actions menu visibility */\n private handleToggleActions(e: Event) {\n this.isActionsOpen = !this.isActionsOpen;\n }\n\n /** Closes the actions menu, used when clicks occur outside of the popover */\n private handleCloseActions() {\n this.isActionsOpen = false;\n this.template\n .querySelector(\".actions_menu__trigger\")!\n .shadowRoot!.querySelector(\"button\")!\n .focus();\n }\n\n @wire(MultiLabelAdapter, {\n labels: [\"certifications.downloadLogo\", \"certifications.certificationItemActions\"],\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 certificationId\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 CertificationEmailRequestAction from \"tbme/certificationEmailRequestAction\";\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-certification-email-request-action\",\n CertificationEmailRequestAction.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","isCertificationItemActionsMenuEnabled","FEATURE_CERTIFICATION_ITEM_ACTIONS_MENU","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","CERTIFICATION_EMAIL_REQUEST_MUTATION","CertificationEmailRequestAction","certificateId","handleCertificationEmailRequest","certificationId","requestCertificationByEmail","certificationEmailRequest","displayMessage","CertificationMessage","sanitizedHTMLConfig","ALLOWED_TAGS","ALLOWED_ATTR","isHorizontal","orientation","HORIZONTAL","isVertical","VERTICAL","hasCta","cta","htmlBody","CertificationItem","certification","_statusColor","_htmlBody","isActionsOpen","statusColor","publicDescription","titleClass","showActionsMenu","statusDate","date","dueDate","hasDownloadLogoLink","downloadLogoUrl","hasCertificationId","completedExpiredDate","dateOptions","dateExpired","expired","dateIssued","dateCompleted","userLegalName","certificationUserLegalName","showDownloadLogoLink","showActionButton","handleToggleActions","handleCloseActions","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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"}