@worksafevictoria/wcl7.5 1.3.0 → 1.4.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worksafevictoria/wcl7.5",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "main": "src/index.js",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  >
32
32
  <column
33
33
  v-for="(item, index) in cards"
34
- :key="`${redrawCounter}-${index}-${_uid}`"
34
+ :key="`${redrawCounter}-${index}-${$options._uid}`"
35
35
  ref="cardColumns"
36
36
  :lg="largeViewPort"
37
37
  :md="mediumViewPort"
@@ -188,7 +188,7 @@ export default {
188
188
  return 6
189
189
  },
190
190
  uniqueClass() {
191
- return 'cardGrid' + this._uid
191
+ return `cardGrid-${this.$options._uid}`
192
192
  }
193
193
  },
194
194
  watch: {
@@ -0,0 +1,30 @@
1
+ import CarouselComponent from './index.vue'
2
+ import { mockCarouselItems } from '../../../mock/carousel-items'
3
+
4
+ export default {
5
+ title: 'Website-Redesign/Carousel',
6
+ component: CarouselComponent,
7
+ data() {
8
+ return {
9
+ mockCarouselItems
10
+ }
11
+ },
12
+ args: {
13
+ carouselItems: mockCarouselItems,
14
+ storybook: true
15
+ },
16
+
17
+ }
18
+
19
+ const DefaultCarousel = (args) => ({
20
+ components: { CarouselComponent },
21
+ setup() {
22
+ return { args }
23
+ },
24
+ template: `<div style="width: 50%; height: auto;">
25
+ <h2>Carousel Component</h2>
26
+ <carousel-component v-bind="args"></carousel-component>
27
+ </div>`
28
+ })
29
+
30
+ export const Default = DefaultCarousel.bind({})
@@ -0,0 +1,165 @@
1
+ <template>
2
+ <div>
3
+ <b-carousel
4
+ id="carousel-1"
5
+ v-model="slide"
6
+ interval=0
7
+ controls
8
+ indicators
9
+ keyboard
10
+ background="#ababab"
11
+ >
12
+ <b-carousel-slide
13
+ v-for="item in filteredCarouselItems"
14
+ :key="item.id"
15
+
16
+ :img-src="item.image"
17
+ @click.prevent="handleClick(item.link)"
18
+ >
19
+ <h4>{{ item.content}}</h4>
20
+ </b-carousel-slide>
21
+ </b-carousel>
22
+ </div>
23
+ </template>
24
+
25
+ <script>
26
+ import { BCarousel, BCarouselSlide } from 'bootstrap-vue-next'
27
+ import { isAbsoluteUrl, navigateToPath } from '../../../../lib/utility'
28
+
29
+ export default {
30
+ name: 'CarouselComponent',
31
+ data() {
32
+ return {
33
+ slide: 0,
34
+ }
35
+ },
36
+ components: {
37
+ BCarousel,
38
+ BCarouselSlide
39
+ },
40
+ props: {
41
+ carouselItems: {
42
+ type: Array,
43
+ required: true,
44
+ default: () => [],
45
+ },
46
+ storybook: {
47
+ type: Boolean,
48
+ default: false
49
+ }
50
+ },
51
+ computed: {
52
+ filteredCarouselItems() {
53
+
54
+ var todayDate = new Date()
55
+
56
+ for (var i = 0, length = this.carouselItems.length; i < length; i++) {
57
+ if (this.carouselItems[i].favorite === 'Yes') {
58
+ this.carouselItems[i].active = 'Yes'
59
+ } else if (new Date(this.carouselItems[i].dateStart).valueOf() <= todayDate.valueOf()) {
60
+ if (new Date(this.carouselItems[i].dateEnd).valueOf() >= todayDate.valueOf()) {
61
+ this.carouselItems[i].active = 'Yes'
62
+ }
63
+ }
64
+ }
65
+
66
+ let filtered = this.carouselItems.filter(e =>
67
+ e.active === 'Yes');
68
+ return filtered
69
+ }
70
+ },
71
+ methods: {
72
+
73
+ handleClick(link) {
74
+ if (link) {
75
+ if (isAbsoluteUrl(link)) {
76
+ navigateToPath(link, true)
77
+ } else {
78
+ if (this.storybook) {
79
+ alert('This link will go to: ' + link)
80
+ } else {
81
+ this.$router.push({ path: link })
82
+ }
83
+ }
84
+ }
85
+ },
86
+
87
+ formatDate(date) {
88
+ return [
89
+ date.getFullYear(),
90
+ ('0' + date.getDate()).slice(-2),
91
+ ('0' + (date.getMonth() + 1)).slice(-2)
92
+ ].join('-')
93
+ }
94
+ }
95
+ }
96
+ </script>
97
+
98
+ <style lang="scss" scoped>
99
+ @import '../../../includes/scss/all';
100
+ </style>
101
+
102
+ <style>
103
+ .carousel {
104
+ position: relative;
105
+ padding-bottom: 7rem;
106
+ }
107
+
108
+ .carousel-inner {
109
+ overflow: visible;
110
+ }
111
+
112
+ .carousel-indicators {
113
+ padding-bottom: 3rem;
114
+ float: right;
115
+ right: 2% !important;
116
+ width: 20%;
117
+ justify-content: end;
118
+ margin-left: 80%;
119
+ margin-right: 0;
120
+ }
121
+
122
+ .carousel-indicators button {
123
+ width: 10px !important;
124
+ height: 10px !important;
125
+ border-radius: 50% !important;
126
+ background-color: black !important;
127
+ }
128
+
129
+ .carousel-indicators button:focus,
130
+ .carousel-indicators button:active {
131
+ outline: none !important;
132
+ box-shadow: none;
133
+
134
+ }
135
+
136
+ .carousel-caption {
137
+ color: black;
138
+ top: 100%;
139
+ left: 0;
140
+ right: 20%;
141
+ text-align: left;
142
+ text-decoration: underline;
143
+ }
144
+
145
+ .carousel-control-next,
146
+ .carousel-control-prev {
147
+ bottom: 7rem;
148
+ }
149
+
150
+ .carousel-control-prev:focus,
151
+ .carousel-control-prev:active,
152
+ .carousel-control-next:focus,
153
+ .carousel-control-next:active {
154
+ outline: none !important;
155
+ box-shadow: none;
156
+ }
157
+
158
+ .carousel-control-prev-icon,
159
+ .carousel-control-next-icon {
160
+ height: 50px !important;
161
+ width: 50px !important;
162
+ outline:none !important;
163
+ }
164
+
165
+ </style>
@@ -0,0 +1,75 @@
1
+ import HomepageHeader from './index.vue'
2
+ import { mockCarouselItems } from '../../../mock/carousel-items'
3
+
4
+ const fetchMenu = () =>
5
+ Promise.resolve([
6
+ {
7
+ title: 'Report an incident',
8
+ relative: '/report-incident'
9
+ },
10
+ {
11
+ title: 'Report a case of COVID-19',
12
+ relative: '/report-confirmed-positive-case-covid-19'
13
+ },
14
+ {
15
+ title: 'Make a claim',
16
+ relative: '/before-claim'
17
+ },
18
+ {
19
+ title: 'Apply for a licence',
20
+ relative: '/apply-for-licence'
21
+ },
22
+ {
23
+ title: 'Pay or renew your insurance',
24
+ relative: '/pay-or-renew-your-workcover-insurance-premium'
25
+ }
26
+ ])
27
+
28
+ const contentParser = () => {
29
+ return Promise.resolve({
30
+ results: [
31
+ {
32
+ title: 'Content title 1',
33
+ description: 'Content description 2'
34
+ }
35
+ ],
36
+ offset: 0,
37
+ numFound: 1000
38
+ })
39
+ }
40
+
41
+ export default {
42
+ title: 'Website_Redesign/HomepageHeader',
43
+ component: HomepageHeader,
44
+ argTypes: {
45
+ fetchMenu: {
46
+ control: 'function',
47
+ table: { disable: true }
48
+ },
49
+ contentParser: {
50
+ control: 'function',
51
+ table: { disable: true }
52
+ }
53
+ },
54
+ args: {
55
+ fetchMenu: fetchMenu,
56
+ slideList: mockCarouselItems,
57
+ isStorybook: true,
58
+ contentParser: contentParser
59
+ }
60
+ }
61
+
62
+ const DefaultHH = (args) => ({
63
+ components: { HomepageHeader },
64
+ setup() {
65
+ return { args };
66
+ },
67
+ mounted() {
68
+ setTimeout(() => {
69
+ this.$refs.hh.renderMenu()
70
+ })
71
+ },
72
+ template: '<homepage-header v-bind="args" ref="hh" />'
73
+ })
74
+
75
+ export const Default = DefaultHH.bind({})
@@ -0,0 +1,198 @@
1
+ <template>
2
+ <div class="homepage-header">
3
+ <div class="container">
4
+ <search
5
+ :page-limit="3"
6
+ :page-number="1"
7
+ :is-typeahead="true"
8
+ :content-parser="contentParser"
9
+ tabindex="0"
10
+ class="homepage-header__search"
11
+ />
12
+ <row class="wcl-hero-header__content-wrapper container">
13
+ <column class="wcl-hero-header__content-wrapper__content-col col-12 col-md-7 wcl-hero-header__content-wrapper__content-col--split wcl-rich-text--ltr">
14
+ <carousel-component
15
+ :carouselItems="this.slideList"
16
+ :storybook="this.isStorybook"
17
+ />
18
+ </column>
19
+ <column class="wcl-hero-header__side col-md-4 offset-md-1">
20
+ <cta-button
21
+ v-for="(link, i) in links"
22
+ :key="i"
23
+ class="iebtn"
24
+ :url="link.path"
25
+ type="dark"
26
+ :stretch="true"
27
+ >{{ link.text }}</cta-button
28
+ >
29
+ <cta-button
30
+ class="iebtn"
31
+ url="/choose-your-language"
32
+ type="dark"
33
+ :stretch="true"
34
+ :glyph="earthIcon"
35
+ :is-centred="false"
36
+ >Choose your language</cta-button
37
+ >
38
+ </column>
39
+ </row>
40
+ </div>
41
+ </div>
42
+ </template>
43
+ <script>
44
+ import Search from './../../SubComponents/Search/index.vue'
45
+ import CtaButton from './../../SubComponents/CtaButton/index.vue'
46
+ import earthIcon from './../../../assets/icons/earth.svg?url'
47
+ import CarouselComponent from './../../Containers/Carousel/index.vue'
48
+ import Row from './../../Containers/Row/index.vue'
49
+ import Column from './../../Containers/Column/index.vue'
50
+
51
+ export default {
52
+ name: 'HomepageHeader',
53
+ components: {
54
+ Search,
55
+ CtaButton,
56
+ CarouselComponent,
57
+ Row,
58
+ Column
59
+ },
60
+ props: {
61
+ contentParser: {
62
+ type: Function,
63
+ required: true,
64
+ },
65
+ fetchMenu: {
66
+ type: Function,
67
+ required: true,
68
+ },
69
+ slideList: {
70
+ type: Array,
71
+ required: true,
72
+ },
73
+ isStorybook: {
74
+ type: Boolean,
75
+ default: false
76
+ }
77
+ },
78
+ async mounted() {
79
+ await this.renderMenu()
80
+ },
81
+
82
+ data: () => ({
83
+ links: [],
84
+ earthIcon,
85
+ }),
86
+ methods: {
87
+ async renderMenu() {
88
+ const menu = await this.fetchMenu()
89
+ this.links = (Array.isArray(menu) ? menu : []).map((item) => {
90
+ return {
91
+ text: item.title,
92
+ path: item.relative || item.absolute,
93
+ }
94
+ })
95
+ },
96
+ },
97
+ }
98
+ </script>
99
+
100
+ <!-- styles from the heroheader are still used for consistency,
101
+ even though the component itself is no longer imported. -->
102
+
103
+ <style lang="scss" scoped>
104
+ @import '../../../includes/scss/all';
105
+ @import './../../Global/HeroHeader/styles.scss';
106
+
107
+ .homepage-header {
108
+ border-bottom: none !important;
109
+
110
+ :deep(.wysiwyg) {
111
+ h1 {
112
+ @media screen and (max-width: 390px) {
113
+ font-size: 32px;
114
+ line-height: 32px;
115
+ }
116
+
117
+ @media screen and (max-width: 767px) {
118
+ font-size: 36px;
119
+ line-height: 36px;
120
+ margin-bottom: 16px;
121
+ }
122
+ }
123
+ }
124
+
125
+ :deep(.wcl-hero-header__content-wrapper) {
126
+ @include fp('top', 75, 250);
127
+ margin-top: 0;
128
+
129
+ @media screen and (max-width: 540px) {
130
+ padding-right: 35px;
131
+ }
132
+
133
+ }
134
+
135
+ :deep(.wcl-hero-header__wrap) {
136
+ display: block;
137
+ align-items: normal;
138
+ }
139
+
140
+ :deep(.wcl-cta) {
141
+
142
+ margin-left: 0 !important;
143
+
144
+ &:last-of-type {
145
+ img {
146
+ position: absolute;
147
+ right: 16px;
148
+ top: 19px;
149
+ }
150
+ }
151
+ }
152
+
153
+ &__search {
154
+ // margin-top: 10px;
155
+ z-index: 1;
156
+ width: auto;
157
+
158
+ @include mq('xs') {
159
+ padding-right: 0;
160
+ }
161
+
162
+ :deep(.gsc-results-wrapper-visible) {
163
+ display: none !important;
164
+ }
165
+ }
166
+
167
+ @media all and (-ms-high-contrast: none) {
168
+ ::-ms-backdrop,
169
+ .iebtn {
170
+ bottom: 280px;
171
+ left: 650px;
172
+ }
173
+
174
+ /* IE11 */
175
+
176
+ @media screen\9, screen and (max-width: 1150px) {
177
+ .iebtn {
178
+ bottom: 330px;
179
+ left: 480px;
180
+ }
181
+ }
182
+
183
+ @media screen\9, screen and (max-width: 950px) {
184
+ .iebtn {
185
+ bottom: 350px;
186
+ left: 450px;
187
+ }
188
+ }
189
+
190
+ @media screen\9, screen and (max-width: 767px) {
191
+ .iebtn {
192
+ left: 2px;
193
+ top: 10px;
194
+ }
195
+ }
196
+ }
197
+ }
198
+ </style>
@@ -104,8 +104,14 @@ export default {
104
104
  // Some custom logic for gov caretaker logic
105
105
  if (process.env.CARETAKER && process.env.CARETAKER === 'true') {
106
106
  if (!isGovSite(card?.selectedCard?.linkHref)) {
107
- this.$store.commit('page/SET_CARETAKER_REF', 'subheader')
108
- this.$root.$emit('caretaker-open', card?.selectedCard?.linkHref)
107
+ // this.$store.commit('page/SET_CARETAKER_REF', 'subheader')
108
+ // this.$root.$emit('caretaker-open', card?.selectedCard?.linkHref)
109
+ if (this.$pageStore) {
110
+ this.$pageStore.caretaker.referrer = 'subheader'
111
+ }
112
+ if (this.$bus) {
113
+ this.$bus.$emit('caretaker-open', card?.selectedCard?.linkHref)
114
+ }
109
115
  } else {
110
116
  navigateToPath.call(
111
117
  this,
@@ -11,7 +11,7 @@
11
11
  <column>
12
12
  <div class="mobilescreen">Reviewed on {{ updateDate }}</div>
13
13
  <div v-if="!submitted">
14
- <div style="margin-right:10px; display:inline">
14
+ <div style="margin-right: 10px; display: inline">
15
15
  <strong>Was this page helpful?</strong>
16
16
  </div>
17
17
  <input
@@ -86,7 +86,7 @@
86
86
  Cancel
87
87
  </button>
88
88
  <cta-button
89
- style="float:right;"
89
+ style="float: right"
90
90
  :url="''"
91
91
  :rtl="rtl"
92
92
  @clicked="submitFeedback()"
@@ -181,7 +181,7 @@
181
181
  :key="subIndex"
182
182
  class="app-footer-menu__item"
183
183
  :class="{
184
- 'app-footer-menu__item--hide': !menuItem.isOpen
184
+ 'app-footer-menu__item--hide': !menuItem.isOpen,
185
185
  }"
186
186
  >
187
187
  <a
@@ -249,7 +249,7 @@
249
249
  <li
250
250
  class="app-footer-menu__item app-footer-menu__address app-footer-menu__item--link"
251
251
  :class="{
252
- 'app-footer-menu__item--hide': !contactMenuIsOpen
252
+ 'app-footer-menu__item--hide': !contactMenuIsOpen,
253
253
  }"
254
254
  >
255
255
  <p>
@@ -261,7 +261,7 @@
261
261
  <li
262
262
  class="app-footer-menu__item app-footer-menu__item--link"
263
263
  :class="{
264
- 'app-footer-menu__item--hide': !contactMenuIsOpen
264
+ 'app-footer-menu__item--hide': !contactMenuIsOpen,
265
265
  }"
266
266
  >
267
267
  <a class="dark" href="tel:+611800136089">1800 136 089</a>
@@ -269,7 +269,7 @@
269
269
  <li
270
270
  class="app-footer-menu__item app-footer-menu__item--link"
271
271
  :class="{
272
- 'app-footer-menu__item--hide': !contactMenuIsOpen
272
+ 'app-footer-menu__item--hide': !contactMenuIsOpen,
273
273
  }"
274
274
  >
275
275
  <nuxt-link class="dark" to="/contact-worksafe"
@@ -337,7 +337,7 @@
337
337
  <button
338
338
  class="app-footer__main__subscribe-col__btn"
339
339
  :class="{
340
- 'app-footer__main__subscribe-btn--workwell': isWorkwell
340
+ 'app-footer__main__subscribe-btn--workwell': isWorkwell,
341
341
  }"
