diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index fef76b63..00000000 --- a/.eslintignore +++ /dev/null @@ -1,10 +0,0 @@ -node_modules -__tests__/ -.vscode/ -android/ -coverage/ -ios/ -.expo -.expo-shared -docs/ -cli/ diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 41bfa7d3..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,104 +0,0 @@ -const path = require('path'); - -module.exports = { - extends: ['expo', 'plugin:tailwindcss/recommended', 'prettier'], - plugins: [ - 'prettier', - 'unicorn', - '@typescript-eslint', - 'unused-imports', - 'tailwindcss', - 'simple-import-sort', - 'eslint-plugin-react-compiler', - ], - parserOptions: { - project: './tsconfig.json', - }, - rules: { - 'prettier/prettier': 'warn', - 'unicorn/filename-case': [ - 'error', - { - case: 'kebabCase', - ignore: ['/android', '/ios'], - }, - ], - 'max-params': ['error', 3], // Limit the number of parameters in a function to use object instead - 'max-lines-per-function': ['error', 70], - 'react/display-name': 'off', - 'react/no-inline-styles': 'off', - 'react/destructuring-assignment': 'off', // Vscode doesn't support automatically destructuring, it's a pain to add a new variable - 'react/require-default-props': 'off', // Allow non-defined react props as undefined - '@typescript-eslint/comma-dangle': 'off', // Avoid conflict rule between Eslint and Prettier - '@typescript-eslint/consistent-type-imports': [ - 'warn', - { - prefer: 'type-imports', - fixStyle: 'inline-type-imports', - disallowTypeAnnotations: true, - }, - ], // Ensure `import type` is used when it's necessary - 'import/prefer-default-export': 'off', // Named export is easier to refactor automatically - 'import/no-cycle': ['error', { maxDepth: '∞' }], - 'tailwindcss/classnames-order': [ - 'warn', - { - officialSorting: true, - }, - ], // Follow the same ordering as the official plugin `prettier-plugin-tailwindcss` - 'simple-import-sort/imports': 'error', // Import configuration for `eslint-plugin-simple-import-sort` - 'simple-import-sort/exports': 'error', // Export configuration for `eslint-plugin-simple-import-sort` - '@typescript-eslint/no-unused-vars': 'off', - 'tailwindcss/no-custom-classname': 'off', - 'unused-imports/no-unused-imports': 'error', - 'unused-imports/no-unused-vars': [ - 'error', - { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', - }, - ], - }, - overrides: [ - // Configuration for translations files (i18next) - { - files: ['src/translations/*.json'], - extends: ['plugin:i18n-json/recommended'], - rules: { - 'i18n-json/valid-message-syntax': [ - 2, - { - syntax: path.resolve('./scripts/i18next-syntax-validation.js'), - }, - ], - 'i18n-json/valid-json': 2, - 'i18n-json/sorted-keys': [ - 2, - { - order: 'asc', - indentSpaces: 2, - }, - ], - 'i18n-json/identical-keys': [ - 2, - { - filePath: path.resolve('./src/translations/en.json'), - }, - ], - 'prettier/prettier': [ - 0, - { - singleQuote: true, - endOfLine: 'auto', - }, - ], - }, - }, - { - // Configuration for testing files - files: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], - extends: ['plugin:testing-library/react'], - }, - ], -}; diff --git a/__mocks__/expo-localization.ts b/__mocks__/expo-localization.ts new file mode 100644 index 00000000..1fc3f945 --- /dev/null +++ b/__mocks__/expo-localization.ts @@ -0,0 +1,4 @@ +export const locale = 'en-US'; +export const locales = ['en-US']; +export const timezone = 'UTC'; +export const isRTL = false; diff --git a/android/app/build.gradle b/android/app/build.gradle index 39e5eb17..7879992f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -14,6 +14,7 @@ react { hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() // Use Expo CLI to bundle the app, this ensures the Metro config // works correctly with Expo projects. cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) @@ -78,7 +79,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ -def jscFlavor = 'org.webkit:android-jsc:+' +def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' android { ndkVersion rootProject.ext.ndkVersion @@ -156,15 +157,15 @@ dependencies { if (isGifEnabled) { // For animated gif support - implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") + implementation("com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}") } if (isWebpEnabled) { // For webp support - implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") + implementation("com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}") if (isWebpAnimatedEnabled) { // Animated webp support - implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") + implementation("com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}") } } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index bc987bba..e172a53a 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -25,7 +25,6 @@ - diff --git a/android/app/src/main/java/com/obytes/development/MainApplication.kt b/android/app/src/main/java/com/obytes/development/MainApplication.kt index 2c05c424..3f35bc8d 100644 --- a/android/app/src/main/java/com/obytes/development/MainApplication.kt +++ b/android/app/src/main/java/com/obytes/development/MainApplication.kt @@ -1,4 +1,5 @@ package com.obytes.development +import com.facebook.react.common.assets.ReactFontManager import android.app.Application import android.content.res.Configuration @@ -24,7 +25,7 @@ class MainApplication : Application(), ReactApplication { override fun getPackages(): List { val packages = PackageList(this).packages // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); + // packages.add(MyReactNativePackage()) return packages } @@ -42,6 +43,9 @@ class MainApplication : Application(), ReactApplication { override fun onCreate() { super.onCreate() + // @generated begin xml-fonts-init - expo prebuild (DO NOT MODIFY) sync-da39a3ee5e6b4b0d3255bfef95601890afd80709 + + // @generated end xml-fonts-init SoLoader.init(this, OpenSourceMergedSoMapping) if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { // If you opted-in for the New Architecture, we load the native entry point for this app. diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 6351ad73..4a4b3078 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,15 +1,8 @@ -