@worksafevictoria/wcl7.5 1.5.0 → 1.7.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 (99) hide show
  1. package/.storybook/preview.js +20 -13
  2. package/bin/deploy.sh +1 -1
  3. package/lib/utility.js +10 -8
  4. package/package.json +6 -5
  5. package/src/assets/icons/AppFooter/x-ws-footer.svg +10 -0
  6. package/src/assets/icons/AppFooter/x-ww-footer.svg +28 -0
  7. package/src/assets/icons/SocialShare/x-icon-white.svg +28 -0
  8. package/src/assets/styles/modal.scss +51 -0
  9. package/src/components/Common/CardGrid/index.vue +56 -51
  10. package/src/components/Common/CardGridItem/card-grid-item-caret.vue +7 -4
  11. package/src/components/Common/CardGridItem/card-grid-item-icon.vue +15 -19
  12. package/src/components/Common/CardGridItem/index.vue +77 -63
  13. package/src/components/Containers/Carousel/index.vue +14 -7
  14. package/src/components/Containers/HomepageHeader/index.stories.js +60 -36
  15. package/src/components/Containers/HomepageHeader/index.vue +2 -26
  16. package/src/components/Containers/HomepageHeaderNew/index.stories.js +15 -15
  17. package/src/components/Containers/HomepageHeaderNew/index.vue +97 -68
  18. package/src/components/Containers/SectionGroup/index.vue +1 -1
  19. package/src/components/Containers/Subheader/index.vue +5 -1
  20. package/src/components/Global/AppFooter/FooterSocialShare/index.vue +1 -1
  21. package/src/components/Global/AppFooter/index.vue +14 -7
  22. package/src/components/Global/AppFooter/styles.scss +3 -0
  23. package/src/components/Global/AppHeaderNew/styles.scss +10 -15
  24. package/src/components/Global/BackToTop/index.vue +8 -8
  25. package/src/components/Global/Cookies/index.stories.js +16 -10
  26. package/src/components/Global/Cookies/index.vue +280 -243
  27. package/src/components/Global/Cookies/styles.scss +54 -54
  28. package/src/components/Global/DirectoryFilters/SingleTaxonomy/index.vue +50 -133
  29. package/src/components/Global/DirectoryFilters/index.vue +3 -0
  30. package/src/components/Global/GlobalNotice/index.vue +79 -100
  31. package/src/components/Global/SocialShare/index.vue +1 -1
  32. package/src/components/Global/Strip/index.vue +1 -1
  33. package/src/components/Paragraphs/Accordion/AccordionItem/index.vue +8 -4
  34. package/src/components/Paragraphs/Accordion/StepperItem/index.vue +23 -23
  35. package/src/components/Paragraphs/Accordion/index.stories.js +21 -18
  36. package/src/components/Paragraphs/Accordion/index.vue +52 -48
  37. package/src/components/Paragraphs/BrowseContent/index.vue +1 -1
  38. package/src/components/Paragraphs/BrowseContent/setup.vue +284 -0
  39. package/src/components/Paragraphs/Chart/Constants.js +952 -952
  40. package/src/components/Paragraphs/Chart/index.vue +232 -241
  41. package/src/components/Paragraphs/Directory/HSCP/Records/SingleRecord/index.stories.js +34 -0
  42. package/src/components/Paragraphs/Directory/HSCP/Records/SingleRecord/index.vue +321 -0
  43. package/src/components/Paragraphs/Directory/HSCP/Records/index.stories.js +19 -0
  44. package/src/components/Paragraphs/Directory/HSCP/Records/index.vue +345 -0
  45. package/src/components/Paragraphs/Directory/HSCP/Records/pagination.vue +179 -0
  46. package/src/components/Paragraphs/Directory/Records/CJ/index.vue +1 -1
  47. package/src/components/Paragraphs/Directory/Records/ISP/index.vue +1 -1
  48. package/src/components/Paragraphs/Directory/Records/PRS/index.stories.js +34 -0
  49. package/src/components/Paragraphs/Directory/Records/PRS/index.vue +5 -1
  50. package/src/components/Paragraphs/Directory/Records/index.storieshide.js +47 -0
  51. package/src/components/Paragraphs/Directory/Records/index.vue +52 -33
  52. package/src/components/Paragraphs/Directory/constants.js +23 -5
  53. package/src/components/Paragraphs/Directory/index.vue +14 -14
  54. package/src/components/Paragraphs/Directory/{Records/styles.scss → styles.scss} +5 -3
  55. package/src/components/Paragraphs/ListGroup/index.vue +5 -1
  56. package/src/components/Paragraphs/Map/Constants.js +4790 -0
  57. package/src/components/Paragraphs/Map/index.mdx +29 -0
  58. package/src/components/Paragraphs/Map/index.stories.js +15 -0
  59. package/src/components/Paragraphs/Map/index.vue +295 -0
  60. package/src/components/Paragraphs/Map/postcode_location.json +3543 -0
  61. package/src/components/Paragraphs/ScrollSpy/index.vue +23 -14
  62. package/src/components/Paragraphs/SelectableCards/index.vue +15 -12
  63. package/src/components/Paragraphs/TabbedCards/index.vue +13 -14
  64. package/src/components/Paragraphs/Tabs/index.vue +19 -17
  65. package/src/components/Paragraphs/TextMedia/MediaTypes/Video/index.vue +9 -9
  66. package/src/components/Paragraphs/TextMedia/index.vue +20 -16
  67. package/src/components/Paragraphs/VideoGrid/index.stories.js +43 -19
  68. package/src/components/Paragraphs/VideoGrid/index.vue +13 -13
  69. package/src/components/Paragraphs/Webform/index.stories.js +82 -69
  70. package/src/components/SubComponents/Breadcrumb/index.vue +4 -0
  71. package/src/components/SubComponents/CardGroup/index.vue +5 -1
  72. package/src/components/SubComponents/FormAddressPostcode/index.vue +35 -37
  73. package/src/components/SubComponents/FormInstance/components/handler/index.vue +25 -29
  74. package/src/components/SubComponents/FormInstance/components/renderer/index.vue +81 -30
  75. package/src/components/SubComponents/FormInstance/models/overrides/file.js +38 -40
  76. package/src/components/SubComponents/FormInstance/services/form-submit-parser.js +22 -15
  77. package/src/components/SubComponents/FormInstance/services/registry-factory.js +1 -1
  78. package/src/components/SubComponents/FormInstance/stories/fileupload.stories.js +57 -0
  79. package/src/components/SubComponents/FormInstance/stories/mocks/fileupload.json +25 -0
  80. package/src/components/SubComponents/FormInstance/style.scss +2 -2
  81. package/src/components/SubComponents/FormInstance/tests/address.test.js +4 -4
  82. package/src/components/SubComponents/FormInstance/tests/checkboxes.test.js +7 -7
  83. package/src/components/SubComponents/FormInstance/tests/customcomposite.test.js +15 -15
  84. package/src/components/SubComponents/FormInstance/tests/date.test.js +8 -8
  85. package/src/components/SubComponents/FormInstance/tests/form-test-utils.js +9 -9
  86. package/src/components/SubComponents/FormInstance/tests/multiple.test.js +13 -13
  87. package/src/components/SubComponents/FormInstance/tests/rule-visible.test.js +120 -120
  88. package/src/components/SubComponents/FormInstance/tests/scale.test.js +6 -6
  89. package/src/components/SubComponents/FormInstance/tests/url.test.js +13 -10
  90. package/src/components/SubComponents/Pagination/index.vue +19 -18
  91. package/src/components/SubComponents/ResourceGroup/index.vue +5 -1
  92. package/src/components/SubComponents/Search/SearchListing/index.vue +20 -20
  93. package/src/components/SubComponents/Search/index.vue +42 -35
  94. package/src/components/SubComponents/VideoThumbnail/index.vue +48 -133
  95. package/src/includes/scss/vars/src/colors.module.scss +28 -1
  96. package/src/index.js +25 -3
  97. package/src/main.js +2 -10
  98. package/src/mock/carousel-items.js +71 -46
  99. package/src/mock/course-provider.js +273 -0
