@salesforcedevs/docs-components 1.3.194-langpicker19-alpha → 1.3.194-langpicker20-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/docs-components",
3
- "version": "1.3.194-langpicker19-alpha",
3
+ "version": "1.3.194-langpicker20-alpha",
4
4
  "description": "Docs Lightning web components for DSC",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
@@ -7,7 +7,10 @@
7
7
  value={sidebarValue}
8
8
  header={sidebarHeader}
9
9
  ontogglesidebar={onToggleSidebar}
10
- sidebar-footer-content={sidebarFooterContent}
10
+ languages={languages}
11
+ language={language}
12
+ bail-href={bailHref}
13
+ bail-label={bailLabel}
11
14
  >
12
15
  <slot name="sidebar-header" slot="header"></slot>
13
16
  </dx-sidebar-old>
@@ -23,7 +26,10 @@
23
26
  coveo-search-hub={coveoSearchHub}
24
27
  coveo-advanced-query-config={coveoAdvancedQueryConfig}
25
28
  ontogglesidebar={onToggleSidebar}
26
- sidebar-footer-content={sidebarFooterContent}
29
+ languages={languages}
30
+ language={language}
31
+ bail-href={bailHref}
32
+ bail-label={bailLabel}
27
33
  >
28
34
  <slot name="sidebar-header" slot="header"></slot>
29
35
  </dx-sidebar>
@@ -4,7 +4,7 @@ import { closest } from "kagekiri";
4
4
  import { toJson } from "dxUtils/normalizers";
5
5
  import { highlightTerms } from "dxUtils/highlight";
6
6
  import { SearchSyncer } from "docUtils/searchSyncer";
7
- import type { SidebarFooter } from "typings/custom";
7
+ import type { OptionWithLink } from "typings/custom";
8
8
 
9
9
  type AnchorMap = { [key: string]: { intersect: boolean; id: string } };
10
10
 
