fcad-core-dragon 2.0.0-beta.1 → 2.0.0-beta.3

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/.editorconfig +33 -33
  2. package/.eslintignore +29 -29
  3. package/{.eslintrc.js → .eslintrc.cjs} +81 -86
  4. package/CHANGELOG +364 -364
  5. package/README.md +71 -71
  6. package/bk.scss +117 -0
  7. package/package.json +61 -63
  8. package/src/$locales/en.json +143 -179
  9. package/src/$locales/fr.json +105 -181
  10. package/src/assets/data/onboardingMessages.json +47 -47
  11. package/src/components/AppBase.vue +1054 -614
  12. package/src/components/AppBaseButton.vue +87 -63
  13. package/src/components/AppBaseErrorDisplay.vue +438 -420
  14. package/src/components/AppBaseFlipCard.vue +84 -83
  15. package/src/components/AppBaseModule.vue +1673 -1842
  16. package/src/components/AppBasePage.vue +779 -312
  17. package/src/components/AppBasePopover.vue +41 -0
  18. package/src/components/AppCompAudio.vue +234 -0
  19. package/src/components/AppCompBranchButtons.vue +552 -582
  20. package/src/components/AppCompButtonProgress.vue +126 -147
  21. package/src/components/AppCompCarousel.vue +298 -192
  22. package/src/components/AppCompInputCheckBoxNext.vue +195 -0
  23. package/src/components/AppCompInputDropdownNext.vue +159 -0
  24. package/src/components/AppCompInputRadioNext.vue +152 -0
  25. package/src/components/{AppCompInputTextBox.vue → AppCompInputTextNext.vue} +106 -91
  26. package/src/components/AppCompInputTextTableNext.vue +141 -0
  27. package/src/components/AppCompInputTextToFillDropdownNext.vue +230 -0
  28. package/src/components/{AppCompInputTextToFillText.vue → AppCompInputTextToFillNext.vue} +171 -164
  29. package/src/components/AppCompJauge.vue +74 -55
  30. package/src/components/AppCompMenu.vue +413 -209
  31. package/src/components/AppCompMenuItem.vue +228 -174
  32. package/src/components/AppCompNavigation.vue +960 -949
  33. package/src/components/AppCompNoteCall.vue +133 -126
  34. package/src/components/AppCompNoteCredit.vue +292 -164
  35. package/src/components/AppCompPlayBar.vue +1218 -1319
  36. package/src/components/AppCompPlayBarNext.vue +2052 -0
  37. package/src/components/AppCompPlayBarProgress.vue +82 -0
  38. package/src/components/AppCompPopUpNext.vue +503 -0
  39. package/src/components/{AppCompQuiz.vue → AppCompQuizNext.vue} +2904 -2989
  40. package/src/components/AppCompQuizRecall.vue +276 -250
  41. package/src/components/AppCompSVGNext.vue +347 -0
  42. package/src/components/AppCompSettingsMenu.vue +172 -171
  43. package/src/components/AppCompTableOfContent.vue +387 -264
  44. package/src/components/AppCompTranscript.vue +24 -19
  45. package/src/components/AppCompVideoPlayer.vue +368 -336
  46. package/src/components/AppCompViewDisplay.vue +6 -6
  47. package/src/components/BaseModule.vue +72 -67
  48. package/src/composables/useQuiz.js +206 -0
  49. package/src/externalComps/ModuleView.vue +22 -0
  50. package/src/externalComps/SummaryView.vue +91 -0
  51. package/src/main.js +272 -227
  52. package/src/mixins/$mediaMixins.js +819 -0
  53. package/src/mixins/timerMixin.js +155 -156
  54. package/src/module/stores/appStore.js +893 -0
  55. package/src/module/xapi/ADL.js +376 -339
  56. package/src/module/xapi/Crypto/Hasher.js +241 -241
  57. package/src/module/xapi/Crypto/WordArray.js +278 -278
  58. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  59. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -319
  60. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  61. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  62. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  63. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  64. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  65. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  66. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  67. package/src/module/xapi/Crypto/index.js +53 -53
  68. package/src/module/xapi/Statement/activity.js +47 -47
  69. package/src/module/xapi/Statement/agent.js +55 -55
  70. package/src/module/xapi/Statement/group.js +26 -26
  71. package/src/module/xapi/Statement/index.js +259 -259
  72. package/src/module/xapi/Statement/statement.js +253 -253
  73. package/src/module/xapi/Statement/statementRef.js +23 -23
  74. package/src/module/xapi/Statement/substatement.js +22 -22
  75. package/src/module/xapi/Statement/verb.js +36 -36
  76. package/src/module/xapi/activitytypes.js +17 -17
  77. package/src/module/xapi/launch.js +157 -157
  78. package/src/module/xapi/utils.js +167 -167
  79. package/src/module/xapi/verbs.js +294 -294
  80. package/src/module/xapi/wrapper.js +1963 -1890
  81. package/src/module/xapi/xapiStatement.js +444 -444
  82. package/src/plugins/bus.js +8 -3
  83. package/src/plugins/gsap.js +14 -17
  84. package/src/plugins/helper.js +308 -295
  85. package/src/plugins/i18n.js +44 -31
  86. package/src/plugins/idb.js +219 -212
  87. package/src/plugins/save.js +37 -37
  88. package/src/plugins/scorm.js +287 -287
  89. package/src/plugins/xapi.js +11 -11
  90. package/src/public/index.html +33 -21
  91. package/src/router/index.js +43 -41
  92. package/src/router/routes.js +312 -337
  93. package/src/shared/generalfuncs.js +210 -188
  94. package/src/shared/validators.js +1069 -249
  95. package/vite.config.js +27 -0
  96. package/.prettierrc.js +0 -5
  97. package/babel.config.js +0 -3
  98. package/src/components/AppBaseDragChoice.vue +0 -91
  99. package/src/components/AppBaseDropZone.vue +0 -112
  100. package/src/components/AppCompBif.vue +0 -120
  101. package/src/components/AppCompDragAndDrop.vue +0 -339
  102. package/src/components/AppCompInputAssociation.vue +0 -332
  103. package/src/components/AppCompInputCheckBox.vue +0 -227
  104. package/src/components/AppCompInputDropdown.vue +0 -184
  105. package/src/components/AppCompInputRadio.vue +0 -169
  106. package/src/components/AppCompInputTextTable.vue +0 -155
  107. package/src/components/AppCompInputTextToFillDropdown.vue +0 -255
  108. package/src/components/AppCompMediaPlayer.vue +0 -397
  109. package/src/components/AppCompPopUp.vue +0 -522
  110. package/src/components/AppCompPopover.vue +0 -27
  111. package/src/components/AppCompSVG.vue +0 -309
  112. package/src/mixins/$pageMixins.js +0 -459
  113. package/src/mixins/$quizMixins.js +0 -456
  114. package/src/module/store.js +0 -895
  115. package/src/plugins/timeManager.js +0 -77
  116. package/src/routes_bckp.js +0 -313
  117. package/src/routes_static.js +0 -344
  118. package/vue.config.js +0 -83
