Release v3.0.0 - to stage (#2284)
Co-authored-by: MateuszMudita <165778944+MateuszMudita@users.noreply.github.com> Co-authored-by: Łukasz Kowalczyk <37898730+lkowalczyk87@users.noreply.github.com> Co-authored-by: slawomir-werner <slawomir.werner@mudita.com> Co-authored-by: Michał Kurczewski <michalkurczewski94@gmail.com>
@@ -32,7 +32,6 @@ PHRASE_API_KEY_DEV=
|
||||
|
||||
# [Standard] Mudita Center Server URL to access to external services via proxy
|
||||
MUDITA_CENTER_SERVER_URL=
|
||||
MUDITA_CENTER_SERVER_V2_URL=
|
||||
|
||||
# [Standard] Rollbar Token needed to connect user’s app with Rollbar account
|
||||
ROLLBAR_TOKEN=
|
||||
@@ -85,6 +84,3 @@ DEV_API_CONFIG=
|
||||
|
||||
# [Dev Mode] Path to directory with flash packages for Mudita Harmony
|
||||
DEV_FLASH_PACKAGE_PATH=
|
||||
|
||||
# Token for using dev server for Kompakt OS update info
|
||||
KOMPAKT_OS_UPDATE_DEV_TOKEN=
|
||||
|
||||
@@ -8,6 +8,7 @@ on:
|
||||
jobs:
|
||||
e2e:
|
||||
if: startsWith(github.event.base_ref, 'refs/heads/v') && !(endsWith(github.ref, '-latest'))
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [Windows, Linux]
|
||||
|
||||
1
.github/workflows/e2e-mock-production.yml
vendored
@@ -8,6 +8,7 @@ on:
|
||||
jobs:
|
||||
e2e:
|
||||
if: github.event.base_ref == 'refs/heads/main'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [Windows, Linux]
|
||||
|
||||
1
.github/workflows/e2e-pre-production.yml
vendored
@@ -8,6 +8,7 @@ on:
|
||||
jobs:
|
||||
e2e:
|
||||
if: startsWith(github.event.base_ref, 'refs/heads/v') && !(endsWith(github.ref, '-latest'))
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ Windows, Linux ]
|
||||
|
||||
1
.github/workflows/e2e-production.yml
vendored
@@ -8,6 +8,7 @@ on:
|
||||
jobs:
|
||||
e2e:
|
||||
if: github.event.base_ref == 'refs/heads/main'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ Windows, Linux ]
|
||||
|
||||
14
.github/workflows/nexus-mass-update.yml
vendored
@@ -173,6 +173,20 @@ jobs:
|
||||
SET PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64"
|
||||
signtool.exe sign /sha1 %SM_CODE_SIGNING_CERT_SHA1_HASH% /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ./apps/mudita-center/release/Mudita-Center.exe
|
||||
shell: cmd
|
||||
- name: Calculate new checksum and file size for Mudita-Center.exe
|
||||
if: matrix.os == 'Windows'
|
||||
run: |
|
||||
$filePath = "./apps/mudita-center/release/Mudita-Center.exe"
|
||||
$sha512Bytes = [System.Security.Cryptography.SHA512]::Create().ComputeHash([System.IO.File]::ReadAllBytes($filePath))
|
||||
$sha512Base64 = [Convert]::ToBase64String($sha512Bytes)
|
||||
$fileSize = (Get-Item -Path $filePath).length
|
||||
|
||||
$latestYmlPath = "./apps/mudita-center/release/latest.yml"
|
||||
(Get-Content $latestYmlPath) -replace 'sha512:.*', "sha512: $sha512Base64" |
|
||||
Set-Content $latestYmlPath
|
||||
(Get-Content $latestYmlPath) -replace 'size:.*', "size: $fileSize" |
|
||||
Set-Content $latestYmlPath
|
||||
shell: powershell
|
||||
- name: Push artifacts to nexus registry from Windows
|
||||
if: matrix.os == 'Windows'
|
||||
env:
|
||||
|
||||
18
.github/workflows/nexus-mock-pre-production.yml
vendored
@@ -127,24 +127,6 @@ jobs:
|
||||
if: matrix.os == 'macOS'
|
||||
run: |
|
||||
codesign -v -v apps/mudita-center/release/mac/Mudita\ Center.app
|
||||
- name: Signing via Digicert
|
||||
if: matrix.os == 'Windows'
|
||||
env:
|
||||
SM_HOST: ${{ secrets.SM_HOST }}
|
||||
SM_API_KEY: ${{ secrets.SM_API_KEY }}
|
||||
SM_CLIENT_CERT_FILE: "C:\\actions-runner\\certs\\Certificate_pkcs12.p12"
|
||||
SM_CLIENT_CERT_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PASSWORD }}
|
||||
SM_CODE_SIGNING_CERT_SHA1_HASH: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }}
|
||||
run: |
|
||||
SET SM_HOST=%SM_HOST%
|
||||
SET SM_API_KEY=%SM_API_KEY%
|
||||
SET SM_CLIENT_CERT_FILE=%SM_CLIENT_CERT_FILE%
|
||||
SET SM_CLIENT_CERT_PASSWORD=%SM_CLIENT_CERT_PASSWORD%
|
||||
SET SM_CODE_SIGNING_CERT_SHA1_HASH=%SM_CODE_SIGNING_CERT_SHA1_HASH%
|
||||
SET PATH=%PATH%;"C:\Program Files\DigiCert\DigiCert One Signing Manager Tools"
|
||||
SET PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64"
|
||||
signtool.exe sign /sha1 %SM_CODE_SIGNING_CERT_SHA1_HASH% /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ./apps/mudita-center/release/Mudita-Center.exe
|
||||
shell: cmd
|
||||
- name: Push artifacts to nexus registry from Windows
|
||||
if: matrix.os == 'Windows'
|
||||
env:
|
||||
|
||||
@@ -197,6 +197,20 @@ jobs:
|
||||
SET PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64"
|
||||
signtool.exe sign /sha1 %SM_CODE_SIGNING_CERT_SHA1_HASH% /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ./apps/mudita-center/release/Mudita-Center.exe
|
||||
shell: cmd
|
||||
- name: Calculate new checksum and file size for Mudita-Center.exe
|
||||
if: matrix.os == 'Windows'
|
||||
run: |
|
||||
$filePath = "./apps/mudita-center/release/Mudita-Center.exe"
|
||||
$sha512Bytes = [System.Security.Cryptography.SHA512]::Create().ComputeHash([System.IO.File]::ReadAllBytes($filePath))
|
||||
$sha512Base64 = [Convert]::ToBase64String($sha512Bytes)
|
||||
$fileSize = (Get-Item -Path $filePath).length
|
||||
|
||||
$latestYmlPath = "./apps/mudita-center/release/latest.yml"
|
||||
(Get-Content $latestYmlPath) -replace 'sha512:.*', "sha512: $sha512Base64" |
|
||||
Set-Content $latestYmlPath
|
||||
(Get-Content $latestYmlPath) -replace 'size:.*', "size: $fileSize" |
|
||||
Set-Content $latestYmlPath
|
||||
shell: powershell
|
||||
- name: Push artifacts to nexus registry from Windows
|
||||
if: matrix.os == 'Windows'
|
||||
env:
|
||||
|
||||
14
.github/workflows/nexus-pre-production.yml
vendored
@@ -121,6 +121,20 @@ jobs:
|
||||
SET PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64"
|
||||
signtool.exe sign /sha1 %SM_CODE_SIGNING_CERT_SHA1_HASH% /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ./apps/mudita-center/release/Mudita-Center.exe
|
||||
shell: cmd
|
||||
- name: Calculate new checksum and file size for Mudita-Center.exe
|
||||
if: matrix.os == 'Windows'
|
||||
run: |
|
||||
$filePath = "./apps/mudita-center/release/Mudita-Center.exe"
|
||||
$sha512Bytes = [System.Security.Cryptography.SHA512]::Create().ComputeHash([System.IO.File]::ReadAllBytes($filePath))
|
||||
$sha512Base64 = [Convert]::ToBase64String($sha512Bytes)
|
||||
$fileSize = (Get-Item -Path $filePath).length
|
||||
|
||||
$latestYmlPath = "./apps/mudita-center/release/latest.yml"
|
||||
(Get-Content $latestYmlPath) -replace 'sha512:.*', "sha512: $sha512Base64" |
|
||||
Set-Content $latestYmlPath
|
||||
(Get-Content $latestYmlPath) -replace 'size:.*', "size: $fileSize" |
|
||||
Set-Content $latestYmlPath
|
||||
shell: powershell
|
||||
- name: Push artifacts to nexus registry from Windows
|
||||
if: matrix.os == 'Windows'
|
||||
env:
|
||||
|
||||
@@ -174,6 +174,20 @@ jobs:
|
||||
SET PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64"
|
||||
signtool.exe sign /sha1 %SM_CODE_SIGNING_CERT_SHA1_HASH% /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ./apps/mudita-center/release/Mudita-Center.exe
|
||||
shell: cmd
|
||||
- name: Calculate new checksum and file size for Mudita-Center.exe
|
||||
if: matrix.os == 'Windows'
|
||||
run: |
|
||||
$filePath = "./apps/mudita-center/release/Mudita-Center.exe"
|
||||
$sha512Bytes = [System.Security.Cryptography.SHA512]::Create().ComputeHash([System.IO.File]::ReadAllBytes($filePath))
|
||||
$sha512Base64 = [Convert]::ToBase64String($sha512Bytes)
|
||||
$fileSize = (Get-Item -Path $filePath).length
|
||||
|
||||
$latestYmlPath = "./apps/mudita-center/release/latest.yml"
|
||||
(Get-Content $latestYmlPath) -replace 'sha512:.*', "sha512: $sha512Base64" |
|
||||
Set-Content $latestYmlPath
|
||||
(Get-Content $latestYmlPath) -replace 'size:.*', "size: $fileSize" |
|
||||
Set-Content $latestYmlPath
|
||||
shell: powershell
|
||||
- name: Push artifacts to nexus registry from Windows
|
||||
if: matrix.os == 'Windows'
|
||||
env:
|
||||
|
||||
14
.github/workflows/nexus-production.yml
vendored
@@ -119,6 +119,20 @@ jobs:
|
||||
SET PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64"
|
||||
signtool.exe sign /sha1 %SM_CODE_SIGNING_CERT_SHA1_HASH% /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 ./apps/mudita-center/release/Mudita-Center.exe
|
||||
shell: cmd
|
||||
- name: Calculate new checksum and file size for Mudita-Center.exe
|
||||
if: matrix.os == 'Windows'
|
||||
run: |
|
||||
$filePath = "./apps/mudita-center/release/Mudita-Center.exe"
|
||||
$sha512Bytes = [System.Security.Cryptography.SHA512]::Create().ComputeHash([System.IO.File]::ReadAllBytes($filePath))
|
||||
$sha512Base64 = [Convert]::ToBase64String($sha512Bytes)
|
||||
$fileSize = (Get-Item -Path $filePath).length
|
||||
|
||||
$latestYmlPath = "./apps/mudita-center/release/latest.yml"
|
||||
(Get-Content $latestYmlPath) -replace 'sha512:.*', "sha512: $sha512Base64" |
|
||||
Set-Content $latestYmlPath
|
||||
(Get-Content $latestYmlPath) -replace 'size:.*', "size: $fileSize" |
|
||||
Set-Content $latestYmlPath
|
||||
shell: powershell
|
||||
- name: Push artifacts to nexus registry from Windows
|
||||
if: matrix.os == 'Windows'
|
||||
env:
|
||||
|
||||
@@ -10,40 +10,26 @@ class ModalLicense extends Page {
|
||||
return $('h2[data-testid="license-component-title"]')
|
||||
}
|
||||
|
||||
public get noteParagraph() {
|
||||
return $("p*=NOTE:")
|
||||
public get firstParagraph() {
|
||||
return $(
|
||||
"p*=Please note that we provide an open source software notice with this app. "
|
||||
)
|
||||
}
|
||||
|
||||
public get definitionsParagraph() {
|
||||
return $("p*=Definitions:")
|
||||
public get sectionWarrantyDisclaimer() {
|
||||
return $("p*=WARRANTY DISCLAIMER")
|
||||
}
|
||||
|
||||
public get muditaDefinition() {
|
||||
return $("p*=Mudita sp. z o.o.")
|
||||
public get sectionNoticeForFile() {
|
||||
return $("p*=Notice for file(s):")
|
||||
}
|
||||
|
||||
public get licenseTermsParagraph() {
|
||||
return $("p*=License terms:")
|
||||
public get zodLibrarySection() {
|
||||
return $(`//p[contains(., concat('"', 'zod', '": "', '^3.22.4', '"'))]`)
|
||||
}
|
||||
|
||||
public get transferOfDataParagraph() {
|
||||
return $("p*=Transfer of data:")
|
||||
}
|
||||
|
||||
public get limitationParagraph() {
|
||||
return $("p*=Limitation of liability:")
|
||||
}
|
||||
|
||||
public get copyrightParagraph() {
|
||||
return $("p*=Copyright / Third-party services:")
|
||||
}
|
||||
|
||||
public get amendmentsParagraph() {
|
||||
return $("p*=Amendments to the Terms:")
|
||||
}
|
||||
|
||||
public get applicableLawParagraph() {
|
||||
return $("p*=Applicable law:")
|
||||
public get zodLibraryCopyrightSection() {
|
||||
return $("p*=Copyright (c) 2020 Colin McDonnell")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,62 +10,64 @@ class ModalPrivacyPolicy extends Page {
|
||||
return $('[data-testid="privacy-policy-component-title"]')
|
||||
}
|
||||
|
||||
public get controllerQuestion() {
|
||||
return $(
|
||||
"p*=Who is the controller of your personal data and who can you contact about it?"
|
||||
)
|
||||
}
|
||||
|
||||
public get purposesQuestion() {
|
||||
return $(
|
||||
"p*=For what purposes and on what grounds do we process your personal data?"
|
||||
)
|
||||
}
|
||||
|
||||
public get accessQuestion() {
|
||||
return $("p*=Who has access to your personal data?")
|
||||
}
|
||||
|
||||
public get storageLengthQuestion() {
|
||||
return $("p*=How long is your personal data stored?")
|
||||
}
|
||||
|
||||
public get rightsQuestion() {
|
||||
return $(
|
||||
"p*=What rights do you have in relation to the processing of your personal data?"
|
||||
)
|
||||
}
|
||||
|
||||
public get rightsExcerciseQuestion() {
|
||||
return $("p*=How to exercise your personal data rights?")
|
||||
}
|
||||
|
||||
public get dataProvidingMandatoryQuestion() {
|
||||
return $("p*=Is providing personal data mandatory?")
|
||||
}
|
||||
|
||||
public get cookiesParagraph() {
|
||||
return $("p*=Cookies")
|
||||
}
|
||||
|
||||
public get addInformationParagraph() {
|
||||
return $("p*=Additional information")
|
||||
}
|
||||
|
||||
public get firstColumnHeader() {
|
||||
return $("p*=the purpose of the processing")
|
||||
}
|
||||
|
||||
public get secondColumnHeader() {
|
||||
return $("p*=legal basis for the processing")
|
||||
}
|
||||
|
||||
public get firstPoint() {
|
||||
return $("p*=The Controller of your personal data")
|
||||
return $("p*=The controller of personal data")
|
||||
}
|
||||
|
||||
public get cookiesInfoLinks() {
|
||||
return $$("#app > div > ul > li")
|
||||
public get sectionAboutDocument() {
|
||||
return $("p=1. ABOUT DOCUMENT")
|
||||
}
|
||||
|
||||
public get sectionDataController() {
|
||||
return $("p=2. DATA CONTROLLER")
|
||||
}
|
||||
|
||||
public get sectionContact() {
|
||||
return $("p=3. CONTACT")
|
||||
}
|
||||
|
||||
public get sectionPurposesAndLegalBasis() {
|
||||
return $(
|
||||
"p=4. PURPOSES AND LEGAL BASIS FOR THE PROCESSING OF YOUR PERSONAL DATA / RETENTION PERIOD"
|
||||
)
|
||||
}
|
||||
|
||||
public get sectionDataRecipients() {
|
||||
return $("p=5. DATA RECIPIENTS")
|
||||
}
|
||||
|
||||
public get sectionAutomatedIndividual() {
|
||||
return $("p=6. AUTOMATED INDIVIDUAL DECISION-MAKING / PROFILING")
|
||||
}
|
||||
|
||||
public get sectionRightsOfTheData() {
|
||||
return $("p=7. RIGHTS OF THE DATA SUBJECTS")
|
||||
}
|
||||
|
||||
public get sectionTransferOfPersonalData() {
|
||||
return $("p=8. TRANSFER OF PERSONAL DATA TO THIRD COUNTRIES")
|
||||
}
|
||||
|
||||
public get sectionOtherInformations() {
|
||||
return $(
|
||||
"p=9. OTHER INFORMATIONS ABOUR YOUR PRIVACY / BACKUP / MANAGE MUDITA DEVICE"
|
||||
)
|
||||
}
|
||||
|
||||
public get sectionFinalProvisions() {
|
||||
return $("p=10. FINAL PROVISIONS")
|
||||
}
|
||||
|
||||
public get privacyPolicyVersion() {
|
||||
return $(
|
||||
"p=This version of the Privacy Policy is effective as of 14.03.2025."
|
||||
)
|
||||
}
|
||||
|
||||
public get rightsToAmendPrivacyPolicy() {
|
||||
return $(
|
||||
"p=In connection with the Mudita’s development and application updates,"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,31 +15,59 @@ class ModalTermsOfService extends Page {
|
||||
}
|
||||
|
||||
public get sectionGeneralProvisions() {
|
||||
return $("p=GENERAL PROVISIONS")
|
||||
return $("p=2. GENERAL PROVISIONS")
|
||||
}
|
||||
|
||||
public get sectionPurposeAndUse() {
|
||||
return $("p=PURPOSE AND USE OF THE APP")
|
||||
public get sectionServices() {
|
||||
return $("p=3. SERVICES / MUDITA CENTER FEATURES")
|
||||
}
|
||||
|
||||
public get sectionResponsibility() {
|
||||
return $("p=RESPONSIBILITY")
|
||||
public get sectionIntellectualProperty() {
|
||||
return $("p=4. INTELLECTUAL PROPERTY / LICENSE")
|
||||
}
|
||||
|
||||
public get sectionConditionsOfUse() {
|
||||
return $("p=CONDITIONS OF USE")
|
||||
public get sectionUpdates() {
|
||||
return $("p=5. UPDATES")
|
||||
}
|
||||
|
||||
public get sectionCommunication() {
|
||||
return $("p=COMMUNICATION AND FEEDBACK")
|
||||
public get sectionHealthDisclaimer() {
|
||||
return $("p=6. HEALTH DISCLAIMER")
|
||||
}
|
||||
|
||||
public get sectionUserObligations() {
|
||||
return $("p=7. USER OBLIGATIONS")
|
||||
}
|
||||
|
||||
public get sectionLiability() {
|
||||
return $("p=8. LIABILITY")
|
||||
}
|
||||
|
||||
public get sectionTerminationOfTheTerms() {
|
||||
return $("p=9. TERMINATION OF THE TERMS OF SERVICE")
|
||||
}
|
||||
|
||||
public get sectionComplaints() {
|
||||
return $("p=10. COMPLAINTS")
|
||||
}
|
||||
|
||||
public get sectionDisputeResolution() {
|
||||
return $("p=11. DISPUTE RESOLUTION")
|
||||
}
|
||||
|
||||
public get sectionAmendments() {
|
||||
return $("p=12. AMENDMENTS")
|
||||
}
|
||||
|
||||
public get sectinonApplicableLaw() {
|
||||
return $("p=13. APPLICABLE LAW / LANGUAGE VERSIONS")
|
||||
}
|
||||
|
||||
public get sectionFinalProvisions() {
|
||||
return $("p=FINAL PROVISIONS")
|
||||
return $("p=14. FINAL PROVISIONS")
|
||||
}
|
||||
|
||||
public get companyWebsiteLink() {
|
||||
return $("a=www.mudita.com")
|
||||
return $("a=https://www.mudita.com/")
|
||||
}
|
||||
|
||||
public get companyEmailLink() {
|
||||
@@ -51,7 +79,7 @@ class ModalTermsOfService extends Page {
|
||||
}
|
||||
|
||||
public get termsConditionsLink() {
|
||||
return $("a=www.mudita.com/legal/terms-conditions/mudita-center/")
|
||||
return $("a=https://www.mudita.com/legal/terms-conditions/mudita-center/")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ describe("E2E mock lock sample", () => {
|
||||
body: getBodyAsRecord(DEFAULT_RESPONSES.FEATURE_DATA?.GET?.[1]?.body),
|
||||
match: {
|
||||
expected: {
|
||||
feature: "fileManager",
|
||||
feature: "mc-file-manager-internal",
|
||||
lang: "en-US",
|
||||
},
|
||||
},
|
||||
@@ -116,7 +116,7 @@ describe("E2E mock lock sample", () => {
|
||||
),
|
||||
match: {
|
||||
expected: {
|
||||
feature: "contacts",
|
||||
feature: "mc-contacts",
|
||||
lang: "en-US",
|
||||
},
|
||||
},
|
||||
@@ -146,7 +146,7 @@ describe("E2E mock lock sample", () => {
|
||||
),
|
||||
match: {
|
||||
expected: {
|
||||
feature: "fileManager",
|
||||
feature: "mc-file-manager-internal",
|
||||
lang: "en-US",
|
||||
},
|
||||
},
|
||||
|
||||
@@ -30,7 +30,7 @@ describe("E2E mock match sample", () => {
|
||||
method: "GET",
|
||||
status: 200,
|
||||
match: {
|
||||
expected: { feature: "contacts", lang: "en-US" },
|
||||
expected: { feature: "mc-contacts", lang: "en-US" },
|
||||
},
|
||||
})
|
||||
// if body of FEATURE_DATA request is equal to { feature: "contacts", lang: "en-US" } then return body: contactsConfig.
|
||||
@@ -42,7 +42,7 @@ describe("E2E mock match sample", () => {
|
||||
method: "GET",
|
||||
status: 200,
|
||||
match: {
|
||||
expected: { feature: "contacts", lang: "en-US" },
|
||||
expected: { feature: "mc-contacts", lang: "en-US" },
|
||||
},
|
||||
})
|
||||
E2EMockClient.mockResponse({
|
||||
|
||||
@@ -42,56 +42,30 @@ describe("Checking License", () => {
|
||||
|
||||
const modalHeader = await ModalLicense.modalHeader
|
||||
await modalHeader.waitForDisplayed()
|
||||
await expect(modalHeader).toHaveText(
|
||||
"Mudita Center Software – Terms of Use"
|
||||
)
|
||||
})
|
||||
|
||||
it("Check keywords", async () => {
|
||||
const muditaDefinition = ModalLicense.muditaDefinition
|
||||
await expect(muditaDefinition).toHaveTextContaining("0000467620")
|
||||
await expect(muditaDefinition).toHaveTextContaining("5252558282")
|
||||
await expect(muditaDefinition).toHaveTextContaining(
|
||||
"Jana Czeczota 6, 02- 607 Warsaw, Poland"
|
||||
)
|
||||
await expect(modalHeader).toHaveText("Notice for Mudita Center")
|
||||
})
|
||||
|
||||
it("Check License sections", async () => {
|
||||
const noteParagraph = ModalLicense.noteParagraph
|
||||
await expect(noteParagraph).toHaveTextContaining(
|
||||
"BY USING THE MUDITA CENTER SOFTWARE, YOU AGREE TO COMPLY WITH THE TERMS LISTED BELOW."
|
||||
const firstParagraph = ModalLicense.firstParagraph
|
||||
await expect(firstParagraph).toHaveTextContaining(
|
||||
"Please note that we provide an open source software notice with this app. "
|
||||
)
|
||||
|
||||
const definitionsParagraph = await ModalLicense.definitionsParagraph
|
||||
await expect(definitionsParagraph).toHaveText("Definitions:")
|
||||
const sectionWarrantyDisclaimer =
|
||||
await ModalLicense.sectionWarrantyDisclaimer
|
||||
await expect(sectionWarrantyDisclaimer).toHaveText("WARRANTY DISCLAIMER")
|
||||
|
||||
const licenseTermsParagraph = await ModalLicense.licenseTermsParagraph
|
||||
await expect(licenseTermsParagraph).toHaveText("License terms:")
|
||||
|
||||
const transferOfDataParagraph = await ModalLicense.transferOfDataParagraph
|
||||
await expect(transferOfDataParagraph).toHaveText("Transfer of data:")
|
||||
|
||||
const limitationParagraph = await ModalLicense.limitationParagraph
|
||||
await expect(limitationParagraph).toHaveText("Limitation of liability:")
|
||||
|
||||
const copyrightParagraph = await ModalLicense.copyrightParagraph
|
||||
await expect(copyrightParagraph).toHaveText(
|
||||
"Copyright / Third-party services:"
|
||||
)
|
||||
|
||||
const amendmentsParagraph = await ModalLicense.amendmentsParagraph
|
||||
await expect(amendmentsParagraph).toHaveText("Amendments to the Terms:")
|
||||
|
||||
const applicableLawParagraph = await ModalLicense.applicableLawParagraph
|
||||
await expect(applicableLawParagraph).toHaveText("Applicable law:")
|
||||
const sectionNoticeForFile = await ModalLicense.sectionNoticeForFile
|
||||
await expect(sectionNoticeForFile).toHaveText("Notice for file(s):")
|
||||
})
|
||||
|
||||
it("Check content after scroll", async () => {
|
||||
const copyrightParagraph = await ModalLicense.copyrightParagraph
|
||||
await copyrightParagraph.scrollIntoView()
|
||||
await expect(copyrightParagraph).toBeDisplayedInViewport
|
||||
const definitionsParagraph = await ModalLicense.definitionsParagraph
|
||||
await expect(definitionsParagraph).not.toBeDisplayedInViewport
|
||||
const zodLibrarySection = await ModalLicense.zodLibrarySection
|
||||
await zodLibrarySection.scrollIntoView()
|
||||
await expect(zodLibrarySection).toBeDisplayedInViewport
|
||||
const zodLibraryCopyrightSection =
|
||||
await ModalLicense.zodLibraryCopyrightSection
|
||||
await expect(zodLibraryCopyrightSection).not.toBeDisplayedInViewport
|
||||
})
|
||||
|
||||
it("Close modal", async () => {
|
||||
|
||||
@@ -37,7 +37,7 @@ describe("Checking Privacy Policy", () => {
|
||||
})
|
||||
|
||||
it("Check Privacy Policy 'LEARN MORE' button", async () => {
|
||||
if(testsHelper.isLinux()){
|
||||
if (testsHelper.isLinux()) {
|
||||
sleep(5000)
|
||||
}
|
||||
|
||||
@@ -54,85 +54,71 @@ describe("Checking Privacy Policy", () => {
|
||||
|
||||
it("Check keywords", async () => {
|
||||
const firstParagraph = modalPrivacyPolicyPage.firstPoint
|
||||
await expect(firstParagraph).toHaveTextContaining("KRS no: 0000467620")
|
||||
await expect(firstParagraph).toHaveTextContaining(
|
||||
"KRS [National Court Register Number] 0000467620"
|
||||
)
|
||||
await expect(firstParagraph).toHaveTextContaining(
|
||||
"NIP [Polish Taxpayer Identification Number] 5252558282"
|
||||
)
|
||||
await expect(firstParagraph).toHaveTextContaining(
|
||||
"REGON [National Business Registration Number] 146767613"
|
||||
"Tax Identification Number: 5252558282"
|
||||
)
|
||||
})
|
||||
|
||||
it("Check Privacy Policy sections", async () => {
|
||||
const controllerQuestion = await modalPrivacyPolicyPage.controllerQuestion
|
||||
await expect(controllerQuestion).toHaveText(
|
||||
"Who is the controller of your personal data and who can you contact about it?"
|
||||
const sectionAboutDocument =
|
||||
await modalPrivacyPolicyPage.sectionAboutDocument
|
||||
await expect(sectionAboutDocument).toHaveText("1. ABOUT DOCUMENT")
|
||||
|
||||
const sectionDataController =
|
||||
await modalPrivacyPolicyPage.sectionDataController
|
||||
await expect(sectionDataController).toHaveText("2. DATA CONTROLLER")
|
||||
|
||||
const sectionContact = await modalPrivacyPolicyPage.sectionContact
|
||||
await expect(sectionContact).toHaveText("3. CONTACT")
|
||||
|
||||
const sectionPurposesAndLegalBasis =
|
||||
await modalPrivacyPolicyPage.sectionPurposesAndLegalBasis
|
||||
await expect(sectionPurposesAndLegalBasis).toHaveText(
|
||||
"4. PURPOSES AND LEGAL BASIS FOR THE PROCESSING OF YOUR PERSONAL DATA / RETENTION PERIOD"
|
||||
)
|
||||
|
||||
const purposesQuestion = await modalPrivacyPolicyPage.purposesQuestion
|
||||
await expect(purposesQuestion).toHaveText(
|
||||
"For what purposes and on what grounds do we process your personal data?"
|
||||
const sectionDataRecipients =
|
||||
await modalPrivacyPolicyPage.sectionDataRecipients
|
||||
await expect(sectionDataRecipients).toHaveText("5. DATA RECIPIENTS")
|
||||
|
||||
const sectionAutomatedIndividual =
|
||||
await modalPrivacyPolicyPage.sectionAutomatedIndividual
|
||||
await expect(sectionAutomatedIndividual).toHaveText(
|
||||
"6. AUTOMATED INDIVIDUAL DECISION-MAKING / PROFILING"
|
||||
)
|
||||
|
||||
const firstColumnHeader = await modalPrivacyPolicyPage.firstColumnHeader
|
||||
await expect(firstColumnHeader).toHaveText("the purpose of the processing")
|
||||
const firstColumnHeaderBorder = (
|
||||
await firstColumnHeader.getCSSProperty("border")
|
||||
).value
|
||||
await expect(firstColumnHeaderBorder).toBe("1px solid rgb(0, 0, 0)")
|
||||
|
||||
const accessQuestion = await modalPrivacyPolicyPage.accessQuestion
|
||||
await expect(accessQuestion).toHaveText(
|
||||
"Who has access to your personal data?"
|
||||
const sectionRightsOfTheData =
|
||||
await modalPrivacyPolicyPage.sectionRightsOfTheData
|
||||
await expect(sectionRightsOfTheData).toHaveText(
|
||||
"7. RIGHTS OF THE DATA SUBJECTS"
|
||||
)
|
||||
|
||||
const storageLengthQuestion =
|
||||
await modalPrivacyPolicyPage.storageLengthQuestion
|
||||
await expect(storageLengthQuestion).toHaveText(
|
||||
"How long is your personal data stored?"
|
||||
const sectionTransferOfPersonalData =
|
||||
await modalPrivacyPolicyPage.sectionTransferOfPersonalData
|
||||
await expect(sectionTransferOfPersonalData).toHaveText(
|
||||
"8. TRANSFER OF PERSONAL DATA TO THIRD COUNTRIES"
|
||||
)
|
||||
|
||||
const rightsQuestion = await modalPrivacyPolicyPage.rightsQuestion
|
||||
await expect(rightsQuestion).toHaveText(
|
||||
"What rights do you have in relation to the processing of your personal data?"
|
||||
const sectionOtherInformations =
|
||||
await modalPrivacyPolicyPage.sectionOtherInformations
|
||||
await expect(sectionOtherInformations).toHaveText(
|
||||
"9. OTHER INFORMATIONS ABOUR YOUR PRIVACY / BACKUP / MANAGE MUDITA DEVICE"
|
||||
)
|
||||
|
||||
const rightsExcerciseQuestion =
|
||||
await modalPrivacyPolicyPage.rightsExcerciseQuestion
|
||||
await expect(rightsExcerciseQuestion).toHaveText(
|
||||
"How to exercise your personal data rights?"
|
||||
)
|
||||
|
||||
const dataProvidingMandatoryQuestion =
|
||||
await modalPrivacyPolicyPage.dataProvidingMandatoryQuestion
|
||||
await expect(dataProvidingMandatoryQuestion).toHaveText(
|
||||
"Is providing personal data mandatory?"
|
||||
)
|
||||
|
||||
const cookiesParagraph = await modalPrivacyPolicyPage.cookiesParagraph
|
||||
await expect(cookiesParagraph).toHaveText("Cookies")
|
||||
|
||||
const cookiesInfoLinks = await modalPrivacyPolicyPage.cookiesInfoLinks
|
||||
await expect(cookiesInfoLinks).toBeElementsArrayOfSize({ gte: 5 })
|
||||
for (let cookiesInfoLink of cookiesInfoLinks) {
|
||||
const link = await cookiesInfoLink.$("a")
|
||||
await expect(link).toHaveAttribute("href")
|
||||
await expect(link).toBeClickable()
|
||||
}
|
||||
|
||||
const addInformationParagraph =
|
||||
await modalPrivacyPolicyPage.addInformationParagraph
|
||||
await expect(addInformationParagraph).toHaveText("Additional information")
|
||||
const sectionFinalProvisions =
|
||||
await modalPrivacyPolicyPage.sectionFinalProvisions
|
||||
await expect(sectionFinalProvisions).toHaveText("10. FINAL PROVISIONS")
|
||||
})
|
||||
|
||||
it("Check content after scroll", async () => {
|
||||
const firstColumnHeader = await modalPrivacyPolicyPage.firstColumnHeader
|
||||
const firstColumnHeader =
|
||||
await modalPrivacyPolicyPage.sectionFinalProvisions
|
||||
await firstColumnHeader.scrollIntoView()
|
||||
const purposesQuestion = await modalPrivacyPolicyPage.purposesQuestion
|
||||
const purposesQuestion = await modalPrivacyPolicyPage.privacyPolicyVersion
|
||||
await expect(purposesQuestion).toBeDisplayedInViewport
|
||||
const accessQuestion = await modalPrivacyPolicyPage.accessQuestion
|
||||
const accessQuestion =
|
||||
await modalPrivacyPolicyPage.rightsToAmendPrivacyPolicy
|
||||
await expect(accessQuestion).toBeDisplayedInViewport
|
||||
})
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ describe("Checking Terms of service", () => {
|
||||
|
||||
// Wait 15 seconds to allow the update checking process to potentially timeout.
|
||||
const modalOverlay = await ModalPage.modalOverlay
|
||||
await modalOverlay.waitForDisplayed({ timeout: 15000, reverse: true });
|
||||
await modalOverlay.waitForDisplayed({ timeout: 15000, reverse: true })
|
||||
|
||||
const aboutTermsOfServiceTextLabel =
|
||||
await SettingsPage.aboutTermsOfServiceTextLabel
|
||||
@@ -37,7 +37,7 @@ describe("Checking Terms of service", () => {
|
||||
})
|
||||
|
||||
it("Check Terms of service 'LEARN MORE' button", async () => {
|
||||
if(testsHelper.isLinux()){
|
||||
if (testsHelper.isLinux()) {
|
||||
sleep(5000)
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ describe("Checking Terms of service", () => {
|
||||
|
||||
const modalHeader = await ModalTermsOfServicePage.modalHeader
|
||||
await modalHeader.waitForDisplayed()
|
||||
await expect(modalHeader).toHaveText("Mudita Center Terms of Use")
|
||||
await expect(modalHeader).toHaveText("Mudita Center Terms of Service")
|
||||
})
|
||||
|
||||
it("Check keywords", async () => {
|
||||
@@ -63,52 +63,77 @@ describe("Checking Terms of service", () => {
|
||||
"Tax Identification Number: 5252558282"
|
||||
)
|
||||
await expect(firstParagraph).toHaveTextContaining(
|
||||
"Statistical Identification Number: 14676767613"
|
||||
"Statistical Identification Number: 146767613"
|
||||
)
|
||||
})
|
||||
|
||||
it("Check Terms of service sections", async () => {
|
||||
const sectionGeneralProvisions =
|
||||
await ModalTermsOfServicePage.sectionGeneralProvisions
|
||||
await expect(sectionGeneralProvisions).toHaveText("GENERAL PROVISIONS")
|
||||
await expect(sectionGeneralProvisions).toHaveText("2. GENERAL PROVISIONS")
|
||||
|
||||
const sectionPurposeAndUse =
|
||||
await ModalTermsOfServicePage.sectionPurposeAndUse
|
||||
await expect(sectionPurposeAndUse).toHaveText("PURPOSE AND USE OF THE APP")
|
||||
const sectionServices = await ModalTermsOfServicePage.sectionServices
|
||||
await expect(sectionServices).toHaveText(
|
||||
"3. SERVICES / MUDITA CENTER FEATURES"
|
||||
)
|
||||
|
||||
const sectionResponsibility =
|
||||
await ModalTermsOfServicePage.sectionResponsibility
|
||||
await expect(sectionResponsibility).toHaveText("RESPONSIBILITY")
|
||||
const sectionIntellectualProperty =
|
||||
await ModalTermsOfServicePage.sectionIntellectualProperty
|
||||
await expect(sectionIntellectualProperty).toHaveText(
|
||||
"4. INTELLECTUAL PROPERTY / LICENSE"
|
||||
)
|
||||
|
||||
const sectionConditionsOfUse =
|
||||
await ModalTermsOfServicePage.sectionConditionsOfUse
|
||||
await expect(sectionConditionsOfUse).toHaveText("CONDITIONS OF USE")
|
||||
const sectionUpdates = await ModalTermsOfServicePage.sectionUpdates
|
||||
await expect(sectionUpdates).toHaveText("5. UPDATES")
|
||||
|
||||
const sectionCommunication =
|
||||
await ModalTermsOfServicePage.sectionCommunication
|
||||
await expect(sectionCommunication).toHaveText("COMMUNICATION AND FEEDBACK")
|
||||
const sectionHealthDisclaimer =
|
||||
await ModalTermsOfServicePage.sectionHealthDisclaimer
|
||||
await expect(sectionHealthDisclaimer).toHaveText("6. HEALTH DISCLAIMER")
|
||||
|
||||
const sectionUserObligations =
|
||||
await ModalTermsOfServicePage.sectionUserObligations
|
||||
await expect(sectionUserObligations).toHaveText("7. USER OBLIGATIONS")
|
||||
|
||||
const sectionLiability = await ModalTermsOfServicePage.sectionLiability
|
||||
await expect(sectionLiability).toHaveText("8. LIABILITY")
|
||||
|
||||
const sectionTerminationOfTheTerms =
|
||||
await ModalTermsOfServicePage.sectionTerminationOfTheTerms
|
||||
await expect(sectionTerminationOfTheTerms).toHaveText(
|
||||
"9. TERMINATION OF THE TERMS OF SERVICE"
|
||||
)
|
||||
|
||||
const sectionComplaints = await ModalTermsOfServicePage.sectionComplaints
|
||||
await expect(sectionComplaints).toHaveText("10. COMPLAINTS")
|
||||
|
||||
const sectionDisputeResolution =
|
||||
await ModalTermsOfServicePage.sectionDisputeResolution
|
||||
await expect(sectionDisputeResolution).toHaveText("11. DISPUTE RESOLUTION")
|
||||
|
||||
const sectionAmendments = await ModalTermsOfServicePage.sectionAmendments
|
||||
await expect(sectionAmendments).toHaveText("12. AMENDMENTS")
|
||||
|
||||
const sectinonApplicableLaw =
|
||||
await ModalTermsOfServicePage.sectinonApplicableLaw
|
||||
await expect(sectinonApplicableLaw).toHaveText(
|
||||
"13. APPLICABLE LAW / LANGUAGE VERSIONS"
|
||||
)
|
||||
|
||||
const sectionFinalProvisions =
|
||||
await ModalTermsOfServicePage.sectionFinalProvisions
|
||||
await expect(sectionFinalProvisions).toHaveText("FINAL PROVISIONS")
|
||||
await expect(sectionFinalProvisions).toHaveText("14. FINAL PROVISIONS")
|
||||
})
|
||||
|
||||
it("Check links", async () => {
|
||||
const companyWebsiteLink = await ModalTermsOfServicePage.companyWebsiteLink
|
||||
await expect(companyWebsiteLink).toHaveAttribute(
|
||||
"href",
|
||||
"https://www.mudita.com"
|
||||
"https://www.mudita.com/"
|
||||
)
|
||||
|
||||
const emailLink = await ModalTermsOfServicePage.companyEmailLink
|
||||
await expect(emailLink).toHaveAttribute("href", "mailto:hello@mudita.com")
|
||||
|
||||
const privacyPolicyLink = await ModalTermsOfServicePage.privacyPolicyLink
|
||||
await expect(privacyPolicyLink).toHaveAttribute(
|
||||
"href",
|
||||
"https://mudita.com/legal/privacy-policy/mudita-center/"
|
||||
)
|
||||
|
||||
const termsConditionsLink =
|
||||
await ModalTermsOfServicePage.termsConditionsLink
|
||||
await expect(termsConditionsLink).toHaveAttribute(
|
||||
|
||||
4
apps/mudita-center/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@mudita/mudita-center-app",
|
||||
"version": "2.5.0",
|
||||
"version": "3.0.0-rc.10",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@mudita/mudita-center-app",
|
||||
"version": "2.5.0",
|
||||
"version": "3.0.0-rc.10",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"serialport": "10.1.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mudita-center",
|
||||
"version": "2.5.0",
|
||||
"version": "3.0.0-rc.10",
|
||||
"description": "Mudita Center",
|
||||
"main": "./dist/main.js",
|
||||
"productName": "Mudita Center",
|
||||
|
||||
@@ -1,167 +1,326 @@
|
||||
BEFORE INSTALLING MUDITA CENTER, PLEASE READ AND ACCEPT THE REQUIRED DOCUMENTS: PRIVACY POLICY AND TERMS OF USE
|
||||
|
||||
PRIVACY POLICY
|
||||
WE HEREBY INFORM THAT WE PROCESS YOUR PERSONAL DATA. DETAILS REGARDING THIS CAN BE FOUND BELOW
|
||||
|
||||
Who is the controller of your personal data and who can you contact about it?
|
||||
|
||||
1. The Controller of your personal data is Mudita sp. z o.o. with its registered office in Warsaw at ul. Jana Czeczota 6, 02-607 Warsaw, entered into the Register of Entrepreneurs held by the Regional Court for the Capital City of Warsaw, 12th Commercial Division of the National Court Register, under KRS [National Court Register Number] 0000467620, NIP [Polish Taxpayer Identification Number] 5252558282, REGON [National Business Registration Number] 146767613, share capital:600.000,00 PLN, hereinafter referred to as "Controller or Mudita".
|
||||
|
||||
2. In cases regarding the protection of your personal data and the exercising your rights you can contact us by e-mail: office@mudita.com or in writing to our address indicated in clause 1.
|
||||
For what purposes and on what grounds do we process your personal data?
|
||||
|
||||
3. Your personal data is processed for the following purposes:
|
||||
the purpose of the processing & legal basis for the processing
|
||||
Mudita's software users:
|
||||
|
||||
- sharing and enabling the use of the offered software - indispensability to perform the agreement (Article 6 (1) (b) of the GDPR)
|
||||
- analyze of data provided - your consent (Article 6 (1) (a) of the GDPR)
|
||||
|
||||
Mudita's website and forum users:
|
||||
|
||||
- necessary cookies - our legitimate interest (Article 6 (1) (f) of the GDPR)
|
||||
- marketing, functional, analytical cookies or our partners cookies - your consent (Article 6 (1) (a) of the GDPR)
|
||||
- transferring marketing and promotional information including our partners - our legitimate interest (Article 6 (1) (f) of the GDPR) or your consent (Article 6 (1) (a) of the GDPR)
|
||||
- performance of the agreement concluded with us (forum users) - indispensability to perform the agreement (Article 6 (1) (b) of the GDPR)
|
||||
|
||||
Sales:
|
||||
|
||||
- leading to the conclusion of the agreement with us - indispensability to perform the agreement (Article 6 (1) (b) of the GDPR)
|
||||
- performance of the agreement concluded with us and handling complaints concerning the agreements concluded with us - indispensability to perform the agreement (Article 6 (1) (b) of the GDPR)
|
||||
- performance of additional services - our legitimate interest (Article 6 (1) (f) of the GDPR)
|
||||
- transferring marketing and promotional information including our partners - our legitimate interest (Article 6 (1) (f) of the GDPR) or your consent (Article 6 (1) (a) of the GDPR)
|
||||
|
||||
questions for us:
|
||||
|
||||
- responding to the questions sent via: contact form, forum, email or phone number - our legitimate interest (Article 6 (1) (f) of the GDPR)
|
||||
|
||||
general:
|
||||
|
||||
- analytical purposes (e.g. selection of the services to the needs of our clients, optimization of our products / services based on your comments on this topic, optimalization of the service processes based on the process of sales service and after-sales service, including complaint, clients' satisfaction survey and determining of the quality of our service) - our legitimate interest (Article 6 (1) (f) of the GDPR)
|
||||
- possible establishment, investigation or defence against claims (i.e. evidence purposes) - our legitimate interest (Article 6 (1) (f) of the GDPR)
|
||||
- storage of accounting documents - our obligation to keep accounting documents under tax law
|
||||
- (Article 6 (1) (c) of the GDPR in conjunction with Article 86 paragraph 1 of the Tax Ordinance Act)
|
||||
|
||||
Who has access to your personal data?
|
||||
|
||||
4. We may share your personal data with the following categories of entities:
|
||||
|
||||
a) employees and associates,
|
||||
b) related undertakings and cooperating entities, including our partners,
|
||||
c) entities supporting our activity, including but not limited to legal, accounting, IT, logistics, marketing terms, etc.
|
||||
How long is your personal data stored?
|
||||
|
||||
5. Your personal data is processed:
|
||||
|
||||
a) in relation to conclusion and performance of the agreement or providing other services (using Mudita's website/forum, software users, products sales, necessary cookies) - for the time necessary to perform the contract;
|
||||
b) provided under your consent (cookies files or marketing data) - unless you withdraw your consent or further processing will be pointless;
|
||||
c) related to answering to your inquiries - for the time necessary to perform the obligation and for the time necessary to achieve our goals;
|
||||
d) for evidence purposes to establish the existence of claims, their pursuit or defence against them - until the end of the limitation period for possible claims in this respect (this period is determined by the provisions of the Polish Civil Code), and in the case of its use in public legal proceedings until the time when after their final termination, extraordinary appeal measures are not be applicable any more (such period shall be determined by the provisions of the Polish Code of Civil Procedure);
|
||||
e) in connection with the storage of accounting documentation - until the expiry of the limitation period for the tax obligation related to the relevant transaction (this period is determined by the provisions of the Tax Ordinance Act);
|
||||
What rights do you have in relation to the processing of your personal data?
|
||||
|
||||
6. You shall have the right:
|
||||
|
||||
a) to access to your data and receive a copy of it;
|
||||
b) to rectify (correct) your data;
|
||||
c) to delete data: if, in your opinion, there are no grounds for us to process your data, you can request us to delete it;
|
||||
d) to limit data processing: you can request that we limit the processing of your personal data only to their storage or performance of the activities agreed with you, if in your opinion we have incorrect data about you or we process it unreasonably; or you do not want us to delete it because you need it to establish, pursue or defend claims; or for the duration of your objection to data processing;
|
||||
e) to object to the processing of data: objection due to special situation - you shall have the right to object to the processing of your data on the basis of a legitimate interest for purposes other than direct marketing, as well as when the processing is necessary for us to fulfil a task carried out in the public interest or the exercising public authority entrusted to us, then you should indicate your special situation, which, in your opinion, justifies the our discontinuation of the processing covered by the objection, we will stop processing your data for such purposes, unless we demonstrate that the grounds for processing your data override your rights or that your data is necessary for us to establish, pursue or defend claims;
|
||||
f) to transfer data;
|
||||
|
||||
g) to lodge a complaint with the supervisory authority: if you think that we process your data unlawfully, you can lodge a complaint to the supervisory authority responsible for overseeing compliance with the provisions on the protection of personal data (the President of the Office for Personal Data Protection);
|
||||
|
||||
h) to withdraw your consent to the processing of personal data: at any time you shall have the right to withdraw your consent to the processing of your personal data, which we process on the basis of your consent, the withdrawal of consent will not influence the legal compliance of the processing which was performed on the basis of your consent before its withdrawal.
|
||||
|
||||
How to exercise your personal data rights?
|
||||
|
||||
7. In order to exercise your rights, send a request to the contact details indicated in clause 1. Before exercising your rights you shall remember that we will have to make sure it is you, that is, to appropriately identify you.
|
||||
Is providing personal data mandatory?
|
||||
|
||||
8. Concluding the agreement with us is voluntary. However, providing personal data in connection with the agreement is a condition for its conclusion and then performance - without providing your personal data, it is not possible to conclude the agreement with us.
|
||||
|
||||
Cookies
|
||||
|
||||
9. Cookies are tiny text files that are downloaded to your computer, to improve your experience during using our website. They serve also many functions. They are very important for the proper operation of most websites, including those where we log in to our account. These files identify the computer and the user, they are not malicious programs or associated with any private data.
|
||||
|
||||
We use cookies to improve your experience while you navigate through the our websites accordingly to our cookies policy. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they as essential for the working of basic functionalities of the our websites.
|
||||
|
||||
We also use marketing, functional, analytical or third-party cookies that help us analyze and understand how you use our websites, to store user preferences and provide them with content and advertisements that are relevant to you. These cookies will only be stored on your browser with your consent to do so. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
|
||||
|
||||
You can express your consent or objection to the use of cookies after entering our website. Before granting your consent, you can read the full list and details about cookies that we use on our website.
|
||||
|
||||
Details about settings the rules for the use of cookies, including disabling cookies, by the browser are available at the links below:
|
||||
|
||||
- Internet Explorer: https://support.microsoft.com/pl-pl/help/17442/windows-internet-explorer-delete-manage-cookies
|
||||
- Mozilla Firefox: http://support.mozilla.org/pl/kb/ciasteczka
|
||||
- Google Chrome: http://support.google.com/chrome/bin/answer.py?hl=pl&answer=95647
|
||||
- Opera: http://help.opera.com/Windows/12.10/pl/cookies.html
|
||||
- Safari: https://support.apple.com/kb/PH5042?locale=en-GB
|
||||
Additional information
|
||||
|
||||
10. Controller does not share and has no intention to share client's personal data with third country or international organisation. Only except may be the United States (based on standard contractual clauses according to Commission Implementing Decision (EU) 2021/914 of 4 June 2021 on standard contractual clauses for the transfer of personal data to third countries pursuant to Regulation (EU) 2016/679 of the European Parliament and of the Council), which results from the fact, that personal data may be uploaded to the servers of applications, software and IT services providers, located in the United States.
|
||||
|
||||
|
||||
MUDITA CENTER SOFTWARE - TERMS OF USE
|
||||
|
||||
NOTE: BY USING THE MUDITA CENTER SOFTWARE, YOU AGREE TO COMPLY WITH THE TERMS LISTED BELOW. WITHOUT ACCEPTING THEM, YOU WILL NOT ACQUIRE THE RIGHT TO USE THE SOFTWARE. THEREFORE, YOU SHOULD READ THESE TERMS THOROUGHLY BEFORE INSTALLING MUDITA CENTER. IF YOU DO NOT AGREE WITH THESE TERMS, YOU CANNOT OBTAIN AND USE THE SOFTWARE OR DOWNLOAD OR USE ITS UPDATES.
|
||||
|
||||
|
||||
|
||||
Definitions:
|
||||
|
||||
"Software" refers to the Mudita Center computer application available on computers, used primarily for managing the Mudita Pure device. As of the publication date of these Terms, the application can be installed on the macOS, Windows, and Linux operating systems. The features offered by the Software and its compatibility with computer systems are subject to change with subsequent Updates, e.g., they can be limited or expanded.
|
||||
|
||||
"Update" refers to any update to the Software, including the addition or changing of features or replacing the Software with a new application.
|
||||
|
||||
"Mudita" refers to Mudita sp. z o.o. with its registered office in Warsaw (address: Jana Czeczota 9, 02- 607 Warsaw, Poland), entered into the Register of Entrepreneurs of the National Court Register under KRS number 0000467620, tax identification number (NIP) 5252558282, share capital PLN 21,100.00.
|
||||
|
||||
"User" (also referred to as "you") refers to any person who has accepted the Terms of Use for the Mudita Center Software and installed the Software.
|
||||
|
||||
|
||||
|
||||
License terms:
|
||||
|
||||
- Upon your acceptance of these Terms, Mudita will grant you a free license to use the Software. When you download an Update, you will similarly acquire a free license to use the Update. This license grants you a non-exclusive, territorially unlimited right to use the Software and/or Updates without limitation to the number of copies installed on computers, provided that you are entitled to use those computers and install software on them. The license includes:
|
||||
|
||||
- storing the Software and/or Updates using the computer's disk space or on data storage devices,
|
||||
|
||||
- running, displaying, and using the Software and/or Updates on the computer in accordance with their intended purpose.
|
||||
|
||||
- This license does not grant you any rights to use the Software and/or Updates for purposes other than those specified in these Terms.
|
||||
|
||||
- You may not modify, translate, disassemble, decompile, or reproduce the Software in whole or in part (except for cases in which it is expressly permitted by the generally applicable laws or an open- source license covering the source code of the Software).
|
||||
|
||||
- You may not use the Software on devices whose malfunction or misuse may cause death, injury, major physical harm, or major environmental damage.
|
||||
|
||||
- The license shall remain effective until terminated. However, if you violate these Terms in any way, you shall lose the rights to use the Software. Upon losing such rights, you should stop using the Software and destroy any remaining copies.
|
||||
|
||||
|
||||
|
||||
Transfer of data:
|
||||
|
||||
With your permission, Mudita will gain access to information concerning the following errors (general errors, crash dumps, warnings, hard faults; Bluetooth data - state, signal power, controls state; VoLTE - network mode, on/off settings, phone call state; power management - average battery voltage level, minimal and maximal voltage, average current from the battery, state of charge; cellular - SIM slot selected, Mobile Network Code and Mobile Country Code) that may occur while using Mudita Pure and the Software. The aim of accessing such information is to fix errors and further develop the Mudita Pure device and the Software. Information accessed this way will be limited to diagnostic data, including the description of the error, type of operating system, version of the Software, and other technical data, as well as data containing the IP address of the computer that was used to check for Updates for the Software or the Mudita Pure device. No other data will be accessed by Mudita in connection with your use of the Software.
|
||||
|
||||
|
||||
|
||||
Limitation of liability:
|
||||
|
||||
To the maximum extent permitted by the generally applicable laws that apply to the User, Mudita shall not be liable for any losses related to the use of the Software, with the exception of situations resulting from willful misconduct or gross negligence by Mudita.
|
||||
|
||||
|
||||
|
||||
Copyright / Third-party services:
|
||||
|
||||
Mudita holds all copyrights and licenses for the Software. Certain elements of the Software use or contain software provided by third parties as well as other copyrighted material, which you are entitled to use as part of the Software in accordance with these Terms. The Software may also use certain services provided by third parties. However, before accessing any service, you will be asked to give your permission and accept the terms defined by the service's provider.
|
||||
|
||||
|
||||
|
||||
Amendments to the Terms:
|
||||
|
||||
Mudita reserves the right to amend these Terms under justified circumstances (such as changes to the applicable law, the Software's functionality, or the nature of Mudita's business). The updated Terms will always be available in the corresponding tab of the Software as well as on the Mudita website. Choosing not to uninstall the Software upon receiving information about amendments to the Terms will be deemed to constitute acceptance of the changes.
|
||||
|
||||
|
||||
|
||||
Applicable law:
|
||||
|
||||
The agreement entered into by accepting these Terms is governed by the laws of the Republic of Poland. However, it does not deprive the consumer of protection granted by the legal regulations of their country of habitual residence that cannot be derogated from by agreement if the regulations applicable in that country are more beneficial to the consumer than the regulations of the Republic of Poland.
|
||||
BEFORE INSTALLING MUDITA CENTER, PLEASE READ AND ACCEPT THE REQUIRED DOCUMENTS: PRIVACY POLICY AND TERMS OF SERVICE
|
||||
|
||||
Mudita Center – Terms of Service
|
||||
Version dated: 14.03.2025
|
||||
The User should carefully review this document. It includes in particular the terms of use for Mudita Center, licences, Updates, the choice of governing law, and liability rules. However, no provisions of this document affect Consumer protection rights granted under mandatory legal regulations. To learn more about your rights, we recommend contacting a local Consumer protection organization.
|
||||
|
||||
1. DEFINITIONS
|
||||
|
||||
1.1. For the purposes of the Terms of Service, the following definitions shall apply:
|
||||
|
||||
a. Consumer
|
||||
A User who is a natural person entering into a contract or other legal transaction with Mudita that is not directly related to their business or professional activity.
|
||||
|
||||
b. Content
|
||||
All content, in particular textual, graphic, or multimedia elements (e.g., information about Mudita Center, services, visualizations, images, descriptions of the Mudita), as well as images of natural persons, that are published and distributed within Mudita Center by the Mudia.
|
||||
|
||||
c. Minor
|
||||
A natural person who does not have full legal capacity or a natural person with an equivalent status under the laws applicable in their place of residence. In particular, Minors are considered to be individuals who have not reached the age of 18, subject to the preceding sentence.
|
||||
|
||||
d. Mudita
|
||||
Mudita sp. z o.o. with its registered office in Warsaw (02-607), Jana Czeczota 6 street, entered into the register of entrepreneurs of the National Court Register kept by the District Court for the Capital City of Warsaw, 13th Commercial Division of the National Court Register, entry no. 0000467620, Tax Identification Number: 5252558282 and Statistical Identification Number: 146767613, the share capital of PLN: 1,040,000.00.
|
||||
|
||||
e. Mudita Center
|
||||
A software, along with all Content and Updates, as well as the accompanying documentation, provided by Mudita and distributed under the name "Mudita Center," which the User may install on their end device upon meeting the conditions specified in the Terms of Service, including the Technical Requirements.
|
||||
|
||||
f. Open Source Licences
|
||||
Separate licenses for software components used to create Mudita Center that are granted to the User outside the scope of the Terms of Service.
|
||||
|
||||
g. Technical Requirements
|
||||
The minimum technical requirements necessary for installing and using Mudita Center are as follows: computer or other end device connected to the Internet with a minimum bandwidth allowing the download of Mudita Center, and with an installed operating system: macOS Big Sur 11 and up (236 MB HDD space), Windows 10 or later (258 MB HDD space), 64-bit Ubuntu 18.04+ (102 MB HDD space).
|
||||
|
||||
h. Terms of Service
|
||||
The present Terms of Service available at: https://www.mudita.com/legal/terms-conditions/mudita-center/, constituting an agreement between the User and Mudita.
|
||||
|
||||
i. Updates
|
||||
Any modified version of Mudita Center provided by Mudita. In particular, an Update may include upgrades, enhancements, add-ons, and other modifications to Mudita Center, including bug fixes, updates, the addition of new services, as well as functional improvements and refinements.
|
||||
|
||||
j. User
|
||||
You – the person using Mudita Center.
|
||||
|
||||
k. Website
|
||||
https://www.mudita.com/
|
||||
|
||||
2. GENERAL PROVISIONS
|
||||
|
||||
2.1. The Terms of Service specify the rules for using Mudita Center. Acceptance of the Terms of Service is voluntary, but necessary for the User to install and use Mudita Center on their end device. The Terms of Service also apply to any Updates, unless these Updates are governed by another document or agreement, in which case the provisions of that document or agreement will apply.
|
||||
|
||||
2.2. Minors with limited legal capacity are required to review the Terms of Service with a parent or other legal representative, who must provide valid consent for the minor to use Mudita Center. Mudita has the right to verify that the appropriate consent has been obtained by the User. Minors who do not have full or limited legal capacity are not allowed to use Mudita Center.
|
||||
|
||||
2.3. No provisions of this document affect Consumer protection rights granted under mandatory legal regulations. To learn more about your rights, we recommend contacting a local consumer protection organization.
|
||||
|
||||
2.4. In matters related to the operation of the Mudita Center, Users may contact Mudita by sending an email to the following email address: hello@mudita.com or calling the phone number +48 22 3433783
|
||||
|
||||
3. SERVICES / MUDITA CENTER FEATURES
|
||||
|
||||
3.1. Mudita provides through Mudita Center, electronic services such as providing information about Mudita's products and services, as well as enabling Users to manage Mudita devices, including but not limited to updating them, importing or exporting data and backups.
|
||||
|
||||
3.2. The scope of available services varies depending on the User's device type and model (e.g. Pure, Harmony, Kompakt). Detailed information on supported devices and available features can be found in Mudita Center or on the Website.
|
||||
|
||||
3.3. To start using Mudita Center, the User must download the appropriate installation file for their operating system type and version from the Website and complete the installation process. Alternatively.
|
||||
|
||||
3.4. Installing and use of Mudita Center requires the User to accept the Terms of Service. The agreement for the provision of electronic services via Mudita Center between the User and Mudita is concluded at the moment of the successful installation of Mudita Center on the User’s end device.
|
||||
|
||||
4. INTELLECTUAL PROPERTY / LICENSE
|
||||
|
||||
4.1. All rights, including exclusive rights, to Mudita Center and its Content – particularly graphic elements, logos, names, source code, and database rights – are legally protected and belong to Mudita.
|
||||
|
||||
4.2. The User acknowledges that the use of Mudita Center and its Content is strictly for personal use and may not be used commercially. Content also may not be distributed. Any use of Mudita Center for purposes related to scientific research, analysis, or evaluation of Mudita Center is prohibited without the express prior written consent of Mudita.
|
||||
|
||||
4.3. Mudita grants the User a non-exclusive, personal, non-transferable, and limited license to download and install Mudita Center on the User's end device and to use a single copy of Mudita Center under the terms set forth in Terms of Service.
|
||||
|
||||
4.4. Among the components of Mudita Center, there may be elements subject to separate open-source software licenses with the User, which specifically include licenses approved by the Open Source Initiative or other similar licenses.
|
||||
|
||||
4.5. The granting of an Open Source License to the User is independent of the Terms of Service and is based on separate license agreements with the User. The applicable provisions of Open Source Licenses are made available to the User in the Third-Party Licenses document, accessible within Mudita Center. To the extent that specific Open Source Licenses prohibit the usage restrictions indicated in these Terms of Service, the provisions of the Open Source Licenses shall prevail over its provisions. The User acknowledges that Open Source Licenses may be subject to changes in licensing terms independently of Mudita.
|
||||
|
||||
4.6. For the avoidance of doubt, Mudita reserves all rights not expressly granted to the User under the Terms of Service. Mudita Center is protected under applicable law, particularly copyright law, intellectual property law, and international treaties, including but not limited to the Agreement on Trade-Related Aspects of Intellectual Property Rights (TRIPS). This license is subject to the limitations set forth in the Terms of Service.
|
||||
|
||||
4.7. The transfer of the license granted under the Terms of Service to third parties by the User is only possible if the ownership of the User’s end device, along with the installed Mudita Center, is transferred. Before starting to use Mudita Center, the acquiring User must accept the Terms of Service in the same manner as the transferring User.
|
||||
|
||||
5. UPDATES
|
||||
|
||||
5.1. Mudita may allow the User to download and install Updates. Mudita will notify (within Mudita Center and Website) the User of any available Updates, including those related to security, which are necessary to ensure that Mudita Center remains in compliance with the Terms of Service. The User acknowledges that some Updates, particularly those concerning security and resolving security issues reported to Mudita, are crucial for the proper functioning of Mudita Center.
|
||||
|
||||
5.2. If the User does not install the provided Updates, including those related to security, necessary to maintain Mudita Center's compliance with the Terms of Service and services provided through it, Mudita will not be responsible for any lack of compliance with Mudita Center and the services provided, resulting solely from the failure to install such Updates, provided that:
|
||||
|
||||
5.2.1. The User has been informed about the need for an update and the consequences of not installing it;
|
||||
|
||||
5.2.2. The failure to install or improper installation of the Update was not due to errors in the provided installation instructions.
|
||||
|
||||
5.3. All components of the Updates are subject to the Terms of Service, unless additional provisions are included through the Update. In the case of an Update requiring a change to the Terms of Service, the provisions of section 12 shall apply until the modified version of the Terms of Service comes into effect. The User cannot install the Update without prior acceptance of the Terms of Service if such updates have been introduced.
|
||||
|
||||
6. HEALTH DISCLAIMER
|
||||
|
||||
6.1. The User acknowledge and agree that Mudita Center and the services provided through it are not intended or designed to prevent, treat or diagnose any condition, illness or disease, nor Mudita Center and the services provided through it should be considered, in whole or in part, express or implied to contain or constitute medical or psychological advice.
|
||||
|
||||
6.2. Any advice or other materials contained in the Mudita Center and the services provided through it are intended for general information purposes only. Mudita makes no guarantees that the Mudita Center and the services provided through it provide a physical, mental or therapeutic health benefit and does not purport to give medical advice. The Mudita Center and the services provided through it are not a substitute for professional medical or psychological advice or treatment based on your personal circumstances. The User should seek the advice of your medical physician, doctor or other qualified health care provider if you have any concerns that using the Mudita Center and the services provided through it will detrimentally impact their physical or mental health and well-being. You acknowledge that Mudita has advised you of the necessity of doing so.
|
||||
|
||||
6.3. Actions or omissions based on this content may also cause damage to the extent that the content may not take into account the specific, individual circumstances of a given case, and therefore are not recommended without consulting a licensed professional who will take such circumstances into account.
|
||||
|
||||
7. USER OBLIGATIONS
|
||||
|
||||
7.1. The User may not (except for cases in which it is expressly permitted by the generally applicable laws, by Mudita, or an open-source license covering the source code of Mudita Center):
|
||||
|
||||
7.1.1. copy, publish, adapt, reproduce, decompile, disassemble, or attempt in any way to determine the source code or any other element of Mudita Center;
|
||||
|
||||
7.1.2. modify, disable, or bypass any features of Mudita Center, any security mechanisms, or create derivative works based on Mudita Center;
|
||||
|
||||
7.1.3. share, distribute, lease, rent, sublicense, or sell Mudita Center;
|
||||
|
||||
7.1.4. allow or enable other persons to perform any of the above actions – this also applies to any elements of Mudita Center.
|
||||
|
||||
7.2. The User is particularly obligated to:
|
||||
|
||||
7.2.1. use Mudita Center in a manner that does not disrupt Mudita's operations or the functioning of Mudita Center, in compliance with applicable law, the provisions of the Terms of Service, as well as accepted customs and principles of social coexistence;
|
||||
|
||||
7.2.2. not provide or transmit any content through Mudita Center that is prohibited by applicable law, especially content that infringes third-party copyrights or personal rights;
|
||||
|
||||
7.2.3. not engage in IT activities or any other actions aimed at obtaining information not intended for the User or interfering with the rules or technical aspects of Mudita Center’s functioning;
|
||||
|
||||
7.2.4. not modify Content provided by Mudita through Mudita Center in an unauthorized manner;
|
||||
|
||||
7.2.5. provide only true, up-to-date, and necessary User data within Mudita Center, and promptly update such data, including personal data, provided to Mudita in connection with the conclusion of the agreement (if applicable).
|
||||
|
||||
7.3. The User are strongly advised not to use Mudita Center and the services provided through it while operating heavy machinery, driving, flying or performing any activity or task that, with due regard to the safety of yourself and others, requires your attention and concentration.
|
||||
|
||||
8. LIABILITY
|
||||
|
||||
8.1. None of the provisions of this section are intended to limit or exclude any mandatory rights granted to Users, particularly those who are Consumers, and any potential doubts shall be resolved in favor of the User. If any exclusions or limitations are found to be inadmissible, they shall be deemed reserved to the maximum extent permissible under applicable law.
|
||||
|
||||
8.2. The entire Mudita Center is provided to the User "AS IS" and "AS AVAILABLE". In particular, to the fullest extent permitted by applicable law, Mudita does not provide any express or implied warranties for Mudita Center, nor shall the provision of any information or guidance regarding the use of Mudita Center be considered as such a warranty.
|
||||
|
||||
8.3. Mudita's liability towards Users who are not Consumers for warranty claims in connection with the performance of the Terms of Service is excluded. Furthermore, to the fullest extent permitted by applicable law, Mudita excludes its liability towards the User for any damages, including lost profits or failure to fulfill its obligations due to force majeure, resulting from the Terms of Service.
|
||||
|
||||
8.4. The User acknowledges that the use of Mudita Center is at their own risk and responsibility. Mudita’s liability for damages, whether directly or indirectly arising from the use or inability to use Mudita Center, including but not limited to personal injury, data loss, lost profits, costs of substitute equipment or software, is excluded to the fullest extent permitted by applicable law.
|
||||
|
||||
8.5. Notwithstanding the above, to the fullest extent permitted by applicable law, Mudita’s liability for damages arising directly or indirectly from the use or inability to use the Mudita Center, regardless of the legal basis, shall not exceed 50€.
|
||||
|
||||
9. TERMINATION OF THE TERMS OF SERVICE
|
||||
|
||||
9.1. This agreement (Terms of Service) is concluded for an indefinite period, having regard to the provisions of this section 9.
|
||||
|
||||
9.2. The User may terminate the Terms of Service with immediate effect at any time by ceasing to use Mudita Center and uninstalling it from the end device.
|
||||
|
||||
9.3. The Terms of Service may also be terminated as a result of the sale of the User's end device on which Mudita Center is installed. In such a case, the moment of termination of the Terms of Service is considered to be the moment when the purchaser of such a device accepts the Terms of Service.
|
||||
|
||||
9.4. Mudita may terminate the Terms of Service with immediate effect if the User has violated the Terms of Service or any other provisions binding the User and Mudita regarding Mudita Center. In the event of termination of the Terms of Service by Mudita, the User must immediately and completely cease using Mudita Center and uninstall it from their end device.
|
||||
|
||||
9.5. Mudita is entitled to decide on the complete discontinuation of Mudita Center (cessation of operations related to providing access to Mudita Center). In such a case, the User will be informed of the decision at least 6 months before the planned discontinuation date (notice period) via a notification displayed within Mudita Center, or an email sent to the User's email address, and on the Website. After the expiration of the notice period, the agreements regarding Mudita Center concluded between the User and the Provider will be terminated.
|
||||
|
||||
9.6. Mudita may terminate the Terms of Service in the event of the circumstances specified in pt. 12.1, with a 14-day notice period. A termination notice on this basis will be provided to the User within Mudita Center or via an email sent to Users. In that case, depending on the circumstances User may need to discontinue the use of Mudita Center and uninstall it from the User’s end device
|
||||
|
||||
9.7. All provisions contained in the Terms of Service that should remain in force due to their nature shall continue to be valid and binding, regardless of the method of termination of the Terms of Service.
|
||||
|
||||
10. COMPLAINTS
|
||||
|
||||
10.1. Complaints regarding issues related to Mudita Center and the services provided through it, as covered by the Terms of Service, may be submitted in particular via email to hello@mudita.com or by mail to the following address: ul. Jana Czeczota 6, 02-607 Warsaw, Poland.
|
||||
|
||||
10.2. To expedite the complaint resolution process, the complaint should include, in particular:
|
||||
|
||||
10.2.1. information on the current Mudita Center version;
|
||||
|
||||
10.2.2. the technical specifications of the device on which Mudita Center is installed,
|
||||
|
||||
10.2.3. the model of the device managed via Mudita Center (if applicable);
|
||||
|
||||
10.2.4. contact details (including, if applicable the User's e-mail address used for downloading Mudita Center);
|
||||
|
||||
10.2.5. a description of the issue.
|
||||
|
||||
10.3. Complaints will be processed within 14 days from the date of receipt by Mudita. If Mudita is unable to process the complaint due to missing necessary information, the User will be informed about the missing details. The response to the complaint will be sent to the email address provided in the complaint unless the User requests to receive the response via traditional mail to the specified address.
|
||||
|
||||
10.4. In the event of any non-compliance of Mudita Center, including the services provided through it, with the agreement, the User is obliged to cooperate with Mudita to a reasonable extent in order to determine – using the least burdensome technical means for the User –whether the non-compliance of Mudita Center, including the services provided through it, results from the characteristics of the User's digital environment.
|
||||
|
||||
11. DISPUTE RESOLUTION
|
||||
|
||||
11.1. In the event of any disputes arising directly or indirectly from the Terms of Service, they may first be resolved amicably, including through Mudita’s complaint procedure, if applicable. For Consumers, additional methods specified below may also be available.
|
||||
|
||||
11.2. The use of out-of-court methods for handling complaints and pursuing claims is voluntary. The following provisions are for informational purposes only and do not constitute an obligation for Mudita to participate in out-of-court dispute resolution procedures. Mudita’s statement regarding consent or refusal to participate in a consumer dispute resolution procedure will be provided in writing or on another durable medium if a dispute remains unresolved following a Consumer’s complaint.
|
||||
|
||||
11.3. The rules governing out-of-court consumer dispute resolution procedures and the obligations of businesses in this regard are separately defined in applicable laws. Detailed information on the Consumer’s ability to use out-of-court complaint handling and dispute resolution methods, as well as access to such procedures, may be available at the offices and on the websites of relevant consumer protection authorities.
|
||||
|
||||
11.4. A Consumer who is a permanent resident of the EU, Norway, Iceland, or Liechtenstein may submit a complaint via the online ODR platform: https://ec.europa.eu/consumers/odr/ (the ability to submit complaints will expire on 20 March 2025, and the ODR platform will be discontinued on 20 July 2025).
|
||||
|
||||
11.5. Any disputes arising from the Terms of Service shall be subject to the jurisdiction of the national courts of Poland or the EU Member State where the user resides, unless mandatory provisions of law state otherwise.
|
||||
|
||||
12. AMENDMENTS
|
||||
|
||||
12.1. Terms of Service may be amended by Mudita if at least one of the following important reasons occurs:
|
||||
|
||||
12.1.1. a change in legal regulations governing functioning of Mudita Center and the provision of services through it, as covered by Terms of Service, affecting the mutual rights and obligations of the User and Mudita, or a change in the interpretation of these legal regulations as a result of court rulings, decisions, recommendations, or guidelines issued by the relevant authorities;
|
||||
|
||||
12.1.2. a change in the method of functioning of Mudita Center and the provision of services through it, as covered by Terms of Service due to technical or technological reasons;
|
||||
|
||||
12.1.3. a modification of the scope or method of functioning of Mudita Center and the provision of services through it, as covered by Terms of Service, particularly through the introduction of new functionalities, modification, or withdrawal of existing functionalities or services by Mudita;
|
||||
|
||||
12.1.4. a modification of the scope or method of service provision by entities cooperating with Mudita, involving the introduction of new functionalities, modification, or withdrawal of existing functionalities or services by these entities, impacting the mutual rights and obligations between the User and Mudita.
|
||||
|
||||
12.2. Amendments to the Terms of Service shall take effect after a 14-day notice period granted to the User, unless the User actively accepts the amended Terms of Service earlier, or a shorter period is required by mandatory legal regulations or decisions of competent authorities or courts.
|
||||
|
||||
12.3. The active acceptance of the amended Terms of Service, as well as the continued use of Mudita Center, after the amended Terms of Service comes into effect, shall constitute acceptance of the introduced changes. If the User does not wish to accept the modified Terms of Service, depending on the circumstances they may need to discontinue the use of Mudita Center and uninstall it from the User’s end device.
|
||||
|
||||
12.4. Mudita reserves the right to make changes to the operation of Mudita Center, including the services provided through it, that are not necessary to maintain compliance with the agreement and do not lead to its modification (pt. 12.1.), when such changes result from:
|
||||
|
||||
12.4.1. improvement or modification of existing functionalities, enhancement of Mudita Center’s performance, including the services provided through it, in particular through changes to the layout, design, modification of content, and the removal of selected elements;
|
||||
|
||||
12.4.2. editorial changes necessary to correct or eliminate errors;
|
||||
|
||||
12.4.3. security improvements that do not impact compliance with the agreement, including, in particular, patching exploits and bugs.
|
||||
|
||||
12.5. Mudita will inform Users of the changes referred to in section 12 within Mudita Center or via an email sent to Users, as well as on the Website.
|
||||
|
||||
13. APPLICABLE LAW / LANGUAGE VERSIONS
|
||||
|
||||
13.1. Terms of Service are governed by Polish law and shall be interpreted in accordance with it, regardless of any applicable conflict-of-laws rules, except in cases where mandatory provisions of the User's jurisdiction provide otherwise.
|
||||
|
||||
13.2. The parties expressly exclude the application of the provisions of the Convention on Contracts for the International Sale of Goods to these Terms of Service.
|
||||
|
||||
13.3. The translation has been made in accordance with national requirements, and in the event of any discrepancies between the English version and the translated version, the English version shall prevail, to the extent that such is not prohibited by mandatory legal provisions in the User's jurisdiction.
|
||||
|
||||
14. FINAL PROVISIONS
|
||||
|
||||
14.1. Terms of Service constitute the entire agreement between the User and Mudita regarding Mudita Center, unless expressly stated otherwise in the Terms of Service.
|
||||
|
||||
14.2. If any provision of these Terms of Service is found to be invalid or unenforceable, it shall not affect the validity or enforceability of the remaining provisions.
|
||||
|
||||
14.3. Using Mudita Center may involve the processing of the User's personal data. Detailed information on personal data processing can be found in the Privacy Policy.
|
||||
|
||||
14.4. Mudita Center may contain links to websites or other resources of third-party entities. Mudita is not responsible for the content on such websites or resources, nor for any actions taken by the User in connection with the use of services, goods, or content available on such third-party websites.
|
||||
|
||||
14.5. Services provided through Mudita Center are electronic services and, as such, involve typical risks associated with data transmission over the Internet, such as the disclosure of User data, unauthorized access, or data loss. Both parties are obligated to take measures to minimize these risks – Mudita, in particular, by implementing appropriate technical and organizational safeguards, and the User by exercising due care, maintaining data confidentiality, and not sharing it with unauthorized persons.
|
||||
|
||||
|
||||
MUDITA CENTER – PRIVACY POLICY
|
||||
This document explains in particular what personal data we collect, how we use it, and what rights you have regarding its processing. Our goal is to ensure transparency and clarity on privacy matters so that you can feel safe while using our products and software along with all content, updates, related documentation, provided by Mudita and distributed under the name "Mudita Center" (hereinafter: "Mudita Center”).
|
||||
|
||||
We make every effort to minimize the collection of personal data. Whenever possible and economically justified, we use technologies that do not require us to store user information. However, if data collection is necessary for the proper functioning of our products and services, we do so in compliance with applicable regulations (e.g. Regulation (EU) 2016/679 - General Data Protection Regulation / “GDPR”), with a valid legal basis, and in accordance with industry best practices for privacy protection.
|
||||
|
||||
We encourage you to review this Privacy Policy and contact us if you have any questions or concerns.
|
||||
|
||||
1. ABOUT DOCUMENT
|
||||
|
||||
Please note that this Privacy Policy applies only to the processing of personal data related to the use of the Mudita Center. It does not cover the processing of personal data related to your use of Mudita devices (e.g., Pure, Kompakt, Harmony). Information in this regard is available within the legal documents of the respective product (e.g. “About Phone” tab”).
|
||||
|
||||
Providing personal data is voluntary but necessary to fulfill the purposes outlined in section 4 below.
|
||||
|
||||
2. DATA CONTROLLER
|
||||
|
||||
The controller of personal data processed in connection with your use of the Mudita Center is Mudita sp. z o.o. with its registered office in Warsaw (02-607), Jana Czeczota 6 street, KRS no: 0000467620, Tax Identification Number: 5252558282 (hereinafter: "Mudita" or "We").
|
||||
|
||||
3. CONTACT
|
||||
|
||||
If you have any questions regarding the processing of your personal data, you can contact Mudita via email at office@mudita.com or by writing to the address specified in section 2 above.
|
||||
|
||||
We strive to respond promptly to every message. However, in more complex cases, the process may take longer. Additionally, Mudita may request further information to properly verify your identity, provide a comprehensive response, or, in special situations, inform you that more time is needed to address your inquiry.
|
||||
|
||||
4. PURPOSES AND LEGAL BASIS FOR THE PROCESSING OF YOUR PERSONAL DATA / RETENTION PERIOD
|
||||
|
||||
4.1. Proper Functioning of the Mudita Center / Services
|
||||
|
||||
[Purpose] In order to properly provide electronic services (functioning of Mudita Center and provide services through it), including in particular technical support and bug fixes, informing you about available software updates, and processing statutory claims, we may process your personal data.
|
||||
|
||||
[Categories of Data] In such cases, Mudita may process, in particular, data contained in system logs, the IMEI number, the device's serial number, and other identifiers specific to the software / application, network, or device (e.g., device ID).
|
||||
|
||||
[Legal Basis / Retention Period] The processing of data is necessary to take action at your request before entering into a contract or for its performance (Article 6(1)(b) of the GDPR) and to fulfill our legitimate interests, particularly in continuously improving our products and services (Article 6(1)(f) of the GDPR). Mudita may process this data for the period necessary to achieve the above-mentioned purposes, and in particular, this period will not exceed the duration of the use (and installation) of the Mudita Center in the case of the legal basis under Article 6(1)(b) of the GDPR. In the case of the legal basis under Article 6(1)(f), the processing will continue until the legitimate interest no longer exists or until an effective objection is raised.
|
||||
|
||||
4.2. Fraud Prevention / Claim Pursuit / Defending against claims
|
||||
|
||||
[Purpose] We strive to detect and prevent fraud, unauthorized use of our software / application (Mudita Center), violations of our rights, etc., as well as handle any reports regarding legal violations. Additionally, we may take actions related to asserting and pursuing claims or defending against claims brought against Mudita.
|
||||
|
||||
[Categories of Data] To effectively achieve these purposes, we may process personal data, including, in particular, data contained in system logs, the IMEI number, the device's serial number, and other identifiers specific to the software / application, network, or device (e.g., device ID).
|
||||
|
||||
[Legal Basis / Retention Period] The processing of data for the above purposes is necessary to pursue Mudita's legitimate interest in asserting or defending legal claims, as well as preventing fraud and misuse (Article 6(1)(f) of the GDPR). Mudita may process the data for the period necessary to achieve these purposes, particularly for the duration of the limitation periods for claims applicable to or against Mudita, as provided by law.
|
||||
|
||||
4.3. Contact
|
||||
|
||||
[Purpose] In case of any inquiries regarding Mudita Center, you have the option to contact Mudita. In such situations, the personal data of the user initiating contact may be processed.
|
||||
|
||||
[Categories of Data] In such cases, Mudita may process the user's contact details and any other personal data provided by the user during the communication.
|
||||
|
||||
[Legal Basis / Retention Period] The legal basis for processing your personal data for this purpose is the Controller's legitimate interest – Article 6(1)(f) of the GDPR. Personal data will be processed for the period necessary to review your inquiry and provide a response.
|
||||
|
||||
5. DATA RECIPIENTS
|
||||
|
||||
Your personal data may be shared or entrusted by Mudita to third parties to the extent necessary to achieve the intended purposes. The recipients of personal data may include, in particular: (i) entities affiliated with us, (ii) IT services and support providers (iii) professional advisors, such as lawyers, auditors, accountants, and (iv) other entities cooperating with Mudita, if justified or necessary for the purposes of data processing.
|
||||
|
||||
Mudita may also share your personal data to local or foreign public administration authorities and law enforcement agencies if required by law. These authorities may be located both in your country of residence and abroad.
|
||||
|
||||
6. AUTOMATED INDIVIDUAL DECISION-MAKING / PROFILING
|
||||
|
||||
No decisions based on automated processing of personal data, including profiling, will be made concerning you.
|
||||
|
||||
7. RIGHTS OF THE DATA SUBJECTS
|
||||
|
||||
In connection with the processing of your personal data, you have the following rights under applicable laws:
|
||||
|
||||
a. The right to access your data, including obtaining a copy of your data,
|
||||
b. The right to request rectification of your data,
|
||||
c. The right to restrict the processing of your data,
|
||||
d. The right to request the deletion of your data (in certain situations),
|
||||
e. The right to data portability for data you have provided and that is processed automatically based on your consent or a contract, e.g., to another controller,
|
||||
f. The right to object to the processing of personal data – to the extent that processing is based on the legitimate interest of the controller or a third party.
|
||||
|
||||
If your data is processed based on consent, you have the right to withdraw your consent to the extent that the data is processed on this basis. The withdrawal of consent does not affect the lawfulness of processing carried out before its withdrawal.
|
||||
|
||||
The scope of each of these rights and the situations in which they can be exercised are determined by legal regulations. The specific right you may exercise will depend, among other factors, on the purpose and legal basis of the data processing. To exercise the above rights, you should contact Mudita in the manner specified in section 3. We will respond to your inquiries within the timeframes provided by applicable law.
|
||||
|
||||
If you have concerns about how Mudita processes your personal data, you may file a complaint with the appropriate data protection authority. A list of such authorities is available at this link. The jurisdiction of authorities is governed by the applicable law.
|
||||
|
||||
8. TRANSFER OF PERSONAL DATA TO THIRD COUNTRIES
|
||||
|
||||
Your personal data will generally be processed within the EEA. However, data may be transferred to Mudita's partners who process it outside the EEA, but only to the extent necessary for Mudita’s cooperation with these partners.
|
||||
|
||||
In such cases, Mudita takes all possible measures to ensure the security of the transferred personal data, including, in particular, transferring personal data to countries that the European Commission has determined, by decision, to provide an adequate level of protection. In the absence of such a decision, Mudita ensures the security of personal data through safeguards such as the standard contractual clauses approved by the European Commission.
|
||||
|
||||
For more information about the applied safeguards, including obtaining a copy of them, you may contact Mudita using the methods indicated in section 3 above.
|
||||
|
||||
9. OTHER INFORMATIONS ABOUR YOUR PRIVACY / BACKUP / MANAGE MUDITA DEVICE
|
||||
The data stored on your device that is backed up using Mudita Center (e.g., contact list, call log, messages, alarms, notes, etc.) is not processed by us, and the backup is performed locally on the device where Mudita Center is installed. Similarly, when using other features of Mudita Center designed to manage your Mudita device (e.g., editing contacts, managing sounds, etc.), Mudita does not process this data.
|
||||
|
||||
In connection with your use of Mudita Center, besides the data specified in section 4, we may process also other information (e.g., summary records of Mudita Center or Mudita device updates). However, this data is collected in a way that prevents the identification of specific users (which means that these are not personal data), including through data aggregation.
|
||||
|
||||
10. FINAL PROVISIONS
|
||||
|
||||
This version of the Privacy Policy is effective as of 14.03.2025.
|
||||
|
||||
In connection with the Mudita’s development and application updates, Mudita reserves the right to amend this Privacy Policy.
|
||||
|
||||
@@ -71,6 +71,7 @@ import {
|
||||
AppEvents,
|
||||
callRenderer,
|
||||
getMainAppWindow,
|
||||
MuditaCenterServerRoutes,
|
||||
openDevToolsOnceDomReady,
|
||||
preventDefaultShortcuts,
|
||||
registerShortcuts,
|
||||
@@ -327,7 +328,9 @@ const createOpenWindowListener = (
|
||||
|
||||
ipcMain.answerRenderer(BrowserActions.PolicyOpenBrowser, () =>
|
||||
shell.openExternal(
|
||||
`${process.env.MUDITA_CENTER_SERVER_URL ?? ""}/privacy-policy-url`
|
||||
`${process.env.MUDITA_CENTER_SERVER_URL ?? ""}/${
|
||||
MuditaCenterServerRoutes.PrivacyPolicyUrl
|
||||
}`
|
||||
)
|
||||
)
|
||||
ipcMain.answerRenderer(BrowserActions.UpdateOpenBrowser, () =>
|
||||
@@ -457,7 +460,7 @@ ipcMain.answerRenderer(GoogleAuthActions.OpenWindow, async (scope: Scope) => {
|
||||
scopeUrl = "https://www.googleapis.com/auth/contacts"
|
||||
break
|
||||
}
|
||||
const url = `${process.env.MUDITA_CENTER_SERVER_URL}/google-auth-init`
|
||||
const url = `${process.env.MUDITA_CENTER_SERVER_URL}/${MuditaCenterServerRoutes.GoogleAuthInit}`
|
||||
void (await googleAuthWindow.loadURL(`${url}?scope=${scopeUrl}`))
|
||||
} else {
|
||||
googleAuthWindow.show()
|
||||
|
||||
@@ -18,7 +18,7 @@ jest.mock("Core/device-manager/services/usb-devices/usb-devices.helper", () => {
|
||||
})
|
||||
|
||||
describe("Connection", () => {
|
||||
it.each([{ vendorId: "0e8d", productId: "200a" }])(
|
||||
it.each([{ vendorId: "3310", productId: "200a" }])(
|
||||
"should connect successfully",
|
||||
async ({ vendorId, productId }) => {
|
||||
const eventEmitter = new EventEmitter()
|
||||
|
||||
@@ -34,5 +34,5 @@ export const setConnection = async (vendorId: string, productId: string) => {
|
||||
}
|
||||
|
||||
export const setKompaktConnection = () => {
|
||||
return setConnection("0e8d", "200a")
|
||||
return setConnection("3310", "200a")
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import { Client } from "Core/__deprecated__/api/mudita-center-server/client"
|
||||
import MockAdapter from "axios-mock-adapter"
|
||||
import axios from "axios"
|
||||
import { MuditaCenterServerRoutes } from "Core/__deprecated__/api/mudita-center-server/mudita-center-server-routes"
|
||||
import MockAdapter from "axios-mock-adapter"
|
||||
import { MuditaCenterServerRoutes } from "shared/utils"
|
||||
import { Client } from "Core/__deprecated__/api/mudita-center-server/client"
|
||||
|
||||
const previousEnvironment = { ...process.env }
|
||||
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import axios, { AxiosInstance, AxiosResponse } from "axios"
|
||||
import { EntryCollection } from "contentful"
|
||||
import https from "https"
|
||||
import { MuditaCenterServerRoutes } from "shared/utils"
|
||||
import { NewsEntry } from "Core/news/dto"
|
||||
import { OsEnvironment } from "Core/update/constants"
|
||||
import { ReleaseManifest } from "Core/update/dto"
|
||||
import { ClientInterface } from "Core/__deprecated__/api/mudita-center-server/client.interface"
|
||||
import { MuditaCenterServerRoutes } from "Core/__deprecated__/api/mudita-center-server/mudita-center-server-routes"
|
||||
import { Product } from "Core/__deprecated__/main/constants"
|
||||
import axios, { AxiosInstance, AxiosResponse } from "axios"
|
||||
import { EntryCollection } from "contentful"
|
||||
import https from "https"
|
||||
|
||||
export interface getLatestProductionReleaseParams {
|
||||
product: Product
|
||||
@@ -31,11 +31,9 @@ interface ExternalUsageDeviceResponse {
|
||||
export class Client implements ClientInterface {
|
||||
private httpClient: AxiosInstance
|
||||
|
||||
constructor(timeout?: number, apiV2?: boolean) {
|
||||
constructor(timeout?: number) {
|
||||
this.httpClient = axios.create({
|
||||
baseURL: apiV2
|
||||
? (process.env.MUDITA_CENTER_SERVER_V2_URL as string)
|
||||
: (process.env.MUDITA_CENTER_SERVER_URL as string),
|
||||
baseURL: process.env.MUDITA_CENTER_SERVER_URL as string,
|
||||
httpsAgent: new https.Agent({
|
||||
rejectUnauthorized: false,
|
||||
}),
|
||||
|
||||
@@ -5,4 +5,4 @@
|
||||
|
||||
import { Client } from "Core/__deprecated__/api/mudita-center-server/client"
|
||||
|
||||
export const createClient = (timeout?: number, apiV2?: boolean): Client => new Client(timeout, apiV2)
|
||||
export const createClient = (timeout?: number): Client => new Client(timeout)
|
||||
|
||||
@@ -19,7 +19,7 @@ const checkForUpdateAndGetNewData = async (
|
||||
const { newsItems: localNews } = await fs.readJson(newsFilePath)
|
||||
|
||||
try {
|
||||
const client = createClient(undefined, true)
|
||||
const client = createClient()
|
||||
const onlineNews: EntryCollection<NewsEntry> = await client.getNews({
|
||||
limit: 6,
|
||||
})
|
||||
|
||||
@@ -4,7 +4,10 @@
|
||||
*/
|
||||
|
||||
export const EXTERNAL_URLS = {
|
||||
windowCenterUpdate: "https://mudita.com/products/software-apps/mudita-center/",
|
||||
windowCenterUpdate:
|
||||
"https://mudita.com/products/software-apps/mudita-center/",
|
||||
privacyPolicy: "https://mudita.com/legal/privacy-policy/mudita-center/",
|
||||
termsAndConditions: "https://mudita.com/legal/terms-conditions/mudita-center/"
|
||||
termsAndConditions:
|
||||
"https://mudita.com/legal/terms-conditions/mudita-center/",
|
||||
website: "https://www.mudita.com/",
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
"component.crashDumpModal.harmonyLabel": "Mudita Harmony crashed",
|
||||
"component.crashDumpModal.label": "Mudita Pure crashed",
|
||||
"component.crashDumpModal.pureLabel": "Mudita Pure crashed",
|
||||
"component.crashDumpModal.text": "Please send us logs for further inspection. Files will be uploaded automatically.",
|
||||
"component.crashDumpModal.text": "Please send us logs for further inspection. Files will be uploaded automatically.",
|
||||
"component.crashDumpModal.title": "Error",
|
||||
"component.crashDumpSendingModal.label": "Sending logs to the support",
|
||||
"component.dataModal.errorDescription": "Please check that your phone is attached to the computer",
|
||||
@@ -135,7 +135,7 @@
|
||||
"component.rowUncheckTooltipDescription": "Unselect the row",
|
||||
"component.searchInput.placeholder": "Search",
|
||||
"component.searchResults.noResults": "We couldn't find anything...",
|
||||
"component.selectionSelectAllTooltipDescription": "Select all row",
|
||||
"component.selectionSelectAllTooltipDescription": "Select all rows",
|
||||
"component.selectionUnselectAllTooltipDescription": "Unselect all rows",
|
||||
"component.supportButton": "Contact support",
|
||||
"component.supportModalActionButton": "Send",
|
||||
@@ -240,7 +240,7 @@
|
||||
"module.calendar.selectCalendarsButton": "Synchronize",
|
||||
"module.calendar.selectCalendarsSubtitle": "Select calendar",
|
||||
"module.calendar.selectCalendarsTitle": "Calendar synchronization",
|
||||
"module.calendar.selectionsNumber": "{num, plural, =-1 {All Events} one {# Event} other {# Events}} selected",
|
||||
"module.calendar.selectionsNumber": "{num, plural, =-1 {All events} one {# event} other {# events}} selected",
|
||||
"module.calendar.selectVendorBody": "Synchronize your calendar events with a selected vendor",
|
||||
"module.calendar.selectVendorSubtitle": "Choose vendor",
|
||||
"module.calendar.selectVendorTitle": "Calendar synchronization",
|
||||
@@ -374,7 +374,7 @@
|
||||
"module.contacts.secondaryNumber": "Second phone number",
|
||||
"module.contacts.secondName": "Last name",
|
||||
"module.contacts.selectionExport": "Export",
|
||||
"module.contacts.selectionsNumber": "{num, plural, =-1 {All Contacts} one {# Contact} other {# Contacts}} selected",
|
||||
"module.contacts.selectionsNumber": "{num, plural, =-1 {All Contacts} one {# contact} other {# contacts}} selected",
|
||||
"module.contacts.speedDial": "Speed dial",
|
||||
"module.contacts.speedDialCancelButton": "Cancel",
|
||||
"module.contacts.speedDialContactLabel": "Contact",
|
||||
@@ -400,7 +400,7 @@
|
||||
"module.filesManager.deleteFileModalAction": "Delete",
|
||||
"module.filesManager.deleteFileModalBody": "Do you really want to delete <b>{num, plural, =-1 {all files} one {# file} other {# files}}?</b>",
|
||||
"module.filesManager.deleteFileModalCancel": "Cancel",
|
||||
"module.filesManager.deleteFileModalTitle": "Delete File",
|
||||
"module.filesManager.deleteFileModalTitle": "Delete file",
|
||||
"module.filesManager.deletePopup": "{num, plural, =-1 {All files} one {# file} other {# files}} deleted",
|
||||
"module.filesManager.deletingFileModalErrorSubtitle": "Deleting failed",
|
||||
"module.filesManager.deletingFileModalErrorTitle": "Deleting Files",
|
||||
@@ -419,7 +419,7 @@
|
||||
"module.filesManager.invalidFiledModalTitle": "Upload files",
|
||||
"module.filesManager.invalidFiledModalUploadInfo": "To avoid problems we only uploaded the files that will work.",
|
||||
"module.filesManager.panelSearchPlaceholder": "Search",
|
||||
"module.filesManager.selectionNumber": "{num, plural, =-1 {All Files} one {# File} other {# Files}} selected",
|
||||
"module.filesManager.selectionNumber": "{num, plural, =-1 {All files} one {# file} other {# files}} selected",
|
||||
"module.filesManager.unsupportedFileFormatUploadModalActionButton": "OK",
|
||||
"module.filesManager.unsupportedFileFormatUploadModalHeader": "Unsupported file format",
|
||||
"module.filesManager.unsupportedFileFormatUploadModalTextInfo": "This file format is not supported. Please select a different file and try again.",
|
||||
@@ -432,7 +432,7 @@
|
||||
"module.filesManager.uploadingModalBody": "Please wait, this might take a few minutes",
|
||||
"module.filesManager.uploadingModalErrorSubtitle": "Uploading failed",
|
||||
"module.filesManager.uploadingModalErrorTitle": "Uploading Files",
|
||||
"module.filesManager.uploadingModalInfo": "{num, plural, =-1 {All files} one {# File} other {# Files}} uploaded.",
|
||||
"module.filesManager.uploadingModalInfo": "{num, plural, =-1 {All files} one {# file} other {# files}} uploaded.",
|
||||
"module.filesManager.uploadingModalNoSpaceErrorSubtitle": "Not enough space on your device",
|
||||
"module.filesManager.uploadingModalNoSpaceErrorTitle": "Uploading Files",
|
||||
"module.filesManager.uploadingModalSubtitle": "Files uploading...",
|
||||
@@ -484,7 +484,7 @@
|
||||
"module.messages.conversationGroup": "Conversations",
|
||||
"module.messages.conversations": "Conversations",
|
||||
"module.messages.conversationsDelete": "{number} conversations was deleted",
|
||||
"module.messages.conversationsSelectionsNumber": "{num, plural, =-1 {All Conversations} one {# Conversation} other {# Conversations}} selected",
|
||||
"module.messages.conversationsSelectionsNumber": "{num, plural, =-1 {All conversations} one {# conversation} other {# conversations}} selected",
|
||||
"module.messages.deleteButton": "Delete",
|
||||
"module.messages.deletedMessageInfo": "The message was deleted",
|
||||
"module.messages.deletedThread": "1 conversation was deleted",
|
||||
@@ -533,13 +533,13 @@
|
||||
"module.messages.search": "Search",
|
||||
"module.messages.searchResultsTitle": "Search results for “{value}”",
|
||||
"module.messages.seeAll": "See all",
|
||||
"module.messages.selectionNumber": "{num, plural, =-1 {All Conversations} one {# Conversation} other {# Conversations}} selected",
|
||||
"module.messages.selectionNumber": "{num, plural, =-1 {All conversations} one {# conversation} other {# conversations}} selected",
|
||||
"module.messages.sendButtonTooltipDescription": "Send message",
|
||||
"module.messages.textAreaPlaceholder": "Type your message",
|
||||
"module.messages.unreadOnly": "Unread only",
|
||||
"module.messagesAttachModalTitle": "Attach Contact",
|
||||
"module.news": "Mudita News",
|
||||
"module.news.cardCommunityComments": "{count, plural, =0 {Be the first to comment} one {# Comment} other {# Comments}}",
|
||||
"module.news.cardCommunityComments": "{count, plural, =0 {Be the first to comment} one {# comment} other {# comments}}",
|
||||
"module.news.cardCommunityCommentsLoading": "Loading comments...",
|
||||
"module.news.lastUpdate": "Last updated: ",
|
||||
"module.news.moreNewsButtonLabel": "More news",
|
||||
@@ -853,13 +853,13 @@
|
||||
"module.templates.saveButton": "Save",
|
||||
"module.templates.savingChanges": "Saving changes",
|
||||
"module.templates.searchPlaceholder": "Search",
|
||||
"module.templates.selectionNumber": "{num, plural, =-1 {All Templates} one {# Template} other {# Templates}} selected",
|
||||
"module.templates.selectionsNumber": "{num, plural, =-1 {All Templates} one {# Template} other {# Templates}} selected",
|
||||
"module.templates.selectionNumber": "{num, plural, =-1 {All templates} one {# template} other {# templates}} selected",
|
||||
"module.templates.selectionsNumber": "{num, plural, =-1 {All templates} one {# template} other {# templates}} selected",
|
||||
"module.templates.template": "Template",
|
||||
"module.templates.templateCreated": "1 template was created.",
|
||||
"module.templates.templateCreated": "1 template was created",
|
||||
"module.templates.templateDelete": "1 template was deleted",
|
||||
"module.templates.templatesDelete": "{number} templates were deleted",
|
||||
"module.templates.templateUpdated": "1 template was updated.",
|
||||
"module.templates.templateUpdated": "1 template was updated",
|
||||
"module.templates.temporary": "New template",
|
||||
"module.templates.text": "Template...",
|
||||
"module.templates.tooLong": "The template is too long",
|
||||
@@ -1014,6 +1014,10 @@
|
||||
"module.genericViews.dataMigration.failure.partialChangesDescription": "Some data transferred, but you'll need to check Kompakt to see what's missing.",
|
||||
"module.genericViews.dataMigration.failure.notEnoughSpace": "Your phone’s storage is full.",
|
||||
"module.genericViews.dataMigration.failure.closeButtonLabel": "Close",
|
||||
"module.genericViews.entities.delete.failure.all.modalTitle": "Deleting failed",
|
||||
"module.genericViews.entities.delete.failure.some.modalTitle": "Deleting some files failed",
|
||||
"module.genericViews.entities.delete.failure.all.modalDescription": "The file is still on Kompakt, please try again.",
|
||||
"module.genericViews.entities.delete.failure.some.modalDescription": "{succeededFiles, plural, =0 {No files} one {# file} other {# files}} successfully deleted, {failedFiles, plural, one {# file} other {# files}} not deleted:",
|
||||
"module.genericViews.filesManager.upload.progress.modalTitle": "{filesCount, plural, one {Adding file...} other {Adding files...}}",
|
||||
"module.genericViews.filesManager.upload.progress.cancelButton": "Cancel",
|
||||
"module.genericViews.filesManager.upload.failure.all.modalTitle": "Adding {filesCount, plural, one {file} other {files}} failed",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M36 21C36 20.4477 36.4477 20 37 20C37.5523 20 38 20.4477 38 21V27C38 27.5523 37.5523 28 37 28C36.4477 28 36 27.5523 36 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 17C3 14.2386 5.23858 12 8 12H30C32.7614 12 35 14.2386 35 17V31C35 33.7614 32.7614 36 30 36H8C5.23858 36 3 33.7614 3 31V17ZM8 14C6.34315 14 5 15.3431 5 17V31C5 32.6569 6.34315 34 8 34H30C31.6569 34 33 32.6569 33 31V17C33 15.3431 31.6569 14 30 14H8Z" fill="black"/>
|
||||
<path d="M40.0231 24.778L44.1729 18.1251C44.2344 18.05 44.3266 18 44.4496 18C44.4803 18 44.511 18 44.5418 18C44.6955 18.05 44.7877 18.1501 44.757 18.2751L43.7425 23.2524L47.6772 23.3024C47.8002 23.3024 47.8924 23.3524 47.9539 23.4274C48.0154 23.5025 48.0154 23.6025 47.9539 23.6775L43.3429 29.8803C43.2507 29.9804 43.097 30.0304 42.9741 29.9804C42.8204 29.9304 42.7589 29.8053 42.7896 29.6802L44.0807 25.1282L40.2997 25.1282C40.2075 25.1282 40.0845 25.0782 40.0231 25.0031C39.9923 24.9531 39.9923 24.8531 40.0231 24.778Z" fill="black"/>
|
||||
<svg width="51" height="48" viewBox="0 0 51 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M33 21C33 20.4477 33.4477 20 34 20C34.5523 20 35 20.4477 35 21V27C35 27.5523 34.5523 28 34 28C33.4477 28 33 27.5523 33 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 17C0 14.2386 2.23858 12 5 12H27C29.7614 12 32 14.2386 32 17V31C32 33.7614 29.7614 36 27 36H5C2.23858 36 0 33.7614 0 31V17ZM5 14C3.34315 14 2 15.3431 2 17V31C2 32.6569 3.34315 34 5 34H27C28.6569 34 30 32.6569 30 31V17C30 15.3431 28.6569 14 27 14H5Z" fill="black"/>
|
||||
<path d="M39.0346 25.2967L45.2594 14.2084C45.3516 14.0834 45.4899 14 45.6744 14C45.7205 14 45.7666 14 45.8127 14C46.0432 14.0834 46.1816 14.2501 46.1354 14.4585L44.6138 22.7539L50.5158 22.8373C50.7003 22.8373 50.8386 22.9207 50.9308 23.0457C51.0231 23.1708 51.0231 23.3375 50.9308 23.4626L44.0144 33.8006C43.8761 33.9673 43.6455 34.0507 43.4611 33.9673C43.2306 33.8839 43.1383 33.6755 43.1844 33.4671L45.121 25.8803L39.4495 25.8803C39.3112 25.8803 39.1268 25.797 39.0346 25.6719C38.9885 25.5885 38.9885 25.4218 39.0346 25.2967Z" fill="black"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,10 +1,10 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M36 21C36 20.4477 36.4477 20 37 20C37.5523 20 38 20.4477 38 21V27C38 27.5523 37.5523 28 37 28C36.4477 28 36 27.5523 36 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 17C3 14.2386 5.23858 12 8 12H30C32.7614 12 35 14.2386 35 17V31C35 33.7614 32.7614 36 30 36H8C5.23858 36 3 33.7614 3 31V17ZM8 14C6.34315 14 5 15.3431 5 17V31C5 32.6569 6.34315 34 8 34H30C31.6569 34 33 32.6569 33 31V17C33 15.3431 31.6569 14 30 14H8Z" fill="black"/>
|
||||
<path d="M7 18C7 16.8954 7.89543 16 9 16H11V32H9C7.89543 32 7 31.1046 7 30V18Z" fill="black"/>
|
||||
<path d="M12 16H16V32H12V16Z" fill="black"/>
|
||||
<path d="M22 16H26V32H22V16Z" fill="black"/>
|
||||
<path d="M17 16H21V32H17V16Z" fill="black"/>
|
||||
<path d="M27 16H29C30.1046 16 31 16.8954 31 18V30C31 31.1046 30.1046 32 29 32H27V16Z" fill="black"/>
|
||||
<path d="M40.0231 24.778L44.1729 18.1251C44.2344 18.05 44.3266 18 44.4496 18C44.4803 18 44.511 18 44.5418 18C44.6955 18.05 44.7877 18.1501 44.757 18.2751L43.7425 23.2524L47.6772 23.3024C47.8002 23.3024 47.8924 23.3524 47.9539 23.4274C48.0154 23.5025 48.0154 23.6025 47.9539 23.6775L43.3429 29.8803C43.2507 29.9804 43.097 30.0304 42.9741 29.9804C42.8204 29.9304 42.7589 29.8053 42.7896 29.6802L44.0807 25.1282L40.2997 25.1282C40.2075 25.1282 40.0845 25.0782 40.0231 25.0031C39.9923 24.9531 39.9923 24.8531 40.0231 24.778Z" fill="black"/>
|
||||
<svg width="51" height="48" viewBox="0 0 51 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M39.0346 25.2967L45.2594 14.2084C45.3516 14.0834 45.4899 14 45.6744 14C45.7205 14 45.7666 14 45.8127 14C46.0432 14.0834 46.1816 14.2501 46.1354 14.4585L44.6138 22.7539L50.5158 22.8373C50.7003 22.8373 50.8386 22.9207 50.9308 23.0457C51.0231 23.1708 51.0231 23.3375 50.9308 23.4626L44.0144 33.8006C43.8761 33.9673 43.6455 34.0507 43.4611 33.9673C43.2306 33.8839 43.1383 33.6755 43.1844 33.4671L45.121 25.8803L39.4495 25.8803C39.3112 25.8803 39.1268 25.797 39.0346 25.6719C38.9885 25.5885 38.9885 25.4218 39.0346 25.2967Z" fill="black"/>
|
||||
<path d="M33 21C33 20.4477 33.4477 20 34 20C34.5523 20 35 20.4477 35 21V27C35 27.5523 34.5523 28 34 28C33.4477 28 33 27.5523 33 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 17C0 14.2386 2.23858 12 5 12H27C29.7614 12 32 14.2386 32 17V31C32 33.7614 29.7614 36 27 36H5C2.23858 36 0 33.7614 0 31V17ZM5 14C3.34315 14 2 15.3431 2 17V31C2 32.6569 3.34315 34 5 34H27C28.6569 34 30 32.6569 30 31V17C30 15.3431 28.6569 14 27 14H5Z" fill="black"/>
|
||||
<path d="M4 18C4 16.8954 4.89543 16 6 16H8V32H6C4.89543 32 4 31.1046 4 30V18Z" fill="black"/>
|
||||
<path d="M9 16H13V32H9V16Z" fill="black"/>
|
||||
<path d="M19 16H23V32H19V16Z" fill="black"/>
|
||||
<path d="M14 16H18V32H14V16Z" fill="black"/>
|
||||
<path d="M24 16H26C27.1046 16 28 16.8954 28 18V30C28 31.1046 27.1046 32 26 32H24V16Z" fill="black"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,9 +1,9 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M36 21C36 20.4477 36.4477 20 37 20C37.5523 20 38 20.4477 38 21V27C38 27.5523 37.5523 28 37 28C36.4477 28 36 27.5523 36 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 17C3 14.2386 5.23858 12 8 12H30C32.7614 12 35 14.2386 35 17V31C35 33.7614 32.7614 36 30 36H8C5.23858 36 3 33.7614 3 31V17ZM8 14C6.34315 14 5 15.3431 5 17V31C5 32.6569 6.34315 34 8 34H30C31.6569 34 33 32.6569 33 31V17C33 15.3431 31.6569 14 30 14H8Z" fill="black"/>
|
||||
<path d="M7 18C7 16.8954 7.89543 16 9 16H11V32H9C7.89543 32 7 31.1046 7 30V18Z" fill="black"/>
|
||||
<path d="M12 16H16V32H12V16Z" fill="black"/>
|
||||
<path d="M22 16H25C25.5523 16 26 16.4477 26 17V31C26 31.5523 25.5523 32 25 32H22V16Z" fill="black"/>
|
||||
<path d="M17 16H21V32H17V16Z" fill="black"/>
|
||||
<path d="M40.0231 24.778L44.1729 18.1251C44.2344 18.05 44.3266 18 44.4496 18C44.4803 18 44.511 18 44.5418 18C44.6955 18.05 44.7877 18.1501 44.757 18.2751L43.7425 23.2524L47.6772 23.3024C47.8002 23.3024 47.8924 23.3524 47.9539 23.4274C48.0154 23.5025 48.0154 23.6025 47.9539 23.6775L43.3429 29.8803C43.2507 29.9804 43.097 30.0304 42.9741 29.9804C42.8204 29.9304 42.7589 29.8053 42.7896 29.6802L44.0807 25.1282L40.2997 25.1282C40.2075 25.1282 40.0845 25.0782 40.0231 25.0031C39.9923 24.9531 39.9923 24.8531 40.0231 24.778Z" fill="black"/>
|
||||
<svg width="51" height="48" viewBox="0 0 51 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M39.0346 25.2967L45.2594 14.2084C45.3516 14.0834 45.4899 14 45.6744 14C45.7205 14 45.7666 14 45.8127 14C46.0432 14.0834 46.1816 14.2501 46.1354 14.4585L44.6138 22.7539L50.5158 22.8373C50.7003 22.8373 50.8386 22.9207 50.9308 23.0457C51.0231 23.1708 51.0231 23.3375 50.9308 23.4626L44.0144 33.8006C43.8761 33.9673 43.6455 34.0507 43.4611 33.9673C43.2306 33.8839 43.1383 33.6755 43.1844 33.4671L45.121 25.8803L39.4495 25.8803C39.3112 25.8803 39.1268 25.797 39.0346 25.6719C38.9885 25.5885 38.9885 25.4218 39.0346 25.2967Z" fill="black"/>
|
||||
<path d="M33 21C33 20.4477 33.4477 20 34 20C34.5523 20 35 20.4477 35 21V27C35 27.5523 34.5523 28 34 28C33.4477 28 33 27.5523 33 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 17C0 14.2386 2.23858 12 5 12H27C29.7614 12 32 14.2386 32 17V31C32 33.7614 29.7614 36 27 36H5C2.23858 36 0 33.7614 0 31V17ZM5 14C3.34315 14 2 15.3431 2 17V31C2 32.6569 3.34315 34 5 34H27C28.6569 34 30 32.6569 30 31V17C30 15.3431 28.6569 14 27 14H5Z" fill="black"/>
|
||||
<path d="M4 18C4 16.8954 4.89543 16 6 16H8V32H6C4.89543 32 4 31.1046 4 30V18Z" fill="black"/>
|
||||
<path d="M9 16H13V32H9V16Z" fill="black"/>
|
||||
<path d="M19 16H22C22.5523 16 23 16.4477 23 17V31C23 31.5523 22.5523 32 22 32H19V16Z" fill="black"/>
|
||||
<path d="M14 16H18V32H14V16Z" fill="black"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,7 +1,7 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M36 21C36 20.4477 36.4477 20 37 20C37.5523 20 38 20.4477 38 21V27C38 27.5523 37.5523 28 37 28C36.4477 28 36 27.5523 36 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 17C3 14.2386 5.23858 12 8 12H30C32.7614 12 35 14.2386 35 17V31C35 33.7614 32.7614 36 30 36H8C5.23858 36 3 33.7614 3 31V17ZM8 14C6.34315 14 5 15.3431 5 17V31C5 32.6569 6.34315 34 8 34H30C31.6569 34 33 32.6569 33 31V17C33 15.3431 31.6569 14 30 14H8Z" fill="black"/>
|
||||
<path d="M7 18C7 16.8954 7.89543 16 9 16H11V32H9C7.89543 32 7 31.1046 7 30V18Z" fill="black"/>
|
||||
<path d="M12 16H15C15.5523 16 16 16.4477 16 17V31C16 31.5523 15.5523 32 15 32H12V16Z" fill="black"/>
|
||||
<path d="M40.0231 24.778L44.1729 18.1251C44.2344 18.05 44.3266 18 44.4496 18C44.4803 18 44.511 18 44.5418 18C44.6955 18.05 44.7877 18.1501 44.757 18.2751L43.7425 23.2524L47.6772 23.3024C47.8002 23.3024 47.8924 23.3524 47.9539 23.4274C48.0154 23.5025 48.0154 23.6025 47.9539 23.6775L43.3429 29.8803C43.2507 29.9804 43.097 30.0304 42.9741 29.9804C42.8204 29.9304 42.7589 29.8053 42.7896 29.6802L44.0807 25.1282L40.2997 25.1282C40.2075 25.1282 40.0845 25.0782 40.0231 25.0031C39.9923 24.9531 39.9923 24.8531 40.0231 24.778Z" fill="black"/>
|
||||
<svg width="51" height="48" viewBox="0 0 51 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M39.0346 25.2967L45.2594 14.2084C45.3516 14.0834 45.4899 14 45.6744 14C45.7205 14 45.7666 14 45.8127 14C46.0432 14.0834 46.1816 14.2501 46.1354 14.4585L44.6138 22.7539L50.5158 22.8373C50.7003 22.8373 50.8386 22.9207 50.9308 23.0457C51.0231 23.1708 51.0231 23.3375 50.9308 23.4626L44.0144 33.8006C43.8761 33.9673 43.6455 34.0507 43.4611 33.9673C43.2306 33.8839 43.1383 33.6755 43.1844 33.4671L45.121 25.8803L39.4495 25.8803C39.3112 25.8803 39.1268 25.797 39.0346 25.6719C38.9885 25.5885 38.9885 25.4218 39.0346 25.2967Z" fill="black"/>
|
||||
<path d="M33 21C33 20.4477 33.4477 20 34 20C34.5523 20 35 20.4477 35 21V27C35 27.5523 34.5523 28 34 28C33.4477 28 33 27.5523 33 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 17C0 14.2386 2.23858 12 5 12H27C29.7614 12 32 14.2386 32 17V31C32 33.7614 29.7614 36 27 36H5C2.23858 36 0 33.7614 0 31V17ZM5 14C3.34315 14 2 15.3431 2 17V31C2 32.6569 3.34315 34 5 34H27C28.6569 34 30 32.6569 30 31V17C30 15.3431 28.6569 14 27 14H5Z" fill="black"/>
|
||||
<path d="M4 18C4 16.8954 4.89543 16 6 16H8V32H6C4.89543 32 4 31.1046 4 30V18Z" fill="black"/>
|
||||
<path d="M9 16H12C12.5523 16 13 16.4477 13 17V31C13 31.5523 12.5523 32 12 32H9V16Z" fill="black"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,8 +1,8 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M36 21C36 20.4477 36.4477 20 37 20C37.5523 20 38 20.4477 38 21V27C38 27.5523 37.5523 28 37 28C36.4477 28 36 27.5523 36 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 17C3 14.2386 5.23858 12 8 12H30C32.7614 12 35 14.2386 35 17V31C35 33.7614 32.7614 36 30 36H8C5.23858 36 3 33.7614 3 31V17ZM8 14C6.34315 14 5 15.3431 5 17V31C5 32.6569 6.34315 34 8 34H30C31.6569 34 33 32.6569 33 31V17C33 15.3431 31.6569 14 30 14H8Z" fill="black"/>
|
||||
<path d="M7 18C7 16.8954 7.89543 16 9 16H11V32H9C7.89543 32 7 31.1046 7 30V18Z" fill="black"/>
|
||||
<path d="M12 16H16V32H12V16Z" fill="black"/>
|
||||
<path d="M17 16H20C20.5523 16 21 16.4477 21 17V31C21 31.5523 20.5523 32 20 32H17V16Z" fill="black"/>
|
||||
<path d="M40.0231 24.778L44.1729 18.1251C44.2344 18.05 44.3266 18 44.4496 18C44.4803 18 44.511 18 44.5418 18C44.6955 18.05 44.7877 18.1501 44.757 18.2751L43.7425 23.2524L47.6772 23.3024C47.8002 23.3024 47.8924 23.3524 47.9539 23.4274C48.0154 23.5025 48.0154 23.6025 47.9539 23.6775L43.3429 29.8803C43.2507 29.9804 43.097 30.0304 42.9741 29.9804C42.8204 29.9304 42.7589 29.8053 42.7896 29.6802L44.0807 25.1282L40.2997 25.1282C40.2075 25.1282 40.0845 25.0782 40.0231 25.0031C39.9923 24.9531 39.9923 24.8531 40.0231 24.778Z" fill="black"/>
|
||||
<svg width="51" height="48" viewBox="0 0 51 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M39.0346 25.2967L45.2594 14.2084C45.3516 14.0834 45.4899 14 45.6744 14C45.7205 14 45.7666 14 45.8127 14C46.0432 14.0834 46.1816 14.2501 46.1354 14.4585L44.6138 22.7539L50.5158 22.8373C50.7003 22.8373 50.8386 22.9207 50.9308 23.0457C51.0231 23.1708 51.0231 23.3375 50.9308 23.4626L44.0144 33.8006C43.8761 33.9673 43.6455 34.0507 43.4611 33.9673C43.2306 33.8839 43.1383 33.6755 43.1844 33.4671L45.121 25.8803L39.4495 25.8803C39.3112 25.8803 39.1268 25.797 39.0346 25.6719C38.9885 25.5885 38.9885 25.4218 39.0346 25.2967Z" fill="black"/>
|
||||
<path d="M33 21C33 20.4477 33.4477 20 34 20C34.5523 20 35 20.4477 35 21V27C35 27.5523 34.5523 28 34 28C33.4477 28 33 27.5523 33 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 17C0 14.2386 2.23858 12 5 12H27C29.7614 12 32 14.2386 32 17V31C32 33.7614 29.7614 36 27 36H5C2.23858 36 0 33.7614 0 31V17ZM5 14C3.34315 14 2 15.3431 2 17V31C2 32.6569 3.34315 34 5 34H27C28.6569 34 30 32.6569 30 31V17C30 15.3431 28.6569 14 27 14H5Z" fill="black"/>
|
||||
<path d="M4 18C4 16.8954 4.89543 16 6 16H8V32H6C4.89543 32 4 31.1046 4 30V18Z" fill="black"/>
|
||||
<path d="M9 16H13V32H9V16Z" fill="black"/>
|
||||
<path d="M14 16H17C17.5523 16 18 16.4477 18 17V31C18 31.5523 17.5523 32 17 32H14V16Z" fill="black"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,6 +1,6 @@
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M36 21C36 20.4477 36.4477 20 37 20C37.5523 20 38 20.4477 38 21V27C38 27.5523 37.5523 28 37 28C36.4477 28 36 27.5523 36 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 17C3 14.2386 5.23858 12 8 12H30C32.7614 12 35 14.2386 35 17V31C35 33.7614 32.7614 36 30 36H8C5.23858 36 3 33.7614 3 31V17ZM8 14C6.34315 14 5 15.3431 5 17V31C5 32.6569 6.34315 34 8 34H30C31.6569 34 33 32.6569 33 31V17C33 15.3431 31.6569 14 30 14H8Z" fill="black"/>
|
||||
<path d="M7 18C7 16.8954 7.89543 16 9 16H10C10.5523 16 11 16.4477 11 17V31C11 31.5523 10.5523 32 10 32H9C7.89543 32 7 31.1046 7 30V18Z" fill="black"/>
|
||||
<path d="M40.0231 24.778L44.1729 18.1251C44.2344 18.05 44.3266 18 44.4496 18C44.4803 18 44.511 18 44.5418 18C44.6955 18.05 44.7877 18.1501 44.757 18.2751L43.7425 23.2524L47.6772 23.3024C47.8002 23.3024 47.8924 23.3524 47.9539 23.4274C48.0154 23.5025 48.0154 23.6025 47.9539 23.6775L43.3429 29.8803C43.2507 29.9804 43.097 30.0304 42.9741 29.9804C42.8204 29.9304 42.7589 29.8053 42.7896 29.6802L44.0807 25.1282L40.2997 25.1282C40.2075 25.1282 40.0845 25.0782 40.0231 25.0031C39.9923 24.9531 39.9923 24.8531 40.0231 24.778Z" fill="black"/>
|
||||
<svg width="51" height="48" viewBox="0 0 51 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M39.0346 25.2967L45.2594 14.2084C45.3516 14.0834 45.4899 14 45.6744 14C45.7205 14 45.7666 14 45.8127 14C46.0432 14.0834 46.1816 14.2501 46.1354 14.4585L44.6138 22.7539L50.5158 22.8373C50.7003 22.8373 50.8386 22.9207 50.9308 23.0457C51.0231 23.1708 51.0231 23.3375 50.9308 23.4626L44.0144 33.8006C43.8761 33.9673 43.6455 34.0507 43.4611 33.9673C43.2306 33.8839 43.1383 33.6755 43.1844 33.4671L45.121 25.8803L39.4495 25.8803C39.3112 25.8803 39.1268 25.797 39.0346 25.6719C38.9885 25.5885 38.9885 25.4218 39.0346 25.2967Z" fill="black"/>
|
||||
<path d="M33 21C33 20.4477 33.4477 20 34 20C34.5523 20 35 20.4477 35 21V27C35 27.5523 34.5523 28 34 28C33.4477 28 33 27.5523 33 27V21Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 17C0 14.2386 2.23858 12 5 12H27C29.7614 12 32 14.2386 32 17V31C32 33.7614 29.7614 36 27 36H5C2.23858 36 0 33.7614 0 31V17ZM5 14C3.34315 14 2 15.3431 2 17V31C2 32.6569 3.34315 34 5 34H27C28.6569 34 30 32.6569 30 31V17C30 15.3431 28.6569 14 27 14H5Z" fill="black"/>
|
||||
<path d="M4 18C4 16.8954 4.89543 16 6 16H7C7.55228 16 8 16.4477 8 17V31C8 31.5523 7.55228 32 7 32H6C4.89543 32 4 31.1046 4 30V18Z" fill="black"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -15,6 +15,7 @@ const createFreshdeskTicket = async ({
|
||||
subject,
|
||||
description: tmpDescription,
|
||||
serialNumber,
|
||||
deviceID,
|
||||
attachments,
|
||||
product,
|
||||
}: FreshdeskTicketData): Promise<AxiosResponse<unknown>> => {
|
||||
@@ -46,6 +47,9 @@ const createFreshdeskTicket = async ({
|
||||
if (serialNumber) {
|
||||
formData.append("custom_fields[cf_serial_number_imei]", serialNumber)
|
||||
}
|
||||
if (deviceID) {
|
||||
formData.append("custom_fields[cf_deviceid]", deviceID)
|
||||
}
|
||||
|
||||
attachments.forEach((attachment) => {
|
||||
formData.append("attachments[]", attachment)
|
||||
|
||||
@@ -21,6 +21,7 @@ export interface FreshdeskTicketData {
|
||||
subject: string
|
||||
description?: string
|
||||
serialNumber?: string
|
||||
deviceID?: string
|
||||
attachments: File[]
|
||||
product: FreshdeskTicketProduct
|
||||
}
|
||||
|
||||
@@ -38,6 +38,9 @@ const payload: SendTicketPayload = {
|
||||
}
|
||||
|
||||
const state: Partial<RootState & ReduxRootState> = {
|
||||
activeDeviceRegistry: {
|
||||
activeDeviceId: "",
|
||||
},
|
||||
device: {
|
||||
data: undefined,
|
||||
deviceType: DeviceType.MuditaPure,
|
||||
@@ -84,7 +87,8 @@ describe("async `sendTicket` ", () => {
|
||||
expect(sendTicketRequest).toHaveBeenCalledWith({
|
||||
email: "",
|
||||
subject: "Error",
|
||||
serialNumber: undefined,
|
||||
serialNumber: "",
|
||||
deviceID: undefined,
|
||||
description: "Hello<br/><br/>World<br/>...<br/>Bye",
|
||||
product: FreshdeskTicketProduct.Pure,
|
||||
})
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
import sendTicketRequest, {
|
||||
CreateBugTicketResponseStatus,
|
||||
} from "Core/contact-support/requests/send-ticket.request"
|
||||
import { activeDeviceIdSelector } from "active-device-registry/feature"
|
||||
import { AppError } from "Core/core/errors"
|
||||
import logger from "Core/__deprecated__/main/utils/logger"
|
||||
import { ReduxRootState, RootState } from "Core/__deprecated__/renderer/store"
|
||||
@@ -26,13 +27,18 @@ export const sendTicket = createAsyncThunk<undefined, SendTicketPayload>(
|
||||
ContactSupportEvent.SendTicket,
|
||||
async ({ email, description }, { getState, rejectWithValue }) => {
|
||||
const state = getState() as RootState & ReduxRootState
|
||||
const serialNumber = state.device.data?.serialNumber
|
||||
const activeDeviceId = activeDeviceIdSelector(state)
|
||||
const serialNumber = state.device.data?.serialNumber ?? activeDeviceId
|
||||
const deviceID = activeDeviceId
|
||||
? state.genericViews.devices[activeDeviceId]?.apiConfig?.deviceID
|
||||
: undefined
|
||||
const product = mapDeviceTypeToProduct(state.device.deviceType)
|
||||
|
||||
const response = await sendTicketRequest({
|
||||
email,
|
||||
description: (description || "").replace(/\r\n|\r|\n/g, "<br/>"),
|
||||
serialNumber,
|
||||
deviceID,
|
||||
subject: `Error`,
|
||||
product,
|
||||
})
|
||||
|
||||
@@ -19,6 +19,6 @@ export enum ProductID {
|
||||
export enum VendorID {
|
||||
MuditaPure = "3310",
|
||||
MuditaHarmony = "3310",
|
||||
MuditaKompaktHex = "0e8d",
|
||||
MuditaKompaktDec = "3725",
|
||||
MuditaKompaktHex = "3310",
|
||||
MuditaKompaktDec = "13072",
|
||||
}
|
||||
|
||||
@@ -83,6 +83,7 @@ const ConnectingLoaderModal: FunctionComponent = () => {
|
||||
if (
|
||||
![
|
||||
URL_DISCOVERY_DEVICE.root,
|
||||
URL_DISCOVERY_DEVICE.availableDeviceListModal,
|
||||
URL_MAIN.dataMigration,
|
||||
URL_MAIN.dataMigrationKompakt,
|
||||
].includes(pathname) &&
|
||||
|
||||
@@ -41,7 +41,7 @@ export interface Props {
|
||||
onTroubleshooting?: VoidFunction
|
||||
}
|
||||
|
||||
const deviceNames = ["Harmony 1", "Harmony 2", "Pure"]
|
||||
const deviceNames = ["Harmony 1", "Harmony 2", "Pure", "Kompakt"]
|
||||
|
||||
const OnboardingUI: FunctionComponent<Props> = ({
|
||||
onCancel = noop,
|
||||
|
||||
@@ -18,7 +18,7 @@ test("License component renders", () => {
|
||||
})
|
||||
|
||||
test("render title correctly", () => {
|
||||
const titleText = "Mudita Center Software – Terms of Use"
|
||||
const titleText = "Notice for Mudita Center"
|
||||
const { getByTestId } = renderer()
|
||||
expect(getByTestId(LicenseComponentTestIds.Title)).toHaveTextContent(
|
||||
titleText
|
||||
|
||||
@@ -12,10 +12,7 @@ import {
|
||||
WindowHeader,
|
||||
LightText,
|
||||
LightTextNested,
|
||||
BoldText,
|
||||
GridWrapper,
|
||||
GridItem,
|
||||
GridBoldItem,
|
||||
WindowTitle,
|
||||
} from "Core/settings/components/about/shared"
|
||||
|
||||
export const PrivacyPolicyUI: FunctionComponent = () => (
|
||||
@@ -27,425 +24,272 @@ export const PrivacyPolicyUI: FunctionComponent = () => (
|
||||
Mudita Center Privacy Policy
|
||||
</WindowHeader>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
We hereby inform that we process your personal data. Details regarding
|
||||
this can be found below.
|
||||
</LightText>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Who is the controller of your personal data and who can you contact about
|
||||
it?
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. The Controller of your personal data is <b>Mudita sp. z o.o.</b> with
|
||||
its registered office in Warsaw at ul. Jana Czeczota 6, 02-607 Warsaw,
|
||||
entered into the Register of Entrepreneurs held by the Regional Court for
|
||||
the Capital City of Warsaw, 12th Commercial Division of the National Court
|
||||
Register, under KRS [National Court Register Number] 0000467620, NIP
|
||||
[Polish Taxpayer Identification Number] 5252558282, REGON [National
|
||||
Business Registration Number] 146767613, share capital:600.000,00 zł.,
|
||||
hereinafter referred to as “<b>Controller or Mudita</b>”.
|
||||
This document explains in particular what personal data we collect, how we
|
||||
use it, and what rights you have regarding its processing. Our goal is to
|
||||
ensure transparency and clarity on privacy matters so that you can feel
|
||||
safe while using our products and software along with all content,
|
||||
updates, related documentation, provided by Mudita and distributed under
|
||||
the name "Mudita Center" (hereinafter:{" "}
|
||||
<b>"Mudita Center"</b>).
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. In cases regarding the protection of your personal data and the
|
||||
exercising your rights you can contact us by e-mail: office@mudita.com or
|
||||
in writing to our address indicated in clause 1.
|
||||
</LightText>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
For what purposes and on what grounds do we process your personal data?
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. Your personal data is processed for the following purposes:
|
||||
</LightText>
|
||||
<GridWrapper>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
the purpose of the processing
|
||||
</GridBoldItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
legal basis for the processing
|
||||
</GridBoldItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Mudita's software users
|
||||
</GridBoldItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}></GridBoldItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
sharing and enabling the use of the offered software
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
indispensability to perform the agreement
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (b) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
analyze of data provided
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
your consent
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (a) of the GDPR)
|
||||
</GridItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Mudita's website and forum users
|
||||
</GridBoldItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}></GridBoldItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
necessary cookies
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
our legitimate interest
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (f) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
marketing, functional, analytical cookies or our partners cookies
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
your consent
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (a) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
transferring marketing and promotional information including our
|
||||
partners
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
your consent
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (a) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
performance of the agreement concluded with us (forum users)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
indispensability to perform the agreement
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (b) of the GDPR)
|
||||
</GridItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
sales
|
||||
</GridBoldItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}></GridBoldItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
leading to the conclusion of the agreement with us
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
indispensability to perform the agreement
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (b) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
performance of the agreement concluded with us and handling complaints
|
||||
concerning the agreements concluded with us
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
indispensability to perform the agreement
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (b) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
performance of additional services
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
our legitimate interest
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (f) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
transferring marketing and promotional information including our
|
||||
partners
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
our legitimate interest
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (f) of the GDPR)
|
||||
<br />
|
||||
<br /> or your consent
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (a) of the GDPR)
|
||||
</GridItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
questions for us
|
||||
</GridBoldItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}></GridBoldItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
responding to the questions sent via: contact form, forum, email or
|
||||
phone number
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
our legitimate interest
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (f) of the GDPR)
|
||||
</GridItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
general
|
||||
</GridBoldItem>
|
||||
<GridBoldItem displayStyle={TextDisplayStyle.Paragraph4}></GridBoldItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
analytical purposes (e.g. selection of the services to the needs of our
|
||||
clients, optimization of our products / services based on your comments
|
||||
on this topic, optimalization of the service processes based on the
|
||||
process of sales service and after-sales service, including complaint,
|
||||
clients' satisfaction survey and determining of the quality of our
|
||||
service)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
our legitimate interest
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (f) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
possible establishment, investigation or defence against claims (i.e.
|
||||
evidence purposes)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
our legitimate interest
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (f) of the GDPR)
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
storage of accounting documents
|
||||
</GridItem>
|
||||
<GridItem displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
our obligation to keep accounting documents under tax law
|
||||
<br />
|
||||
<br />
|
||||
(Article 6 (1) (c) of the GDPR in conjunction with Article 86 § 1 of the
|
||||
Tax Ordinance Act)
|
||||
</GridItem>
|
||||
</GridWrapper>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Who has access to your personal data?
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4. We may share your personal data with the following categories of
|
||||
entities:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
a) employees and associates,
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
b) related undertakings and cooperating entities, including our partners,
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
c) entities supporting our activity, including but not limited to legal,
|
||||
accounting, IT, logistics, marketing terms, etc.
|
||||
</LightTextNested>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
How long is your personal data stored?
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
5. Your personal data is processed:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
a) in relation to conclusion and performance of the agreement or providing
|
||||
other services (using Mudita’s website/forum, software users, products
|
||||
sales, necessary cookies) - for the time necessary to perform the
|
||||
contract;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
b) provided under your consent (cookies files or marketing data) - unless
|
||||
you withdraw your consent or further processing will be pointless;
|
||||
contract;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
c) related to answering to your inquiries - for the time necessary to
|
||||
perform the obligation and for the time necessary to achieve our goals;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
d) for evidence purposes to establish the existence of claims, their
|
||||
pursuit or defence against them - until the end of the limitation period
|
||||
for possible claims in this respect (this period is determined by the
|
||||
provisions of the Polish Civil Code), and in the case of its use in public
|
||||
legal proceedings until the time when after their final termination,
|
||||
extraordinary appeal measures are not be applicable any more (such period
|
||||
shall be determined by the provisions of the Polish Code of Civil
|
||||
Procedure);
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
e) in connection with the storage of accounting documentation - until the
|
||||
expiry of the limitation period for the tax obligation related to the
|
||||
relevant transaction (this period is determined by the provisions of the
|
||||
Tax Ordinance Act);
|
||||
</LightTextNested>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
What rights do you have in relation to the processing of your personal
|
||||
data?
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
6. You shall have the right:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
a) to access to your data and receive a copy of it;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
b) to rectify (correct) your data;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
c) to delete data: if, in your opinion, there are no grounds for us to
|
||||
process your data, you can request us to delete it;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
d) to limit data processing: you can request that we limit the processing
|
||||
of your personal data only to their storage or performance of the
|
||||
activities agreed with you, if in your opinion we have incorrect data
|
||||
about you or we process it unreasonably; or you do not want us to delete
|
||||
it because you need it to establish, pursue or defend claims; or for the
|
||||
duration of your objection to data processing;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
e) to object to the processing of data: objection due to special situation
|
||||
- you shall have the right to object to the processing of your data on the
|
||||
basis of a legitimate interest for purposes other than direct marketing,
|
||||
as well as when the processing is necessary for us to fulfil a task
|
||||
carried out in the public interest or the exercising public authority
|
||||
entrusted to us, then you should indicate your special situation, which,
|
||||
in your opinion, justifies the our discontinuation of the processing
|
||||
covered by the objection, we will stop processing your data for such
|
||||
purposes, unless we demonstrate that the grounds for processing your data
|
||||
override your rights or that your data is necessary for us to establish,
|
||||
pursue or defend claims;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
f) to transfer data;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
g) to lodge a complaint with the supervisory authority: if you think that
|
||||
we process your data unlawfully, you can lodge a complaint to the
|
||||
supervisory authority responsible for overseeing compliance with the
|
||||
provisions on the protection of personal data (the President of the Office
|
||||
for Personal Data Protection);
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
h) to withdraw your consent to the processing of personal data: at any
|
||||
time you shall have the right to withdraw your consent to the processing
|
||||
of your personal data, which we process on the basis of your consent, the
|
||||
withdrawal of consent will not influence the legal compliance of the
|
||||
processing which was performed on the basis of your consent before its
|
||||
withdrawal.
|
||||
</LightTextNested>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
How to exercise your personal data rights?
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7. In order to exercise your rights, send a request to the contact details
|
||||
indicated in clause 1. Before exercising your rights you shall remember
|
||||
that we will have to make sure it is you, that is, to appropriately
|
||||
identify you.
|
||||
</LightText>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Is providing personal data mandatory?
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
8. Concluding the agreement with us is voluntary. However, providing
|
||||
personal data in connection with the agreement is a condition for its
|
||||
conclusion and then performance - without providing your personal data, it
|
||||
is not possible to conclude the agreement with us.
|
||||
</LightText>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>Cookies</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9. Cookies are tiny text files that are downloaded to your computer, to
|
||||
improve your experience during using our website. They serve also many
|
||||
functions. They are very important for the proper operation of most
|
||||
websites, including those where we log in to our account. These files
|
||||
identify the computer and the user, they are not malicious programs or
|
||||
associated with any private data.
|
||||
We make every effort to minimize the collection of personal data. Whenever
|
||||
possible and economically justified, we use technologies that do not
|
||||
require us to store user information. However, if data collection is
|
||||
necessary for the proper functioning of our products and services, we do
|
||||
so in compliance with applicable regulations (e.g. Regulation (EU)
|
||||
2016/679 - General Data Protection Regulation / <b>“GDPR”</b>), with a
|
||||
valid legal basis, and in accordance with industry best practices for
|
||||
privacy protection.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
We use cookies to improve your experience while you navigate through the
|
||||
our websites accordingly to our cookies policy. Out of these cookies, the
|
||||
cookies that are categorized as necessary are stored on your browser as
|
||||
they as essential for the working of basic functionalities of the our
|
||||
websites.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
We also use marketing, functional, analytical or third-party cookies that
|
||||
help us analyze and understand how you use our websites, to store user
|
||||
preferences and provide them with content and advertisements that are
|
||||
relevant to you. These cookies will only be stored on your browser with
|
||||
your consent to do so. You also have the option to opt-out of these
|
||||
cookies. But opting out of some of these cookies may have an effect on
|
||||
your browsing experience.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
You can express your consent or objection to the use of cookies after
|
||||
entering our website. Before granting your consent, you can read the full
|
||||
list and details about cookies that we use on our website.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Details about settings the rules for the use of cookies, including
|
||||
disabling cookies, by the browser are available at the links below:
|
||||
</LightText>
|
||||
<ul>
|
||||
<li>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Internet Explorer:{" "}
|
||||
<a
|
||||
href={`https://support.microsoft.com/pl-pl/help/17442/windows-internet-explorer-delete-manage-cookies`}
|
||||
>
|
||||
https://support.microsoft.com/pl-pl/help/17442/windows-internet-explorer-delete-manage-cookies
|
||||
</a>
|
||||
</LightText>
|
||||
</li>
|
||||
<li>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Mozilla Firefox:{" "}
|
||||
<a href={`http://support.mozilla.org/pl/kb/ciasteczka`}>
|
||||
http://support.mozilla.org/pl/kb/ciasteczka
|
||||
</a>
|
||||
</LightText>
|
||||
</li>
|
||||
<li>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Google Chrome:{" "}
|
||||
<a
|
||||
href={`http://support.google.com/chrome/bin/answer.py?hl=pl&answer=95647`}
|
||||
>
|
||||
http://support.google.com/chrome/bin/answer.py?hl=pl&answer=95647
|
||||
</a>
|
||||
</LightText>
|
||||
</li>
|
||||
<li>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Opera:{" "}
|
||||
<a href={`http://help.opera.com/Windows/12.10/pl/cookies.html`}>
|
||||
http://help.opera.com/Windows/12.10/pl/cookies.html
|
||||
</a>
|
||||
</LightText>
|
||||
</li>
|
||||
<li>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Safari:{" "}
|
||||
<a href={`https://support.apple.com/kb/PH5042?locale=en-GB`}>
|
||||
https://support.apple.com/kb/PH5042?locale=en-GB
|
||||
</a>
|
||||
</LightText>
|
||||
</li>
|
||||
</ul>
|
||||
<BoldText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Additional information
|
||||
</BoldText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10. Controller does not share and has no intention to share client's
|
||||
personal data with third country or international organisation. Only
|
||||
except may be the United States (based on standard contractual clauses
|
||||
according to Commission Implementing Decision (EU) 2021/914 of 4 June 2021
|
||||
on standard contractual clauses for the transfer of personal data to third
|
||||
countries pursuant to Regulation (EU) 2016/679 of the European Parliament
|
||||
and of the Council), which results from the fact, that personal data may
|
||||
be uploaded to the servers of applications, software and IT services
|
||||
providers, located in the United States.
|
||||
We encourage you to review this Privacy Policy and contact us if you have
|
||||
any questions or concerns.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
1. ABOUT DOCUMENT
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Please note that this Privacy Policy applies only to the processing of
|
||||
personal data related to the use of the Mudita Center.{" "}
|
||||
<b>
|
||||
It does not cover the processing of personal data related to your use of
|
||||
Mudita devices
|
||||
</b>
|
||||
(e.g., Pure, Kompakt, Harmony). Information in this regard is available
|
||||
within the legal documents of the respective product (e.g. “About Phone”
|
||||
tab”).
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Providing personal data is voluntary but necessary to fulfill the purposes
|
||||
outlined in section 4 below.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
2. DATA CONTROLLER
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
The controller of personal data processed in connection with your use of
|
||||
the Mudita Center is Mudita sp. z o.o. with its registered office in
|
||||
Warsaw (02-607), Jana Czeczota 6 street, KRS no: 0000467620, Tax
|
||||
Identification Number: 5252558282 (hereinafter: <b>"Mudita"</b>{" "}
|
||||
or <b>"We"</b>).
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
3. CONTACT
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
If you have any questions regarding the processing of your personal data,
|
||||
you can contact Mudita via email at office@mudita.com or by writing to the
|
||||
address specified in section 2 above.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
We strive to respond promptly to every message. However, in more complex
|
||||
cases, the process may take longer. Additionally, Mudita may request
|
||||
further information to properly verify your identity, provide a
|
||||
comprehensive response, or, in special situations, inform you that more
|
||||
time is needed to address your inquiry.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
4. PURPOSES AND LEGAL BASIS FOR THE PROCESSING OF YOUR PERSONAL DATA /
|
||||
RETENTION PERIOD
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4.1. <b>Proper Functioning of the Mudita Center / Services</b>
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Purpose]</b> In order to properly provide electronic services
|
||||
(functioning of Mudita Center and provide services through it), including
|
||||
in particular technical support and bug fixes, informing you about
|
||||
available software updates, and processing statutory claims, we may
|
||||
process your personal data.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Categories of Data]</b> In such cases, Mudita may process, in
|
||||
particular, data contained in system logs, the IMEI number, the
|
||||
device's serial number, and other identifiers specific to the
|
||||
software / application, network, or device (e.g., device ID).
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Legal Basis / Retention Period]</b> The processing of data is
|
||||
necessary to take action at your request before entering into a contract
|
||||
or for its performance (Article 6(1)(b) of the GDPR) and to fulfill our
|
||||
legitimate interests, particularly in continuously improving our products
|
||||
and services (Article 6(1)(f) of the GDPR). Mudita may process this data
|
||||
for the period necessary to achieve the above-mentioned purposes, and in
|
||||
particular, this period will not exceed the duration of the use (and
|
||||
installation) of the Mudita Center in the case of the legal basis under
|
||||
Article 6(1)(b) of the GDPR. In the case of the legal basis under Article
|
||||
6(1)(f), the processing will continue until the legitimate interest no
|
||||
longer exists or until an effective objection is raised.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4.2. <b>Fraud Prevention / Claim Pursuit / Defending against claims </b>
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Purpose]</b> We strive to detect and prevent fraud, unauthorized use
|
||||
of our software / application (Mudita Center), violations of our rights,
|
||||
etc., as well as handle any reports regarding legal violations.
|
||||
Additionally, we may take actions related to asserting and pursuing claims
|
||||
or defending against claims brought against Mudita.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Categories of Data]</b> To effectively achieve these purposes, we may
|
||||
process personal data, including, in particular, data contained in system
|
||||
logs, the IMEI number, the device's serial number, and other
|
||||
identifiers specific to the software / application, network, or device
|
||||
(e.g., device ID).
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Legal Basis / Retention Period]</b> The processing of data for the
|
||||
above purposes is necessary to pursue Mudita's legitimate interest in
|
||||
asserting or defending legal claims, as well as preventing fraud and
|
||||
misuse (Article 6(1)(f) of the GDPR). Mudita may process the data for the
|
||||
period necessary to achieve these purposes, particularly for the duration
|
||||
of the limitation periods for claims applicable to or against Mudita, as
|
||||
provided by law.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4.3. <b>Contact</b>
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Purpose]</b> In case of any inquiries regarding Mudita Center, you
|
||||
have the option to contact Mudita. In such situations, the personal data
|
||||
of the user initiating contact may be processed.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Categories of Data]</b> In such cases, Mudita may process the
|
||||
user's contact details and any other personal data provided by the
|
||||
user during the communication.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
<b>[Legal Basis / Retention Period]</b> The legal basis for processing
|
||||
your personal data for this purpose is the Controller's legitimate
|
||||
interest – Article 6(1)(f) of the GDPR. Personal data will be processed
|
||||
for the period necessary to review your inquiry and provide a response.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
5. DATA RECIPIENTS
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Your personal data may be shared or entrusted by Mudita to third parties
|
||||
to the extent necessary to achieve the intended purposes. The recipients
|
||||
of personal data may include, in particular: <b>(i)</b> entities
|
||||
affiliated with us, <b>(ii)</b> IT services and support providers{" "}
|
||||
<b>(iii)</b> professional advisors, such as lawyers, auditors,
|
||||
accountants, and <b>(iv)</b> other entities cooperating with Mudita, if
|
||||
justified or necessary for the purposes of data processing.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Mudita may also share your personal data to local or foreign public
|
||||
administration authorities and law enforcement agencies if required by
|
||||
law. These authorities may be located both in your country of residence
|
||||
and abroad.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
6. AUTOMATED INDIVIDUAL DECISION-MAKING / PROFILING
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
No decisions based on automated processing of personal data, including
|
||||
profiling, will be made concerning you.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
7. RIGHTS OF THE DATA SUBJECTS
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
In connection with the processing of your personal data, you have the
|
||||
following rights under applicable laws:
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
a. The right to access your data, including obtaining a copy of your data,
|
||||
<br />
|
||||
b. The right to request rectification of your data,
|
||||
<br />
|
||||
c. The right to restrict the processing of your data,
|
||||
<br />
|
||||
d. The right to request the deletion of your data (in certain situations),
|
||||
<br />
|
||||
e. The right to data portability for data you have provided and that is
|
||||
processed automatically based on your consent or a contract, e.g., to
|
||||
another controller,
|
||||
<br />
|
||||
f. The right to object to the processing of personal data – to the extent
|
||||
that processing is based on the legitimate interest of the controller or a
|
||||
third party.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
If your data is processed based on consent, you have the right to withdraw
|
||||
your consent to the extent that the data is processed on this basis. The
|
||||
withdrawal of consent does not affect the lawfulness of processing carried
|
||||
out before its withdrawal.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
The scope of each of these rights and the situations in which they can be
|
||||
exercised are determined by legal regulations. The specific right you may
|
||||
exercise will depend, among other factors, on the purpose and legal basis
|
||||
of the data processing. To exercise the above rights, you should contact
|
||||
Mudita in the manner specified in section 3. We will respond to your
|
||||
inquiries within the timeframes provided by applicable law.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
If you have concerns about how Mudita processes your personal data, you
|
||||
may file a complaint with the appropriate data protection authority. A
|
||||
list of such authorities is available at this link. The jurisdiction of
|
||||
authorities is governed by the applicable law.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
8. TRANSFER OF PERSONAL DATA TO THIRD COUNTRIES
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Your personal data will generally be processed within the EEA. However,
|
||||
data may be transferred to Mudita's partners who process it outside
|
||||
the EEA, but only to the extent necessary for Mudita’s cooperation with
|
||||
these partners.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
In such cases, Mudita takes all possible measures to ensure the security
|
||||
of the transferred personal data, including, in particular, transferring
|
||||
personal data to countries that the European Commission has determined, by
|
||||
decision, to provide an adequate level of protection. In the absence of
|
||||
such a decision, Mudita ensures the security of personal data through
|
||||
safeguards such as the standard contractual clauses approved by the
|
||||
European Commission.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
For more information about the applied safeguards, including obtaining a
|
||||
copy of them, you may contact Mudita using the methods indicated in
|
||||
section 3 above.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
9. OTHER INFORMATIONS ABOUR YOUR PRIVACY / BACKUP / MANAGE MUDITA DEVICE
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
The data stored on your device that is backed up using Mudita Center
|
||||
(e.g., contact list, call log, messages, alarms, notes, etc.) is not
|
||||
processed by us, and the backup is performed locally on the device where
|
||||
Mudita Center is installed. Similarly, when using other features of Mudita
|
||||
Center designed to manage your Mudita device (e.g., editing contacts,
|
||||
managing sounds, etc.), Mudita does not process this data.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
In connection with your use of Mudita Center, besides the data specified
|
||||
in section 4, we may process also other information (e.g., summary records
|
||||
of Mudita Center or Mudita device updates).{" "}
|
||||
<b>
|
||||
However, this data is collected in a way that prevents the
|
||||
identification of specific users
|
||||
</b>{" "}
|
||||
(which means that these are not personal data),{" "}
|
||||
<b>including through data aggregation.</b>
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
10. FINAL PROVISIONS
|
||||
</WindowTitle>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
This version of the Privacy Policy is effective as of 14.03.2025.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
In connection with the Mudita’s development and application updates,
|
||||
Mudita reserves the right to amend this Privacy Policy.
|
||||
</LightTextNested>
|
||||
</WindowContainer>
|
||||
)
|
||||
|
||||
@@ -22,356 +22,651 @@ export const TermsOfServiceUI: FunctionComponent = () => (
|
||||
displayStyle={TextDisplayStyle.Headline2}
|
||||
data-testid={TermsOfServiceComponentTestIds.Title}
|
||||
>
|
||||
Mudita Center Terms of Use
|
||||
Mudita Center Terms of Service
|
||||
</WindowHeader>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Version dated: 14.03.2025
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
The User should carefully review this document. It includes in particular
|
||||
the terms of use for Mudita Center, licences, Updates, the choice of
|
||||
governing law, and liability rules. However, no provisions of this
|
||||
document affect Consumer protection rights granted under mandatory legal
|
||||
regulations. To learn more about your rights, we recommend contacting a
|
||||
local Consumer protection organization.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
GENERAL PROVISIONS
|
||||
1. DEFINITIONS
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. Mudita sp. z o.o has implemented the Terms and Conditions with its
|
||||
registered office in Warsaw (02-607), ul. Jana Czeczota 6, entered into
|
||||
the register of entrepreneurs of the National Court Register kept by the
|
||||
District Court for the Capital City of Warsaw, 13th Commercial Division of
|
||||
the National Court Register, entry no. 0000467620, Tax Identification
|
||||
Number: 5252558282 and Statistical Identification Number: 14676767613, the
|
||||
share capital of PLN 21,100.00 (hereinafter referred to as Mudita).
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. The Terms and Conditions specify the rules of using the Mudita Center
|
||||
desktop application (hereinafter named as “The App”). To use the App it is
|
||||
required to accept all provisions of the Terms and Conditions. By starting
|
||||
to use any functionality of the App the User agrees to all its Terms and
|
||||
Conditions, thus undertaking to abide by them.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. In general, in matters related to the operation of The App, Users may
|
||||
contact Mudita by sending an email to the following e-mail address:{" "}
|
||||
<a href={`mailto:hello@mudita.com`}>hello@mudita.com</a>.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
4. The user's full use of the App and its functionalities requires access
|
||||
to the computer operating on macOS, Windows, or Linux.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
5. Capitalized words from Terms and Conditions are defined as follows:
|
||||
1.1. For the purposes of the Terms of Service, the following definitions
|
||||
shall apply:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
a. <b>The App</b> - the Mudita Center desktop device application for the
|
||||
macOS, Windows, or Linux operating system.
|
||||
a. <b>Consumer</b> - A User who is a natural person entering into a
|
||||
contract or other legal transaction with Mudita that is not directly
|
||||
related to their business or professional activity.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
b. <b>Mudita</b> - the Mudita sp. z o.o. company, as specified in point
|
||||
1.1.
|
||||
b. <b>Content</b> - All content, in particular textual, graphic, or
|
||||
multimedia elements (e.g., information about Mudita Center, services,
|
||||
visualizations, images, descriptions of the Mudita), as well as images of
|
||||
natural persons, that are published and distributed within Mudita Center
|
||||
by the Mudia.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
c. <b>Privacy Policy</b> – terms and conditions defining the rules of
|
||||
processing personal data of the User by Mudita Center, available under the
|
||||
address:{" "}
|
||||
<a href={EXTERNAL_URLS.privacyPolicy} rel="noreferrer" target="_blank">
|
||||
www.mudita.com/legal/privacy-policy/mudita-center/
|
||||
</a>
|
||||
c. <b>Minor</b> - A natural person who does not have full legal capacity
|
||||
or a natural person with an equivalent status under the laws applicable in
|
||||
their place of residence. In particular, Minors are considered to be
|
||||
individuals who have not reached the age of 18, subject to the preceding
|
||||
sentence.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
d. <b>Terms and Conditions</b> – the present Terms and Conditions
|
||||
available at:{" "}
|
||||
d. <b>Mudita</b> - Mudita sp. z o.o. with its registered office in Warsaw
|
||||
(02-607), Jana Czeczota 6 street, entered into the register of
|
||||
entrepreneurs of the National Court Register kept by the District Court
|
||||
for the Capital City of Warsaw, 13th Commercial Division of the National
|
||||
Court Register, entry no. 0000467620, Tax Identification Number:
|
||||
5252558282 and Statistical Identification Number: 146767613, the share
|
||||
capital of PLN: 1,040,000.00.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
e. <b>Mudita Center</b> - A software, along with all Content and Updates,
|
||||
as well as the accompanying documentation, provided by Mudita and
|
||||
distributed under the name "Mudita Center", which the User may
|
||||
install on their end device upon meeting the conditions specified in the
|
||||
Terms of Service, including the Technical Requirements.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
f. <b>Open Source Licences</b> - Separate licenses for software components
|
||||
used to create Mudita Center that are granted to the User outside the
|
||||
scope of the Terms of Service.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
g. <b>Technical Requirements</b> - The minimum technical requirements
|
||||
necessary for installing and using Mudita Center are as follows: computer
|
||||
or other end device connected to the Internet with a minimum bandwidth
|
||||
allowing the download of Mudita Center, and with an installed operating
|
||||
system: macOS Big Sur 11 and up (236 MB HDD space), Windows 10 or later
|
||||
(258 MB HDD space), 64-bit Ubuntu 18.04+ (102 MB HDD space).
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
h. <b>Terms of Service</b> - The present Terms of Service available at:{" "}
|
||||
<a
|
||||
href={EXTERNAL_URLS.termsAndConditions}
|
||||
rel="noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
www.mudita.com/legal/terms-conditions/mudita-center/
|
||||
https://www.mudita.com/legal/terms-conditions/mudita-center/
|
||||
</a>
|
||||
. Terms and Conditions also constitute the terms and conditions for the
|
||||
provision of electronic services, referred to in Article 8(1)(1) of the
|
||||
Polish Act on Electronic Provision of Services of 18 July 2002 (Journal of
|
||||
Laws of 2019, item 123);
|
||||
, constituting an agreement between the User and Mudita.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
e. <b>Website</b> – the website available at{" "}
|
||||
<a href={`https://www.mudita.com`} rel="noreferrer" target="_blank">
|
||||
www.mudita.com
|
||||
i. <b>Updates</b> - Any modified version of Mudita Center provided by
|
||||
Mudita. In particular, an Update may include upgrades, enhancements,
|
||||
add-ons, and other modifications to Mudita Center, including bug fixes,
|
||||
updates, the addition of new services, as well as functional improvements
|
||||
and refinements.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
j. <b>User</b> - You – the person using Mudita Center.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
k. <b>Website</b> -{" "}
|
||||
<a href={EXTERNAL_URLS.website} rel="noreferrer" target="_blank">
|
||||
https://www.mudita.com/
|
||||
</a>
|
||||
, owned and administered by Mudita;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
f. <b>User</b> – a natural person using The App and/or services provided
|
||||
through The App.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
g. <b>Device</b> - device which is used to access the App including but
|
||||
not limited to computers.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
h. <b>Intellectual Property Rights</b> - means any and all intellectual
|
||||
property rights existing in any part of the world under applicable law,
|
||||
including without limitation patent law, copyright law, trade secret law,
|
||||
trademark law, unfair competition law, and any and all applications,
|
||||
renewals, extensions and restorations of such rights, now or hereafter in
|
||||
effect worldwide.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
i. <b>Content</b> - refers to any and all Mudita and third-party editorial
|
||||
content, information, text, images, photos, videos, artwork,
|
||||
illustrations, graphic (art and electronic) images, audio, music, sounds,
|
||||
postings, messages, recommendations, comments, software, files, feedback,
|
||||
bug reports, or other protected materials and authored works of any kind
|
||||
that are utilized in the provision of the Services.
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
j. <b>App Distributor</b> - refers to Mudita’s website (
|
||||
<a href={`https://www.mudita.com`} rel="noreferrer" target="_blank">
|
||||
www.mudita.com
|
||||
</a>
|
||||
) where the App is made available.
|
||||
</LightTextNested>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
PURPOSE AND USE OF THE APP
|
||||
2. GENERAL PROVISIONS
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. The App allows Mudita to expand and update the features of Mudita Pure,
|
||||
and Mudita Harmony while using a computer (“The Services”).
|
||||
2.1. The Terms of Service specify the rules for using Mudita Center.
|
||||
Acceptance of the Terms of Service is voluntary, but necessary for the
|
||||
User to install and use Mudita Center on their end device. The Terms of
|
||||
Service also apply to any Updates, unless these Updates are governed by
|
||||
another document or agreement, in which case the provisions of that
|
||||
document or agreement will apply.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
2. The App is a source of information about Mudita's products, services
|
||||
offered by Mudita, and its strategy and philosophy.
|
||||
2.2. Minors with limited legal capacity are required to review the Terms
|
||||
of Service with a parent or other legal representative, who must provide
|
||||
valid consent for the minor to use Mudita Center. Mudita has the right to
|
||||
verify that the appropriate consent has been obtained by the User. Minors
|
||||
who do not have full or limited legal capacity are not allowed to use
|
||||
Mudita Center.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. In order to start using the service, users must first: download and
|
||||
install the app from our website (
|
||||
<a href={`https://www.mudita.com`} rel="noreferrer" target="_blank">
|
||||
Mudita
|
||||
</a>
|
||||
)
|
||||
2.3. No provisions of this document affect Consumer protection rights
|
||||
granted under mandatory legal regulations. To learn more about your
|
||||
rights, we recommend contacting a local consumer protection organization.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4. Personal data of the User obtained by Mudita through The App shall be
|
||||
processed for the purposes and in accordance with the Privacy Policy.
|
||||
2.4. In matters related to the operation of the Mudita Center, Users may
|
||||
contact Mudita by sending an email to the following email address:{" "}
|
||||
<a href={`mailto:hello@mudita.com`}>hello@mudita.com</a> or calling the
|
||||
phone number +48 22 3433783
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
Intellectual Property Rights, License, and Ownership
|
||||
3. SERVICES / MUDITA CENTER FEATURES
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. You acknowledge and agree that the Services are made available to you
|
||||
for your own personal and non-commercial purposes only.
|
||||
3.1. Mudita provides through Mudita Center, electronic services such as
|
||||
providing information about Mudita's products and services, as well
|
||||
as enabling Users to manage Mudita devices, including but not limited to
|
||||
updating them, importing or exporting data and backups.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. You understand that in agreeing to and complying with these Terms and
|
||||
our Privacy Policy, Mudita grants you a non-exclusive, revocable,
|
||||
non-transferable, non-sublicensable, and limited license to view and
|
||||
listen to the Content by You and install a copy of the Mudita App on a
|
||||
Device that you own or control.
|
||||
3.2. The scope of available services varies depending on the User's
|
||||
device type and model (e.g. Pure, Harmony, Kompakt). Detailed information
|
||||
on supported devices and available features can be found in Mudita Center
|
||||
or on the Website.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. Mudita reserves all rights in and to the Services and the Content not
|
||||
expressly granted to you under these Terms.
|
||||
3.3. To start using Mudita Center, the User must download the appropriate
|
||||
installation file for their operating system type and version from the
|
||||
Website and complete the installation process. Alternatively.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3.4. Installing and use of Mudita Center requires the User to accept the
|
||||
Terms of Service. The agreement for the provision of electronic services
|
||||
via Mudita Center between the User and Mudita is concluded at the moment
|
||||
of the successful installation of Mudita Center on the User’s end device.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
Restrictions
|
||||
4. INTELLECTUAL PROPERTY / LICENSE
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
In acknowledgment of Mudita’s ownership of and Intellectual Property
|
||||
Rights in the Services and Content, you agree that you will not:
|
||||
4.1. All rights, including exclusive rights, to Mudita Center and its
|
||||
Content – particularly graphic elements, logos, names, source code, and
|
||||
database rights – are legally protected and belong to Mudita.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
- have rights to use the Software and/or Updates for purposes other than
|
||||
those specified in the License contained in the App.
|
||||
4.2. The User acknowledges that the use of Mudita Center and its Content
|
||||
is strictly for personal use and may not be used commercially. Content
|
||||
also may not be distributed. Any use of Mudita Center for purposes related
|
||||
to scientific research, analysis, or evaluation of Mudita Center is
|
||||
prohibited without the express prior written consent of Mudita.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
- modify, translate, disassemble, decompile, or reproduce the Software in
|
||||
whole or in part (except for cases in which it is expressly permitted by
|
||||
the generally applicable laws or an open-source license covering the
|
||||
source code of the Software).
|
||||
4.3. Mudita grants the User a non-exclusive, personal, non-transferable,
|
||||
and limited license to download and install Mudita Center on the
|
||||
User's end device and to use a single copy of Mudita Center under the
|
||||
terms set forth in Terms of Service.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
- use the Software on devices whose malfunction or misuse may cause death,
|
||||
injury, major physical harm, or major environmental damage.
|
||||
4.4. Among the components of Mudita Center, there may be elements subject
|
||||
to separate open-source software licenses with the User, which
|
||||
specifically include licenses approved by the Open Source Initiative or
|
||||
other similar licenses.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
Mudita will enforce its Intellectual Property Rights to the fullest extent
|
||||
of the law, including but not limited to bringing civil or criminal legal
|
||||
proceedings.
|
||||
4.5. The granting of an Open Source License to the User is independent of
|
||||
the Terms of Service and is based on separate license agreements with the
|
||||
User. The applicable provisions of Open Source Licenses are made available
|
||||
to the User in the Third-Party Licenses document, accessible within Mudita
|
||||
Center. To the extent that specific Open Source Licenses prohibit the
|
||||
usage restrictions indicated in these Terms of Service, the provisions of
|
||||
the Open Source Licenses shall prevail over its provisions. The User
|
||||
acknowledges that Open Source Licenses may be subject to changes in
|
||||
licensing terms independently of Mudita.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4.6. For the avoidance of doubt, Mudita reserves all rights not expressly
|
||||
granted to the User under the Terms of Service. Mudita Center is protected
|
||||
under applicable law, particularly copyright law, intellectual property
|
||||
law, and international treaties, including but not limited to the
|
||||
Agreement on Trade-Related Aspects of Intellectual Property Rights
|
||||
(TRIPS). This license is subject to the limitations set forth in the Terms
|
||||
of Service.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4.7. The transfer of the license granted under the Terms of Service to
|
||||
third parties by the User is only possible if the ownership of the User’s
|
||||
end device, along with the installed Mudita Center, is transferred. Before
|
||||
starting to use Mudita Center, the acquiring User must accept the Terms of
|
||||
Service in the same manner as the transferring User.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
RESPONSIBILITY
|
||||
5. UPDATES
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. Mudita shall take every effort to ensure the continued operation of The
|
||||
App to the best of its ability. However, Mudita reserves the right to
|
||||
interrupt the operation of The App, in particular in connection with
|
||||
technical work on the Service, or possible breakdowns. You acknowledge
|
||||
this and you shall not file any claims against Mudita in this respect.
|
||||
5.1. Mudita may allow the User to download and install Updates. Mudita
|
||||
will notify (within Mudita Center and Website) the User of any available
|
||||
Updates, including those related to security, which are necessary to
|
||||
ensure that Mudita Center remains in compliance with the Terms of Service.
|
||||
The User acknowledges that some Updates, particularly those concerning
|
||||
security and resolving security issues reported to Mudita, are crucial for
|
||||
the proper functioning of Mudita Center.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. Mudita informs that, should the equipment or network used by the User
|
||||
fail to meet the requirements of the Terms and Conditions, as well as
|
||||
other problems or technical limitations arise from the use of such
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
equipment or network, they may limit or prevent the User's access to The
|
||||
App or adversely affect the quality and continuity of providing services
|
||||
by means of The App.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. Mudita shall not be responsible for improper operation of The App or
|
||||
provision of services contrary to the Terms of Conditions resulting from
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
reasons beyond Mudita's control (e.g. force majeure or actions of third
|
||||
parties not acting on behalf of or on behalf of Mudita) and from the
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
User's use of The App or services in a manner inconsistent with the Terms
|
||||
and Conditions.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4. Mudita reserves the right at any time to change, modify or discontinue
|
||||
the Services and Content, in whole or in part, with or without notice to
|
||||
you. You acknowledge this and you shall not file any claims against Mudita
|
||||
in this respect.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
5. Any breach of these Terms may result in, among other things, immediate
|
||||
termination or suspension of your rights and license to access and use
|
||||
Mudita’s Services and Content, as well as the deactivation of your
|
||||
account, if applicable.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
6. Mudita reserves the right, in our sole discretion, to bring legal
|
||||
proceedings against you and any third party, if applicable, if you breach
|
||||
these Terms and/or you are engaged in the illegal or fraudulent use of the
|
||||
Services or Content.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
Health Disclaimer
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. You acknowledge and agree that Mudita’s Services are not intended or
|
||||
designed to prevent, treat or diagnose any condition, illness or disease,
|
||||
nor should Mudita’s Services be considered, in whole or in part, express
|
||||
or implied to contain or constitute medical or psychological advice.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. Any advice or other materials contained in the Services are intended
|
||||
for general information purposes only. Mudita makes no guarantees that the
|
||||
Services provide a physical, mental or therapeutic health benefit and does
|
||||
not purport to give medical advice. The Services are not a substitute for
|
||||
professional medical or psychological advice or treatment based on your
|
||||
personal circumstances. You should seek the advice of your medical
|
||||
physician, doctor or other qualified health care provider if you have any
|
||||
concerns that using the Services will detrimentally impact your physical
|
||||
or mental health and well-being. You acknowledge that Mudita has advised
|
||||
you of the necessity of doing so.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. Actions or omissions based on this content may also cause damage to the
|
||||
extent that the content may not take into account the specific, individual
|
||||
circumstances of a given case, and therefore are not recommended without
|
||||
consulting a licensed professional who will take such circumstances into
|
||||
account.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
CONDITIONS OF USE
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. If you choose to access or use the Site, App, Services or Content in
|
||||
any jurisdiction, you are responsible for compliance with the applicable
|
||||
local laws relating to the use of or otherwise connected with the Site,
|
||||
App, Services and Content in that jurisdiction. To the extent that the
|
||||
Site, App, Services and Content would infringe the laws of the
|
||||
jurisdiction from which you are accessing them, you are prohibited from
|
||||
accessing or using the same. This provision shall apply notwithstanding
|
||||
any other provision of the Terms.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. You agree not to use the Services for any purposes related to
|
||||
scientific research, analysis or evaluation of the Services without the
|
||||
express prior written consent of Mudita.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. You are strongly advised not to use the Services while operating heavy
|
||||
machinery, driving, flying or performing any activity or task that, with
|
||||
due regard to the safety of yourself and others, requires your attention
|
||||
and concentration.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
COMMUNICATION AND FEEDBACK
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. The User has the right to provide written feedback (“Feedback”)
|
||||
regarding the functioning of The App.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. Feedback should be submitted electronically to the following e-mail
|
||||
address: <a href={`mailto:hello@mudita.com`}>hello@mudita.com</a>
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
3. The Feedback should consist of at least the following information:
|
||||
5.2. If the User does not install the provided Updates, including those
|
||||
related to security, necessary to maintain Mudita Center's compliance
|
||||
with the Terms of Service and services provided through it, Mudita will
|
||||
not be responsible for any lack of compliance with Mudita Center and the
|
||||
services provided, resulting solely from the failure to install such
|
||||
Updates, provided that:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
a. User's e-mail address used for downloading the App through the App
|
||||
Distributor
|
||||
5.2.1. The User has been informed about the need for an update and the
|
||||
consequences of not installing it;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
b. description of the subject matter of the feedback;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
c. a proposal on how to resolve the problem.
|
||||
5.2.2. The failure to install or improper installation of the Update was
|
||||
not due to errors in the provided installation instructions.
|
||||
</LightTextNested>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
4. If the information and data provided in the Feedback are insufficient,
|
||||
Mudita shall immediately call upon the User to supplement them, and the
|
||||
deadline for Mudita to consider the Feedback shall run from the date of
|
||||
correct supplementation of such data and information by the User.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
5. Mudita shall respond to the User's Feedback and shall contact the User
|
||||
{/* AUTO DISABLED - fix me if you like :) */}
|
||||
{/* eslint-disable-next-line react/no-unescaped-entities */}
|
||||
with regard to the Feedback writing to the User's e-mail address used for
|
||||
initially submitting the Feedback to Mudita.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
6. The response to the Feedback is the final outcome of the internal
|
||||
Feedback procedure.
|
||||
5.3. All components of the Updates are subject to the Terms of Service,
|
||||
unless additional provisions are included through the Update. In the case
|
||||
of an Update requiring a change to the Terms of Service, the provisions of
|
||||
section 12 shall apply until the modified version of the Terms of Service
|
||||
comes into effect. The User cannot install the Update without prior
|
||||
acceptance of the Terms of Service if such updates have been introduced.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
FINAL PROVISIONS
|
||||
6. HEALTH DISCLAIMER
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
1. To the extent not regulated by these Terms and Conditions provisions of
|
||||
the Polish law shall apply, however, as far as consumers are concerned,
|
||||
this does not deprive them of the protection granted by the law of the
|
||||
country of their habitual residence, which cannot be excluded under the
|
||||
contract, if the provisions in force in such a country are more favorable
|
||||
to the consumer than the provisions in force in the Republic of Poland.
|
||||
6.1. The User acknowledge and agree that Mudita Center and the services
|
||||
provided through it are not intended or designed to prevent, treat or
|
||||
diagnose any condition, illness or disease, nor Mudita Center and the
|
||||
services provided through it should be considered, in whole or in part,
|
||||
express or implied to contain or constitute medical or psychological
|
||||
advice.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
2. For important reasons (such as e.g. a change in the law or a change in
|
||||
the functionality of The App or Mudita activity) Mudita is entitled to
|
||||
amend the content of the Terms and Conditions at any time. Information
|
||||
about the change and the amended content of the Terms and Conditions shall
|
||||
be published within the App i.e. it will be displayed automatically after
|
||||
turning on the App at least 7 days before the changes of Terms and
|
||||
Conditions come into effect. The new content of the Regulations will be
|
||||
available each time in the appropriate tab of The App and on the Website{" "}
|
||||
6.2. Any advice or other materials contained in the Mudita Center and the
|
||||
services provided through it are intended for general information purposes
|
||||
only. Mudita makes no guarantees that the Mudita Center and the services
|
||||
provided through it provide a physical, mental or therapeutic health
|
||||
benefit and does not purport to give medical advice. The Mudita Center and
|
||||
the services provided through it are not a substitute for professional
|
||||
medical or psychological advice or treatment based on your personal
|
||||
circumstances. The User should seek the advice of your medical physician,
|
||||
doctor or other qualified health care provider if you have any concerns
|
||||
that using the Mudita Center and the services provided through it will
|
||||
detrimentally impact their physical or mental health and well-being. You
|
||||
acknowledge that Mudita has advised you of the necessity of doing so.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
6.3. Actions or omissions based on this content may also cause damage to
|
||||
the extent that the content may not take into account the specific,
|
||||
individual circumstances of a given case, and therefore are not
|
||||
recommended without consulting a licensed professional who will take such
|
||||
circumstances into account.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
7. USER OBLIGATIONS
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.1. The User may not (except for cases in which it is expressly permitted
|
||||
by the generally applicable laws, by Mudita, or an open-source license
|
||||
covering the source code of Mudita Center):
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.1.1. copy, publish, adapt, reproduce, decompile, disassemble, or attempt
|
||||
in any way to determine the source code or any other element of Mudita
|
||||
Center;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.1.2. modify, disable, or bypass any features of Mudita Center, any
|
||||
security mechanisms, or create derivative works based on Mudita Center;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.1.3. share, distribute, lease, rent, sublicense, or sell Mudita Center;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.1.4. allow or enable other persons to perform any of the above actions –
|
||||
this also applies to any elements of Mudita Center.
|
||||
</LightTextNested>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.2. The User is particularly obligated to:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.2.1. use Mudita Center in a manner that does not disrupt Mudita's
|
||||
operations or the functioning of Mudita Center, in compliance with
|
||||
applicable law, the provisions of the Terms of Service, as well as
|
||||
accepted customs and principles of social coexistence;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.2.2. not provide or transmit any content through Mudita Center that is
|
||||
prohibited by applicable law, especially content that infringes
|
||||
third-party copyrights or personal rights;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.2.3. not engage in IT activities or any other actions aimed at obtaining
|
||||
information not intended for the User or interfering with the rules or
|
||||
technical aspects of Mudita Center’s functioning;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.2.4. not modify Content provided by Mudita through Mudita Center in an
|
||||
unauthorized manner;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.2.5. provide only true, up-to-date, and necessary User data within
|
||||
Mudita Center, and promptly update such data, including personal data,
|
||||
provided to Mudita in connection with the conclusion of the agreement (if
|
||||
applicable).
|
||||
</LightTextNested>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
7.3. The User are strongly advised not to use Mudita Center and the
|
||||
services provided through it while operating heavy machinery, driving,
|
||||
flying or performing any activity or task that, with due regard to the
|
||||
safety of yourself and others, requires your attention and concentration.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
8. LIABILITY
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
8.1. None of the provisions of this section are intended to limit or
|
||||
exclude any mandatory rights granted to Users, particularly those who are
|
||||
Consumers, and any potential doubts shall be resolved in favor of the
|
||||
User. If any exclusions or limitations are found to be inadmissible, they
|
||||
shall be deemed reserved to the maximum extent permissible under
|
||||
applicable law.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
8.2. The entire Mudita Center is provided to the User AS "IS"
|
||||
and "AS AVAILABLE". In particular, to the fullest extent
|
||||
permitted by applicable law, Mudita does not provide any express or
|
||||
implied warranties for Mudita Center, nor shall the provision of any
|
||||
information or guidance regarding the use of Mudita Center be considered
|
||||
as such a warranty.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
8.3. Mudita's liability towards Users who are not Consumers for
|
||||
warranty claims in connection with the performance of the Terms of Service
|
||||
is excluded. Furthermore, to the fullest extent permitted by applicable
|
||||
law, Mudita excludes its liability towards the User for any damages,
|
||||
including lost profits or failure to fulfill its obligations due to force
|
||||
majeure, resulting from the Terms of Service.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
8.4. The User acknowledges that the use of Mudita Center is at their own
|
||||
risk and responsibility. Mudita's liability for damages, whether
|
||||
directly or indirectly arising from the use or inability to use Mudita
|
||||
Center, including but not limited to personal injury, data loss, lost
|
||||
profits, costs of substitute equipment or software, is excluded to the
|
||||
fullest extent permitted by applicable law.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
8.5. Notwithstanding the above, to the fullest extent permitted by
|
||||
applicable law, Mudita’s liability for damages arising directly or
|
||||
indirectly from the use or inability to use the Mudita Center, regardless
|
||||
of the legal basis, shall not exceed 50€.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
9. TERMINATION OF THE TERMS OF SERVICE
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9.1. This agreement (Terms of Service) is concluded for an indefinite
|
||||
period, having regard to the provisions of this section 9.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9.2. The User may terminate the Terms of Service with immediate effect at
|
||||
any time by ceasing to use Mudita Center and uninstalling it from the end
|
||||
device.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9.3. The Terms of Service may also be terminated as a result of the sale
|
||||
of the User's end device on which Mudita Center is installed. In such
|
||||
a case, the moment of termination of the Terms of Service is considered to
|
||||
be the moment when the purchaser of such a device accepts the Terms of
|
||||
Service.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9.4. Mudita may terminate the Terms of Service with immediate effect if
|
||||
the User has violated the Terms of Service or any other provisions binding
|
||||
the User and Mudita regarding Mudita Center. In the event of termination
|
||||
of the Terms of Service by Mudita, the User must immediately and
|
||||
completely cease using Mudita Center and uninstall it from their end
|
||||
device.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9.5. Mudita is entitled to decide on the complete discontinuation of
|
||||
Mudita Center (cessation of operations related to providing access to
|
||||
Mudita Center). In such a case, the User will be informed of the decision
|
||||
at least 6 months before the planned discontinuation date (notice period)
|
||||
via a notification displayed within Mudita Center, or an email sent to the
|
||||
User's email address, and on the Website. After the expiration of the
|
||||
notice period, the agreements regarding Mudita Center concluded between
|
||||
the User and the Provider will be terminated.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9.6. Mudita may terminate the Terms of Service in the event of the
|
||||
circumstances specified in pt. 12.1, with a 14-day notice period. A
|
||||
termination notice on this basis will be provided to the User within
|
||||
Mudita Center or via an email sent to Users. In that case, depending on
|
||||
the circumstances User may need to discontinue the use of Mudita Center
|
||||
and uninstall it from the User's end device
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
9.7. All provisions contained in the Terms of Service that should remain
|
||||
in force due to their nature shall continue to be valid and binding,
|
||||
regardless of the method of termination of the Terms of Service.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
10. COMPLAINTS
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.1. Complaints regarding issues related to Mudita Center and the
|
||||
services provided through it, as covered by the Terms of Service, may be
|
||||
submitted in particular via email to{" "}
|
||||
<a href={`mailto:hello@mudita.com`}>hello@mudita.com</a> or by mail to the
|
||||
following address: ul. Jana Czeczota 6, 02-607 Warsaw, Poland.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.2. To expedite the complaint resolution process, the complaint should
|
||||
include, in particular:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.2.1. information on the current Mudita Center version;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.2.2. the technical specifications of the device on which Mudita Center
|
||||
is installed,
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.2.3. the model of the device managed via Mudita Center (if applicable);
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.2.4. contact details (including, if applicable the User's e-mail
|
||||
address used for downloading Mudita Center);
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.2.5. a description of the issue.{" "}
|
||||
</LightTextNested>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.3. Complaints will be processed within 14 days from the date of receipt
|
||||
by Mudita. If Mudita is unable to process the complaint due to missing
|
||||
necessary information, the User will be informed about the missing
|
||||
details. The response to the complaint will be sent to the email address
|
||||
provided in the complaint unless the User requests to receive the response
|
||||
via traditional mail to the specified address.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
10.4. In the event of any non-compliance of Mudita Center, including the
|
||||
services provided through it, with the agreement, the User is obliged to
|
||||
cooperate with Mudita to a reasonable extent in order to determine – using
|
||||
the least burdensome technical means for the User –whether the
|
||||
non-compliance of Mudita Center, including the services provided through
|
||||
it, results from the characteristics of the User's digital
|
||||
environment.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
11. DISPUTE RESOLUTION
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
11.1. In the event of any disputes arising directly or indirectly from the
|
||||
Terms of Service, they may first be resolved amicably, including through
|
||||
Mudita’s complaint procedure, if applicable. For Consumers, additional
|
||||
methods specified below may also be available.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
11.2. The use of out-of-court methods for handling complaints and pursuing
|
||||
claims is voluntary. The following provisions are for informational
|
||||
purposes only and do not constitute an obligation for Mudita to
|
||||
participate in out-of-court dispute resolution procedures. Mudita’s
|
||||
statement regarding consent or refusal to participate in a consumer
|
||||
dispute resolution procedure will be provided in writing or on another
|
||||
durable medium if a dispute remains unresolved following a Consumer’s
|
||||
complaint.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
11.3. The rules governing out-of-court consumer dispute resolution
|
||||
procedures and the obligations of businesses in this regard are separately
|
||||
defined in applicable laws. Detailed information on the Consumer’s ability
|
||||
to use out-of-court complaint handling and dispute resolution methods, as
|
||||
well as access to such procedures, may be available at the offices and on
|
||||
the websites of relevant consumer protection authorities.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
11.4. A Consumer who is a permanent resident of the EU, Norway, Iceland,
|
||||
or Liechtenstein may submit a complaint via the online ODR platform:{" "}
|
||||
<a
|
||||
href={EXTERNAL_URLS.termsAndConditions}
|
||||
href="https://ec.europa.eu/consumers/odr/"
|
||||
rel="noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
www.mudita.com/legal/terms-conditions/mudita-center/
|
||||
</a>
|
||||
. If you do not uninstall the App, even though you have received notice of
|
||||
an amendment to these Terms and Conditions, you are deemed to accept the
|
||||
amended content of the Terms and Conditions.
|
||||
https://ec.europa.eu/consumers/odr/
|
||||
</a>{" "}
|
||||
(the ability to submit complaints will expire on 20 March 2025, and the
|
||||
ODR platform will be discontinued on 20 July 2025).
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
11.5. Any disputes arising from the Terms of Service shall be subject to
|
||||
the jurisdiction of the national courts of Poland or the EU Member State
|
||||
where the user resides, unless mandatory provisions of law state
|
||||
otherwise.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
12. AMENDMENTS
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.1. Terms of Service may be amended by Mudita if at least one of the
|
||||
following important reasons occurs:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.1.1. a change in legal regulations governing functioning of Mudita
|
||||
Center and the provision of services through it, as covered by Terms of
|
||||
Service, affecting the mutual rights and obligations of the User and
|
||||
Mudita, or a change in the interpretation of these legal regulations as a
|
||||
result of court rulings, decisions, recommendations, or guidelines issued
|
||||
by the relevant authorities;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.1.2. a change in the method of functioning of Mudita Center and the
|
||||
provision of services through it, as covered by Terms of Service due to
|
||||
technical or technological reasons;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.1.3. a modification of the scope or method of functioning of Mudita
|
||||
Center and the provision of services through it, as covered by Terms of
|
||||
Service, particularly through the introduction of new functionalities,
|
||||
modification, or withdrawal of existing functionalities or services by
|
||||
Mudita;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.1.4. a modification of the scope or method of service provision by
|
||||
entities cooperating with Mudita, involving the introduction of new
|
||||
functionalities, modification, or withdrawal of existing functionalities
|
||||
or services by these entities, impacting the mutual rights and obligations
|
||||
between the User and Mudita.
|
||||
</LightTextNested>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.2. Amendments to the Terms of Service shall take effect after a 14-day
|
||||
notice period granted to the User, unless the User actively accepts the
|
||||
amended Terms of Service earlier, or a shorter period is required by
|
||||
mandatory legal regulations or decisions of competent authorities or
|
||||
courts.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.3. The active acceptance of the amended Terms of Service, as well as
|
||||
the continued use of Mudita Center, after the amended Terms of Service
|
||||
comes into effect, shall constitute acceptance of the introduced changes.
|
||||
If the User does not wish to accept the modified Terms of Service,
|
||||
depending on the circumstances they may need to discontinue the use of
|
||||
Mudita Center and uninstall it from the User’s end device.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.4. Mudita reserves the right to make changes to the operation of Mudita
|
||||
Center, including the services provided through it, that are not necessary
|
||||
to maintain compliance with the agreement and do not lead to its
|
||||
modification (pt. 12.1.), when such changes result from:
|
||||
</LightText>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.4.1. improvement or modification of existing functionalities,
|
||||
enhancement of Mudita Center’s performance, including the services
|
||||
provided through it, in particular through changes to the layout, design,
|
||||
modification of content, and the removal of selected elements;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.4.2. editorial changes necessary to correct or eliminate errors;
|
||||
</LightTextNested>
|
||||
<LightTextNested displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.4.3. security improvements that do not impact compliance with the
|
||||
agreement, including, in particular, patching exploits and bugs.
|
||||
</LightTextNested>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
12.5. Mudita will inform Users of the changes referred to in section 12
|
||||
within Mudita Center or via an email sent to Users, as well as on the
|
||||
Website.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
13. APPLICABLE LAW / LANGUAGE VERSIONS
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
13.1. Terms of Service are governed by Polish law and shall be interpreted
|
||||
in accordance with it, regardless of any applicable conflict-of-laws
|
||||
rules, except in cases where mandatory provisions of the User's
|
||||
jurisdiction provide otherwise.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
13.2. The parties expressly exclude the application of the provisions of
|
||||
the Convention on Contracts for the International Sale of Goods to these
|
||||
Terms of Service.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
13.3. The translation has been made in accordance with national
|
||||
requirements, and in the event of any discrepancies between the English
|
||||
version and the translated version, the English version shall prevail, to
|
||||
the extent that such is not prohibited by mandatory legal provisions in
|
||||
the User's jurisdiction.
|
||||
</LightText>
|
||||
<WindowTitle displayStyle={TextDisplayStyle.Paragraph3}>
|
||||
14. FINAL PROVISIONS
|
||||
</WindowTitle>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
14.1. Terms of Service constitute the entire agreement between the User
|
||||
and Mudita regarding Mudita Center, unless expressly stated otherwise in
|
||||
the Terms of Service.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
14.2. If any provision of these Terms of Service is found to be invalid or
|
||||
unenforceable, it shall not affect the validity or enforceability of the
|
||||
remaining provisions.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
14.3. Using Mudita Center may involve the processing of the User's
|
||||
personal data. Detailed information on personal data processing can be
|
||||
found in the Privacy Policy.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
14.4. Mudita Center may contain links to websites or other resources of
|
||||
third-party entities. Mudita is not responsible for the content on such
|
||||
websites or resources, nor for any actions taken by the User in connection
|
||||
with the use of services, goods, or content available on such third-party
|
||||
websites.
|
||||
</LightText>
|
||||
<LightText displayStyle={TextDisplayStyle.Paragraph4}>
|
||||
14.5. Services provided through Mudita Center are electronic services and,
|
||||
as such, involve typical risks associated with data transmission over the
|
||||
Internet, such as the disclosure of User data, unauthorized access, or
|
||||
data loss. Both parties are obligated to take measures to minimize these
|
||||
risks – Mudita, in particular, by implementing appropriate technical and
|
||||
organizational safeguards, and the User by exercising due care,
|
||||
maintaining data confidentiality, and not sharing it with unauthorized
|
||||
persons.
|
||||
</LightText>
|
||||
</WindowContainer>
|
||||
)
|
||||
|
||||
@@ -20,7 +20,7 @@ test("License component renders", () => {
|
||||
})
|
||||
|
||||
test("render title correctly", () => {
|
||||
const titleText = "Mudita Center Terms of Use"
|
||||
const titleText = "Mudita Center Terms of Service"
|
||||
const { getByTestId } = renderer()
|
||||
expect(getByTestId(TermsOfServiceComponentTestIds.Title)).toHaveTextContent(
|
||||
titleText
|
||||
|
||||
@@ -9,12 +9,11 @@ import {
|
||||
BaseHttpClientService,
|
||||
HttpClient,
|
||||
} from "shared/http-client"
|
||||
import { MuditaCenterServerRoutes } from "shared/utils"
|
||||
import defaultConfiguration from "Core/settings/static/default-app-configuration.json"
|
||||
import { Configuration } from "Core/settings/dto"
|
||||
import { MuditaCenterServerRoutes } from "Core/__deprecated__/api/mudita-center-server/mudita-center-server-routes"
|
||||
|
||||
export enum AppConfigurationVersion {
|
||||
v1 = "app-configuration",
|
||||
v2 = "v2-app-configuration",
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ export * from "./lib/api-features"
|
||||
export * from "./lib/api-entities"
|
||||
export * from "./lib/outbox"
|
||||
export * from "./lib/menu"
|
||||
export * from "./lib/server"
|
||||
export * from "./lib/file-transfer"
|
||||
export * from "./lib/file-manager"
|
||||
export * from "./lib/backup"
|
||||
|
||||
@@ -26,7 +26,7 @@ export class DevApiConfigAdapter {
|
||||
|
||||
private static extendDataBody = (body: unknown): ApiConfig => {
|
||||
const apiConfig = body as ApiConfig
|
||||
const newFeatures = ["fileManager"]
|
||||
const newFeatures = ["mc-file-manager-internal"]
|
||||
return {
|
||||
...apiConfig,
|
||||
features: uniq([...apiConfig.features, ...newFeatures]),
|
||||
|
||||
@@ -263,6 +263,10 @@ export class APIEntitiesService {
|
||||
return this.handleError(response.error.type)
|
||||
}
|
||||
|
||||
if (response.data.status === 404) {
|
||||
return this.handleError(response.data.status)
|
||||
}
|
||||
|
||||
if (response.data.status === 207) {
|
||||
const failedIdsValidator =
|
||||
entitiesDeletePartialSuccessValidator.safeParse(response.data.body)
|
||||
|
||||
@@ -10,7 +10,6 @@ import { APIBackupService } from "./backup"
|
||||
import { FileManager } from "./file-manager"
|
||||
import { APIMenuService } from "./menu"
|
||||
import { APIOutboxService } from "./outbox/outbox.service"
|
||||
import { ServerService } from "./server/server.service"
|
||||
import { APIFileTransferService } from "./file-transfer"
|
||||
import { ServiceBridge } from "./service-bridge"
|
||||
import { SystemUtilsModule } from "system-utils/feature"
|
||||
@@ -26,7 +25,6 @@ export class APIModule {
|
||||
private apiOutboxService: APIOutboxService
|
||||
private apiMenuService: APIMenuService
|
||||
private apiEntitiesService: APIEntitiesService
|
||||
private serverService: ServerService
|
||||
private backupService: APIBackupService
|
||||
private restoreService: APIRestoreService
|
||||
private fileTransferService: APIFileTransferService
|
||||
@@ -49,7 +47,6 @@ export class APIModule {
|
||||
deviceProtocol,
|
||||
this.serviceBridge
|
||||
)
|
||||
this.serverService = new ServerService()
|
||||
this.backupService = new APIBackupService(deviceProtocol)
|
||||
this.apiDataTransferService = new APIDataTransferService(deviceProtocol)
|
||||
this.restoreService = new APIRestoreService(
|
||||
@@ -79,7 +76,6 @@ export class APIModule {
|
||||
this.apiOutboxService,
|
||||
this.apiMenuService,
|
||||
this.apiEntitiesService,
|
||||
this.serverService,
|
||||
this.backupService,
|
||||
this.restoreService,
|
||||
this.fileTransferService,
|
||||
|
||||
@@ -29,7 +29,7 @@ export class DevMenuAdapter {
|
||||
const menuConfig = body as MenuConfig
|
||||
const newMenuItems = [
|
||||
{
|
||||
feature: "fileManager",
|
||||
feature: "mc-file-manager-internal",
|
||||
displayName: "Manage Files",
|
||||
icon: IconType.FileManager,
|
||||
},
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Mudita sp. z o.o. All rights reserved.
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import { ResultObject } from "Core/core/builder"
|
||||
import { ipcRenderer } from "electron-better-ipc"
|
||||
import { APIServerServiceEvents, ServerAPIDeviceOSVersion } from "device/models"
|
||||
|
||||
export const getDeviceOSVersion = (
|
||||
productId: string,
|
||||
vendorId: string
|
||||
): Promise<ResultObject<ServerAPIDeviceOSVersion>> => {
|
||||
return ipcRenderer.callMain(APIServerServiceEvents.GetAPIDeviceOSVersion, {
|
||||
productId,
|
||||
vendorId,
|
||||
})
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Mudita sp. z o.o. All rights reserved.
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
export * from "./get-device-os-version.request"
|
||||
export * from "./server.service"
|
||||
@@ -1,60 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Mudita sp. z o.o. All rights reserved.
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import https from "https"
|
||||
import axios, { Axios } from "axios"
|
||||
import { Result, ResultObject } from "Core/core/builder"
|
||||
import { AppError } from "Core/core/errors"
|
||||
import { IpcEvent } from "Core/core/decorators"
|
||||
import {
|
||||
APIServerServiceEvents,
|
||||
GeneralError,
|
||||
ServerAPIDeviceOSVersion,
|
||||
ServerAPIDeviceOSVersionValidator,
|
||||
} from "device/models"
|
||||
|
||||
export class ServerService {
|
||||
private axiosInstance: Axios
|
||||
|
||||
constructor() {
|
||||
this.axiosInstance = axios.create({
|
||||
baseURL: process.env.MUDITA_CENTER_SERVER_URL,
|
||||
httpsAgent: new https.Agent({
|
||||
rejectUnauthorized: false,
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
@IpcEvent(APIServerServiceEvents.GetAPIDeviceOSVersion)
|
||||
public async getAPIDeviceOSVersion({
|
||||
vendorId,
|
||||
productId,
|
||||
}: {
|
||||
vendorId: string
|
||||
productId: string
|
||||
}): Promise<ResultObject<ServerAPIDeviceOSVersion>> {
|
||||
try {
|
||||
const response = await this.axiosInstance.get<ServerAPIDeviceOSVersion>(
|
||||
`get-api-device-os-version`,
|
||||
{
|
||||
params: {
|
||||
vendorId,
|
||||
productId,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
const serverAPIDeviceOSVersion =
|
||||
ServerAPIDeviceOSVersionValidator.safeParse(response.data)
|
||||
|
||||
if (response.status === 200 && serverAPIDeviceOSVersion.success) {
|
||||
return Result.success(serverAPIDeviceOSVersion.data)
|
||||
}
|
||||
return Result.failed(new AppError(GeneralError.IncorrectResponse))
|
||||
} catch (error) {
|
||||
return Result.failed(new AppError(GeneralError.IncorrectResponse))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ export const ApiConfigValidator = z.object({
|
||||
serialNumber: z.string().optional(),
|
||||
features: z.array(z.string()).min(1),
|
||||
entityTypes: z.array(z.string()).min(1).optional(),
|
||||
deviceID: z.string().optional(),
|
||||
otaApiConfig: z
|
||||
.object({
|
||||
otaApiKey: z.string(),
|
||||
|
||||
@@ -150,6 +150,7 @@ export const layoutSchema = z.intersection(
|
||||
padding: z.string().optional(),
|
||||
width: z.string().optional(),
|
||||
height: z.string().optional(),
|
||||
maxHeight: z.string().optional(),
|
||||
overflow: z.enum(["visible", "hidden", "scroll", "auto"]).optional(),
|
||||
shadow: z.boolean().optional(),
|
||||
})
|
||||
|
||||
@@ -26,6 +26,7 @@ interface IconTextRowData {
|
||||
icon: IconType
|
||||
text: string
|
||||
subText?: string
|
||||
show?: boolean
|
||||
}
|
||||
|
||||
type TileListFieldData = IconTextRowData
|
||||
@@ -62,6 +63,7 @@ const getValidatorByComponentName = (component: string) => {
|
||||
icon: z.nativeEnum(IconType),
|
||||
text: z.string(),
|
||||
subText: z.string().optional(),
|
||||
show: z.boolean().default(false),
|
||||
})
|
||||
case "overview-os-version":
|
||||
return z.object({
|
||||
|
||||
@@ -9,7 +9,6 @@ export * from "./api-menu-service-events"
|
||||
export * from "./api-config-service-events"
|
||||
export * from "./api-backup-service-events"
|
||||
export * from "./api-restore-service-events"
|
||||
export * from "./server-service-events"
|
||||
export * from "./api-file-transfer-service-events"
|
||||
export * from "./file-manager-service-events"
|
||||
export * from "./device-system-actions-service-events"
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Mudita sp. z o.o. All rights reserved.
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
export enum APIServerServiceEvents {
|
||||
GetAPIDeviceOSVersion = "apiservice_server-get-os-version",
|
||||
}
|
||||
@@ -12,6 +12,6 @@ export const apiConfigWithContacts: ApiConfig = {
|
||||
variant: "black",
|
||||
features: ["mc-overview", "contacts"],
|
||||
productId: "2006",
|
||||
vendorId: "0e8d",
|
||||
vendorId: "3310",
|
||||
serialNumber: "0123456789ABCDEF",
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
featureConfigurationFileManager,
|
||||
featureConfigurationOverview,
|
||||
} from "./feature-configuration-responses"
|
||||
|
||||
//import from "Core/device" breaks usage in e2e
|
||||
enum ResponseStatus {
|
||||
Ok = 200,
|
||||
@@ -63,10 +64,10 @@ export const DEFAULT_RESPONSES: MocksArrayResponsesMap = {
|
||||
osVersion: "0.0.46 MuditaOS K",
|
||||
lang: "en-US",
|
||||
variant: "black",
|
||||
features: ["mc-overview", "contacts", "fileManager"],
|
||||
features: ["mc-overview", "mc-contacts", "mc-file-manager-internal"],
|
||||
entityTypes: ["contacts", "audioFiles"],
|
||||
productId: "2006",
|
||||
vendorId: "0e8d",
|
||||
vendorId: "3310",
|
||||
serialNumber: "0123456789ABCDEF",
|
||||
otaApiConfig: {
|
||||
otaApiKey: "864055030180383",
|
||||
@@ -89,12 +90,12 @@ export const DEFAULT_RESPONSES: MocksArrayResponsesMap = {
|
||||
icon: "overview",
|
||||
},
|
||||
{
|
||||
feature: "contacts",
|
||||
feature: "mc-contacts",
|
||||
displayName: "Contacts",
|
||||
icon: "contacts-book",
|
||||
},
|
||||
{
|
||||
feature: "fileManager",
|
||||
feature: "mc-file-manager-internal",
|
||||
displayName: "Manage Files",
|
||||
icon: "file-manager",
|
||||
},
|
||||
@@ -118,7 +119,7 @@ export const DEFAULT_RESPONSES: MocksArrayResponsesMap = {
|
||||
body: featureConfigurationContacts,
|
||||
match: {
|
||||
expected: {
|
||||
feature: "contacts",
|
||||
feature: "mc-contacts",
|
||||
lang: "en-US",
|
||||
},
|
||||
},
|
||||
@@ -138,7 +139,7 @@ export const DEFAULT_RESPONSES: MocksArrayResponsesMap = {
|
||||
body: featureConfigurationFileManager,
|
||||
match: {
|
||||
expected: {
|
||||
feature: "fileManager",
|
||||
feature: "mc-file-manager-internal",
|
||||
lang: "en-US",
|
||||
},
|
||||
},
|
||||
@@ -161,10 +162,31 @@ export const DEFAULT_RESPONSES: MocksArrayResponsesMap = {
|
||||
},
|
||||
},
|
||||
sections: {
|
||||
battery: { icon: "battery-charging-5", text: "100%", subText: "" },
|
||||
battery: {
|
||||
icon: "battery-charging-5",
|
||||
text: "100%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "ANDROID 12", version: "0.3.0" },
|
||||
status: { badgeText: "Offline+" },
|
||||
"airplane-mode": { icon: "airplane-mode", text: "Airplane mode" },
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: true,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 1 - no network",
|
||||
show: false,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
match: { expected: { feature: "mc-overview", lang: "en-US" } },
|
||||
@@ -204,7 +226,9 @@ export const DEFAULT_RESPONSES: MocksArrayResponsesMap = {
|
||||
},
|
||||
],
|
||||
},
|
||||
match: { expected: { feature: "fileManager", lang: "en-US" } },
|
||||
match: {
|
||||
expected: { feature: "mc-file-manager-internal", lang: "en-US" },
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -93,6 +93,8 @@ export const featureConfigurationOverview = {
|
||||
fields: [
|
||||
{ dataKey: "battery", type: "icon-text" },
|
||||
{ dataKey: "airplane-mode", type: "icon-text" },
|
||||
{ dataKey: "connection0", type: "icon-text" },
|
||||
{ dataKey: "connection1", type: "icon-text" },
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -15,9 +15,30 @@ export const overviewDataWithoutBadge = {
|
||||
},
|
||||
},
|
||||
sections: {
|
||||
battery: { icon: "battery-charging-5", text: "100%", subText: "" },
|
||||
battery: {
|
||||
icon: "battery-charging-5",
|
||||
text: "100%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "ANDROID 12", version: "0.3.0" },
|
||||
"airplane-mode": { icon: "airplane-mode", text: "Airplane mode" },
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: true,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 1 - no network",
|
||||
show: false,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -33,12 +54,29 @@ export const overviewDataWithOneSimCard = {
|
||||
},
|
||||
},
|
||||
sections: {
|
||||
battery: { icon: "battery-charging-5", text: "100%", subText: "" },
|
||||
battery: {
|
||||
icon: "battery-charging-5",
|
||||
text: "100%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "Mudita OS", version: "0.3.0" },
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: false,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-2",
|
||||
text: "T-Mobile",
|
||||
subText: "SIM 1",
|
||||
show: true,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -59,12 +97,25 @@ export const overviewDataWithOneSimCard2nd = {
|
||||
icon: "battery-charging-2",
|
||||
text: "40%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "Mudita OS", version: "0.3.1" },
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: false,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-4",
|
||||
text: "Play",
|
||||
subText: "SIM 1",
|
||||
show: true,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -85,12 +136,25 @@ export const overviewDataWithOneSimCard3rd = {
|
||||
icon: "battery-charging-3",
|
||||
text: "60%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "Mudita OS", version: "0.3.1" },
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: false,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-3",
|
||||
text: "Orange",
|
||||
subText: "SIM 1",
|
||||
show: true,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -111,12 +175,26 @@ export const overviewDataWithOneSimCard4th = {
|
||||
icon: "battery-charging-2",
|
||||
text: "80%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "Mudita OS", version: "0.3.1" },
|
||||
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: false,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-4",
|
||||
text: "O2",
|
||||
subText: "SIM 1",
|
||||
show: true,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -137,12 +215,25 @@ export const overviewDataWithOneSimCard5th = {
|
||||
icon: "battery-charging-2",
|
||||
text: "100%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "Mudita OS", version: "0.3.1" },
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: false,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-4",
|
||||
text: "Vodafone",
|
||||
subText: "SIM 1",
|
||||
show: true,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -163,12 +254,25 @@ export const overviewDataWithOneSimCard6th = {
|
||||
icon: "battery-charging-2",
|
||||
text: "20%",
|
||||
subText: "",
|
||||
show: true,
|
||||
},
|
||||
update: { text: "Mudita OS", version: "0.3.1" },
|
||||
"airplane-mode": {
|
||||
icon: "airplane-mode",
|
||||
text: "Airplane mode",
|
||||
show: false,
|
||||
},
|
||||
connection0: {
|
||||
icon: "network-signal-4",
|
||||
text: "Telia",
|
||||
subText: "SIM 1",
|
||||
show: true,
|
||||
},
|
||||
connection1: {
|
||||
icon: "network-signal-0",
|
||||
text: "No SIM",
|
||||
subText: "SIM 2 - no network",
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -216,6 +320,8 @@ export const overviewConfigForBackup = {
|
||||
fields: [
|
||||
{ dataKey: "battery", type: "icon-text" },
|
||||
{ dataKey: "airplane-mode", type: "icon-text" },
|
||||
{ dataKey: "connection0", type: "icon-text" },
|
||||
{ dataKey: "connection1", type: "icon-text" },
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ const KOMPAKT_PORT_INFO: Omit<PortInfo, "path" | "serialNumber"> = {
|
||||
manufacturer: "Mudita",
|
||||
pnpId: undefined,
|
||||
locationId: "00140000",
|
||||
vendorId: "0e8d",
|
||||
vendorId: "3310",
|
||||
productId: "2006",
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@ const setupStyles = (style?: CSSProperties, layout?: Layout): CSSProperties => {
|
||||
...(layout?.height && {
|
||||
height: layout.height,
|
||||
}),
|
||||
...(layout?.maxHeight && {
|
||||
maxHeight: layout.maxHeight,
|
||||
}),
|
||||
...(layout?.overflow && {
|
||||
overflow: layout.overflow,
|
||||
}),
|
||||
|
||||
@@ -67,6 +67,7 @@ import { TypographyMap } from "./lib/typography"
|
||||
import { mcFilesManagerUploadProgress } from "./lib/mc-files-manager-upload-progress"
|
||||
import { mcFilesManagerUploadFinished } from "./lib/mc-files-manager-upload-finished"
|
||||
import { mcFilesManagerUploadValidationError } from "./lib/mc-files-manager-upload-validation-error"
|
||||
import { entitiesDeleteError } from "./lib/entities-delete-error"
|
||||
|
||||
export * from "./lib/block-box"
|
||||
export * from "./lib/block-plain"
|
||||
@@ -137,6 +138,7 @@ export * from "./lib/typography"
|
||||
export * from "./lib/mc-files-manager-upload-progress"
|
||||
export * from "./lib/mc-files-manager-upload-finished"
|
||||
export * from "./lib/mc-files-manager-upload-validation-error"
|
||||
export * from "./lib/entities-delete-error"
|
||||
|
||||
export default {
|
||||
[blockBox.key]: blockBox,
|
||||
@@ -204,5 +206,6 @@ export default {
|
||||
[mcFilesManagerUploadFinished.key]: mcFilesManagerUploadFinished,
|
||||
[mcFilesManagerUploadValidationError.key]:
|
||||
mcFilesManagerUploadValidationError,
|
||||
[entitiesDeleteError.key]: entitiesDeleteError,
|
||||
...TypographyMap,
|
||||
} as const
|
||||
|
||||
21
libs/generic-view/models/src/lib/entities-delete-error.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Copyright (c) Mudita sp. z o.o. All rights reserved.
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import { z } from "zod"
|
||||
|
||||
const dataValidator = z.undefined()
|
||||
|
||||
const configValidator = z.object({
|
||||
modalKey: z.string(),
|
||||
entitiesType: z.string(),
|
||||
})
|
||||
|
||||
export type EntitiesDeleteErrorConfig = z.infer<typeof configValidator>
|
||||
|
||||
export const entitiesDeleteError = {
|
||||
key: "entities-delete-error",
|
||||
dataValidator,
|
||||
configValidator,
|
||||
} as const
|
||||
@@ -10,6 +10,7 @@ const dataValidator = z.object({
|
||||
icon: z.nativeEnum(IconType),
|
||||
text: z.string(),
|
||||
subText: z.string().optional(),
|
||||
show: z.boolean().default(false),
|
||||
})
|
||||
|
||||
export type IconTextData = z.infer<typeof dataValidator>
|
||||
|
||||
@@ -117,6 +117,7 @@ export enum ActionName {
|
||||
GetEntityData = "entities/get-entity-data",
|
||||
ClearEntitiesData = "entities/clear-entities-data",
|
||||
DeleteEntitiesData = "entities/delete-entities-data",
|
||||
ClearAfterDeleteEntities = "entities/clear-after-delete-entities",
|
||||
DeleteEntityData = "entities/delete-entity-data",
|
||||
CreateEntityData = "entities/create-entity-data",
|
||||
UpdateEntityData = "entities/update-entity-data",
|
||||
|
||||
@@ -24,3 +24,8 @@ export const deleteEntityData = createAction<{
|
||||
entityId: EntityId
|
||||
deviceId: DeviceId
|
||||
}>(ActionName.DeleteEntityData)
|
||||
|
||||
export const clearAfterDeleteEntities = createAction<{
|
||||
entitiesType: string
|
||||
deviceId: DeviceId
|
||||
}>(ActionName.ClearAfterDeleteEntities)
|
||||
|
||||
@@ -8,7 +8,7 @@ import { deleteEntitiesDataRequest } from "device/feature"
|
||||
import { DeviceId } from "Core/device/constants/device-id"
|
||||
import { ReduxRootState } from "Core/__deprecated__/renderer/store"
|
||||
import { ActionName } from "../action-names"
|
||||
import { EntityId } from "device/models"
|
||||
import { EntitiesDeleteResponse, EntityId } from "device/models"
|
||||
import { difference } from "lodash"
|
||||
import delayResponse from "@appnroll/delay-response"
|
||||
import { getEntitiesMetadataAction } from "./get-entities-metadata.action"
|
||||
@@ -24,7 +24,10 @@ interface DeleteEntitiesDataActionPayload {
|
||||
export const deleteEntitiesDataAction = createAsyncThunk<
|
||||
EntityId[],
|
||||
DeleteEntitiesDataActionPayload,
|
||||
{ state: ReduxRootState }
|
||||
{
|
||||
state: ReduxRootState
|
||||
rejectValue: { failedIds: string[]; successIds: string[] } | undefined
|
||||
}
|
||||
>(
|
||||
ActionName.DeleteEntitiesData,
|
||||
async (
|
||||
@@ -39,9 +42,21 @@ export const deleteEntitiesDataAction = createAsyncThunk<
|
||||
}),
|
||||
1000
|
||||
)
|
||||
if (!response.ok) {
|
||||
|
||||
if (!response.ok || response.data?.failedIds) {
|
||||
await onError?.()
|
||||
return rejectWithValue(response.error)
|
||||
if (response.data) {
|
||||
const failedIds = (response.data as EntitiesDeleteResponse)!.failedIds
|
||||
const successIds = (response.data as EntitiesDeleteResponse)!.failedIds
|
||||
? difference(
|
||||
ids,
|
||||
(response.data as EntitiesDeleteResponse)!.failedIds
|
||||
)
|
||||
: ids
|
||||
|
||||
return rejectWithValue({ failedIds, successIds })
|
||||
}
|
||||
return rejectWithValue(undefined)
|
||||
}
|
||||
await onSuccess?.()
|
||||
await dispatch(getEntitiesMetadataAction({ entitiesType, deviceId }))
|
||||
|
||||
@@ -5,7 +5,12 @@
|
||||
|
||||
import { createReducer } from "@reduxjs/toolkit"
|
||||
import { EntitiesConfig, EntitiesMetadata, EntityData } from "device/models"
|
||||
import { clearEntities, deleteEntityData, setEntityData } from "./actions"
|
||||
import {
|
||||
clearAfterDeleteEntities,
|
||||
clearEntities,
|
||||
deleteEntityData,
|
||||
setEntityData,
|
||||
} from "./actions"
|
||||
import { getEntitiesDataAction } from "./get-entities-data.action"
|
||||
import { DeviceId } from "Core/device/constants/device-id"
|
||||
import { deleteEntitiesDataAction } from "./delete-entities-data.action"
|
||||
@@ -24,6 +29,8 @@ interface Entities {
|
||||
loading?: boolean
|
||||
progress?: number
|
||||
error?: boolean
|
||||
failedIds?: string[]
|
||||
successIds?: string[]
|
||||
}
|
||||
|
||||
export type DeviceEntitiesMap = Record<EntitiesType, Entities | undefined>
|
||||
@@ -120,6 +127,30 @@ export const genericEntitiesReducer = createReducer(initialState, (builder) => {
|
||||
)
|
||||
}
|
||||
})
|
||||
builder.addCase(deleteEntitiesDataAction.rejected, (state, action) => {
|
||||
const { entitiesType, deviceId } = action.meta.arg
|
||||
const { failedIds = [], successIds = [] } = action.payload || {}
|
||||
if (!state[deviceId]?.[entitiesType]) {
|
||||
return
|
||||
}
|
||||
|
||||
const entities = state[deviceId]![entitiesType]
|
||||
|
||||
if (entities) {
|
||||
entities.failedIds = failedIds
|
||||
entities.successIds = successIds
|
||||
}
|
||||
})
|
||||
builder.addCase(clearAfterDeleteEntities, (state, action) => {
|
||||
const { entitiesType, deviceId } = action.payload
|
||||
|
||||
const entities = state[deviceId]![entitiesType]
|
||||
|
||||
if (entities) {
|
||||
entities.failedIds = []
|
||||
entities.successIds = []
|
||||
}
|
||||
})
|
||||
builder.addCase(deleteEntityData, (state, action) => {
|
||||
const { entitiesType, deviceId, entityId } = action.payload
|
||||
if (!state[deviceId]?.[entitiesType]) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import axios, { AxiosResponse } from "axios"
|
||||
import logger from "Core/__deprecated__/main/utils/logger"
|
||||
import { googleAuthorize } from "./google-authorize.action"
|
||||
import { setGoogleAuthData } from "../actions"
|
||||
import { MuditaCenterServerRoutes } from "shared/utils"
|
||||
|
||||
export const mapContact = (contact: GoogleContactResourceItem): Contact => {
|
||||
let firstName = ""
|
||||
@@ -102,7 +103,7 @@ export const requestWrapper = async <ReturnType>(
|
||||
const refreshToken =
|
||||
getState().externalProviders.google[scope].refresh_token
|
||||
|
||||
const url = `${process.env.MUDITA_CENTER_SERVER_URL}/google-auth-refresh-token`
|
||||
const url = `${process.env.MUDITA_CENTER_SERVER_URL}/${MuditaCenterServerRoutes.GoogleAuthRefreshToken}`
|
||||
const { data } = await axios.post(`${url}?refreshToken=${refreshToken}`)
|
||||
await dispatch(setGoogleAuthData({ scope, data }))
|
||||
return requestWrapper(
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
|
||||
import { createAsyncThunk } from "@reduxjs/toolkit"
|
||||
import { getDeviceOSVersion, getOverviewDataRequest } from "device/feature"
|
||||
import { getOverviewDataRequest } from "device/feature"
|
||||
import { generateMcAboutData, generateMcOverviewData } from "generic-view/views"
|
||||
import { View } from "generic-view/utils"
|
||||
import { ReduxRootState } from "Core/__deprecated__/renderer/store"
|
||||
@@ -29,11 +29,6 @@ export const getOverviewData = createAsyncThunk<
|
||||
return rejectWithValue("no device")
|
||||
}
|
||||
|
||||
const serverResponse = await getDeviceOSVersion(
|
||||
apiConfig.productId,
|
||||
apiConfig.vendorId
|
||||
)
|
||||
|
||||
const features = selectConfiguredDevice(getState(), deviceId)?.features
|
||||
const overviewConfig = features?.["mc-overview"]?.config
|
||||
const aboutConfig = features?.["mc-about"]?.config
|
||||
@@ -46,11 +41,7 @@ export const getOverviewData = createAsyncThunk<
|
||||
if (response.ok) {
|
||||
return {
|
||||
deviceId,
|
||||
overviewData: generateMcOverviewData(
|
||||
response.data,
|
||||
overviewConfig,
|
||||
serverResponse.ok ? serverResponse.data : undefined
|
||||
),
|
||||
overviewData: generateMcOverviewData(response.data, overviewConfig),
|
||||
aboutData: response.data.summary?.about
|
||||
? generateMcAboutData(response.data.summary?.about, aboutConfig)
|
||||
: undefined,
|
||||
|
||||
@@ -52,6 +52,7 @@ const cleanEscapeCharacters = (value: string) => {
|
||||
|
||||
const getFields = (item: jCard, key: string) => {
|
||||
const fields = item[1].filter((property) => property[0] === key)
|
||||
|
||||
return fields
|
||||
.map((field) => {
|
||||
const type = isArray(field[1].type) ? last(field[1].type) : field[1].type
|
||||
@@ -79,14 +80,18 @@ const getNameFields = (
|
||||
| "honorificSuffix"
|
||||
> => {
|
||||
const { value } = first(getFields(item, "n")) || {}
|
||||
const [lastName, firstName, middleName, honorificPrefix, honorificSuffix] =
|
||||
value as string[]
|
||||
return {
|
||||
...(lastName && { lastName }),
|
||||
...(firstName && { firstName }),
|
||||
...(middleName && { middleName }),
|
||||
...(honorificPrefix && { honorificPrefix }),
|
||||
...(honorificSuffix && { honorificSuffix }),
|
||||
if (value) {
|
||||
const [lastName, firstName, middleName, honorificPrefix, honorificSuffix] =
|
||||
value as string[]
|
||||
return {
|
||||
...(lastName && { lastName }),
|
||||
...(firstName && { firstName }),
|
||||
...(middleName && { middleName }),
|
||||
...(honorificPrefix && { honorificPrefix }),
|
||||
...(honorificSuffix && { honorificSuffix }),
|
||||
}
|
||||
} else {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -235,6 +235,12 @@ export const startImportToDevice = createAsyncThunk<
|
||||
|
||||
while (progress < 100) {
|
||||
if (aborted) {
|
||||
await dispatch(
|
||||
refreshEntitiesIfMetadataChanged({
|
||||
deviceId: deviceId,
|
||||
entitiesType: "contacts",
|
||||
})
|
||||
)
|
||||
return rejectWithValue(undefined)
|
||||
}
|
||||
await delay()
|
||||
@@ -251,10 +257,6 @@ export const startImportToDevice = createAsyncThunk<
|
||||
progress = checkPreRestoreResponse.data.progress
|
||||
}
|
||||
|
||||
if (aborted) {
|
||||
return rejectWithValue(undefined)
|
||||
}
|
||||
|
||||
await dispatch(
|
||||
refreshEntitiesIfMetadataChanged({
|
||||
deviceId: deviceId,
|
||||
@@ -262,6 +264,10 @@ export const startImportToDevice = createAsyncThunk<
|
||||
})
|
||||
)
|
||||
|
||||
if (aborted) {
|
||||
return rejectWithValue(undefined)
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ import { selectDataMigrationStatus } from "./data-migration-status"
|
||||
|
||||
// FIXME: The device name should be moved to the API config response of API device
|
||||
const messages = {
|
||||
"0e8d.2006": "Kompakt",
|
||||
"3310.2006": "Kompakt",
|
||||
}
|
||||
|
||||
export const selectDataMigrationSourceDevices = createSelector(
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
import { createSelector } from "@reduxjs/toolkit"
|
||||
import { ReduxRootState } from "Core/__deprecated__/renderer/store"
|
||||
import { EntityData } from "Libs/device/models/src"
|
||||
|
||||
const selectDeviceEntities = createSelector(
|
||||
(state: ReduxRootState) => state.genericEntities,
|
||||
@@ -49,6 +50,22 @@ export const selectEntitiesData = createSelector(
|
||||
(entities) => entities?.data
|
||||
)
|
||||
|
||||
export const selectFailedEntities = createSelector(
|
||||
selectEntities,
|
||||
(entities) => {
|
||||
const failedEntities = entities?.data?.filter((entity) =>
|
||||
entities.failedIds?.includes(entity.id as string)
|
||||
) as EntityData[]
|
||||
|
||||
return failedEntities ? failedEntities : []
|
||||
}
|
||||
)
|
||||
|
||||
export const selectSuccessDeletedEntitiesIds = createSelector(
|
||||
selectEntities,
|
||||
(entities) => (entities?.successIds ? entities?.successIds : [])
|
||||
)
|
||||
|
||||
export const selectEntityData = createSelector(
|
||||
selectEntities,
|
||||
(state: ReduxRootState, { entityId }: { entityId: string }) => entityId,
|
||||
|
||||
@@ -174,8 +174,8 @@ const runActions = (actions?: ButtonActions) => {
|
||||
entitiesType: action.entitiesType,
|
||||
ids: action.ids,
|
||||
deviceId: activeDeviceId,
|
||||
onSuccess: async () => {
|
||||
await runActions(action.postActions?.success)(
|
||||
onSuccess: () => {
|
||||
return runActions(action.postActions?.success)(
|
||||
providers,
|
||||
customActions
|
||||
)
|
||||
|
||||
@@ -58,7 +58,7 @@ export const useUploadFilesButtonAction = () => {
|
||||
|
||||
const fileManagerFeatureData = selectActiveDeviceFeatureByKey(
|
||||
store.getState(),
|
||||
"fileManager"
|
||||
"mc-file-manager-internal"
|
||||
) as McFileManagerData | undefined
|
||||
|
||||
const validationError = await validateSelectedFiles(
|
||||
@@ -66,7 +66,7 @@ export const useUploadFilesButtonAction = () => {
|
||||
entityFilePaths,
|
||||
// @ts-ignore
|
||||
// TODO: Add support for multiple storage in file management feature: https://appnroll.atlassian.net/browse/CP-3398
|
||||
fileManagerFeatureData?.["0storageSummaryFreeText"].text
|
||||
fileManagerFeatureData?.["0storageSummaryFreeBytes"].value
|
||||
)
|
||||
|
||||
if (validationError !== undefined) {
|
||||
|
||||
@@ -27,6 +27,7 @@ describe("Icon text component", () => {
|
||||
icon: IconType.Battery1,
|
||||
text: "Dummy text",
|
||||
subText: "Dummy subtext",
|
||||
show: true,
|
||||
}}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
@@ -43,6 +44,7 @@ describe("Icon text component", () => {
|
||||
data={{
|
||||
icon: IconType.Battery1,
|
||||
text: "Dummy text",
|
||||
show: true,
|
||||
}}
|
||||
/>
|
||||
</ThemeProvider>
|
||||
|
||||
@@ -11,7 +11,7 @@ import dataTestIds from "./data-test-ids"
|
||||
import { IconTextData } from "generic-view/models"
|
||||
|
||||
export const IconText: APIFC<IconTextData> = ({ data, ...props }) => {
|
||||
if (!data) return null
|
||||
if (!data || !data.show) return null
|
||||
|
||||
const { icon, text, subText } = data
|
||||
|
||||
|
||||
@@ -11,8 +11,12 @@ const dataTestId = {
|
||||
image: "generic-view-image",
|
||||
}
|
||||
|
||||
export const Image: APIFC<ImageData, ImageConfig> = ({ data, config }) => {
|
||||
export const Image: APIFC<ImageData, ImageConfig> = ({
|
||||
data,
|
||||
config,
|
||||
...props
|
||||
}) => {
|
||||
const { src, alt } = data || config || {}
|
||||
if (!src) return null
|
||||
return <img src={src} alt={alt} data-testid={dataTestId.image} />
|
||||
return <img src={src} alt={alt} data-testid={dataTestId.image} {...props} />
|
||||
}
|
||||
|
||||
@@ -28,5 +28,5 @@ export const generatedViews = {
|
||||
type generatedDataFn = (data: any, config: View) => Feature["data"]
|
||||
|
||||
export const generatedData: Record<string, generatedDataFn> = {
|
||||
["fileManager"]: generateFileManagerData,
|
||||
["mc-file-manager-internal"]: generateFileManagerData,
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ const generateDeleteModal = ({
|
||||
component: "format-message",
|
||||
config: {
|
||||
messageTemplate: singleContact
|
||||
? "Delete contact"
|
||||
? "Delete contact?"
|
||||
: "Delete {contactsToDelete, plural, one {contact} other {# contacts}}?",
|
||||
},
|
||||
dataProvider: {
|
||||
|
||||
@@ -111,6 +111,16 @@ export const generateDeleteFiles: ComponentGenerator<{
|
||||
toastKey: `${key}${id}filesDeletedToast`,
|
||||
},
|
||||
],
|
||||
failure: [
|
||||
{
|
||||
type: "close-domain-modals",
|
||||
domain: "files-delete",
|
||||
},
|
||||
{
|
||||
type: "open-modal",
|
||||
modalKey: `${key}${id}deleteErrorModal`,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -204,5 +214,19 @@ export const generateDeleteFiles: ComponentGenerator<{
|
||||
text: "Deleting, please wait...",
|
||||
},
|
||||
},
|
||||
[`${key}${id}deleteErrorModal`]: {
|
||||
component: "modal",
|
||||
config: {
|
||||
size: "small",
|
||||
},
|
||||
childrenKeys: [`${key}${id}deleteErrorModalContent`],
|
||||
},
|
||||
[`${key}${id}deleteErrorModalContent`]: {
|
||||
component: "entities-delete-error",
|
||||
config: {
|
||||
modalKey: `${key}${id}deleteErrorModal`,
|
||||
entitiesType: entityType,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
import { View } from "generic-view/utils"
|
||||
import { SEGMENTS_CONFIG_MAP } from "./storage-summary-bar"
|
||||
import { generateFileUploadButtonModalKey } from "./file-upload-button"
|
||||
import { formatBytes } from "../../typography/format-bytes"
|
||||
|
||||
type StorageInformation = McFileManagerData["storageInformation"][number]
|
||||
|
||||
@@ -50,13 +51,22 @@ const generateOtherFilesSpaceInformation = (
|
||||
const otherFilesSpaceInformation =
|
||||
storageInformation.categoriesSpaceInformation["otherFiles"]
|
||||
|
||||
// TODO: Remove musicFilesSpaceInformation when MTP will be implemented
|
||||
const musicFilesSpaceInformation =
|
||||
storageInformation.categoriesSpaceInformation["audioFiles"]
|
||||
|
||||
if (!otherFilesSpaceInformation) {
|
||||
return {}
|
||||
}
|
||||
|
||||
const totalSize =
|
||||
otherFilesSpaceInformation.spaceUsedBytes +
|
||||
musicFilesSpaceInformation.spaceUsedBytes
|
||||
const totalSizeString = formatBytes(totalSize)
|
||||
|
||||
return {
|
||||
[`${key}fileCategoryOtherFilesItemNameSize`]: {
|
||||
text: `(${otherFilesSpaceInformation.spaceUsedString})`,
|
||||
text: `(${totalSizeString})`,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -97,11 +107,17 @@ const generateStorageSummary = (
|
||||
storageInformation.categoriesSpaceInformation["otherFiles"]
|
||||
|
||||
if (otherFilesSpaceInformation !== undefined) {
|
||||
const { spaceUsedBytes, spaceUsedString } =
|
||||
// TODO: Remove musicFilesSpaceInformation when MTP will be implemented
|
||||
const musicFilesSpaceInformation =
|
||||
storageInformation.categoriesSpaceInformation["audioFiles"]
|
||||
const { spaceUsedBytes } =
|
||||
storageInformation.categoriesSpaceInformation["otherFiles"]
|
||||
|
||||
const totalSize = spaceUsedBytes + musicFilesSpaceInformation.spaceUsedBytes
|
||||
const totalSizeString = formatBytes(totalSize)
|
||||
|
||||
segments.push(
|
||||
getSegmentBarItemData("otherFiles", spaceUsedBytes, spaceUsedString)
|
||||
getSegmentBarItemData("otherFiles", totalSize, totalSizeString)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -114,6 +130,9 @@ const generateStorageSummary = (
|
||||
)
|
||||
|
||||
return {
|
||||
[`${key}storageSummaryFreeBytes`]: {
|
||||
value: storageInformation.freeSpaceBytes,
|
||||
},
|
||||
[`${key}storageSummaryUsedText`]: {
|
||||
text: `Used: ${storageInformation.usedSpaceString}`,
|
||||
},
|
||||
|
||||
@@ -10,6 +10,13 @@ import { generateStoragePage, generateStoragePageKey } from "./storage-page"
|
||||
export const generateMcFileManagerView: ComponentGenerator<
|
||||
McFileManagerConfig
|
||||
> = (key, config) => {
|
||||
const temporaryConfig = {
|
||||
...config,
|
||||
categories: config.categories.filter(
|
||||
(category) => category.entityType !== "audioFiles"
|
||||
),
|
||||
}
|
||||
|
||||
return {
|
||||
[key]: {
|
||||
component: "block-plain",
|
||||
@@ -29,7 +36,7 @@ export const generateMcFileManagerView: ComponentGenerator<
|
||||
fileManagerLoader: {
|
||||
component: "entities-loader",
|
||||
config: {
|
||||
entityTypes: config.categories.map((category) => category.entityType),
|
||||
entityTypes: temporaryConfig.categories.map((category) => category.entityType),
|
||||
text: "Loading, please wait...",
|
||||
},
|
||||
layout: {
|
||||
@@ -53,20 +60,20 @@ export const generateMcFileManagerView: ComponentGenerator<
|
||||
config: {
|
||||
formOptions: {
|
||||
defaultValues: {
|
||||
activeStoragePath: config.storages[0].path,
|
||||
activeStoragePath: temporaryConfig.storages[0].path,
|
||||
},
|
||||
},
|
||||
},
|
||||
childrenKeys: config.storages.map((_storage, index) =>
|
||||
childrenKeys: temporaryConfig.storages.map((_storage, index) =>
|
||||
generateStoragePageKey(index.toString())
|
||||
),
|
||||
},
|
||||
...config.storages.reduce((acc, storage, index) => {
|
||||
...temporaryConfig.storages.reduce((acc, storage, index) => {
|
||||
return {
|
||||
...acc,
|
||||
...generateStoragePage(index.toString(), {
|
||||
storage,
|
||||
categories: config.categories,
|
||||
categories: temporaryConfig.categories,
|
||||
}),
|
||||
}
|
||||
}, {}),
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import React, { useEffect, useRef, useState } from "react"
|
||||
import React, { useEffect, useState } from "react"
|
||||
import { APIFC } from "generic-view/utils"
|
||||
import styled, { css, keyframes } from "styled-components"
|
||||
import { ToastConfig } from "generic-view/models"
|
||||
@@ -19,61 +19,58 @@ export const Toast: APIFC<undefined, ToastConfig> = ({
|
||||
...props
|
||||
}) => {
|
||||
const toastVisibilityDuration = config?.visibilityDuration ?? 2000
|
||||
|
||||
const dispatch = useDispatch<Dispatch>()
|
||||
const toastsQueue = useSelector(
|
||||
(state: ReduxRootState) => state.genericToasts.queue
|
||||
)
|
||||
const [opened, setOpened] = useState(false)
|
||||
|
||||
const [visible, setVisible] = useState(false)
|
||||
|
||||
const animationTimeoutRef = useRef<NodeJS.Timeout>()
|
||||
const visibilityTimeoutRef = useRef<NodeJS.Timeout>()
|
||||
|
||||
const [exiting, setExiting] = useState(false)
|
||||
useEffect(() => {
|
||||
const toastOpened =
|
||||
const isToastOpened =
|
||||
toastsQueue.length > 0 && toastsQueue[0].key === props.componentKey
|
||||
setOpened(toastOpened)
|
||||
if (toastOpened) {
|
||||
|
||||
if (isToastOpened) {
|
||||
setExiting(false)
|
||||
setVisible(true)
|
||||
|
||||
const visibilityTimeout = setTimeout(() => {
|
||||
setExiting(true)
|
||||
}, toastVisibilityDuration)
|
||||
|
||||
return () => clearTimeout(visibilityTimeout)
|
||||
}
|
||||
}, [props.componentKey, toastsQueue])
|
||||
return undefined
|
||||
}, [props.componentKey, toastsQueue, toastVisibilityDuration])
|
||||
|
||||
useEffect(() => {
|
||||
if (visible) {
|
||||
visibilityTimeoutRef.current = setTimeout(() => {
|
||||
setVisible(false)
|
||||
}, toastVisibilityDuration + toastAnimationDuration)
|
||||
} else {
|
||||
animationTimeoutRef.current = setTimeout(() => {
|
||||
setOpened(false)
|
||||
}, toastAnimationDuration)
|
||||
}
|
||||
return () => {
|
||||
clearTimeout(visibilityTimeoutRef.current)
|
||||
clearTimeout(animationTimeoutRef.current)
|
||||
}
|
||||
}, [toastVisibilityDuration, visible])
|
||||
|
||||
useEffect(() => {
|
||||
if (!opened) {
|
||||
dispatch(removeToast())
|
||||
}
|
||||
}, [dispatch, opened])
|
||||
}, [dispatch])
|
||||
|
||||
useEffect(() => {
|
||||
if (exiting) {
|
||||
const removeTimeout = setTimeout(() => {
|
||||
setVisible(false)
|
||||
dispatch(removeToast())
|
||||
}, toastAnimationDuration)
|
||||
|
||||
return () => clearTimeout(removeTimeout)
|
||||
}
|
||||
return undefined
|
||||
}, [exiting, dispatch])
|
||||
|
||||
if (!visible) return null
|
||||
|
||||
if (!opened) return null
|
||||
return (
|
||||
<ToastWrapper
|
||||
{...props}
|
||||
$opened={visible}
|
||||
$animationDuration={toastAnimationDuration}
|
||||
>
|
||||
<ToastWrapper {...props} $exiting={exiting} $animationDuration={toastAnimationDuration}>
|
||||
{children}
|
||||
</ToastWrapper>
|
||||
)
|
||||
}
|
||||
|
||||
const transitionIn = keyframes`
|
||||
const slideIn = keyframes`
|
||||
from {
|
||||
transform: translateX(calc(100% + 7rem));
|
||||
}
|
||||
@@ -82,7 +79,7 @@ const transitionIn = keyframes`
|
||||
}
|
||||
`
|
||||
|
||||
const transitionOut = keyframes`
|
||||
const slideOut = keyframes`
|
||||
from {
|
||||
transform: translateX(0);
|
||||
}
|
||||
@@ -91,10 +88,7 @@ const transitionOut = keyframes`
|
||||
}
|
||||
`
|
||||
|
||||
const ToastWrapper = styled.div<{
|
||||
$opened?: boolean
|
||||
$animationDuration: number
|
||||
}>`
|
||||
const ToastWrapper = styled.div<{ $exiting: boolean; $animationDuration: number }>`
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
@@ -108,16 +102,12 @@ const ToastWrapper = styled.div<{
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
|
||||
animation: ${({ $exiting, $animationDuration }) =>
|
||||
$exiting
|
||||
? css`${slideOut} ${$animationDuration}ms ease-in forwards`
|
||||
: css`${slideIn} ${$animationDuration}ms ease-out`};
|
||||
|
||||
p {
|
||||
color: ${({ theme }) => theme.color.black};
|
||||
}
|
||||
|
||||
${({ $opened, $animationDuration }) =>
|
||||
$opened
|
||||
? css`
|
||||
animation: ${transitionIn} ${$animationDuration}ms ease-in-out;
|
||||
`
|
||||
: css`
|
||||
animation: ${transitionOut} ${$animationDuration}ms ease-in-out;
|
||||
`}
|
||||
`
|
||||
|
||||
@@ -160,7 +160,7 @@ const BackupCreateForm: FunctionComponent<BackupCreateConfig> = ({
|
||||
closeAction={backupCloseButtonAction}
|
||||
nextAction={backupCreateButtonAction}
|
||||
/>
|
||||
<Modal.SizeController config={{ size: "medium" }} />
|
||||
<Modal.SizeController config={{ size: "small" }} />
|
||||
</>
|
||||
)}
|
||||
{step === Step.Password && (
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
/**
|
||||
* Copyright (c) Mudita sp. z o.o. All rights reserved.
|
||||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import React, { useMemo } from "react"
|
||||
import { APIFC, IconType } from "generic-view/utils"
|
||||
import { ButtonAction, EntitiesDeleteErrorConfig } from "generic-view/models"
|
||||
import { Modal } from "../../interactive/modal/modal"
|
||||
import { intl } from "Core/__deprecated__/renderer/utils/intl"
|
||||
import { defineMessages } from "react-intl"
|
||||
import { ButtonSecondary } from "../../buttons/button-secondary"
|
||||
import { Typography } from "../../typography"
|
||||
import { useDispatch, useSelector } from "react-redux"
|
||||
import {
|
||||
clearAfterDeleteEntities,
|
||||
selectActiveApiDeviceId,
|
||||
selectFailedEntities,
|
||||
selectSuccessDeletedEntitiesIds,
|
||||
} from "generic-view/store"
|
||||
import { Dispatch, ReduxRootState } from "Core/__deprecated__/renderer/store"
|
||||
import styled from "styled-components"
|
||||
import { modalTransitionDuration } from "generic-view/theme"
|
||||
|
||||
const messages = defineMessages({
|
||||
allModalTitle: {
|
||||
id: "module.genericViews.entities.delete.failure.all.modalTitle",
|
||||
},
|
||||
someModalTitle: {
|
||||
id: "module.genericViews.entities.delete.failure.some.modalTitle",
|
||||
},
|
||||
allModalDescription: {
|
||||
id: "module.genericViews.entities.delete.failure.all.modalDescription",
|
||||
},
|
||||
someModalDescription: {
|
||||
id: "module.genericViews.entities.delete.failure.some.modalDescription",
|
||||
},
|
||||
})
|
||||
|
||||
export const EntitiesDeleteError: APIFC<
|
||||
undefined,
|
||||
EntitiesDeleteErrorConfig
|
||||
> = ({ config, data }) => {
|
||||
const dispatch = useDispatch<Dispatch>()
|
||||
const deviceId = useSelector(selectActiveApiDeviceId)!
|
||||
|
||||
const successIds = useSelector((state: ReduxRootState) => {
|
||||
return selectSuccessDeletedEntitiesIds(state, {
|
||||
deviceId,
|
||||
entitiesType: config.entitiesType,
|
||||
})
|
||||
})
|
||||
|
||||
const failedFiles = useSelector((state: ReduxRootState) => {
|
||||
return selectFailedEntities(state, {
|
||||
deviceId,
|
||||
entitiesType: config.entitiesType,
|
||||
})
|
||||
})
|
||||
|
||||
const title = useMemo(() => {
|
||||
if (failedFiles && failedFiles?.length > 0) {
|
||||
return intl.formatMessage(messages.someModalTitle)
|
||||
} else {
|
||||
return intl.formatMessage(messages.allModalTitle)
|
||||
}
|
||||
}, [failedFiles])
|
||||
|
||||
const description = useMemo(() => {
|
||||
if (failedFiles && failedFiles?.length > 0) {
|
||||
return intl.formatMessage(messages.someModalDescription, {
|
||||
succeededFiles: successIds.length,
|
||||
failedFiles: failedFiles.length,
|
||||
})
|
||||
} else {
|
||||
return intl.formatMessage(messages.allModalDescription)
|
||||
}
|
||||
}, [successIds, failedFiles])
|
||||
|
||||
const closeActions: ButtonAction[] = [
|
||||
{
|
||||
type: "close-modal",
|
||||
modalKey: config.modalKey,
|
||||
},
|
||||
{
|
||||
type: "custom",
|
||||
callback: () => {
|
||||
setTimeout(() => {
|
||||
dispatch(
|
||||
clearAfterDeleteEntities({
|
||||
deviceId,
|
||||
entitiesType: config.entitiesType,
|
||||
})
|
||||
)
|
||||
}, modalTransitionDuration)
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
return (
|
||||
<>
|
||||
<Modal.TitleIcon config={{ type: IconType.Failure }} />
|
||||
<Modal.Title>{title}</Modal.Title>
|
||||
<Typography.P1>{description}</Typography.P1>
|
||||
{failedFiles && failedFiles.length > 0 && (
|
||||
<Modal.ScrollableContent>
|
||||
<FilesList>
|
||||
{failedFiles.map((file) => (
|
||||
<li key={file.id as string}>
|
||||
<FileListItem>
|
||||
<Typography.P1>{file.fileName as string}</Typography.P1>
|
||||
</FileListItem>
|
||||
</li>
|
||||
))}
|
||||
</FilesList>
|
||||
</Modal.ScrollableContent>
|
||||
)}
|
||||
<Modal.Buttons config={{ vertical: true }}>
|
||||
<ButtonSecondary config={{ text: "Close", actions: closeActions }} />
|
||||
</Modal.Buttons>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const FilesList = styled.ul`
|
||||
li {
|
||||
p {
|
||||
&:first-child {
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
white-space: nowrap;
|
||||
color: ${({ theme }) => theme.color.grey2};
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const FileListItem = styled.div`
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: nowrap;
|
||||
gap: 0.4rem;
|
||||
justify-content: space-between;
|
||||
overflow: hidden;
|
||||
`
|
||||
@@ -4,19 +4,20 @@
|
||||
*/
|
||||
|
||||
import React, { useEffect, useState } from "react"
|
||||
import { APIFC } from "generic-view/utils"
|
||||
import styled from "styled-components"
|
||||
import { Tag } from "../labels/tag"
|
||||
import { useSelector } from "react-redux"
|
||||
import { defineMessages } from "react-intl"
|
||||
import { intl } from "Core/__deprecated__/renderer/utils/intl"
|
||||
import axios from "axios"
|
||||
import styled from "styled-components"
|
||||
import { MuditaCenterServerRoutes } from "shared/utils"
|
||||
import { selectActiveDeviceConfiguration } from "generic-view/store"
|
||||
import { APIFC } from "generic-view/utils"
|
||||
import {
|
||||
OverviewOsVersionConfig,
|
||||
OverviewOsVersionData,
|
||||
} from "generic-view/models"
|
||||
import { useSelector } from "react-redux"
|
||||
import { selectActiveDeviceConfiguration } from "generic-view/store"
|
||||
import axios from "axios"
|
||||
import { intl } from "Core/__deprecated__/renderer/utils/intl"
|
||||
import logger from "Core/__deprecated__/main/utils/logger"
|
||||
import { Tag } from "../labels/tag"
|
||||
|
||||
const dataTestIds = {
|
||||
versionWrapper: "version-wrapper",
|
||||
@@ -30,8 +31,7 @@ const messages = defineMessages({
|
||||
updateActionLabel: { id: "module.genericViews.update.actionLabel" },
|
||||
})
|
||||
|
||||
const devToken = process.env.KOMPAKT_OS_UPDATE_DEV_TOKEN
|
||||
const serverUrl = process.env.MUDITA_CENTER_SERVER_V2_URL
|
||||
const serverUrl = process.env.MUDITA_CENTER_SERVER_URL
|
||||
|
||||
export const OverviewOsVersion: APIFC<
|
||||
OverviewOsVersionData,
|
||||
@@ -49,12 +49,11 @@ export const OverviewOsVersion: APIFC<
|
||||
return
|
||||
}
|
||||
try {
|
||||
const devTokenParam = devToken ? `&devToken=${devToken}` : ""
|
||||
const { data } = await axios.get<{
|
||||
available: boolean
|
||||
versionName?: string
|
||||
}>(
|
||||
`${serverUrl}/kompakt-os-update-availability?imei=${otaApiKey}&version=${osVersionTimestamp}${devTokenParam}`
|
||||
`${serverUrl}/${MuditaCenterServerRoutes.KompaktOsUpdateAvailability}?imei=${otaApiKey}&version=${osVersionTimestamp}`
|
||||
)
|
||||
if (data && data.available && data.versionName) {
|
||||
setAvailableUpdateName(data.versionName)
|
||||
|
||||
@@ -17,11 +17,13 @@ import { McContactsSearchResult } from "./contacts/mc-contacts-search-result"
|
||||
import { FilesManagerUploadProgress } from "./files-manager-upload/files-manager-upload-progress"
|
||||
import { FilesManagerUploadFinished } from "./files-manager-upload/files-manager-upload-finished"
|
||||
import { FilesManagerUploadValidationError } from "./files-manager-upload/files-manager-upload-validation-error"
|
||||
import { EntitiesDeleteError } from "./entities/entities-delete-error"
|
||||
import {
|
||||
aboutDataBox,
|
||||
backupCreate,
|
||||
backupRestore,
|
||||
backupRestoreAvailable,
|
||||
entitiesDeleteError,
|
||||
importContacts,
|
||||
incomingFeatureInfo,
|
||||
lastBackupDate,
|
||||
@@ -41,6 +43,7 @@ export const predefinedComponents = {
|
||||
[backupRestoreAvailable.key]: BackupRestoreAvailable,
|
||||
[backupCreate.key]: BackupCreate,
|
||||
[backupRestore.key]: BackupRestore,
|
||||
[entitiesDeleteError.key]: EntitiesDeleteError,
|
||||
[importContacts.key]: ImportContacts,
|
||||
[mcDataMigration.key]: DataMigration,
|
||||
[incomingFeatureInfo.key]: IncomingFeatureInfo,
|
||||
|
||||
@@ -13,11 +13,7 @@ import {
|
||||
generateMcOverviewSummaryData,
|
||||
generateMcOverviewSummaryLayout,
|
||||
} from "./summary/summary"
|
||||
import {
|
||||
OverviewConfig,
|
||||
OverviewData,
|
||||
ServerAPIDeviceOSVersion,
|
||||
} from "device/models"
|
||||
import { OverviewConfig, OverviewData } from "device/models"
|
||||
import { generateMcOverviewTileListLayout } from "./section-tile-list/section-tile-list"
|
||||
import {
|
||||
generateMcOverviewUpdateData,
|
||||
@@ -54,6 +50,8 @@ export const generateMcOverviewLayout: ViewGenerator<OverviewConfig> = (
|
||||
},
|
||||
layout: {
|
||||
padding: "32px",
|
||||
height: "100%",
|
||||
maxHeight: "739px",
|
||||
gridLayout: {
|
||||
rows:
|
||||
sections.length === 3
|
||||
@@ -71,17 +69,9 @@ export const generateMcOverviewLayout: ViewGenerator<OverviewConfig> = (
|
||||
return generateViewConfig(mainConfig, [summary, ...sections])
|
||||
}
|
||||
|
||||
export const generateMcOverviewData = (
|
||||
data: OverviewData,
|
||||
config?: View,
|
||||
updateData?: ServerAPIDeviceOSVersion
|
||||
) => {
|
||||
export const generateMcOverviewData = (data: OverviewData, config?: View) => {
|
||||
const summary = generateMcOverviewSummaryData(data.summary)
|
||||
const sections = generateMcOverviewUpdateData(
|
||||
data.sections,
|
||||
config,
|
||||
updateData
|
||||
)
|
||||
const sections = generateMcOverviewUpdateData(data.sections, config)
|
||||
return {
|
||||
...summary,
|
||||
...sections,
|
||||
|
||||
@@ -4,11 +4,7 @@
|
||||
*/
|
||||
|
||||
import { Subview, View, ViewGenerator } from "generic-view/utils"
|
||||
import {
|
||||
OverviewData,
|
||||
ServerAPIDeviceOSVersion,
|
||||
UpdateTileConfig,
|
||||
} from "device/models"
|
||||
import { OverviewData, UpdateTileConfig } from "device/models"
|
||||
import semver from "semver/preload"
|
||||
|
||||
enum UpdateKeys {
|
||||
@@ -54,8 +50,7 @@ export const generateMcOverviewUpdateLayout: ViewGenerator<
|
||||
|
||||
export const generateMcOverviewUpdateData = (
|
||||
data: OverviewData["sections"],
|
||||
config?: View,
|
||||
updateData?: ServerAPIDeviceOSVersion
|
||||
config?: View
|
||||
) => {
|
||||
const updateKey = Object.entries(config || {}).find(([key, item]) => {
|
||||
return (
|
||||
@@ -66,13 +61,10 @@ export const generateMcOverviewUpdateData = (
|
||||
const newData = { ...data }
|
||||
delete newData?.[updateKey as keyof typeof data]
|
||||
const baseUpdateData = data?.[updateKey as keyof typeof data]
|
||||
if (updateData && baseUpdateData) {
|
||||
if (baseUpdateData) {
|
||||
let updateAvailable = false
|
||||
try {
|
||||
updateAvailable = semver.gt(
|
||||
semver.coerce(updateData.version)?.raw ?? "",
|
||||
semver.coerce(baseUpdateData.version as string)?.raw ?? ""
|
||||
)
|
||||
updateAvailable = !!semver.coerce(baseUpdateData.version as string)?.raw
|
||||
} catch {
|
||||
console.log("error")
|
||||
updateAvailable = false
|
||||
@@ -84,8 +76,8 @@ export const generateMcOverviewUpdateData = (
|
||||
...baseUpdateData,
|
||||
update: {
|
||||
available: true,
|
||||
updateVersion: updateData.version,
|
||||
updateText: updateData.text,
|
||||
updateVersion: baseUpdateData.version,
|
||||
updateText: baseUpdateData.text,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -30,7 +30,9 @@ export const generateMcOverviewSummaryLayout: ViewGenerator<
|
||||
flexPlacement: {
|
||||
alignSelf: "center",
|
||||
},
|
||||
padding: "32px 27px 16px 27px",
|
||||
width: "177px",
|
||||
height: "319px",
|
||||
margin: "16px auto",
|
||||
},
|
||||
config: {
|
||||
// TODO: implement support for config.imgVariant
|
||||
@@ -71,6 +73,7 @@ export const generateMcOverviewSummaryLayout: ViewGenerator<
|
||||
component: "divider",
|
||||
layout: {
|
||||
margin: "0 -24px",
|
||||
width: "280px",
|
||||
},
|
||||
},
|
||||
[SummaryKeys.About]: {
|
||||
|
||||