@bridgeline-digital/hawksearch-handlebars-ui 1.0.0-beta.0

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.
Files changed (118) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.json +153 -0
  3. package/.husky/pre-commit +5 -0
  4. package/.lintstagedrc.json +4 -0
  5. package/.prettierignore +7 -0
  6. package/.prettierrc.json +19 -0
  7. package/.vscode/launch.json +15 -0
  8. package/custom1.html +52 -0
  9. package/custom2.html +44 -0
  10. package/gulpfile.js +73 -0
  11. package/index.html +39 -0
  12. package/package.json +57 -0
  13. package/src/assets/icons/chevron-back.svg +4 -0
  14. package/src/assets/icons/chevron-down.svg +3 -0
  15. package/src/assets/icons/chevron-forward.svg +4 -0
  16. package/src/assets/icons/chevron-left.svg +3 -0
  17. package/src/assets/icons/chevron-right.svg +3 -0
  18. package/src/assets/icons/chevron-up.svg +3 -0
  19. package/src/assets/icons/cross.svg +3 -0
  20. package/src/assets/icons/help.svg +4 -0
  21. package/src/assets/icons/minus.svg +3 -0
  22. package/src/assets/icons/plus.svg +7 -0
  23. package/src/assets/images/icons.svg +1 -0
  24. package/src/assets/images/placeholder.png +0 -0
  25. package/src/components/autocomplete/autocomplete.component.hbs +60 -0
  26. package/src/components/autocomplete/autocomplete.component.ts +124 -0
  27. package/src/components/base.component.ts +120 -0
  28. package/src/components/facet-types/base-facet.component.ts +114 -0
  29. package/src/components/facet-types/checkbox-list-facet/checkbox-list-facet.component.hbs +6 -0
  30. package/src/components/facet-types/checkbox-list-facet/checkbox-list-facet.component.ts +73 -0
  31. package/src/components/facet-types/checkbox-list-facet/checkbox-list.partial.hbs +42 -0
  32. package/src/components/facet-types/color-facet/color-facet.component.hbs +29 -0
  33. package/src/components/facet-types/color-facet/color-facet.component.ts +26 -0
  34. package/src/components/facet-types/index.ts +6 -0
  35. package/src/components/facet-types/linked-list-facet/link-list-facet.component.hbs +17 -0
  36. package/src/components/facet-types/linked-list-facet/link-list-facet.component.ts +32 -0
  37. package/src/components/facet-types/range-slider-facet/range-slider-facet.component.hbs +11 -0
  38. package/src/components/facet-types/range-slider-facet/range-slider-facet.component.ts +107 -0
  39. package/src/components/facet-types/search-within-facet/search-within-facet.component.hbs +3 -0
  40. package/src/components/facet-types/search-within-facet/search-within-facet.component.ts +33 -0
  41. package/src/components/facet-types/size-facet/size-facet.component.hbs +29 -0
  42. package/src/components/facet-types/size-facet/size-facet.component.ts +30 -0
  43. package/src/components/facet-wrapper/facet-wrapper.component.hbs +36 -0
  44. package/src/components/facet-wrapper/facet-wrapper.component.ts +62 -0
  45. package/src/components/facets-list/facets-list.component.hbs +11 -0
  46. package/src/components/facets-list/facets-list.component.ts +92 -0
  47. package/src/components/icon/icon.component.hbs +3 -0
  48. package/src/components/icon/icon.component.ts +40 -0
  49. package/src/components/index.ts +18 -0
  50. package/src/components/modified-query/modified-query.component.hbs +7 -0
  51. package/src/components/modified-query/modified-query.component.ts +38 -0
  52. package/src/components/page-size/page-size.component.hbs +7 -0
  53. package/src/components/page-size/page-size.component.ts +35 -0
  54. package/src/components/pagination/pagination.component.hbs +34 -0
  55. package/src/components/pagination/pagination.component.ts +85 -0
  56. package/src/components/query-suggestions/query-suggestions.component.hbs +3 -0
  57. package/src/components/query-suggestions/query-suggestions.component.ts +66 -0
  58. package/src/components/range-slider/range-slider.component.hbs +9 -0
  59. package/src/components/range-slider/range-slider.component.ts +190 -0
  60. package/src/components/search/search.component.hbs +4 -0
  61. package/src/components/search/search.component.ts +93 -0
  62. package/src/components/search-results/search-results.component.hbs +29 -0
  63. package/src/components/search-results/search-results.component.ts +17 -0
  64. package/src/components/search-results-item/search-results-item.component.hbs +23 -0
  65. package/src/components/search-results-item/search-results-item.component.ts +99 -0
  66. package/src/components/search-results-list/search-results-list.component.hbs +15 -0
  67. package/src/components/search-results-list/search-results-list.component.ts +24 -0
  68. package/src/components/selected-facets/selected-facets.component.hbs +11 -0
  69. package/src/components/selected-facets/selected-facets.component.ts +81 -0
  70. package/src/components/sorting/sorting.component.hbs +7 -0
  71. package/src/components/sorting/sorting.component.ts +33 -0
  72. package/src/components/tabs/tabs.component.hbs +7 -0
  73. package/src/components/tabs/tabs.component.ts +35 -0
  74. package/src/components/tooltip/tooltip.component.hbs +6 -0
  75. package/src/components/tooltip/tooltip.component.ts +48 -0
  76. package/src/helpers/formatters.ts +15 -0
  77. package/src/helpers/index.ts +1 -0
  78. package/src/index.ts +125 -0
  79. package/src/models/autocomplete.models.ts +71 -0
  80. package/src/models/component.models.ts +27 -0
  81. package/src/models/global.models.ts +78 -0
  82. package/src/models/index.ts +7 -0
  83. package/src/models/raw-autocomplete.models.ts +46 -0
  84. package/src/models/raw-search.models.ts +130 -0
  85. package/src/models/search.models.ts +144 -0
  86. package/src/models/tracking.models.ts +33 -0
  87. package/src/scss/components/_autocomplete.scss +55 -0
  88. package/src/scss/components/_facets.scss +287 -0
  89. package/src/scss/components/_icons.scss +17 -0
  90. package/src/scss/components/_modified-query.scss +11 -0
  91. package/src/scss/components/_page-size.scss +2 -0
  92. package/src/scss/components/_pagination.scss +23 -0
  93. package/src/scss/components/_query-suggestions.scss +7 -0
  94. package/src/scss/components/_range-slider.scss +50 -0
  95. package/src/scss/components/_search-results-item.scss +64 -0
  96. package/src/scss/components/_search.scss +4 -0
  97. package/src/scss/components/_selected-facets.scss +24 -0
  98. package/src/scss/components/_sorting.scss +2 -0
  99. package/src/scss/components/_tabs.scss +51 -0
  100. package/src/scss/components/_tooltips.scss +29 -0
  101. package/src/scss/general/_forms.scss +82 -0
  102. package/src/scss/general/_grid-layout.scss +44 -0
  103. package/src/scss/general/_images.scss +3 -0
  104. package/src/scss/general/_typography.scss +15 -0
  105. package/src/scss/hawksearch.scss +35 -0
  106. package/src/scss/includes/_breakpoints.scss +51 -0
  107. package/src/scss/includes/_components.scss +14 -0
  108. package/src/scss/includes/_general.scss +4 -0
  109. package/src/scss/includes/_reset.scss +203 -0
  110. package/src/scss/includes/_utility-classes.scss +85 -0
  111. package/src/services/autocomplete.service.ts +104 -0
  112. package/src/services/base.service.ts +93 -0
  113. package/src/services/index.ts +3 -0
  114. package/src/services/search.service.ts +754 -0
  115. package/src/services/tracking.service.ts +136 -0
  116. package/tsconfig.json +22 -0
  117. package/typings.d.ts +21 -0
  118. package/webpack.config.js +75 -0