@@ -0,0 +1,29 @@
1
+ import { Canvas, Meta } from '@storybook/blocks';
2
+
3
+ import * as GeoStories from './index.stories';
4
+
5
+ <Meta of={GeoStories} />
6
+
7
+ # Map
8
+
9
+ Map support links
10
+
11
+ - [vue3-google-map](https://vue3-google-map.com/ 'Documentation') (package documentation)
12
+ - [Google-maps](https://developers.google.com/maps/documentation/javascript 'Google maps') (customisation documentation)
13
+
14
+ <Canvas of={GeoStories.Default} />
15
+
16
+ ## Map filters
17
+
18
+ Filtering options. These are passed to 'directory-filters' component.
19
+
20
+ ```tsx
21
+ ;[
22
+ { record_id: 'DEATH_DATE', name: 'Year', date: true }, // Primary
23
+ { record_id: 'GENDER', name: 'Gender' }, // Secondary
24
+ { record_id: 'AGE_RANGE', name: 'Age range' },
25
+ { record_id: 'CATEGORY', name: 'Category' },
26
+ { record_id: 'INDUSTRY', name: 'Industry' },
27
+ { record_id: 'SIZE_', name: 'Size of Organisation' },
28
+ ]
29
+ ```
@@ -0,0 +1,15 @@
1
+ import GeoChart from './index.vue'
2
+ import { filterFields, statsData } from './Constants'
3
+ export default {
4
+ title: 'Paragraphs/Map',
5
+ component: GeoChart,
6
+ }
7
+ export const Default = {
8
+ args: {
9
+ filterFields: filterFields,
10
+ statsData: statsData,
11
+ },
12
+ parameters: {
13
+ deepControls: { enabled: true },
14
+ },
15
+ }
@@ -0,0 +1,295 @@
1
+ <template>
2
+ <container>
3
+ <row>
4
+ <column class="pb-5">
5
+ <single-taxonomy
6
+ v-for="(t, i) in computedPropFilters"
7
+ :key="i"
8
+ :ref="`${t.record_id}`"
9
+ :data="t"
10
+ :results="filteredList.length"
11
+ :loading="isFiltering"
12
+ class="wcl-directory-filters__filterButton"
13
+ @onFilter="onFilter"
14
+ />
15
+ <filter-button
16
+ v-if="!hideReset"
17
+ :is-reset="true"
18
+ class="wcl-directory-filters__filterButton"
19
+ @clicked="reset"
20
+ />
21
+ </column>
22
+ </row>
23
+ <row>
24
+ <column>
25
+ <div>
26
+ <GoogleMap
27
+ api-key="AIzaSyD76GAmQQ6DuxKWf-aLXPZ9pwdz4nOvs2c"
28
+ :style="`width: 100%; height: ${mapHeight}`"
29
+ :center="center"
30
+ :zoom="zoom"
31
+ :zoom-control="true"
32
+ :mapTypeControl="false"
33
+ :streetViewControl="false"
34
+ :fullscreenControl="true"
35
+ >
36
+ <!-- <CustomControl
37
+ position="TOP_CENTER"
38
+ class="mt-4"
39
+ style="background-color: rgba(0, 0, 0, 0.2); border-radius: 5px"
40
+ ><row>
41
+ <column class="py-2 px-3">
42
+ <single-taxonomy
43
+ v-for="(t, i) in computedPropFilters"
44
+ :key="i"
45
+ :ref="`${t.record_id}`"
46
+ :data="t"
47
+ :results="filteredList.length"
48
+ :loading="isFiltering"
49
+ class="wcl-directory-filters__filterButton"
50
+ @onFilter="onFilter"
51
+ />
52
+ <filter-button
53
+ v-if="!hideReset"
54
+ :is-reset="true"
55
+ class="wcl-directory-filters__filterButton"
56
+ @clicked="reset"
57
+ />
58
+ </column>
59
+ </row>
60
+ </CustomControl> -->
61
+ <!-- <MarkerCluster> -->
62
+ <Marker
63
+ v-for="(location, i) in postcodes"
64
+ :options="{
65
+ position: location.center,
66
+ label: `${location.deaths}`,
67
+ title: `${location.deaths} ${location.deaths > 1 ? 'deaths' : 'death'}`,
68
+ }"
69
+ :key="i"
70
+ />
71
+ <!-- </MarkerCluster> -->
72
+ </GoogleMap>
73
+ </div>
74
+ </column>
75
+ </row>
76
+ </container>
77
+ </template>
78
+
79
+ <script>
80
+ import postcode from './postcode_location.json'
81
+ import {
82
+ GoogleMap,
83
+ Marker,
84
+ MarkerCluster,
85
+ Circle,
86
+ CustomControl,
87
+ InfoWindow,
88
+ } from 'vue3-google-map'
89
+ import Container from '../../Containers/Container/index.vue'
90
+ import Column from '../../Containers/Column/index.vue'
91
+ import Row from '../../Containers/Row/index.vue'
92
+ import FilterButton from '../../Common/FilterButton/index.vue' // Reset
93
+ import SingleTaxonomy from '../../Global/DirectoryFilters/SingleTaxonomy/index.vue'
94
+ import { BFormGroup, BFormSelect, BButton } from 'bootstrap-vue-next'
95
+
96
+ export default {
97
+ name: 'GeoChart',
98
+ components: {
99
+ Row,
100
+ Column,
101
+ Container,
102
+ FilterButton,
103
+ SingleTaxonomy,
104
+ BFormGroup,
105
+ BFormSelect,
106
+ GoogleMap,
107
+ Marker,
108
+ MarkerCluster,
109
+ Circle,
110
+ CustomControl,
111
+ InfoWindow,
112
+ BButton,
113
+ },
114
+ props: {
115
+ statsData: { type: Array, default: () => [] },
116
+ filterFields: { type: Array, default: () => [] },
117
+ chart: { type: Object, default: () => {} },
118
+ },
119
+ data() {
120
+ return {
121
+ postcode,
122
+ zoom: 7,
123
+ mapHeight: '700px',
124
+ center: { lat: -36.5, lng: 145.3 },
125
+ hideReset: true,
126
+ isFiltering: false,
127
+ filters: {
128
+ taxonomies: [],
129
+ selected: {},
130
+ availableBundles: [],
131
+ },
132
+ }
133
+ },
134
+ mounted() {
135
+ this.resize()
136
+ window.onresize = () => {
137
+ this.resize()
138
+ }
139
+ },
140
+ computed: {
141
+ graphOptions: function () {
142
+ return this.filterFields.slice(1).map((field) => {
143
+ if (!this.graphSelected) {
144
+ this.graphSelected = field.record_id
145
+ }
146
+ return { value: field.record_id, text: field.name }
147
+ })
148
+ },
149
+ computedPropFilters: function () {
150
+ let fields = this.filterFields.map((field) => {
151
+ let terms = null
152
+ if (field.date) {
153
+ terms = this.statsData
154
+ .map((item) => item[field.record_id].split('/')[2]) // Date field get year
155
+ .filter((value, index, self) => self.indexOf(value) === index)
156
+ .map((value) => {
157
+ return { tid: value, name: value, preselected: false }
158
+ })
159
+ .sort((a, b) => a.name.localeCompare(b.name))
160
+ } else {
161
+ terms = this.statsData
162
+ .map((item) => item[field.record_id])
163
+ .filter((value, index, self) => self.indexOf(value) === index)
164
+ .map((value) => {
165
+ return { tid: value, name: value, preselected: false }
166
+ })
167
+ .sort((a, b) => a.name.localeCompare(b.name))
168
+ }
169
+ return {
170
+ name: field.name,
171
+ record_id: field.record_id,
172
+ terms,
173
+ }
174
+ })
175
+ return fields
176
+ },
177
+ filteredList: function () {
178
+ let filterKeys = Object.keys(this.filters.selected).map((key) => key)
179
+ let list = this.statsData.filter((element) => {
180
+ let include = true
181
+ for (var i = 0, n = filterKeys.length; i < n; ++i) {
182
+ if (this.filters.selected[filterKeys[i]].length > 0) {
183
+ let filterType = this.filterFields.find(
184
+ (item) => item.record_id === filterKeys[i],
185
+ )
186
+ if (filterType.date) {
187
+ // Filter by year
188
+ if (
189
+ this.filters.selected[filterKeys[i]].indexOf(
190
+ element[filterKeys[i]].split('/')[2],
191
+ ) === -1
192
+ ) {
193
+ include = false
194
+ }
195
+ } else {
196
+ if (
197
+ this.filters.selected[filterKeys[i]].indexOf(
198
+ element[filterKeys[i]],
199
+ ) === -1
200
+ ) {
201
+ include = false
202
+ }
203
+ }
204
+ }
205
+ }
206
+ if (include) {
207
+ return element
208
+ }
209
+ })
210
+ return list
211
+ },
212
+ postcodes: function () {
213
+ if (this.filteredList.length > 1) {
214
+ let location = {}
215
+ this.filteredList.forEach((item) => {
216
+ if (location[item.POSTCODE]) {
217
+ location[item.POSTCODE].deaths++
218
+ } else {
219
+ let pc = this.postcode.find((obj) => obj.postcode == item.POSTCODE)
220
+ if (pc) {
221
+ location[item.POSTCODE] = {
222
+ center: { lat: pc.lat, lng: pc.long },
223
+ deaths: 1,
224
+ }
225
+ } else {
226
+ console.log('🚀 ~ item.POSTCODE:', item.POSTCODE)
227
+ }
228
+ }
229
+ })
230
+ return location
231
+ }
232
+ },
233
+ },
234
+ methods: {
235
+ resize() {
236
+ if (window.innerWidth > 980) {
237
+ this.zoom = 7
238
+ this.mapHeight = '700px'
239
+ } else if (window.innerWidth <= 980) {
240
+ this.zoom = 6
241
+ this.mapHeight = '500px'
242
+ }
243
+ },
244
+ onFilter(filters) {
245
+ this.hideReset = false
246
+ const allFiltersUnselected = Object.values(this.$refs).every(
247
+ (taxonomy) => {
248
+ return Object.values(taxonomy[0].selectedFilters).every(
249
+ (filter) => filter.filter((item) => !item.preselected).length === 0,
250
+ )
251
+ },
252
+ )
253
+ if (allFiltersUnselected) {
254
+ this.hideReset = true
255
+ }
256
+ Object.keys(filters).forEach((filter) => {
257
+ this.filters.selected[filter] = filters[filter].map((obj) => obj.tid)
258
+ })
259
+ },
260
+ reset() {
261
+ this.hideReset = true
262
+ Object.keys(this.$refs).forEach((key) => {
263
+ this.$refs[key][0].reset()
264
+ })
265
+ this.filters.selected = {}
266
+ },
267
+ noData() {
268
+ return [
269
+ [
270
+ { label: 'Results', type: 'string' },
271
+ { label: 'Results', type: 'number' },
272
+ { role: 'style', type: 'string' },
273
+ { role: 'annotation', type: 'string' },
274
+ ],
275
+ ['', 0, null, 'No results found'],
276
+ ]
277
+ },
278
+ },
279
+ }
280
+ </script>
281
+
282
+ <style lang="scss" scoped>
283
+ @import '../../../includes/scss/all';
284
+
285
+ .wcl-directory-filters {
286
+ &__filterButton {
287
+ display: inline-block;
288
+ padding-right: 16px;
289
+ line-height: 3;
290
+ &:last-child {
291
+ padding-right: 0px;
292
+ }
293
+ }
294
+ }
295
+ </style>