@@ -37,7 +37,10 @@ export default class ContentLayout extends LightningElement {
37
37
  @api coveoSearchHub!: string;
38
38
  @api coveoAdvancedQueryConfig!: string;
39
39
  @api useOldSidebar?: boolean = false;
40
- @api sidebarFooterContent!: SidebarFooter;
40
+ @api languages!: OptionWithLink[];
41
+ @api language!: string;
42
+ @api bailHref!: string;
43
+ @api bailLabel!: string;
41
44
 
42
45
  @api
43
46
  get breadcrumbs() {
@@ -1,52 +1,71 @@
1
1
  /* eslint-disable @lwc/lwc/no-document-query */
2
2
  import { LightningElement, api } from "lwc";
3
- import type { DocLanguage, SidebarFooter } from "typings/custom";
3
+ import type { OptionWithLink } from "typings/custom";
4
+ import { toJson } from "dxUtils/normalizers";
4
5
  import get from "lodash.get";
5
6
  import { track } from "dxUtils/analytics";
6
7
 
7
8
  const MOBILE_SIZE_MATCH = "768px";
8
9
 
9
- export default class SidebarFooterNav extends LightningElement {
10
+ export default class ContentLayout extends LightningElement {
10
11
  @api langValuePath: string = "id";
12
+ @api bailHref?: string | null = null;
13
+ @api bailLabel?: string | null = null;
11
14
 
12
15
  @api
13
- set sidebarFooterContent(values: SidebarFooter) {
14
- this._languages = values?.languages;
15
- this._language = values?.language || null;
16
- this._bailHref = values?.bailHref;
17
- this._bailLabel = values?.bailLabel;
16
+ get languages() {
17
+ return this._languages;
18
18
  }
19
19
 
20
- private _languages!: DocLanguage[];
20
+ set languages(value) {
21
+ this._languages = toJson(value);
22
+ }
23
+
24
+ @api
25
+ get language() {
26
+ return this._language;
27
+ }
28
+
29
+ set language(value) {
30
+ if (this._language !== value) {
31
+ this._language = value;
32
+ }
33
+ }
34
+
35
+ private _languages!: OptionWithLink[];
21
36
  private _language: string | null = null;
22
- private _bailHref?: string | null = null;
23
- private _bailLabel?: string | null = null;
24
37
  private mobile: boolean = false;
25
38
  private matchMedia!: MediaQueryList;
26
39
 
27
40
  private get hasLanguages(): boolean {
28
- return !!(this._languages && this._languages.length > 1);
41
+ return !!(this.languages && this.languages.length > 1);
29
42
  }
30
43
 
31
44
  private get languageLabel(): string {
32
45
  return (
33
- (this._language &&
34
- this._languages.find(
35
- (lang) => get(lang, this.langValuePath) === this._language
46
+ (this.language &&
47
+ this.languages.find(
48
+ (lang) => get(lang, this.langValuePath) === this.language
36
49
  )?.label) ||
37
- this._languages[0].label
50
+ this.languages[0].label
38
51
  );
39
52
  }
40
53
 
41
54
  get hasBailLink(): boolean {
42
- return !!(this._bailHref && this._bailLabel);
55
+ return !!(this.bailHref && this.bailLabel);
43
56
  }
44
57
 
45
58
  private onLangChange(event: CustomEvent<string>): void {
46
59
  const { detail } = event;
47
60
  this._language = detail;
48
61
 
49
- this.dispatchEvent(new CustomEvent("langchange", { detail }));
62
+ this.dispatchEvent(
63
+ new CustomEvent("langchange", {
64
+ detail,
65
+ bubbles: true,
66
+ composed: true
67
+ })
68
+ );
50
69
  }
51
70
 
52
71
  private getFilename = function (path: string) {
@@ -56,14 +75,14 @@ export default class SidebarFooterNav extends LightningElement {
56
75
  private handleBailClick(event: Event) {
57
76
  const payload = {
58
77
  click_text: "pdf",
59
- click_url: this._bailHref,
78
+ click_url: this.bailHref,
60
79
  element_title: "pdf",
61
80
  element_type: "link",
62
81
  content_category: "download"
63
82
  };
64
83
  track(event.target!, "custEv_pdfDownload", {
65
84
  ...payload,
66
- file_name: this.getFilename(this._bailHref!),
85
+ file_name: this.getFilename(this.bailHref!),
67
86
  file_extension: "pdf"
68
87
  });
69
88
 
@@ -59,7 +59,7 @@ export type ApiDocLanguage = {
59
59
  url: string;
60
60
  };
61
61
 
62
- export type SidebarFooter = {
62
+ export type SiderbarFooter = {
63
63
  subtitle: string;
64
64
  bailHref: string;
65
65
  bailLabel: string;
@@ -12,7 +12,10 @@
12
12
  onselect={handleSelect}
13
13
  use-old-sidebar={useOldSidebar}
14
14
  onlangchange={handleLanguageChange}
15
- sidebar-footer-content={sidebarFooterObj}
15
+ languages={sidebarFooterContent.languages}
16
+ language={sidebarFooterContent.language}
17
+ bail-href={sidebarFooterContent.bailHref}
18
+ bail-label={sidebarFooterContent.bailLabel}
16
19
  >
17
20
  <doc-phase
18
21
  slot="version-banner"
@@ -7,7 +7,7 @@ import {
7
7
  DocLanguage,
8
8
  DocVersion,
9
9
  TreeNode,
10
- SidebarFooter,
10
+ SiderbarFooter,
11
11
  HistoryState,
12
12
  PageReference,
13
13
  TocMap
@@ -16,7 +16,6 @@ import { SearchSyncer } from "docUtils/searchSyncer";
16
16
  import { LightningElementWithState } from "dxBaseElements/lightningElementWithState";
17
17
  import { logCoveoPageView, oldVersionDocInfo } from "docUtils/utils";
18
18
  import { Breadcrumb, DocPhaseInfo, Language } from "typings/custom";
19
- import { track as trackGTM } from "dxUtils/analytics";
20
19
 
21
20
  // TODO: Imitating from actual implementation as doc-content use it like this. We should refactor it later.
22
21
  const handleContentError = (error: any): void => console.log(error);
@@ -26,6 +25,14 @@ const PIXEL_PER_CHARACTER_MAP: { [key: string]: number } = {
26
25
  "ja-jp": 12.5
27
26
  };
28
27
 
28
+ const defaultSidebarFooter: SiderbarFooter = {
29
+ subtitle: "",
30
+ bailHref: "",
31
+ bailLabel: "",
32
+ languages: [],
33
+ language: "",
34
+ headerHref: ""
35
+ };
29
36
  export default class DocXmlContent extends LightningElementWithState<{
30
37
  isFetchingDocument: boolean;
31
38
  isFetchingContent: boolean;
@@ -70,9 +77,9 @@ export default class DocXmlContent extends LightningElementWithState<{
70
77
  private version: DocVersion | null = null;
71
78
  private docTitle = "";
72
79
  private _pathName = "";
73
- private sidebarFooterObj?: SidebarFooter | null = null;
74
80
  private listenerAttached = false;
75
81
  private _enableCoveo?: boolean = false;
82
+ private sidebarFooterContent: SiderbarFooter = { ...defaultSidebarFooter };
76
83
 
77
84
  private searchSyncer = new SearchSyncer({
78
85
  callbacks: {
@@ -353,17 +360,6 @@ export default class DocXmlContent extends LightningElementWithState<{
353
360
  ({ id }) => id === event.detail
354
361
  );
355
362
  this.pageReference.docId = this.language!.url;
356
-
357
- trackGTM(event.target!, "custEv_ctaLinkClick", {
358
- click_text: event.detail,
359
- element_title: "language selector",
360
- click_url: `${window.location.origin}${this.pageReferenceToString(
361
- this.pageReference
362
- )}`,
363
- element_type: "link",
364
- content_category: "cta"
365
- });
366
-
367
363
  this.updateUrl();
368
364
  this.fetchDocument();
369
365
  };
@@ -447,7 +443,7 @@ export default class DocXmlContent extends LightningElementWithState<{
447
443
  this.availableVersions = data.availableVersions;
448
444
  this.pdfUrl = data.pdfUrl;
449
445
 
450
- this.updateHeader();
446
+ this.updateSidebarFooter();
451
447
 
452
448
  this.buildBreadcrumbs();
453
449
 
@@ -511,22 +507,22 @@ export default class DocXmlContent extends LightningElementWithState<{
511
507
  });
512
508
  }
513
509
 
514
- updateHeader(): void {
510
+ updateSidebarFooter(): void {
515
511
  if (this.docTitle) {
516
- this.sidebarFooterObj!.subtitle = this.docTitle;
512
+ this.sidebarFooterContent.subtitle = this.docTitle;
517
513
  }
518
514
 
519
515
  if (this.pdfUrl) {
520
- this.sidebarFooterObj!.bailHref = this.pdfUrl;
521
- this.sidebarFooterObj!.bailLabel = "PDF";
516
+ this.sidebarFooterContent.bailHref = this.pdfUrl;
517
+ this.sidebarFooterContent.bailLabel = "PDF";
522
518
  }
523
519
 
524
- this.sidebarFooterObj!.languages = this.availableLanguages;
525
- this.sidebarFooterObj!.language = this.language?.id;
520
+ this.sidebarFooterContent.languages = this.availableLanguages;
521
+ this.sidebarFooterContent.language = this.language?.id;
526
522
 
527
523
  if (this.pageReference) {
528
524
  const { docId, deliverable, page } = this.pageReference;
529
- this.sidebarFooterObj!.headerHref = `/${page}/${docId}/${deliverable}/`;
525
+ this.sidebarFooterContent.headerHref = `/${page}/${docId}/${deliverable}/`;
530
526
  }
531
527
  }
532
528