342
342
  @click="subscribe"
343
343
  >
@@ -385,25 +385,25 @@ export default {
385
385
  Container,
386
386
  Row,
387
387
  Icon,
388
- CtaButton
388
+ CtaButton,
389
389
  },
390
390
  props: {
391
391
  footerMenu: {
392
392
  type: Array,
393
- required: true
393
+ required: true,
394
394
  },
395
395
  changedDate: {
396
396
  type: String,
397
- required: true
397
+ required: true,
398
398
  },
399
399
  isWorkwell: {
400
400
  type: Boolean,
401
- default: false
401
+ default: false,
402
402
  },
403
403
  storybook: {
404
404
  type: Boolean,
405
- default: false
406
- }
405
+ default: false,
406
+ },
407
407
  },
408
408
  data() {
409
409
  return {
@@ -430,8 +430,8 @@ export default {
430
430
  webform_id: 'page_feedback_form',
431
431
  page_url: '',
432
432
  was_the_information_on_this_page_helpful_: '',
433
- message: ''
434
- }
433
+ message: '',
434
+ },
435
435
  }
436
436
  },
437
437
  computed: {
@@ -444,7 +444,7 @@ export default {
444
444
  },
445
445
  processID() {
446
446
  return `${Date.now()}-${Math.floor(Math.random() * 10000)}`
447
- }
447
+ },
448
448
  },
