Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ assignees: ''
---

## Component

<!-- Which component is affected? -->

- [ ] formulus (React Native mobile app)
- [ ] formulus-formplayer (React web app)
- [ ] synkronus (Go backend server)
Expand All @@ -16,39 +18,47 @@ assignees: ''
- [ ] Other (please specify)

## User Story

<!-- Optional: Help us understand the context and what you're trying to achieve -->
<!-- Format: As a [user type], I want to [goal] so that [benefit] -->
<!-- Example: As a developer, I want to submit a form so that my data is saved correctly -->

## Description

<!-- A clear and concise description of what the bug is -->

## Details

<!-- Optional: Additional structured details about the bug -->
<!-- Include information such as: -->
<!-- - When does this bug occur? (always, sometimes, specific conditions) -->
<!-- - What triggers the bug? -->
<!-- - Any patterns or related issues? -->

## Steps to Reproduce
1.
2.
3.

1.
2.
3.

## Expected Behavior

<!-- What you expected to happen -->

## Actual Behavior

<!-- What actually happened -->

## Acceptance Criteria

<!-- Optional: Define how to verify this bug is fixed and test the solution -->
<!-- Example: -->
<!-- - [ ] The form submits successfully without errors -->
<!-- - [ ] Error message is displayed when validation fails -->
<!-- - [ ] The bug can be reproduced using the steps above -->

## Environment

<!-- Please provide relevant environment information -->

**OS:** <!-- e.g., macOS 14.0, Ubuntu 22.04, Windows 11 -->
Expand All @@ -58,9 +68,9 @@ assignees: ''
**Component version/branch:** <!-- e.g., main, v1.0.0 -->

## Additional Context

<!-- Add any other context, screenshots, error messages, or logs that might help -->

```
<!-- Paste relevant error messages or logs here -->
```

8 changes: 0 additions & 8 deletions formulus/.eslintignore

This file was deleted.

4 changes: 0 additions & 4 deletions formulus/.eslintrc.js

This file was deleted.

7 changes: 0 additions & 7 deletions formulus/.prettierrc.js

This file was deleted.

52 changes: 52 additions & 0 deletions formulus/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import reactPlugin from 'eslint-plugin-react';
import reactNativePlugin from 'eslint-plugin-react-native';
import hooksPlugin from 'eslint-plugin-react-hooks';
import prettierConfig from 'eslint-config-prettier';
import prettierPlugin from 'eslint-plugin-prettier';
import globals from 'globals';