@@ -0,0 +1,136 @@
1
+ import { AutocompleteItemType, EventType, HawksearchGlobal, PageType, SearchType } from '@models';
2
+ import { BaseService } from './base.service';
3
+
4
+ declare let Hawksearch: HawksearchGlobal;
5
+
6
+ export class TrackingService extends BaseService {
7
+ protected baseUrl = Hawksearch.config.endpoints?.tracking || 'https://tracking-dev.hawksearch.net/api';
8
+
9
+ trackAutocompleteClick(query: string, itemType: AutocompleteItemType, title: string, url: string): Promise<void> {
10
+ const data = {
11
+ Keyword: query,
12
+ Name: title,
13
+ SuggestType: itemType,
14
+ Url: url
15
+ };
16
+
17
+ return this.trackEvent(EventType.AutocompleteClick, data);
18
+ }
19
+
20
+ trackBannerClick(bannerId: number, campaignId: number): Promise<void> {
21
+ if (!Hawksearch.searchResponse?.trackingId) {
22
+ return Promise.resolve();
23
+ }
24
+
25
+ const data = {
26
+ BannerId: bannerId,
27
+ CampaignId: campaignId,
28
+ TrackingId: Hawksearch.searchResponse.trackingId
29
+ };
30
+
31
+ return this.trackEvent(EventType.BannerClick, data);
32
+ }
33
+
34
+ trackBannerImpression(bannerId: number, campaignId: number): Promise<void> {
35
+ if (!Hawksearch.searchResponse?.trackingId) {
36
+ return Promise.resolve();
37
+ }
38
+
39
+ const data = {
40
+ BannerId: bannerId,
41
+ CampaignId: campaignId,
42
+ TrackingId: Hawksearch.searchResponse.trackingId
43
+ };
44
+
45
+ return this.trackEvent(EventType.BannerImpression, data);
46
+ }
47
+
48
+ trackPageLoad(pageType: PageType): Promise<void> {
49
+ const data = {
50
+ PageTypeId: pageType,
51
+ RequestPath: window.location.pathname,
52
+ Qs: window.location.search,
53
+ ViewportHeight: document.documentElement.clientHeight,
54
+ ViewportWidth: document.documentElement.clientWidth
55
+ };
56
+
57
+ return this.trackEvent(EventType.PageLoad, data);
58
+ }
59
+
60
+ trackSearchResultClick(id: string, url: string, event?: PointerEvent): Promise<void> {
61
+ if (!Hawksearch.searchResponse?.trackingId) {
62
+ return Promise.resolve();
63
+ }
64
+
65
+ const data = {
66
+ UniqueId: id,
67
+ Url: url,
68
+ TrackingId: Hawksearch.searchResponse.trackingId,
69
+ RequestPath: window.location.pathname,
70
+ Qs: window.location.search,
71
+ ScrollX: window.scrollX,
72
+ ScrollY: window.scrollY,
73
+ ViewportHeight: document.documentElement.clientHeight,
74
+ ViewportWidth: document.documentElement.clientWidth,
75
+ MouseX: event?.pageX,
76
+ MouseY: event?.pageY
77
+ };
78
+
79
+ return this.trackEvent(EventType.Click, data);
80
+ }
81
+
82
+ trackSearch(query: string | undefined, newSearch: boolean): Promise<void> {
83
+ if (!Hawksearch.searchResponse?.trackingId) {
84
+ return Promise.resolve();
85
+ }
86
+
87
+ const data = {
88
+ QueryId: newSearch ? this.setNewQueryId() : this.getQueryId(),
89
+ TrackingId: Hawksearch.searchResponse.trackingId,
90
+ TypeId: newSearch ? SearchType.Initial : SearchType.Refinement,
91
+ ViewportHeight: document.documentElement.clientHeight,
92
+ ViewportWidth: document.documentElement.clientWidth,
93
+ keyword: query
94
+ };
95
+
96
+ return this.trackEvent(EventType.Search, data);
97
+ }
98
+
99
+ trackEvent(type: EventType, data: any): Promise<void> {
100
+ if (Hawksearch.config.trackingEnabled === false) {
101
+ return Promise.resolve();
102
+ }
103
+
104
+ const request = {
105
+ ClientGuid: Hawksearch.config.clientId,
106
+ EventType: type,
107
+ EventData: btoa(JSON.stringify(data)),
108
+ VisitorId: this.getVisitorId(),
109
+ VisitId: this.getVisitId()
110
+ };
111
+
112
+ return this.httpPost<void>('/trackevent', request);
113
+ }
114
+
115
+ private getQueryId(): string {
116
+ const key = 'QueryId';
117
+
118
+ let queryId = localStorage.getItem(key);
119
+
120
+ if (!queryId) {
121
+ queryId = this.setNewQueryId();
122
+ }
123
+
124
+ return queryId;
125
+ }
126
+
127
+ private setNewQueryId(): string {
128
+ const queryId = this.generateGuid();
129
+
130
+ localStorage.setItem('QueryId', queryId);
131
+
132
+ return queryId;
133
+ }
134
+ }
135
+
136
+ export const trackingService = new TrackingService();
package/tsconfig.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "outDir": "./dist/",
5
+ "sourceMap": true,
6
+ "noImplicitAny": true,
7
+ "module": "es6",
8
+ "target": "es6",
9
+ "allowJs": true,
10
+ "moduleResolution": "node",
11
+ "forceConsistentCasingInFileNames": true,
12
+ "baseUrl": "./",
13
+ "paths": {
14
+ "@assets/*": ["src/assets/*"],
15
+ "@components": ["src/components/index"],
16
+ "@helpers": ["src/helpers/index"],
17
+ "@models": ["src/models/index"],
18
+ "@services": ["src/services/index"]
19
+ }
20
+ },
21
+ "include": ["src", "typings.d.ts"]
22
+ }
package/typings.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ declare module '*.scss';
2
+
3
+ declare module '*.hbs' {
4
+ const content: any;
5
+ export default content;
6
+ }
7
+
8
+ declare module '*.html' {
9
+ const content: any;
10
+ export default content;
11
+ }
12
+
13
+ declare module '*.png' {
14
+ const content: any;
15
+ export default content;
16
+ }
17
+
18
+ declare module '*.svg' {
19
+ const content: any;
20
+ export default content;
21
+ }
@@ -0,0 +1,75 @@
1
+ const path = require('path');
2
+ const HtmlWebpackPlugin = require('html-webpack-plugin');
3
+ const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
4
+
5
+ module.exports = {
6
+ mode: 'development',
7
+ entry: {
8
+ 'hawksearch-ui': './src/index.ts'
9
+ },
10
+ devtool: 'source-map',
11
+ plugins: [
12
+ new HtmlWebpackPlugin({
13
+ template: './index.html',
14
+ filename: 'index.html'
15
+ }),
16
+ new HtmlWebpackPlugin({
17
+ template: './custom1.html',
18
+ filename: 'custom1.html'
19
+ }),
20
+ new HtmlWebpackPlugin({
21
+ template: './custom2.html',
22
+ filename: 'custom2.html'
23
+ })
24
+ ],
25
+ module: {
26
+ rules: [
27
+ {
28
+ test: /\.scss$/i,
29
+ use: [
30
+ 'raw-loader',
31
+ {
32
+ loader: 'sass-loader',
33
+ options: {
34
+ sassOptions: {
35
+ includePaths: [path.resolve(__dirname, 'node_modules')]
36
+ }
37
+ }
38
+ }
39
+ ]
40
+ },
41
+ {
42
+ test: /\.(png|svg|jpg|jpeg|gif)$/i,
43
+ type: 'asset/resource'
44
+ },
45
+ {
46
+ test: /\.hbs$/i,
47
+ loader: 'raw-loader'
48
+ },
49
+ {
50
+ test: /\.html$/i,
51
+ loader: 'html-loader'
52
+ },
53
+ {
54
+ test: /\.ts$/i,
55
+ use: 'ts-loader',
56
+ exclude: /node_modules/
57
+ }
58
+ ]
59
+ },
60
+ resolve: {
61
+ extensions: ['.ts', '.js'],
62
+ fallback: {
63
+ fs: false
64
+ },
65
+ plugins: [new TsconfigPathsPlugin()]
66
+ },
67
+ output: {
68
+ filename: 'handlebars-ui.js',
69
+ path: path.resolve(__dirname, 'dist'),
70
+ clean: true
71
+ },
72
+ devServer: {
73
+ static: './dist'
74
+ }
75
+ };