449
449
  watch: {
450
450
  $route() {
@@ -452,10 +452,10 @@ export default {
452
452
  this.submitted = false
453
453
  },
454
454
  showForm: {
455
- handler: function() {
455
+ handler: function () {
456
456
  this.initialiseFeedback()
457
- }
458
- }
457
+ },
458
+ },
459
459
  },
460
460
  mounted() {
461
461
  this.$nextTick(() => {
@@ -510,7 +510,8 @@ export default {
510
510
  const attrs = {
511
511
  event: 'custom.interaction.helpful',
512
512
  label: this.response.was_the_information_on_this_page_helpful_,
513
- title: this.$store?.state?.page?.content?.title
513
+ //title: this.$store?.state?.page?.content?.title,
514
+ title: this.$pageStore?.content?.title,
514
515
  }
515
516
  if (this.$gtm) {
516
517
  this.$gtm.push({ event: 'custom.interaction.helpful', ...attrs })
@@ -518,20 +519,21 @@ export default {
518
519
  },
519
520
  fireGtagFeedback() {
520
521
  const attrs = {
521
- title: this.$store?.state?.page?.content?.title,
522
+ //title: this.$store?.state?.page?.content?.title,
523
+ title: this.$pageStore?.content?.title,
522
524
  label: this.response.was_the_information_on_this_page_helpful_,
523
- processID: this.processID
525
+ processID: this.processID,
524
526
  }
525
527
  if (this.$gtm) {
526
528
  this.$gtm.push({
527
529
  event: 'custom.interaction.helpful.feedback',
528
- ...attrs
530
+ ...attrs,
529
531
  })
530
532
  }
531
533
  },
532
534
  backToTop() {
533
- if (!this.storybook) {
534
- this.$nuxt.$emit('scrollToTop')
535
+ if (this.$bus) {
536
+ this.$bus.$emit('scrollToTop')
535
537
  }
536
538
  },
537
539
  isAbsoluteUrl(uri) {
@@ -617,13 +619,13 @@ export default {
617
619
  this.$gtm.push({
618
620
  event: 'custom.interaction.outboundlink',
619
621
  category: item.title,
620
- label: item.absolute
622
+ label: item.absolute,
621
623
  })
622
624
  }
623
625
  window.open(item.absolute)
624
626
  }
625
- }
626
- }
627
+ },
628
+ },
627
629
  }
628
630
  </script>
629
631