diff --git a/.github/dependabot.yml b/.github/dependabot.yml index e2373f95a6..5552084b3e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,6 +4,8 @@ updates: directory: "/" # Location of package manifests schedule: interval: "daily" + time: "03:00" + timezone: "Europe/Berlin" assignees: - "jxn-30" commit-message: diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index f1e80b31d5..a03c1869e9 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -37,8 +37,10 @@ moduleDirs.forEach((module: string) => { const docs = fs .readdirSync(`./src/modules/${module}/docs`) .filter((f: string) => f.match(/^[a-z]{2}_[A-Z]{2}\.md$/)); + const availableLangs = [] as string[]; docs.forEach((f: string) => { const lang = f.split('.')[0]; + availableLangs.push(lang); if (!modulesSorted.hasOwnProperty(lang)) modulesSorted[lang] = []; if (!fs.existsSync(`./docs/${lang}/modules`)) fs.mkdirSync(`./docs/${lang}/modules`); @@ -83,6 +85,53 @@ ${content}` `./docs/.vuepress/public/assets/${module}` ); } + + Object.keys(config.games).forEach(lang => { + if ( + availableLangs.includes(lang) || + !fs.existsSync(`./docs/${lang}`) + ) + return; + if (!fs.existsSync(`./docs/${lang}/modules`)) + fs.mkdirSync(`./docs/${lang}/modules`); + const rootFile = `./src/modules/${module}/i18n/${lang}.root`; + // eslint-disable-next-line @typescript-eslint/no-var-requires + let title = require(`../.${rootFile.replace(lang, 'en_US')}`).name; + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + title = require(`../.${rootFile}`).name; + } catch { + // Do nothing + } + fs.writeFileSync( + `./docs/${lang}/modules/${module}.md`, + `--- +title: ${title} +lang: ${lang} +--- + +# ${title} +:::warning No module page existing yet +Dear User, +thanks for your interest in the Wiki page of **${title}**! +Unfortunately, we weren't able to create the content for your language \`${lang}\` yet. If you want to contribute to our wiki, feel free to create this page [on GitHub](https://github.com/${ + config.github.repo + }/new/dev/src/modules/${module}/docs?filename=${lang}.md)! +We suggest to have a look at the files of the other languages for examples in the [docs directory](https://github.com/${ + config.github.repo + }/tree/dev/src/modules/${module}/docs) + +This module already has a Wiki page in the following languages: +${availableLangs + .map( + l => + `* [${config.games[l].flag} ${config.games[l].name}](/v4/docs/${l}/modules/${module}.html)` + ) + .join('\n')} +::: +` + ); + }); } }); const noMapkitModules = {} as { diff --git a/package.json b/package.json index 282c698a82..a80d86fab2 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "4.1.4+20201125.0812", + "version": "4.1.5+20201127.2128", "license": "CC-BY-NC-SA-4.0", "scripts": { "predev": "tsc -b scripts && node scripts predev", @@ -35,7 +35,7 @@ "vue-responsive-dash": "^0.5.0", "vue-select": "^3.10.7", "vue-slim-tabs": "^0.4.0", - "vuex": "^3.5.1" + "vuex": "^3.6.0" }, "devDependencies": { "@types/combokeys": "^2.4.6", @@ -43,7 +43,7 @@ "@types/jquery": "^3.5.4", "@types/leaflet": "^1.5.19", "@types/lodash": "^4.14.165", - "@types/node": "^14.14.9", + "@types/node": "^14.14.10", "@types/speed-measure-webpack-plugin": "^1.3.0", "@types/ua-parser-js": "^0.7.33", "@types/vue-select": "^2.5.1", @@ -95,4 +95,4 @@ "author": "Aisaka | Sanni | Jan (jxn_30) | Ron31", "description": "Das Tool für das LSS in der Version 4" } -} +} \ No newline at end of file diff --git a/src/LSSM-Menu.vue b/src/LSSM-Menu.vue index 24a467fecc..ae88807f5c 100644 --- a/src/LSSM-Menu.vue +++ b/src/LSSM-Menu.vue @@ -114,7 +114,6 @@ export default Vue.extend< wiki: this.$store.getters.wiki, version: this.$store.state.version, mode: this.$store.state.mode, - nav: document.getElementById('main_navbar'), }; }, computed: { @@ -214,8 +213,14 @@ export default Vue.extend< ); }, storeIconBg() { - if (this.iconBgAsNavBg && this.nav) { - this.nav.style.backgroundColor = this.iconBg ?? '#000'; + if (this.iconBgAsNavBg) { + this.$store.dispatch('addStyle', { + selectorText: + '.navbar-default, .navbar-default .dropdown-menu', + style: { + 'background-color': this.iconBg, + }, + }); } LSSM.$store.dispatch('settings/setSetting', { moduleId: 'global', @@ -233,9 +238,6 @@ export default Vue.extend< this.labelInMenu = labelInMenu; this.iconBg = iconBg; this.iconBgAsNavBg = iconBgAsNavBg; - if (iconBgAsNavBg && this.nav) { - this.nav.style.backgroundColor = iconBg; - } }); }, }); diff --git a/src/LSSMV4.vue b/src/LSSMV4.vue index 0659039b6e..2a74c23fcf 100644 --- a/src/LSSMV4.vue +++ b/src/LSSMV4.vue @@ -78,6 +78,21 @@ export default Vue.extend< props.close(); }, }, + mounted() { + this.$store + .dispatch('settings/getModule', 'global') + .then(({ iconBg, iconBgAsNavBg }) => { + if (iconBgAsNavBg) { + this.$store.dispatch('addStyle', { + selectorText: + '.navbar-default, .navbar-default .dropdown-menu', + style: { + 'background-color': iconBg, + }, + }); + } + }); + }, }); diff --git a/src/components/settings.vue b/src/components/settings.vue index 3a18c06d24..f32bb58b64 100644 --- a/src/components/settings.vue +++ b/src/components/settings.vue @@ -195,14 +195,7 @@ :name="setting.name" v-model="settings[moduleId][settingId].value" :options=" - setting.values.map(value => ({ - label: setting.noLabelTranslation - ? value - : $t( - `modules.${moduleId}.settings.${settingId}.${value}` - ), - value, - })) + getSelectOptions(moduleId, setting, settingId) " :placeholder=" $t( @@ -217,14 +210,7 @@ :name="setting.name" v-model="settings[moduleId][settingId].value" :options=" - setting.values.map(value => ({ - label: setting.noLabelTranslation - ? value - : $t( - `modules.${moduleId}.settings.${settingId}.${value}` - ), - value, - })) + getSelectOptions(moduleId, setting, settingId) " :placeholder=" $t( @@ -586,6 +572,16 @@ export default Vue.extend< }; }, $m: (key, args) => LSSM.$t(`modules.settings.${key}`, args), + getSelectOptions(module, setting, settingId) { + return setting.values.map((v, vi) => ({ + label: setting.noLabelTranslation + ? v + : setting.labels?.[vi] ?? + this.$t(`modules.${module}.settings.${settingId}.${v}`) ?? + v, + value: v, + })); + }, }, mounted() { this.getExportData(); diff --git a/src/config.ts b/src/config.ts index 21af492d6e..24c21288eb 100644 --- a/src/config.ts +++ b/src/config.ts @@ -4,12 +4,12 @@ export default { admins: ['de_DE-205976', 'de_DE-675'], browser: { chrome: { - latest: 86, + latest: 87, supported: 84, download: 'https://chrome.com', }, firefox: { - latest: 82, + latest: 83, supported: 79, download: 'https://firefox.com', }, @@ -24,7 +24,7 @@ export default { download: 'https://apple.com/safari/', }, edge: { - latest: 86, + latest: 87, supported: 86, download: 'https://microsoft.com/edge', }, diff --git a/src/i18n/cs_CZ.ts b/src/i18n/cs_CZ.ts index cd1baefae4..013ebc799f 100644 --- a/src/i18n/cs_CZ.ts +++ b/src/i18n/cs_CZ.ts @@ -103,8 +103,8 @@ export default { title: 'Zbarvení navigační lišty', }, }, - vehicles: [ - { + vehicles: { + 0: { caption: 'CAS 20', color: '#cc0000', coins: 25, @@ -113,7 +113,7 @@ export default { maxPersonnel: 6, wtank: 0, }, - { + 1: { caption: 'CAS 30', color: '#bb0000', coins: 25, @@ -122,7 +122,7 @@ export default { maxPersonnel: 6, wtank: 0, }, - { + 2: { caption: 'AZ', color: '#d92626', coins: 30, @@ -132,7 +132,7 @@ export default { wtank: 0, special: 'Požadováno po vybudování 3 požárních stanic', }, - { + 3: { caption: 'VEA', color: '#d02525', coins: 25, @@ -142,7 +142,7 @@ export default { wtank: 0, special: 'Požadováno po vybudování 6 požárních stanic', }, - { + 4: { caption: 'TA', color: '#ad1f1f', coins: 25, @@ -152,7 +152,7 @@ export default { wtank: 0, special: 'Požadováno po vybudování 4 požárních stanic', }, - { + 5: { caption: 'Sanitka', color: '#9c1c1c', coins: 25, @@ -161,7 +161,7 @@ export default { maxPersonnel: 3, wtank: 0, }, - { + 6: { caption: 'KHA', color: '#aa0000', coins: 25, @@ -171,7 +171,7 @@ export default { wtank: 0, special: 'Požadováno po vybudování 7 požárních stanic', }, - { + 7: { caption: 'TACH', color: '#990000', coins: 25, @@ -183,7 +183,7 @@ export default { shownSchooling: 'Nebezpečné látky', special: 'Požadováno po vybudování 11 požárních stanic', }, - { + 8: { caption: 'Policejní automobil', color: '#8b1818', coins: 25, @@ -192,7 +192,7 @@ export default { maxPersonnel: 4, wtank: 0, }, - { + 9: { caption: 'Vrtulník LZS', color: '#e61919', coins: 30, @@ -201,7 +201,7 @@ export default { maxPersonnel: 5, wtank: 0, }, - { + 10: { caption: 'AP', color: '#e61919', coins: 25, @@ -210,7 +210,7 @@ export default { maxPersonnel: 2, wtank: 0, }, - { + 11: { caption: 'Policejní vrtulník', color: '#ca1616', coins: 30, @@ -221,7 +221,7 @@ export default { schooling: 'Policie - Kurz Letecké služby PČR', shownSchooling: 'Členové Letecké služby PČR', }, - { + 12: { caption: 'Obrněné vozidlo URNA', color: '#ca1616', coins: 25, @@ -233,7 +233,7 @@ export default { shownSchooling: 'URNA', special: 'Požadováno po vybudování 8 Obvodních oddělení Policie', }, - { + 13: { caption: 'Vozidlo Kynologů PČR', color: '#ca1616', coins: 25, @@ -245,7 +245,7 @@ export default { shownSchooling: 'Kynologové Policie', special: 'Požadováno po vybudování 6 Obvodních oddělení Policie', }, - { + 14: { caption: 'Policejní motocykl', color: '#ca1616', coins: 18, @@ -256,7 +256,7 @@ export default { schooling: 'Policie - Policejní motocykl', shownSchooling: 'Strážník na motocyklu', }, - { + 15: { caption: 'URNA SUV', color: '#ca1616', coins: 23, @@ -268,7 +268,7 @@ export default { shownSchooling: 'URNA', special: 'Požadováno po vybudování 8 Obvodních oddělení Policie', }, - { + 16: { caption: 'Protiplynový automobil', color: '#770000', coins: 25, @@ -278,7 +278,7 @@ export default { wtank: 0, special: 'Požadováno po vybudování 5 požárních stanic', }, - { + 17: { caption: 'MOS', color: '#791515', coins: 25, @@ -290,7 +290,7 @@ export default { shownSchooling: 'MOS', special: 'Požadováno po vybudování 13 požárních stanic', }, - { + 18: { caption: 'Vyzidlo vyšetřovatelů DN', color: '#8b1818', coins: 10, @@ -301,7 +301,7 @@ export default { schooling: 'Policie - vyšetřovatel DN', shownSchooling: 'Vyšetřovatel DN', }, - { + 19: { caption: 'Vozidlo pyrotechnika PČR', color: '#8b1818', coins: 35, @@ -312,7 +312,7 @@ export default { schooling: 'Policie - Policejní pyrotechnik', shownSchooling: 'Policejní pyrotechnik', }, - ], + }, //here ends buildings: [ diff --git a/src/libraries.json b/src/libraries.json index b435c3b546..95f0853caf 100644 --- a/src/libraries.json +++ b/src/libraries.json @@ -30,7 +30,7 @@ "version": "4.14.165" }, "@types/node": { - "version": "14.14.9" + "version": "14.14.10" }, "@types/speed-measure-webpack-plugin": { "version": "1.3.0" @@ -238,7 +238,7 @@ "vuex": { "icon": "https://vuejs.org/images/logo.png", "url": "https://github.com/vuejs/vuex#readme", - "version": "3.5.1" + "version": "3.6.0" }, "webpack": { "icon": "https://webpack.js.org/assets/icon-square-big.svg", diff --git a/src/modules/extendedBuilding/assets/enhancedPersonnelAssignment.ts b/src/modules/extendedBuilding/assets/enhancedPersonnelAssignment.ts index 878fe99fc1..ffa0ac6245 100644 --- a/src/modules/extendedBuilding/assets/enhancedPersonnelAssignment.ts +++ b/src/modules/extendedBuilding/assets/enhancedPersonnelAssignment.ts @@ -17,9 +17,11 @@ export default async ( const vehicleId = parseInt( window.location.pathname.match(/\d+(?=\/zuweisung)/)?.[0] || '-1' ); - const vehicle = (LSSM.$store.state.api.vehicles as Vehicle[]).find( - v => v.id === vehicleId - ); + + const vehicle = (await LSSM.$store.dispatch( + 'api/fetchVehicle', + vehicleId + )) as Vehicle; const vehicleTypes = LSSM.$t('vehicles') as { [id: number]: InternalVehicle; }; diff --git a/src/modules/extendedBuilding/main.ts b/src/modules/extendedBuilding/main.ts index f8ba06c8e3..555a520515 100644 --- a/src/modules/extendedBuilding/main.ts +++ b/src/modules/extendedBuilding/main.ts @@ -90,19 +90,10 @@ export default (async (LSSM, MODULE_ID, $m) => { } else if ( window.location.pathname.match(/^\/vehicles\/\d+\/zuweisung\/?$/) ) - if (await getSetting('enhancedPersonnelAssignment')) { - await LSSM.$store.dispatch( - 'api/fetchVehicle', - parseInt( - window.location.pathname.match( - /(?<=vehicles\/)\d+(?=\/zuweisung)/ - )?.[0] ?? '-1' - ) - ); + if (await getSetting('enhancedPersonnelAssignment')) await ( await import( /* webpackChunkName: "modules/extendedBuilding/enhancedPersonnelAssignment" */ './assets/enhancedPersonnelAssignment' ) ).default(LSSM, MODULE_ID, getSetting, $m); - } }) as ModuleMainFunction; diff --git a/src/modules/extendedCallWindow/assets/enhancedMissingVehicles.ts b/src/modules/extendedCallWindow/assets/enhancedMissingVehicles.ts index fc94533794..c5021b0071 100644 --- a/src/modules/extendedCallWindow/assets/enhancedMissingVehicles.ts +++ b/src/modules/extendedCallWindow/assets/enhancedMissingVehicles.ts @@ -12,12 +12,12 @@ export default (LSSM: Vue, $m: $m): void => { .trim(); if (!missingRequirementsText) return; const missingRequirementMatches = missingRequirementsText.match( - /(?:\d+ (?:[^(]|\(.*?\))+?(?=[,.]|$))|(?:(?<=^|, )(?:[^(]|\(.*?\))+?: \d+)/g + /(?:\d+\s(?:[^(]|\(.*?\))+?(?=[,.]|$))|(?:(?<=^|,\s)(?:[^(]|\(.*?\))+?:\s\d+)/g ); if (!missingRequirementMatches) return; const missingRequirements = missingRequirementMatches.map(req => { req = req.trim(); - const isColonMode = !!req.match(/^[\w ]*?: \d+$/); + const isColonMode = !!req.match(/^.*: \d+$/); return { missing: parseInt( req.match(isColonMode ? /\d+$/ : /^\d+/)?.[0] || '0' diff --git a/src/modules/missionHelper/i18n/de_DE.json b/src/modules/missionHelper/i18n/de_DE.json index 933162a070..0778fe506a 100644 --- a/src/modules/missionHelper/i18n/de_DE.json +++ b/src/modules/missionHelper/i18n/de_DE.json @@ -3,9 +3,6 @@ "expansions": "Ausbreitung | Ausbreitungen", "followups": "Folgeeinsatz | Folgeeinsätze", "generated_by": "Generiert von", - "noVehicleRequirements": [ - "water_needed" - ], "patients": { "allow_ktw_instead_of_rtw": "Es kann ein KTW anstelle eines RTW genutzt werden.", "helicopter": "Wahrscheinlichkeit für einen RTH", @@ -39,9 +36,6 @@ "max_possible_prisoners": "Gefangener maximal | Gefangene maximal", "title": "Gefangene | {n} Gefangener | {n} Gefangene" }, - "requirements": { - "water_needed": "Wasserbedarf (L)" - }, "vehicles": { "captions": { "ambulances": "RTW", diff --git a/src/modules/missionHelper/i18n/de_DE.root.json b/src/modules/missionHelper/i18n/de_DE.root.json index a3e094914d..3eb0df81e0 100644 --- a/src/modules/missionHelper/i18n/de_DE.root.json +++ b/src/modules/missionHelper/i18n/de_DE.root.json @@ -1,6 +1,23 @@ { "description": "Lasse dir alle wichtigen Infos zum Einsatz direkt im Einsatzfenster anzeigen.", "name": "Einsatzhelfer", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Feuerwehrleute ⌀ mind. benötigt" + }, + "average_min_police_personnel": { + "badge": false, + "in": "additional", + "text": "Polizisten ⌀ mind. benötigt" + }, + "water_needed": { + "badge": true, + "in": "requirements", + "text": "Wasserbedarf: {n} L." + } + }, "settings": { "chances": { "100": { @@ -54,6 +71,10 @@ "title": "DLK einfach werten" } }, + "noVehicleRequirements": { + "description": "Lege hier fest, welche besonderen Anforderungen angezeigt werden sollen, falls vorhanden.", + "title": "Besondere Anforderungen" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": "Zeigt an, wenn statt eines LF auch FLF am Einsatzort möglich sind.", diff --git a/src/modules/missionHelper/i18n/en_AU.json b/src/modules/missionHelper/i18n/en_AU.json index 31ac3970f6..6c89acf5af 100644 --- a/src/modules/missionHelper/i18n/en_AU.json +++ b/src/modules/missionHelper/i18n/en_AU.json @@ -3,9 +3,6 @@ "expansions": "Spread | Spreads", "followups": "Follow-up Mission | Follow-up Missions", "generated_by": "Generated by", - "noVehicleRequirements": [ - "water_needed" - ], "patients": { "helicopter": "Probability for HEMS", "patient_allow_first_responder_chance": "First Responder Probability", diff --git a/src/modules/missionHelper/i18n/en_AU.root.json b/src/modules/missionHelper/i18n/en_AU.root.json index 8f3c265976..38b1ade638 100644 --- a/src/modules/missionHelper/i18n/en_AU.root.json +++ b/src/modules/missionHelper/i18n/en_AU.root.json @@ -1,6 +1,23 @@ { "description": "Get all important information about a mission, in the mission window.", "name": "Missionhelper", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Firefighters needed minimum" + }, + "average_min_police_personnel": { + "badge": false, + "in": "additional", + "text": "Police officers needed minimum in average" + }, + "swat_personnel": { + "badge": false, + "in": "additional", + "text": "TOG staff needed minimum in average" + } + }, "settings": { "chances": { "100": { @@ -50,6 +67,10 @@ "title": "Quint Simple Rate" } }, + "noVehicleRequirements": { + "description": "Set here which special requirements to show, if they exist for that mission.", + "title": "Special requirements" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": " Indicates, if instead of a firetruck arrfs are possible on site.", diff --git a/src/modules/missionHelper/i18n/en_GB.json b/src/modules/missionHelper/i18n/en_GB.json index d601f254a8..857121de30 100644 --- a/src/modules/missionHelper/i18n/en_GB.json +++ b/src/modules/missionHelper/i18n/en_GB.json @@ -3,10 +3,6 @@ "expansions": "Spread | Spreads", "followups": "Follow-up Mission | Follow-up Missions", "generated_by": "Generated by", - "noVehicleRequirements": [ - "water_needed", - "patient_critical_care" - ], "patients": { "helicopter": "Probability for HEMS", "patient_allow_first_responder_chance": "First Responder Probability", diff --git a/src/modules/missionHelper/i18n/en_GB.root.json b/src/modules/missionHelper/i18n/en_GB.root.json index 8f3c265976..23b3642fd5 100644 --- a/src/modules/missionHelper/i18n/en_GB.root.json +++ b/src/modules/missionHelper/i18n/en_GB.root.json @@ -1,6 +1,18 @@ { "description": "Get all important information about a mission, in the mission window.", "name": "Missionhelper", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Firefighters needed minimum" + }, + "swat_personnel": { + "badge": false, + "in": "additional", + "text": "Armed Response Personnel needed minimum in average" + } + }, "settings": { "chances": { "100": { @@ -50,6 +62,10 @@ "title": "Quint Simple Rate" } }, + "noVehicleRequirements": { + "description": "Set here which special requirements to show, if they exist for that mission.", + "title": "Special requirements" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": " Indicates, if instead of a firetruck arrfs are possible on site.", diff --git a/src/modules/missionHelper/i18n/en_US.json b/src/modules/missionHelper/i18n/en_US.json index e39ee9a3f8..f9409b3e70 100644 --- a/src/modules/missionHelper/i18n/en_US.json +++ b/src/modules/missionHelper/i18n/en_US.json @@ -3,9 +3,6 @@ "expansions": "Spread | Spreads", "followups": "Follow-up Mission | Follow-up Missions", "generated_by": "Generated by", - "noVehicleRequirements": [ - "water_needed" - ], "patients": { "allow_ktw_instead_of_rtw": "A BLS can be used instead of an ALS.", "helicopter": "Probability for HEMS", diff --git a/src/modules/missionHelper/i18n/en_US.root.json b/src/modules/missionHelper/i18n/en_US.root.json index 608a242f75..5a22624eb9 100644 --- a/src/modules/missionHelper/i18n/en_US.root.json +++ b/src/modules/missionHelper/i18n/en_US.root.json @@ -1,6 +1,28 @@ { "description": "Get all important information about a mission, in the mission window.", "name": "Missionhelper", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Firefighters needed minimum" + }, + "average_min_police_personnel": { + "badge": false, + "in": "additional", + "text": "Police officers needed minimum in average" + }, + "swat_personnel": { + "badge": false, + "in": "additional", + "text": "SWAT staff needed minimum in average" + }, + "water_needed": { + "badge": true, + "in": "requirements", + "text": "Water: {n} gallon | Water: {n} gallons" + } + }, "settings": { "chances": { "100": { @@ -50,6 +72,10 @@ "title": "Quint Simple Rate" } }, + "noVehicleRequirements": { + "description": "Set here which special requirements to show, if they exist for that mission.", + "title": "Special requirements" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": " Indicates, if instead of a firetruck arrfs are possible on site.", diff --git a/src/modules/missionHelper/i18n/fr_FR.json b/src/modules/missionHelper/i18n/fr_FR.json index b814d1b1bc..a788bd6f6f 100644 --- a/src/modules/missionHelper/i18n/fr_FR.json +++ b/src/modules/missionHelper/i18n/fr_FR.json @@ -3,9 +3,6 @@ "expansions": "Extension | Extensions", "followups": "Mission à suivre | Missions à suivre", "generated_by": "Généré par", - "noVehicleRequirements": [ - "water_needed" - ], "patients": { "helicopter": "Probabilité de déclencher le Dragon", "patient_allow_first_responder_chance": "First Responder Probability", diff --git a/src/modules/missionHelper/i18n/fr_FR.root.json b/src/modules/missionHelper/i18n/fr_FR.root.json index 9d68b7519f..e905d0136d 100644 --- a/src/modules/missionHelper/i18n/fr_FR.root.json +++ b/src/modules/missionHelper/i18n/fr_FR.root.json @@ -1,6 +1,23 @@ { "description": "Montre les informations importantes de la mission dans la fenêtre de mission.", "name": "Missionhelper", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Moyenne minimale Pompiers" + }, + "average_min_police_personnel": { + "badge": false, + "in": "additional", + "text": "Moyenne minimale Policiers" + }, + "height_rescue_personnel": { + "badge": false, + "in": "additional", + "text": "Spécialistes IMP requis" + } + }, "settings": { "chances": { "100": { @@ -54,6 +71,10 @@ "title": "Quint Simple Rate" } }, + "noVehicleRequirements": { + "description": "Set here which special requirements to show, if they exist for that mission.", + "title": "Special requirements" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": " Indicates, if instead of a firetruck arrfs are possible on site.", diff --git a/src/modules/missionHelper/i18n/it_IT.json b/src/modules/missionHelper/i18n/it_IT.json index 2b375813f0..89f786ee9b 100644 --- a/src/modules/missionHelper/i18n/it_IT.json +++ b/src/modules/missionHelper/i18n/it_IT.json @@ -3,9 +3,6 @@ "expansions": "Espansione | Espansioni", "followups": "Missione supplementare | Missioni supplementari", "generated_by": "Generata da", - "noVehicleRequirements": [ - "water_needed" - ], "patients": { "allow_ktw_instead_of_rtw": "Può essere usata una MSB invece di una MSA.", "helicopter": "Probabilità per HEMS", diff --git a/src/modules/missionHelper/i18n/it_IT.root.json b/src/modules/missionHelper/i18n/it_IT.root.json index 4560c29a28..1d108d28cb 100644 --- a/src/modules/missionHelper/i18n/it_IT.root.json +++ b/src/modules/missionHelper/i18n/it_IT.root.json @@ -1,6 +1,13 @@ { "description": "Ottieni tutte le informazioni importanti sulla missione direttamente all'interno della finestra della missione.", "name": "Missionhelper", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Vigili del Fuoco richiesti" + } + }, "settings": { "chances": { "100": { @@ -46,6 +53,10 @@ "title": "Valutazione semplice di salvataggio pesante" } }, + "noVehicleRequirements": { + "description": "Set here which special requirements to show, if they exist for that mission.", + "title": "Special requirements" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": "Indica, se invece di un camion dei pompieri sono possibili arrfs sul posto.", diff --git a/src/modules/missionHelper/i18n/nb_NO.json b/src/modules/missionHelper/i18n/nb_NO.json index 5a2fe32d0a..2f32580f6a 100644 --- a/src/modules/missionHelper/i18n/nb_NO.json +++ b/src/modules/missionHelper/i18n/nb_NO.json @@ -3,9 +3,6 @@ "expansions": "Utvikling | Utviklinger", "followups": "Follow-up Mission | Follow-up Missions", "generated_by": "Generert av", - "noVehicleRequirements": [ - "water_needed" - ], "patients": { "allow_ktw_instead_of_rtw": "En syketransport kan bli brukt.", "helicopter": "Sannsynlighet for Luftambulanse:", diff --git a/src/modules/missionHelper/i18n/nb_NO.root.json b/src/modules/missionHelper/i18n/nb_NO.root.json index 2c70e10d86..92f1d4d88b 100644 --- a/src/modules/missionHelper/i18n/nb_NO.root.json +++ b/src/modules/missionHelper/i18n/nb_NO.root.json @@ -1,6 +1,23 @@ { "description": "Få masse nyttig informasjon om et oppdrag, i oppdragsvinduet.", "name": "Missionhelper", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Gjennomsnittlig min. Brannpersonell" + }, + "average_min_police_personnel": { + "badge": false, + "in": "additional", + "text": "Gjennomsnittlig min. Politipersonell" + }, + "swat_personnel": { + "badge": false, + "in": "additional", + "text": "Nødvendig politi med våpentrening" + } + }, "settings": { "chances": { "100": { @@ -54,6 +71,10 @@ "title": "Snorkelbil vs Stigebil" } }, + "noVehicleRequirements": { + "description": "Set here which special requirements to show, if they exist for that mission.", + "title": "Special requirements" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": " Indicates, if instead of a firetruck arrfs are possible on site.", diff --git a/src/modules/missionHelper/i18n/nl_NL.json b/src/modules/missionHelper/i18n/nl_NL.json index 05e3d8d801..5a31574082 100644 --- a/src/modules/missionHelper/i18n/nl_NL.json +++ b/src/modules/missionHelper/i18n/nl_NL.json @@ -3,9 +3,6 @@ "expansions": "Uitbreiding | Uitbreidingen", "followups": "Vervolginzet | Vervolginzetten", "generated_by": "Gegenereerd door", - "noVehicleRequirements": [ - "water_needed" - ], "patients": { "allow_ktw_instead_of_rtw": "Een zorgambulance kan worden gebruikt als Ambulance", "nef": "Kans dat het MMT benodigd is", diff --git a/src/modules/missionHelper/i18n/nl_NL.root.json b/src/modules/missionHelper/i18n/nl_NL.root.json index 9429e75650..e8bdc7d5ae 100644 --- a/src/modules/missionHelper/i18n/nl_NL.root.json +++ b/src/modules/missionHelper/i18n/nl_NL.root.json @@ -1,6 +1,13 @@ { "description": "Krijg alle belangrijke info direct in je meldingenscherm", "name": "Inzethelper", + "noVehicleRequirements": { + "average_min_fire_personnel": { + "badge": false, + "in": "additional", + "text": "Gemiddeld minimaal aantal brandweerpersoneel" + } + }, "settings": { "bike_police_only_if_needed": { "description": "Geeft aan wanneer biketeams alleen nodig zijn als je ze hebt.", @@ -54,6 +61,10 @@ "title": "Noodhulpvoertuigen gemakkelijk beoordelen" } }, + "noVehicleRequirements": { + "description": "Stel hier in welke bijzondere benodigdheden moeten worden getoond indien ze nodig zijn bij die inzet.", + "title": "Bijzondere benodigdheden" + }, "optionalAlternatives": { "allow_arff_instead_of_lf": { "description": "Geeft aan of een crashtender kan worden gebruikt als een tankautospuit", diff --git a/src/modules/missionHelper/missionHelper.vue b/src/modules/missionHelper/missionHelper.vue index 344360edba..0a1f72fab9 100644 --- a/src/modules/missionHelper/missionHelper.vue +++ b/src/modules/missionHelper/missionHelper.vue @@ -242,15 +242,32 @@ {{ missionSpecs.generated_by }}
+ {{ - $mc(`requirements.${req}`, missionSpecs.requirements[req]) - }}: - {{ missionSpecs.requirements[req].toLocaleString() }} + $mc( + `noVehicleRequirements.${req}.text`, + missionSpecs[$m(`noVehicleRequirements.${req}.in`)][req] + ) + }}
this.noVehicleRequirements.includes(req)); + const reqi18n = (this.$m('noVehicleRequirements') as unknown) as { + [key: string]: { + badge: boolean; + text: string; + in: 'additional' | 'prerequisites'; + }; + }; + const reqs = { badge: [], nonbadge: [] } as { + badge: string[]; + nonbadge: string[]; + }; + this.settings.noVehicleRequirements?.forEach(req => + this.missionSpecs?.[reqi18n[req].in][req] + ? reqs[reqi18n[req].badge ? 'badge' : 'nonbadge'].push(req) + : null + ); + return reqs; }, }, methods: { @@ -565,7 +597,7 @@ export default Vue.extend< return mission; }, loadSetting(id, base, base_string = '') { - if (typeof base[id] === 'object') { + if (typeof base[id] === 'object' && !Array.isArray(base[id])) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore Object.keys(base[id]).forEach(sid => @@ -923,10 +955,10 @@ export default Vue.extend< .then(minified => (this.minified = minified)); }, mounted() { - this.reloadSpecs(); Object.keys(this.settings).forEach(id => this.loadSetting(id, this.settings) ); + this.reloadSpecs(); }, }); diff --git a/src/modules/missionHelper/settings.ts b/src/modules/missionHelper/settings.ts index 957f26c1f8..6a403845c9 100644 --- a/src/modules/missionHelper/settings.ts +++ b/src/modules/missionHelper/settings.ts @@ -1,224 +1,242 @@ import { ModuleSettingFunction } from 'typings/Module'; -import { Hidden, Select, Toggle } from 'typings/Setting'; +import { Hidden, MultiSelect, Select, Toggle } from 'typings/Setting'; -export default ((MODULE_ID: string) => ({ - 'title': { - type: 'toggle', - default: true, - }, - 'id': { - type: 'toggle', - default: false, - }, - 'type': { - type: 'toggle', - default: false, - }, - 'place': { - type: 'toggle', - default: true, - }, - 'prerequisites': { - type: 'toggle', - default: false, - }, - 'vehicles.title': { - type: 'toggle', - default: true, - }, - 'vehicles.content': { - type: 'toggle', - default: true, - }, - 'vehicles.sort': { + type: 'select', + values: ['caption', 'amount', 'percentage'], + default: 'caption', + dependsOn: '.vehicles.content', + }, + ...(['de_DE', 'en_US', 'nl_NL'].includes(BUILD_LANG) + ? { + 'vehicles.patient_additionals': { + type: 'toggle', + default: true, + dependsOn: '.vehicles.content', + }, + } + : null), + 'chances.normal': { + type: 'toggle', + default: true, + }, + 'chances.100': { + type: 'toggle', + default: false, + dependsOn: '.chances.normal', + }, + ...(BUILD_LANG !== 'nl_NL' + ? { + 'multifunctionals.heavy_rescue_vehicles': { + type: 'toggle', + default: false, + dependsOn: '.vehicles.content', + }, + } + : null), + 'multifunctionals.battalion_chief_vehicles': { + type: 'toggle', + default: false, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + disabled: (settings): boolean => + !settings[MODULE_ID]['vehicles.content'].value || + settings[MODULE_ID]['hide_battalion_chief_vehicles'].value, + }, + 'hide_battalion_chief_vehicles': { + type: 'toggle', + default: false, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + disabled: (settings): boolean => + !settings[MODULE_ID]['vehicles.content'].value || + settings[MODULE_ID]['multifunctionals.battalion_chief_vehicles'] + .value, + }, + ...(BUILD_LANG === 'nl_NL' + ? { + 'multifunctionals.police_cars': { + type: 'toggle', + default: false, + dependsOn: '.vehicles.content', + }, + } + : null), + ...(BUILD_LANG === 'de_DE' + ? { + 'multifunctionals.platform_trucks': { + type: 'toggle', + default: false, + dependsOn: '.vehicles.content', + }, + } + : null), + 'optionalAlternatives.allow_rw_instead_of_lf': { + type: 'toggle', + default: false, + dependsOn: '.vehicles.content', + }, + 'optionalAlternatives.allow_arff_instead_of_lf': { + type: 'toggle', + default: false, + dependsOn: '.vehicles.content', + }, + ...(['de_DE', 'en_US', 'nl_NL', 'it_IT'].includes(BUILD_LANG) + ? { + 'optionalAlternatives.allow_ktw_instead_of_rtw': { + type: 'toggle', + default: false, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + disabled: (settings): boolean => + !settings[MODULE_ID]['patients.content'].value && + !settings[MODULE_ID]['vehicles.content'].value, + }, + } + : null), + 'patients.title': { + type: 'toggle', + default: true, + }, + 'patients.content': { + type: 'toggle', + default: true, + }, + 'patients.live': { + type: 'toggle', + default: true, + }, + ...(['en_GB', 'en_US', 'it_IT'].includes(BUILD_LANG) + ? { + 'patient.code_possible': { + type: 'toggle', + default: false, + }, + } + : null), + ...(BUILD_LANG !== 'nl_NL' + ? { + 'patients.patient_allow_first_responder_chance': { + type: 'toggle', + default: true, + dependsOn: '.patients.content', + }, + } + : null), + 'patients.hideWhenNoNeed': { + type: 'toggle', + default: false, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + disabled: (settings): boolean => + !settings[MODULE_ID]['patients.title'].value && + !settings[MODULE_ID]['patients.content'].value, + }, + 'prisoners.title': { + type: 'toggle', + default: true, + }, + 'prisoners.content': { + type: 'toggle', + default: true, + }, + 'prisoners.live': { + type: 'toggle', + default: true, + }, + 'noVehicleRequirements': { + type: 'multiSelect', + default: noVehicleRequirements, + labels: noVehicleRequirementLabels, + values: noVehicleRequirements, + }, + 'generatedBy': { + type: 'toggle', + default: false, + }, + 'credits': { + type: 'toggle', + default: true, + }, + 'expansions': { + type: 'toggle', + default: true, + }, + ...(BUILD_LANG === 'en_US' + ? { + subsequent: { + type: 'toggle', + default: true, + }, + } + : null), + 'followup': { + type: 'toggle', + default: true, + }, + 'overlay': { + type: 'hidden', + default: false, + }, + 'minified': { + type: 'hidden', + default: false, + }, + ...(BUILD_LANG === 'de_DE' + ? { + k9_only_if_needed: { + type: 'toggle', + default: false, + }, + } + : null), + ...(BUILD_LANG === 'nl_NL' + ? { + bike_police_only_if_needed: { + type: 'toggle', + default: false, + }, + } + : null), + }; +}) as ModuleSettingFunction; diff --git a/src/modules/telemetry/main.ts b/src/modules/telemetry/main.ts index dbeadb3a73..fd86d54e80 100644 --- a/src/modules/telemetry/main.ts +++ b/src/modules/telemetry/main.ts @@ -3,6 +3,7 @@ import { StorageSet } from '../../../typings/store/storage/Actions'; import config from '../../config'; const NOTE_STORAGE_KEY = 'telemetry_note_confirmed'; +const HIDE_BROWSER_NOTE_KEY = 'hide_browsersupport_note'; export default ( LSSM: Vue, @@ -27,42 +28,67 @@ export default ( const browser = ua.getBrowser(); const browserMajor = parseInt(browser.version?.split('.')[0] || '-1'); - const browserSupport = - config.browser[browser.name?.toLowerCase() || '']; + LSSM.$store + .dispatch('storage/get', { + key: HIDE_BROWSER_NOTE_KEY, + defaultValue: false, + }) + .then(browserNoteShown => { + if (browserNoteShown) return; - if (!browserSupport) - LSSM.$modal.show('dialog', { - title: $m('browsersupport.not.title'), - text: $m('browsersupport.not.text', { - name: browser.name, - wiki: LSSM.$store.getters.wiki, - wikiAnchor: $m('browsersupport.faqAnchor'), - }), - options: {}, - buttons: [ - { - title: $m('browsersupport.close'), - }, - ], - }); - else if (browserMajor < browserSupport.supported) - LSSM.$modal.show('dialog', { - title: $m('browsersupport.old.title'), - text: $m('browsersupport.old.text', { - name: browser.name, - latest: browserSupport.latest, - supported: browserSupport.supported, - current: browserMajor, - download: browserSupport.download, - wiki: LSSM.$store.getters.wiki, - wikiAnchor: $m('browsersupport.faqAnchor'), - }), - options: {}, - buttons: [ - { - title: $m('browsersupport.close'), - }, - ], + const browserSupport = + config.browser[browser.name?.toLowerCase() || '']; + + if (!browserSupport) + LSSM.$modal.show('dialog', { + title: $m('browsersupport.not.title'), + text: $m('browsersupport.not.text', { + name: browser.name, + wiki: LSSM.$store.getters.wiki, + wikiAnchor: $m('browsersupport.faqAnchor'), + }), + options: {}, + buttons: [ + { + title: $m('browsersupport.close'), + handler() { + LSSM.$store + .dispatch('storage/set', { + key: HIDE_BROWSER_NOTE_KEY, + value: true, + } as StorageSet) + .then(() => LSSM.$modal.hide('dialog')); + }, + }, + ], + }); + else if (browserMajor < browserSupport.supported) + LSSM.$modal.show('dialog', { + title: $m('browsersupport.old.title'), + text: $m('browsersupport.old.text', { + name: browser.name, + latest: browserSupport.latest, + supported: browserSupport.supported, + current: browserMajor, + download: browserSupport.download, + wiki: LSSM.$store.getters.wiki, + wikiAnchor: $m('browsersupport.faqAnchor'), + }), + options: {}, + buttons: [ + { + title: $m('browsersupport.close'), + handler() { + LSSM.$store + .dispatch('storage/set', { + key: HIDE_BROWSER_NOTE_KEY, + value: true, + } as StorageSet) + .then(() => LSSM.$modal.hide('dialog')); + }, + }, + ], + }); }); LSSM.$store diff --git a/src/store/api.ts b/src/store/api.ts index 48ec11863a..3f183a8ced 100644 --- a/src/store/api.ts +++ b/src/store/api.ts @@ -420,9 +420,9 @@ export default { lastUpdate, } = await get_api_values('vehicles', store); if (!vehicles) return reject(); - vehicles[ - vehicles.findIndex(v => v.id === id) - ] = vehicle; + const index = vehicles.findIndex(v => v.id === id); + if (index < 0) vehicles.push(vehicle); + else vehicles[index] = vehicle; set_api_storage( 'vehicles', { @@ -432,7 +432,7 @@ export default { }, store ); - return resolve(vehicles); + return resolve(vehicle); }); }); }, @@ -450,9 +450,11 @@ export default { } = await get_api_values('vehicles', store); if (!vehicles) return reject(); vehiclesAt.forEach(vehicle => { - vehicles[ - vehicles.findIndex(v => v.id === id) - ] = vehicle; + const index = vehicles.findIndex( + v => v.id === vehicle.id + ); + if (index < 0) vehicles.push(vehicle); + else vehicles[index] = vehicle; }); set_api_storage( 'vehicles', diff --git a/static/lssm-v4.user.js b/static/lssm-v4.user.js index b22b701f38..f2938a8f23 100644 --- a/static/lssm-v4.user.js +++ b/static/lssm-v4.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name LSS-Manager V.4 -// @version 4.1.4+CZ-DK-DE-AU-GB-US-ES-MX-FI-FR-IT-JP-KR-NO-NL-PL-BR-PT-RO-RU-SK-SE-TR-UA +// @version 4.1.5+CZ-DK-DE-AU-GB-US-ES-MX-FI-FR-IT-JP-KR-NO-NL-PL-BR-PT-RO-RU-SK-SE-TR-UA // @author Aisaka | Sanni | Jan (jxn_30) | Ron31 // @description Das Tool für das LSS in der Version 4 // @include /^https?:\/\/(?:w{3}\.)?(?:(policie\.)?operacni-stredisko\.cz|(politi\.)?alarmcentral-spil\.dk|(polizei\.)?leitstellenspiel\.de|(?:(police\.)?missionchief-australia|(police\.)?missionchief|(poliisi\.)?hatakeskuspeli|missionchief-japan|missionchief-korea|(politiet\.)?nodsentralspillet|(politie\.)?meldkamerspel|operador193|(policia\.)?jogo-operador112|jocdispecerat112|dispecerske-centrum|112-merkez|dyspetcher101-game)\.com|(police\.)?missionchief\.co\.uk|centro-de-mando\.es|centro-de-mando\.mx|(police\.)?operateur112\.fr|(polizia\.)?operatore112\.it|(policja\.)?operatorratunkowy\.pl|dispetcher112\.ru|(polis\.)?larmcentralen-spelet\.se)\/.*$/ diff --git a/typings/LSSM-Menu.d.ts b/typings/LSSM-Menu.d.ts index 7de8903f7b..6df9e6e434 100644 --- a/typings/LSSM-Menu.d.ts +++ b/typings/LSSM-Menu.d.ts @@ -9,7 +9,6 @@ export interface lssmMenuData { wiki: string; version: string; mode: string; - nav: HTMLElement | null; } export interface lssmMenuComputed { diff --git a/typings/Mission.d.ts b/typings/Mission.d.ts index 4e622f6fa3..724cdbbe6c 100644 --- a/typings/Mission.d.ts +++ b/typings/Mission.d.ts @@ -17,13 +17,15 @@ interface Additional { allow_arff_instead_of_lf?: boolean; // Guard missions - duration?: string; + duration?: number; + duration_text?: string; guard_mission?: boolean; // Personnel average_min_police_personnel?: number; average_min_fire_personnel?: number; swat_personnel?: number; + height_rescue_personnel?: number; personnel_educations?: { // currently fr_FR only [education: string]: number; diff --git a/typings/components/Settings.d.ts b/typings/components/Settings.d.ts index 54b269e6ed..c9666d8f33 100644 --- a/typings/components/Settings.d.ts +++ b/typings/components/Settings.d.ts @@ -1,5 +1,5 @@ import { Modules } from '../Module'; -import { ModuleSettings, Setting } from '../Setting'; +import { ModuleSettings, MultiSelect, Select, Setting } from '../Setting'; import VueI18n from 'vue-i18n'; import { IconDefinition } from '@fortawesome/fontawesome-svg-core'; @@ -30,6 +30,11 @@ export interface SettingsMethods { [key: string]: unknown; } ): VueI18n.TranslateResult; + getSelectOptions( + module: string, + setting: Select | MultiSelect, + settingId: string + ): { label: string; value: string }[]; } export interface SettingsComputed { diff --git a/typings/components/setting/AppendableList.d.ts b/typings/components/setting/AppendableList.d.ts index a6801b6b54..31b971ee31 100644 --- a/typings/components/setting/AppendableList.d.ts +++ b/typings/components/setting/AppendableList.d.ts @@ -3,6 +3,7 @@ import { Setting, AppendableList as AppendableListSetting, Select, + MultiSelect, } from 'typings/Setting'; import { IconDefinition } from '@fortawesome/fontawesome-svg-core'; @@ -27,7 +28,9 @@ export interface AppendableListMethods { index: number, value: AppendableListSetting['defaultItem'] ): void; - getOptions(setting: Select): { label: string; value: string }[]; + getOptions( + setting: Select | MultiSelect + ): { label: string; value: string }[]; moveUp(index: number): void; moveDown(index: number): void; reset(): void; diff --git a/typings/modules/MissionHelper.d.ts b/typings/modules/MissionHelper.d.ts index 53e657a394..6cbae8bd0b 100644 --- a/typings/modules/MissionHelper.d.ts +++ b/typings/modules/MissionHelper.d.ts @@ -72,6 +72,7 @@ export interface MissionHelper { expansions: boolean; followup: boolean; k9_only_if_needed: boolean; + noVehicleRequirements: string[]; // General [key: string]: boolean | unknown; @@ -93,7 +94,7 @@ export interface MissionHelperComputed { currentPrisoners: number; showPatients: boolean; vehicles: VehicleRequirements; - specialRequirements: string[]; + specialRequirements: { badge: string[]; nonbadge: string[] }; } export interface MissionHelperMethods { $m( diff --git a/yarn.lock b/yarn.lock index 14e4700e0c..a93548f014 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1053,10 +1053,10 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@^14.14.9": - version "14.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.9.tgz#04afc9a25c6ff93da14deabd65dc44485b53c8d6" - integrity sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw== +"@types/node@*", "@types/node@^14.14.10": + version "14.14.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785" + integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ== "@types/q@^1.5.1": version "1.5.4" @@ -9104,10 +9104,10 @@ vuepress@^1.7.0: opencollective-postinstall "^2.0.2" update-notifier "^4.0.0" -vuex@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d" - integrity sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw== +vuex@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.6.0.tgz#95efa56a58f7607c135b053350833a09e01aa813" + integrity sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ== watchpack-chokidar2@^2.0.0: version "2.0.0"