export default tseslint.config(
{
ignores: [
'**/node_modules/**',
'**/android/**',
'**/ios/**',
'**/coverage/**',
'assets/webview/FormulusInjectionScript.js',
'src/api/synkronus/generated/**',
],
},
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ['**/*.{js,jsx,ts,tsx}'],
plugins: {
react: reactPlugin,
'react-native': reactNativePlugin,
'react-hooks': hooksPlugin,
prettier: prettierPlugin,
},
languageOptions: {
globals: {
...globals.browser,
...globals.es2021,
'react-native/react-native': true,
},
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
},
rules: {
...hooksPlugin.configs.recommended.rules,
'react/react-in-jsx-scope': 'off',
'react-native/no-inline-styles': 'warn',
'react-native/no-color-literals': 'warn',
Copy link
Author

@Jexsie Jexsie Dec 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is to enforce @IamLRB's UI tokens. All occurances of iniline styles and color literals will be trigger warnings.
All color literals will have to be defined in the tokens

'prettier/prettier': 'error',
},
},
prettierConfig,
);
2 changes: 1 addition & 1 deletion formulus/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = {
export default {
preset: 'react-native',
testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'],
// Force Jest to exit after all tests complete
Expand Down
8 changes: 6 additions & 2 deletions formulus/metro.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config');
import {getDefaultConfig, mergeConfig} from '@react-native/metro-config';
import path from 'node:path';
import {fileURLToPath} from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

/**
* Metro configuration
Expand All @@ -8,4 +12,4 @@ const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config');
*/
const config = {};

module.exports = mergeConfig(getDefaultConfig(__dirname), config);
export default mergeConfig(getDefaultConfig(__dirname), config);
94 changes: 52 additions & 42 deletions formulus/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "formulus-app",
"version": "0.0.1",
"type": "module",
"private": true,
"scripts": {
"android": "react-native run-android",
Expand All @@ -19,57 +20,66 @@
"dependencies": {
"@notifee/react-native": "^9.1.8",
"@nozbe/watermelondb": "^0.28.0",
"@react-native-async-storage/async-storage": "^1.24.0",
"@react-native-documents/picker": "^10.1.5",
"@react-navigation/bottom-tabs": "^7.8.11",
"@react-navigation/native": "^7.1.8",
"@react-navigation/stack": "^7.3.1",
"@testing-library/react-native": "^13.2.0",
"react": "19.0.0",
"react-native": "0.79.2",
"react-native-device-info": "^14.0.4",
"@react-native-async-storage/async-storage": "^2.2.0",
"@react-native-documents/picker": "^11.0.3",
"@react-navigation/bottom-tabs": "^7.9.0",
"@react-navigation/native": "^7.1.26",
"@react-navigation/stack": "^7.6.13",
"@testing-library/react-native": "^13.3.3",
"react": "19.2.3",
"react-native": "0.83.1",
"react-native-device-info": "^15.0.1",
"react-native-fs": "^2.20.0",
"react-native-geolocation-service": "^5.3.1",
"react-native-gesture-handler": "^2.25.0",
"react-native-gesture-handler": "^2.30.0",
"react-native-image-picker": "^8.2.1",
"react-native-keychain": "^10.0.0",
"react-native-nitro-modules": "^0.29.4",
"react-native-nitro-sound": "^0.2.5",
"react-native-permissions": "^5.4.2",
"react-native-safe-area-context": "^5.4.0",
"react-native-screens": "^4.10.0",
"react-native-signature-canvas": "^4.7.2",
"react-native-url-polyfill": "^2.0.0",
"react-native-vector-icons": "^10.2.0",
"react-native-vision-camera": "^4.7.2",
"react-native-webview": "^13.13.5"
"react-native-nitro-modules": "^0.32.0",
"react-native-nitro-sound": "^0.2.10",
"react-native-permissions": "^5.4.4",
"react-native-safe-area-context": "^5.6.2",
"react-native-screens": "^4.19.0",
"react-native-signature-canvas": "^5.0.2",
"react-native-url-polyfill": "^3.0.0",
"react-native-vector-icons": "^10.3.0",
"react-native-vision-camera": "^4.7.3",
"react-native-webview": "^13.16.0"
},
"devDependencies": {
"@babel/core": "^7.25.2",
"@babel/plugin-proposal-decorators": "^7.27.1",
"@babel/preset-env": "^7.25.3",
"@babel/runtime": "^7.25.0",
"@openapitools/openapi-generator-cli": "^2.20.2",
"@react-native-community/cli": "18.0.0",
"@react-native-community/cli-platform-android": "18.0.0",
"@react-native-community/cli-platform-ios": "18.0.0",
"@react-native/babel-preset": "0.79.2",
"@react-native/eslint-config": "0.79.2",
"@react-native/metro-config": "0.79.2",
"@react-native/typescript-config": "0.79.2",
"@babel/core": "^7.28.5",
"@babel/plugin-proposal-decorators": "^7.28.0",
"@babel/preset-env": "^7.28.5",
"@babel/runtime": "^7.28.4",
"@eslint/compat": "^2.0.0",
"@eslint/eslintrc": "^3.3.3",
"@eslint/js": "^9.39.2",
"@openapitools/openapi-generator-cli": "^2.26.0",
"@react-native-community/cli": "20.0.2",
"@react-native-community/cli-platform-android": "20.0.2",
"@react-native-community/cli-platform-ios": "20.0.2",
"@react-native/babel-preset": "0.83.1",
"@react-native/eslint-config": "0.83.1",
"@react-native/metro-config": "0.83.1",
"@react-native/typescript-config": "0.83.1",
"@types/fs-extra": "^11.0.4",
"@types/jest": "^29.5.14",
"@types/node": "^20.11.30",
"@types/react": "^19.0.0",
"@types/jest": "^30.0.0",
"@types/node": "^25.0.3",
"@types/react": "^19.2.7",
"@types/react-native-vector-icons": "^6.4.18",
"@types/react-test-renderer": "^19.0.0",
"eslint": "^8.19.0",
"jest": "^29.7.0",
"eslint-config-prettier": "8.10.2",
"prettier": "2.8.8",
"react-test-renderer": "19.0.0",
"@types/react-test-renderer": "^19.1.0",
"eslint": "^9.39.2",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-native": "^5.0.0",
"globals": "^16.5.0",
"jest": "^30.2.0",
"prettier": "3.7.4",
"react-test-renderer": "19.2.3",
"ts-node": "^10.9.2",
"typescript": "^5.0.4"
"typescript": "^5.9.3",
"typescript-eslint": "^8.51.0"
},
"engines": {
"node": ">=18"
Expand Down
Loading
Loading