refactor: use material symbols for menu

This commit is contained in:
Jovan Krunić
2022-08-22 15:25:00 +00:00
committed by Thea Schöbl
parent 557d050b36
commit 9e1017edfb
2 changed files with 85 additions and 152 deletions

View File

@@ -3,19 +3,20 @@
import {SCAboutPageContentType, SCConfigFile, SCLanguageCode} from '@openstapps/core'; import {SCAboutPageContentType, SCConfigFile, SCLanguageCode} from '@openstapps/core';
import {RecursivePartial} from '@openstapps/logger/lib/common'; import {RecursivePartial} from '@openstapps/logger/lib/common';
const markdownSources: {[key in SCLanguageCode]?: { const markdownSources: {
/** [key in SCLanguageCode]?: {
* Privacy policy markdown /**
*/ * Privacy policy markdown
privacyPolicy?: string; */
/** privacyPolicy?: string;
* Terms and conditions markdown /**
*/ * Terms and conditions markdown
termsAndConditions?: string; */
}} = {en: {}, de: {}}; termsAndConditions?: string;
};
} = {en: {}, de: {}};
markdownSources.de!.privacyPolicy = markdownSources.de!.privacyPolicy = `
`
Diese Datenschutzerklärung dient zur Erfüllung der nach Artikel 13 EU DSGVO geforderten Informationspflicht bei Erhebung von Daten zum Zeitpunkt der Erhebung bei betroffenen Personen. Diese Datenschutzerklärung dient zur Erfüllung der nach Artikel 13 EU DSGVO geforderten Informationspflicht bei Erhebung von Daten zum Zeitpunkt der Erhebung bei betroffenen Personen.
# **Name und Anschrift des Verantwortlichen** # **Name und Anschrift des Verantwortlichen**
@@ -176,8 +177,7 @@ Pseudonymisierung gehören kann.</li>
</ol> </ol>
`; `;
markdownSources.de!.termsAndConditions = markdownSources.de!.termsAndConditions = `
`
<p>Stand: 04. November 2015</p> <p>Stand: 04. November 2015</p>
<p>Es gilt der jeweilige Datenschutz der Hochschule im jeweiligen Bundesland. Darüber hinaus gelten die folgenden Vereinbarungen. Mit der Installation erklären Sie sich bereit die folgenden Bedingungen zu akzeptieren. <br> <p>Es gilt der jeweilige Datenschutz der Hochschule im jeweiligen Bundesland. Darüber hinaus gelten die folgenden Vereinbarungen. Mit der Installation erklären Sie sich bereit die folgenden Bedingungen zu akzeptieren. <br>
</p> </p>
@@ -282,8 +282,7 @@ markdownSources.de!.termsAndConditions =
<p>Fragen oder Anmerkungen zu dieser AGB richten Sie bitte an: <a href="mailto:app@rz.uni-frankfurt.de">app@rz.uni-frankfurt.de</a></p> <p>Fragen oder Anmerkungen zu dieser AGB richten Sie bitte an: <a href="mailto:app@rz.uni-frankfurt.de">app@rz.uni-frankfurt.de</a></p>
`; `;
markdownSources.en!.privacyPolicy = markdownSources.en!.privacyPolicy = `
`
This data protection declaration serves to fulfill the information obligation required under Article 13 EU DSGVO when data is collected at the time of collection from data subjects. This data protection declaration serves to fulfill the information obligation required under Article 13 EU DSGVO when data is collected at the time of collection from data subjects.
# **Name and address of the responsible person** # **Name and address of the responsible person**
@@ -445,8 +444,7 @@ Pseudonymization may include.</li>
</ol> </ol>
`; `;
markdownSources.en!.termsAndConditions = markdownSources.en!.termsAndConditions = `
`
<p>As of November 04, 2015</p> <p>As of November 04, 2015</p>
<p>The respective data protection of the university in the respective federal state applies. In addition, the following agreements apply. By installing you agree to accept the following terms and conditions. <br> <p>The respective data protection of the university in the respective federal state applies. In addition, the following agreements apply. By installing you agree to accept the following terms and conditions. <br>
</p> </p>
@@ -551,7 +549,6 @@ markdownSources.en!.termsAndConditions =
<p>If you have any questions or comments about these terms and conditions, please contact: <a href="mailto:app@rz.uni-frankfurt.de">app@rz.uni-frankfurt.de</a></p> <p>If you have any questions or comments about these terms and conditions, please contact: <a href="mailto:app@rz.uni-frankfurt.de">app@rz.uni-frankfurt.de</a></p>
`; `;
/** /**
* This is the default configuration for the Goethe university of Frankfurt * This is the default configuration for the Goethe university of Frankfurt
*/ */
@@ -598,8 +595,7 @@ const config: RecursivePartial<SCConfigFile> = {
title: 'Über das StApps Projekt', title: 'Über das StApps Projekt',
content: [ content: [
{ {
title: title: 'Verbundprojekt mehrerer Hochschulen für eine generische Studierenden-App',
'Verbundprojekt mehrerer Hochschulen für eine generische Studierenden-App',
content: { content: {
type: SCAboutPageContentType.MARKDOWN, type: SCAboutPageContentType.MARKDOWN,
value: ` value: `
@@ -622,8 +618,7 @@ const config: RecursivePartial<SCConfigFile> = {
}, },
translations: { translations: {
en: { en: {
title: title: 'Collaborative project of multiple universities for a single generic study app',
'Collaborative project of multiple universities for a single generic study app',
}, },
}, },
type: SCAboutPageContentType.SECTION, type: SCAboutPageContentType.SECTION,
@@ -649,8 +644,7 @@ const config: RecursivePartial<SCConfigFile> = {
Norbert-Wollheim-Platz 1<br> Norbert-Wollheim-Platz 1<br>
60629 Frankfurt 60629 Frankfurt
`, `,
translations: { translations: {},
},
type: SCAboutPageContentType.MARKDOWN, type: SCAboutPageContentType.MARKDOWN,
}, },
], ],
@@ -669,8 +663,7 @@ const config: RecursivePartial<SCConfigFile> = {
'[app@rz.uni-frankfurt.de](mailto:app@rz.uni-frankfurt.de)<br>' + '[app@rz.uni-frankfurt.de](mailto:app@rz.uni-frankfurt.de)<br>' +
'[+49 69 798 32936](tel:+496979832936)<br>' + '[+49 69 798 32936](tel:+496979832936)<br>' +
'[https://app.rz.uni-frankfurt.de](https://app.rz.uni-frankfurt.de)', '[https://app.rz.uni-frankfurt.de](https://app.rz.uni-frankfurt.de)',
translations: { translations: {},
},
type: SCAboutPageContentType.MARKDOWN, type: SCAboutPageContentType.MARKDOWN,
}, },
], ],
@@ -696,7 +689,7 @@ const config: RecursivePartial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'document', icon: 'description',
title: 'Impressum', title: 'Impressum',
link: 'imprint', link: 'imprint',
translations: { translations: {
@@ -707,7 +700,7 @@ const config: RecursivePartial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'shield-half', icon: 'policy',
title: 'Datenschutz', title: 'Datenschutz',
link: 'privacy', link: 'privacy',
translations: { translations: {
@@ -718,7 +711,7 @@ const config: RecursivePartial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'reader', icon: 'text_snippet',
title: 'Allgemeine Geschäftsbedingungen', title: 'Allgemeine Geschäftsbedingungen',
link: 'terms', link: 'terms',
translations: { translations: {
@@ -729,7 +722,7 @@ const config: RecursivePartial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'library', icon: 'copyright',
title: 'Bibliotheken und Lizenzen', title: 'Bibliotheken und Lizenzen',
link: 'licenses', link: 'licenses',
translations: { translations: {

View File

@@ -18,31 +18,29 @@ import {resolve} from 'path';
* @param num The number that should be checked * @param num The number that should be checked
* @param range Array of two numbers representing a range (inclusive interval) * @param range Array of two numbers representing a range (inclusive interval)
*/ */
export function inRangeInclusive(num: number, range: number[]): boolean { export function inRangeInclusive(number_: number, range: number[]): boolean {
return num >= range[0] && num <= range[1]; return number_ >= range[0] && number_ <= range[1];
} }
const sommerRange = [4, 9]; const sommerRange = [4, 9];
const winterRange = [10, 3]; const winterRange = [10, 3];
const month = new Date().getMonth(); const month = new Date().getMonth();
const year = new Date().getFullYear(); const year = new Date().getFullYear();
const winterYearOffset = (month < winterRange[0] ? -1 : 0); const winterYearOffset = month < winterRange[0] ? -1 : 0;
const sommerYear = year + (month <= winterRange[1] ? -1 : 0); const sommerYear = year + (month <= winterRange[1] ? -1 : 0);
const winterYear = `${year + winterYearOffset}/${(year + 1 + winterYearOffset) const winterYear = `${year + winterYearOffset}/${(year + 1 + winterYearOffset).toString().slice(-2)}`;
.toString()
.slice(-2)}`;
const wsAcronymShort = `WS ${winterYear}`; const wsAcronymShort = `WS ${winterYear}`;
const ssAcronymShort = `SS ${sommerYear}`; const ssAcronymShort = `SS ${sommerYear}`;
const wsAcronymLong = `WiSe ${winterYear}`; const wsAcronymLong = `WiSe ${winterYear}`;
const ssAcronymLong = `SoSe ${sommerYear}`; const ssAcronymLong = `SoSe ${sommerYear}`;
const userGroupSetting: SCUserGroupSetting = { const userGroupSetting: SCUserGroupSetting = {
categories: ['profile'], categories: ['profile'],
defaultValue: 'students', defaultValue: 'students',
description: 'The user group the app is going to be used.' description:
+ 'This settings for example is getting used for the predefined price category of mensa meals.', 'The user group the app is going to be used.' +
'This settings for example is getting used for the predefined price category of mensa meals.',
inputType: SCSettingInputType.SingleChoice, inputType: SCSettingInputType.SingleChoice,
name: 'group', name: 'group',
order: 1, order: 1,
@@ -53,24 +51,17 @@ const userGroupSetting: SCUserGroupSetting = {
}, },
translations: { translations: {
de: { de: {
description: 'Mit welcher Benutzergruppe soll die App verwendet werden?' description:
+ ' Die Einstellung wird beispielsweise für die Vorauswahl der Preiskategorie der Mensa verwendet.', 'Mit welcher Benutzergruppe soll die App verwendet werden?' +
' Die Einstellung wird beispielsweise für die Vorauswahl der Preiskategorie der Mensa verwendet.',
name: 'Gruppe', name: 'Gruppe',
values: [ values: ['Student', 'Angestellter', 'Gast'],
'Student',
'Angestellter',
'Gast',
],
}, },
en: { en: {
description: `The user group the app is going to be used.' description: `The user group the app is going to be used.'
+ ' This settings for example is getting used for the predefined price category of mensa meals.`, + ' This settings for example is getting used for the predefined price category of mensa meals.`,
name: 'Group', name: 'Group',
values: [ values: ['student', 'employee', 'guest'],
'student',
'employee',
'guest',
],
}, },
}, },
type: SCThingType.Setting, type: SCThingType.Setting,
@@ -94,18 +85,12 @@ const languageSetting: SCLanguageSetting = {
de: { de: {
description: 'Die Sprache in der die App angezeigt wird.', description: 'Die Sprache in der die App angezeigt wird.',
name: 'Sprache', name: 'Sprache',
values: [ values: ['Deutsch', 'English'],
'Deutsch',
'English',
],
}, },
en: { en: {
description: 'The language this app is going to use.', description: 'The language this app is going to use.',
name: 'Language', name: 'Language',
values: [ values: ['Deutsch', 'English'],
'Deutsch',
'English',
],
}, },
}, },
type: SCThingType.Setting, type: SCThingType.Setting,
@@ -132,8 +117,7 @@ const config: Partial<SCConfigFile> = {
title: 'Über das StApps Projekt', title: 'Über das StApps Projekt',
content: [ content: [
{ {
title: title: 'Verbundprojekt mehrerer Hochschulen für eine generische Studierenden-App',
'Verbundprojekt mehrerer Hochschulen für eine generische Studierenden-App',
content: { content: {
type: SCAboutPageContentType.MARKDOWN, type: SCAboutPageContentType.MARKDOWN,
value: ` value: `
@@ -154,8 +138,7 @@ const config: Partial<SCConfigFile> = {
}, },
translations: { translations: {
en: { en: {
title: title: 'Collaborative project of multiple universities for a single generic study app',
'Collaborative project of multiple universities for a single generic study app',
}, },
}, },
type: SCAboutPageContentType.SECTION, type: SCAboutPageContentType.SECTION,
@@ -200,10 +183,7 @@ const config: Partial<SCConfigFile> = {
type: SCAboutPageContentType.MARKDOWN, type: SCAboutPageContentType.MARKDOWN,
}, },
{ {
value: value: '[mail]()<br>' + '[+49 12 345 67890]()<br>' + '[https://localhost/]()',
'[mail]()<br>' +
'[+49 12 345 67890]()<br>' +
'[https://localhost/]()',
translations: { translations: {
en: { en: {
value: 'This would be the english contact information', value: 'This would be the english contact information',
@@ -223,7 +203,7 @@ const config: Partial<SCConfigFile> = {
type: SCAboutPageContentType.SECTION, type: SCAboutPageContentType.SECTION,
}, },
{ {
icon: 'newspaper', icon: 'campaign',
title: 'Neue Funktionen / Gelöste Probleme', title: 'Neue Funktionen / Gelöste Probleme',
link: 'changelog', link: 'changelog',
translations: { translations: {
@@ -234,7 +214,7 @@ const config: Partial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'document', icon: 'description',
title: 'Impressum', title: 'Impressum',
link: 'imprint', link: 'imprint',
translations: { translations: {
@@ -245,7 +225,7 @@ const config: Partial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'shield-half', icon: 'policy',
title: 'Datenschutz', title: 'Datenschutz',
link: 'privacy', link: 'privacy',
translations: { translations: {
@@ -256,7 +236,7 @@ const config: Partial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'reader', icon: 'text_snippet',
title: 'Allgemeine Geschäftsbedingungen', title: 'Allgemeine Geschäftsbedingungen',
link: 'terms', link: 'terms',
translations: { translations: {
@@ -267,7 +247,7 @@ const config: Partial<SCConfigFile> = {
type: SCAboutPageContentType.ROUTER_LINK, type: SCAboutPageContentType.ROUTER_LINK,
}, },
{ {
icon: 'library', icon: 'copyright',
title: 'Bibliotheken und Lizenzen', title: 'Bibliotheken und Lizenzen',
link: 'licenses', link: 'licenses',
translations: { translations: {
@@ -363,26 +343,11 @@ const config: Partial<SCConfigFile> = {
campusPolygon: { campusPolygon: {
coordinates: [ coordinates: [
[ [
[ [8.660_432_999_690_723, 50.123_027_017_044_436],
8.660432999690723, [8.675_496_285_518_358, 50.123_027_017_044_436],
50.123027017044436, [8.675_496_285_518_358, 50.130_661_764_486_42],
], [8.660_432_999_690_723, 50.130_661_764_486_42],
[ [8.660_432_999_690_723, 50.123_027_017_044_436],
8.675496285518358,
50.123027017044436,
],
[
8.675496285518358,
50.13066176448642,
],
[
8.660432999690723,
50.13066176448642,
],
[
8.660432999690723,
50.123027017044436,
],
], ],
], ],
type: 'Polygon', type: 'Polygon',
@@ -397,6 +362,7 @@ const config: Partial<SCConfigFile> = {
}, },
menus: [ menus: [
{ {
// unused
icon: 'menu', icon: 'menu',
id: 'main', id: 'main',
items: [ items: [
@@ -427,7 +393,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'calendar', icon: 'calendar_month',
route: '/schedule', route: '/schedule',
title: 'schedule', title: 'schedule',
translations: { translations: {
@@ -440,7 +406,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'cafe', icon: 'local_cafe',
route: '/canteen', route: '/canteen',
title: 'canteen', title: 'canteen',
translations: { translations: {
@@ -453,7 +419,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'search', icon: 'local_library',
route: '/hebis-search', route: '/hebis-search',
title: 'library catalog', title: 'library catalog',
translations: { translations: {
@@ -466,7 +432,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'folder', icon: 'inventory_2',
route: '/catalog', route: '/catalog',
title: 'course catalog', title: 'course catalog',
translations: { translations: {
@@ -503,11 +469,12 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'person', // unused
icon: 'account_circle',
id: 'personal', id: 'personal',
items: [ items: [
{ {
icon: 'library', icon: 'account_circle',
route: '/library-account', route: '/library-account',
title: 'library account', title: 'library account',
translations: { translations: {
@@ -520,7 +487,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'star', icon: 'grade',
route: '/favorites', route: '/favorites',
title: 'favorites', title: 'favorites',
translations: { translations: {
@@ -533,7 +500,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'person', icon: 'account_circle',
route: '/profile', route: '/profile',
title: 'profile', title: 'profile',
translations: { translations: {
@@ -559,7 +526,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'information', icon: 'info',
route: '/about', route: '/about',
title: 'about', title: 'about',
translations: { translations: {
@@ -572,7 +539,7 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
{ {
icon: 'chatbubbles', icon: 'rate_review',
route: '/feedback', route: '/feedback',
title: 'feedback', title: 'feedback',
translations: { translations: {
@@ -598,10 +565,7 @@ const config: Partial<SCConfigFile> = {
], ],
name: 'Goethe-Uni', name: 'Goethe-Uni',
privacyPolicyUrl: 'https://mobile.server.uni-frankfurt.de/_static/privacy.md', privacyPolicyUrl: 'https://mobile.server.uni-frankfurt.de/_static/privacy.md',
settings: [ settings: [userGroupSetting, languageSetting],
userGroupSetting,
languageSetting,
],
}, },
auth: { auth: {
paia: { paia: {
@@ -611,7 +575,8 @@ const config: Partial<SCConfigFile> = {
url: 'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php', url: 'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php',
}, },
endpoints: { endpoints: {
authorization: 'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php', authorization:
'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php',
mapping: { mapping: {
id: '$.email', id: '$.email',
name: '$.name', name: '$.name',
@@ -623,14 +588,11 @@ const config: Partial<SCConfigFile> = {
}, },
}, },
backend: { backend: {
SCVersion: JSON.parse((readFileSync(resolve('.', '.', 'package.json'), 'utf-8')).toString()) SCVersion: JSON.parse(readFileSync(resolve('.', '.', 'package.json'), 'utf-8').toString()).dependencies[
.dependencies['@openstapps/core'], '@openstapps/core'
externalRequestTimeout: 5000,
hiddenTypes: [
SCThingType.DateSeries,
SCThingType.Diff,
SCThingType.Floor,
], ],
externalRequestTimeout: 5000,
hiddenTypes: [SCThingType.DateSeries, SCThingType.Diff, SCThingType.Floor],
mappingIgnoredTags: ['minlength', 'pattern', 'see', 'tjs-format'], mappingIgnoredTags: ['minlength', 'pattern', 'see', 'tjs-format'],
maxMultiSearchRouteQueries: 5, maxMultiSearchRouteQueries: 5,
maxRequestBodySize: 512 * 1024, maxRequestBodySize: 512 * 1024,
@@ -659,20 +621,12 @@ const config: Partial<SCConfigFile> = {
}, },
{ {
fieldName: 'geo', fieldName: 'geo',
onlyOnTypes: [ onlyOnTypes: [SCThingType.Building, SCThingType.PointOfInterest, SCThingType.Room],
SCThingType.Building,
SCThingType.PointOfInterest,
SCThingType.Room,
],
sortTypes: ['distance'], sortTypes: ['distance'],
}, },
{ {
fieldName: 'geo', fieldName: 'geo',
onlyOnTypes: [ onlyOnTypes: [SCThingType.Building, SCThingType.PointOfInterest, SCThingType.Room],
SCThingType.Building,
SCThingType.PointOfInterest,
SCThingType.Room,
],
sortTypes: ['distance'], sortTypes: ['distance'],
}, },
{ {
@@ -690,9 +644,7 @@ const config: Partial<SCConfigFile> = {
}, },
{ {
fieldName: 'offers', fieldName: 'offers',
onlyOnTypes: [ onlyOnTypes: [SCThingType.Dish],
SCThingType.Dish,
],
sortTypes: ['price'], sortTypes: ['price'],
}, },
], ],
@@ -725,31 +677,19 @@ const config: Partial<SCConfigFile> = {
}, },
{ {
fieldName: 'academicTerms.acronym', fieldName: 'academicTerms.acronym',
onlyOnTypes: [ onlyOnTypes: [SCThingType.AcademicEvent, SCThingType.SportCourse],
SCThingType.AcademicEvent,
SCThingType.SportCourse,
],
}, },
{ {
fieldName: 'academicTerm.acronym', fieldName: 'academicTerm.acronym',
onlyOnTypes: [ onlyOnTypes: [SCThingType.Catalog],
SCThingType.Catalog,
],
}, },
{ {
fieldName: 'majors', fieldName: 'majors',
onlyOnTypes: [ onlyOnTypes: [SCThingType.AcademicEvent],
SCThingType.AcademicEvent,
],
}, },
{ {
fieldName: 'keywords', fieldName: 'keywords',
onlyOnTypes: [ onlyOnTypes: [SCThingType.Article, SCThingType.Book, SCThingType.Message, SCThingType.Video],
SCThingType.Article,
SCThingType.Book,
SCThingType.Message,
SCThingType.Video,
],
}, },
{ {
fieldName: 'type', fieldName: 'type',
@@ -772,7 +712,7 @@ const config: Partial<SCConfigFile> = {
{ {
factor: 1, factor: 1,
fields: { fields: {
'categories': { categories: {
'course': 1.08, 'course': 1.08,
'integrated course': 1.08, 'integrated course': 1.08,
'introductory class': 1.05, 'introductory class': 1.05,
@@ -790,11 +730,11 @@ const config: Partial<SCConfigFile> = {
{ {
factor: 1, factor: 1,
fields: { fields: {
'categories': { categories: {
'cafe': 1.1, cafe: 1.1,
'learn': 1.1, learn: 1.1,
'library': 1.2, library: 1.2,
'restaurant': 1.1, restaurant: 1.1,
}, },
}, },
type: SCThingType.PointOfInterest, type: SCThingType.PointOfInterest,
@@ -802,7 +742,7 @@ const config: Partial<SCConfigFile> = {
{ {
factor: 1, factor: 1,
fields: { fields: {
'categories': { categories: {
'main dish': 2, 'main dish': 2,
}, },
}, },
@@ -813,7 +753,7 @@ const config: Partial<SCConfigFile> = {
{ {
factor: 1, factor: 1,
fields: { fields: {
'categories': { categories: {
'cafe': 2, 'cafe': 2,
'canteen': 2, 'canteen': 2,
'restaurant': 2, 'restaurant': 2,