@@ -1,31 +1,44 @@
1
- /**
2
- * Merge locales message in project.
3
- * @summary To merge the locales dictionnary of this library with the locales that user will create
4
- * @param {Object} i18n - vue-i18n internalization object.
5
- */
6
- export default function mergeLocales(i18n) {
7
- const deep = require('lodash') // provide deep merge of Object cf: https://attacomsian.com/blog/javascript-merge-objects
8
-
9
- /* I18n internal methods for mutating messages property
10
- * mergeLocaleMessage: ƒ mergeLocaleMessage(locale, message)// will merge message with new message object. But does not do a deep merge of object
11
- * setLocaleMessage: ƒ setLocaleMessage(locale, message)// set the message with new message object
12
- */
13
-
14
- // This library locales files
15
- const thisLocales = require.context(
16
- '../$locales',
17
- true,
18
- /[A-Za-z0-9-_,\s]+\.json$/i
19
- )
20
-
21
- thisLocales.keys().forEach((key) => {
22
- const matched = key.match(/([A-Za-z0-9-_]+)\./i)
23
- if (matched && matched.length > 1) {
24
- const locale = matched[1]
25
- // Using lodash to deeply merge objects
26
- const mergedMessages = deep.merge(i18n.messages[locale], thisLocales(key))
27
- // Since merLocalMessage will do a shallow merge of the object. We will use setLocalMessage to replace the message with new message object
28
- i18n.setLocaleMessage(locale, mergedMessages)
29
- }
30
- })
31
- }
1
+ import _ from 'lodash'
2
+ /**
3
+ * Merge locales message in project.
4
+ * @summary To merge the locales dictionnary of this library with the locales that user will create
5
+ * @param {Object} i18n - vue-i18n internalization object.
6
+ */
7
+ export default function mergeLocales(i18n) {
8
+ //const deep = import('lodash') // provide deep merge of Object cf: https://attacomsian.com/blog/javascript-merge-objects
9
+
10
+ /* I18n internal methods for mutating messages property
11
+ * mergeLocaleMessage: ƒ mergeLocaleMessage(locale, message)// will merge message with new message object. But does not do a deep merge of object
12
+ * setLocaleMessage: ƒ setLocaleMessage(locale, message)// set the message with new message object
13
+ */
14
+
15
+ // This library locales files
16
+ // const thisLocales = require.context(
17
+ // '../$locales',
18
+ // true,
19
+ // /[A-Za-z0-9-_,\s]+\.json$/i
20
+ // )
21
+
22
+ const thisLocales = import.meta.glob('../$locales/*.json', { eager: true })
23
+ for (const path in thisLocales) {
24
+ const matched = path.match(/([A-Za-z0-9-_]+)\./i)
25
+ if (matched && matched.length > 1) {
26
+ const locale = matched[1]
27
+ // Using lodash to deeply merge objects
28
+ const messagesDeepCopy = JSON.parse(JSON.stringify(i18n.messages[locale]))
29
+ const mergedMessages = _.merge(messagesDeepCopy, thisLocales[path])
30
+ // Since merLocalMessage will do a shallow merge of the object. We will use setLocalMessage to replace the message with new message object
31
+ i18n.setLocaleMessage(locale, mergedMessages)
32
+ }
33
+ }
34
+ // thisLocales.keys().forEach((key) => {
35
+ // const matched = key.match(/([A-Za-z0-9-_]+)\./i)
36
+ // if (matched && matched.length > 1) {
37
+ // const locale = matched[1]
38
+ // // Using lodash to deeply merge objects
39
+ // const mergedMessages = deep.merge(i18n.messages[locale], thisLocales(key))
40
+ // // Since merLocalMessage will do a shallow merge of the object. We will use setLocalMessage to replace the message with new message object
41
+ // i18n.setLocaleMessage(locale, mergedMessages)
42
+ // }
43
+ // })
44
+ }
@@ -1,212 +1,219 @@
1
- /*
2
- * idb library by jakearchibald: https://github.com/jakearchibald/idb
3
- */
4
- import { openDB, deleteDB, wrap, unwrap } from 'idb'
5
- //import {*} from "idb";
6
- let dataBase = null
7
- let dbName = '$crsDataBase' //test
8
- let storeName = '$lessonsStore' //test
9
- openDB, deleteDB, wrap, unwrap
10
- //$_id
11
- export const $idb = {
12
- install(Vue) {
13
- Vue.prototype.$idb = {
14
- /*
15
- * @ Description: create a indexedDB database
16
- * Open a data base in indexedDB if does not exist and create a store for the lessons package
17
- *@ return Promise
18
- */
19
- async openDB() {
20
- try {
21
- if (!window.indexedDB) {
22
- console.log(
23
- "Your browser doesn't support a stable version of IndexedDB. Saving feature of your progress will not be available."
24
- )
25
- return
26
- } else {
27
- const db = await openDB(dbName, 1, {
28
- upgrade(db) {
29
- // Create a store of objects
30
- const store = db.createObjectStore(storeName, {
31
- keyPath: '_$id',
32
- autoIncrement: true
33
- })
34
- // Create an index for the data
35
- store.createIndex('$idb_id', '$idb_id', { unique: true })
36
- // Create an index for the data
37
- store.createIndex('$record', '$record', { unique: false })
38
-
39
- //Create an index that is not unique (two person can have the same age)
40
- store.createIndex('$last_edit', '$last_edit', { unique: false })
41
- }
42
- })
43
- dataBase = db
44
- //return (dataBase = db);
45
- }
46
- } catch (err) {
47
- console.log('==> Erro ', err)
48
- }
49
- },
50
-
51
- /*
52
- * @Description: wrapper to insert new data in the store (entry is entered if doesn't already exist in db)
53
- * @Params storeName {String}: name of the store
54
- * @Params data {object}: new value to enter
55
- * @Return promise
56
- */
57
- async insertDataInDB(data) {
58
- try {
59
- //Index param
60
- const searchIndex = '$idb_id'
61
- //search by package Id index
62
- const value = await dataBase.getFromIndex(
63
- storeName,
64
- searchIndex,
65
- data[searchIndex]
66
- )
67
-
68
- //Add entry to database if does not exist
69
- if (!value) {
70
- const addedItem = await dataBase.add(storeName, data)
71
-
72
- return addedItem
73
- }
74
- } catch (err) {
75
- console.log('Error..', err)
76
- }
77
- },
78
-
79
- /*@Description - Helper to get all data existing in the store
80
- @Param storeName {String} - Name of the store
81
- *@Return Promise {array} of all entries
82
- */
83
- async getAllFromDB() {
84
- try {
85
- //Get all from the storeName order by last edit
86
- const entryList = await dataBase.getAllFromIndex(
87
- storeName,
88
- 'lastEdit'
89
- )
90
- return entryList
91
- } catch (err) {
92
- console.log('error...', err)
93
- }
94
- },
95
-
96
- /*
97
- *@Description - Helper to get one entry from the store
98
- *@Param target {String} - id of the entry
99
- *@Return Promise {array} of all entries
100
- */
101
- async getFromDB(target) {
102
- try {
103
- //Index param
104
- const searchIndex = '$idb_id'
105
- //search by package Id index
106
- const entry = await dataBase.getFromIndex(
107
- storeName,
108
- searchIndex,
109
- target
110
- )
111
- return entry
112
- } catch (err) {
113
- console.log('error...', err)
114
- }
115
- },
116
-
117
- /*
118
- *@Description - Helper to update data in a store
119
- * @Params storeName {String} - name of the store
120
- * @Params index {String} - name of the index
121
- * @Params target {String| num} - id of the element to update
122
- * @Params newValue {Object} - new value to enter
123
- *@return Promise
124
- */
125
- async updateDataInDB(target, newValue) {
126
- try {
127
- //Index param
128
- const searchIndex = '$idb_id'
129
-
130
- //search by package Id index
131
- const existingRecord = await dataBase.getFromIndex(
132
- storeName,
133
- searchIndex,
134
- target
135
- )
136
- //If there is an existing record update the record with new data
137
- if (existingRecord) {
138
- existingRecord.$record = newValue
139
- existingRecord.$last_edit = Date.now()
140
- const updatedItem = await dataBase.put(storeName, existingRecord)
141
- //await this.getAllFromDB(storeName)
142
- return updatedItem
143
- }
144
- } catch (err) {
145
- console.log('Error: ', err)
146
- }
147
- },
148
- /*
149
- * @Description - Heleper to delete entry from the store
150
- * @Params storeName {String} - name of the store
151
- * @Params index {String} - name of the index
152
- * @Params target {String| num} - id of the element to remove
153
- * @Return reference of deleted item
154
- */
155
- async deleteDataInDB(target) {
156
- try {
157
- //Index param
158
- const searchIndex = '$idb_id'
159
-
160
- //search by package Id index
161
- const existingRecord = await dataBase.getFromIndex(
162
- storeName,
163
- searchIndex,
164
- target
165
- )
166
- //If there is an existing delete it from the store
167
- if (existingRecord) {
168
- const deletedItem = await dataBase.delete(
169
- storeName,
170
- existingRecord._$id
171
- )
172
-
173
- return deletedItem
174
- }
175
- } catch (err) {
176
- console.log('Error: ', err)
177
- }
178
- },
179
- /**
180
- * @description creating a small save plug-in to save store state in the localStorage
181
- * the plugin listen for mutations made to the Vuex store and store them in the local browser storage.
182
- * Since the The handler is called after every mutation we want to limite the saving of data to application storage only
183
- * when the mutation is affecting the user interaction.
184
- * This prevent resetting the store to initial state when the browser refreshes
185
- * Note: the plugin is used in the store.js
186
- * @param {Object} store vuex Store
187
- * @param {String} item package $idb_id
188
- */
189
- saveState(store, item) {
190
- store.subscribe(async (mutation, state) => {
191
- // Watch only for user interaction related mutation to save the data
192
- if (mutation.type === 'UPDATE_USER_METADATA') {
193
- // Open DB with a store
194
- const search = await this.getFromDB(item)
195
- if (Object.entries(state.$appStore.userMetaData).length && search) {
196
- // Update the db store
197
- await this.updateDataInDB(item, state.$appStore.userMetaData)
198
- //==================================================
199
- } else {
200
- //Add Entry to db store
201
- await this.insertDataInDB({
202
- $idb_id: item,
203
- $record: state.$appStore.userMetaData,
204
- $last_edit: Date.now()
205
- })
206
- }
207
- }
208
- })
209
- }
210
- }
211
- }
212
- }
1
+ /*
2
+ * idb library by jakearchibald: https://github.com/jakearchibald/idb
3
+ */
4
+ import { openDB } from 'idb'
5
+ import $_ from 'lodash'
6
+ //import { createApp } from 'vue'
7
+ //import {*} from "idb";
8
+ let dataBase = null
9
+ let dbName = '$crsDataBase' //test
10
+ let storeName = '$lessonsStore' //test
11
+ //openDB, deleteDB, wrap, unwrap
12
+ //$_id
13
+ //const app = createApp({})
14
+ export const $idb = {
15
+ install(app) {
16
+ app.config.globalProperties.$idb = {
17
+ /*
18
+ * @ Description: create a indexedDB database
19
+ * Open a data base in indexedDB if does not exist and create a store for the lessons package
20
+ *@ return Promise
21
+ */
22
+ async openDB() {
23
+ try {
24
+ if (!window.indexedDB) {
25
+ console.log(
26
+ "Your browser doesn't support a stable version of IndexedDB. Saving feature of your progress will not be available."
27
+ )
28
+ return
29
+ } else {
30
+ const db = await openDB(dbName, 1, {
31
+ upgrade(db) {
32
+ // Create a store of objects
33
+ const store = db.createObjectStore(storeName, {
34
+ keyPath: '_$id',
35
+ autoIncrement: true
36
+ })
37
+ // Create an index for the data
38
+ store.createIndex('$idb_id', '$idb_id', { unique: true })
39
+ // Create an index for the data
40
+ store.createIndex('$record', '$record', { unique: false })
41
+
42
+ //Create an index that is not unique (two person can have the same age)
43
+ store.createIndex('$last_edit', '$last_edit', { unique: false })
44
+ }
45
+ })
46
+ dataBase = db
47
+ //return (dataBase = db);
48
+ }
49
+ } catch (err) {
50
+ console.log('==> Erro ', err)
51
+ }
52
+ },
53
+
54
+ /*
55
+ * @Description: wrapper to insert new data in the store (entry is entered if doesn't already exist in db)
56
+ * @Params storeName {String}: name of the store
57
+ * @Params data {object}: new value to enter
58
+ * @Return promise
59
+ */
60
+ async insertDataInDB(data) {
61
+ try {
62
+ //Index param
63
+ const searchIndex = '$idb_id'
64
+ //search by package Id index
65
+ const value = await dataBase.getFromIndex(
66
+ storeName,
67
+ searchIndex,
68
+ data[searchIndex]
69
+ )
70
+
71
+ //Add entry to database if does not exist
72
+ if (!value) {
73
+ const addedItem = await dataBase.add(storeName, $_.cloneDeep(data))
74
+
75
+ return addedItem
76
+ }
77
+ } catch (err) {
78
+ console.log('Error..', err)
79
+ }
80
+ },
81
+
82
+ /*@Description - Helper to get all data existing in the store
83
+ @Param storeName {String} - Name of the store
84
+ *@Return Promise {array} of all entries
85
+ */
86
+ async getAllFromDB() {
87
+ try {
88
+ //Get all from the storeName order by last edit
89
+ const entryList = await dataBase.getAllFromIndex(
90
+ storeName,
91
+ 'lastEdit'
92
+ )
93
+ return entryList
94
+ } catch (err) {
95
+ console.log('error...', err)
96
+ }
97
+ },
98
+
99
+ /*
100
+ *@Description - Helper to get one entry from the store
101
+ *@Param target {String} - id of the entry
102
+ *@Return Promise {array} of all entries
103
+ */
104
+ async getFromDB(target) {
105
+ try {
106
+ //Index param
107
+ const searchIndex = '$idb_id'
108
+ //search by package Id index
109
+ const entry = await dataBase.getFromIndex(
110
+ storeName,
111
+ searchIndex,
112
+ target
113
+ )
114
+ return entry
115
+ } catch (err) {
116
+ console.log('error...', err)
117
+ }
118
+ },
119
+
120
+ /*
121
+ *@Description - Helper to update data in a store
122
+ * @Params storeName {String} - name of the store
123
+ * @Params index {String} - name of the index
124
+ * @Params target {String| num} - id of the element to update
125
+ * @Params newValue {Object} - new value to enter
126
+ *@return Promise
127
+ */
128
+ async updateDataInDB(target, newValue) {
129
+ try {
130
+ //Index param
131
+ const searchIndex = '$idb_id'
132
+
133
+ //search by package Id index
134
+ const existingRecord = await dataBase.getFromIndex(
135
+ storeName,
136
+ searchIndex,
137
+ target
138
+ )
139
+ //If there is an existing record update the record with new data
140
+ if (existingRecord) {
141
+ existingRecord.$record = newValue
142
+ existingRecord.$last_edit = Date.now()
143
+ const updatedItem = await dataBase.put(
144
+ storeName,
145
+ $_.cloneDeep(existingRecord)
146
+ )
147
+ //await this.getAllFromDB(storeName)
148
+ return updatedItem
149
+ }
150
+ } catch (err) {
151
+ console.log('Error: ', err)
152
+ }
153
+ },
154
+ /*
155
+ * @Description - Heleper to delete entry from the store
156
+ * @Params storeName {String} - name of the store
157
+ * @Params index {String} - name of the index
158
+ * @Params target {String| num} - id of the element to remove
159
+ * @Return reference of deleted item
160
+ */
161
+ async deleteDataInDB(target) {
162
+ try {
163
+ //Index param
164
+ const searchIndex = '$idb_id'
165
+
166
+ //search by package Id index
167
+ const existingRecord = await dataBase.getFromIndex(
168
+ storeName,
169
+ searchIndex,
170
+ target
171
+ )
172
+ //If there is an existing delete it from the store
173
+ if (existingRecord) {
174
+ const deletedItem = await dataBase.delete(
175
+ storeName,
176
+ existingRecord._$id
177
+ )
178
+
179
+ return deletedItem
180
+ }
181
+ } catch (err) {
182
+ console.log('Error: ', err)
183
+ }
184
+ },
185
+ /**
186
+ * @description creating a small save plug-in to save store state in the localStorage
187
+ * the plugin listen for changes made to the Pinia store store to store them in the browser storage.
188
+ * Since the The handler is called after every actions we want to limit the saving of data to storage only
189
+ * when the changes are affecting the user interaction.
190
+ * This prevent resetting the store to initial state when the browser refreshes
191
+ * @param {Object} store Pinia Store
192
+ * @param {String} item package $idb_id
193
+ */
194
+ async saveState(store, item) {
195
+ store.$onAction(async ({ name, store, args, after }) => {
196
+ //Should only track changes actions on userMetadata
197
+ if (!['updateUserMetaData', 'setUserMetaData'].includes(name)) return
198
+
199
+ // Open DB with a store
200
+ const search = await this.getFromDB(item)
201
+
202
+ if (Object.entries(store.$state.userMetaData).length && search) {
203
+ // Update the db store
204
+ await this.updateDataInDB(item, store.$state.userMetaData)
205
+ //==================================================
206
+ } else {
207
+ //Add Entry to db store
208
+ await this.insertDataInDB({
209
+ $idb_id: item,
210
+ $record: store.$state.userMetaData,
211
+ $last_edit: Date.now()
212
+ })
213
+ }
214
+ //})
215
+ })
216
+ }
217
+ }
218
+ }
219
+ }
@@ -1,37 +1,37 @@
1
- /* creating a small save plug-in to save store state in the localStorage
2
- * the plugin listen for mutations made to the Vuex store and store them in the local browser storage.
3
- * This prevent reseting the store to initial state when the browser refreshes
4
- * Note: the plugin is used in the store.js
5
- */
6
- export function saveStatePlugin(store) {
7
- store.subscribe((mutation, state) => {
8
- // save the user data
9
- if (Object.entries(state.$appStore.userMetaData).length) {
10
- localStorage.setItem(
11
- 'userData',
12
- JSON.stringify(state.$appStore.userMetaData)
13
- )
14
- } else if (
15
- !localStorage.getItem('userData') &&
16
- !Object.entries(state.$appStore.userMetaData).length
17
- ) {
18
- localStorage.setItem('userData', JSON.stringify({}))
19
- }
20
- })
21
- }
22
-
23
- /**
24
- * creating a small save plug-in to get stored state from the localStorage
25
- */
26
- export function getSavedStatePlugin(type, id) {
27
- if (localStorage.getItem('thisModule')) {
28
- const savedData = JSON.parse(localStorage.getItem('thisModule'))
29
-
30
- if (type === 'module' && savedData.id === id) return savedData
31
- if (type === 'page' && savedData.children.length) {
32
- return savedData.children.find((p) => id === p.id)
33
- }
34
- return JSON.parse(localStorage.getItem('thisModule'))
35
- }
36
- return null
37
- }
1
+ /* creating a small save plug-in to save store state in the localStorage
2
+ * the plugin listen for mutations made to the Pinia store and store them in the local browser storage.
3
+ * This prevent reseting the store to initial state when the browser refreshes
4
+ * Note: the plugin is used in the store.js
5
+ */
6
+ export function saveStatePlugin(store) {
7
+ store.subscribe((mutation, state) => {
8
+ // save the user data
9
+ if (Object.entries(state.$appStore.userMetaData).length) {
10
+ localStorage.setItem(
11
+ 'userData',
12
+ JSON.stringify(state.$appStore.userMetaData)
13
+ )
14
+ } else if (
15
+ !localStorage.getItem('userData') &&
16
+ !Object.entries(state.$appStore.userMetaData).length
17
+ ) {
18
+ localStorage.setItem('userData', JSON.stringify({}))
19
+ }
20
+ })
21
+ }
22
+
23
+ /**
24
+ * creating a small save plug-in to get stored state from the localStorage
25
+ */
26
+ export function getSavedStatePlugin(type, id) {
27
+ if (localStorage.getItem('thisModule')) {
28
+ const savedData = JSON.parse(localStorage.getItem('thisModule'))
29
+
30
+ if (type === 'module' && savedData.id === id) return savedData
31
+ if (type === 'page' && savedData.children.length) {
32
+ return savedData.children.find((p) => id === p.id)
33
+ }
34
+ return JSON.parse(localStorage.getItem('thisModule'))
35
+ }
36
+ return null
37
+ }