From 08879ddab1f928a7d2feb8ae1247a4e2b1544bb2 Mon Sep 17 00:00:00 2001 From: Michael Amaral Date: Sat, 9 Nov 2024 19:34:18 -0300 Subject: [PATCH] chore(refactoring): adding codeway rules + semgrep --- codeway/rules/performance.yml | 13 ++ codeway/rules/security.yml | 29 +++++ codeway/rules/structure.yml | 185 +++++++++++++++++++++++++++++ codeway/rules/theme.yml | 146 +++++++++++++++++++++++ codeway/semgrep.txt | 91 ++++++++++++++ package.json | 5 +- src/components/Header/styles.ts | 3 +- src/components/Separator/styles.ts | 3 +- src/components/Touchable/index.tsx | 4 +- src/types/CheckBox.d.ts | 5 +- 10 files changed, 474 insertions(+), 10 deletions(-) create mode 100644 codeway/rules/performance.yml create mode 100644 codeway/rules/security.yml create mode 100644 codeway/rules/structure.yml create mode 100644 codeway/rules/theme.yml create mode 100644 codeway/semgrep.txt diff --git a/codeway/rules/performance.yml b/codeway/rules/performance.yml new file mode 100644 index 00000000..27794de6 --- /dev/null +++ b/codeway/rules/performance.yml @@ -0,0 +1,13 @@ +rules: + - id: use-fastimage-instead-of-image + languages: [javascript, typescript] + message: 'Sempre use o módulo FastImage no lugar de styled.Image para melhorar a performance no carregamento de imagens.' + severity: WARNING + patterns: + - pattern-regex: "styled\\.Image" + paths: + exclude: + - '*.json' + metadata: + description: 'O FastImage oferece melhor desempenho no carregamento de imagens em comparação com o Image padrão do React Native. Use FastImage para garantir uma experiência de usuário mais fluida e eficiente.' + tags: ['styles', 'image', 'performance', 'fastimage'] diff --git a/codeway/rules/security.yml b/codeway/rules/security.yml new file mode 100644 index 00000000..04c5a1c5 --- /dev/null +++ b/codeway/rules/security.yml @@ -0,0 +1,29 @@ +rules: + - id: avoid-console-logs + languages: [javascript, typescript] + message: 'Parece que um console.log() ou similar foi esquecido. Remova para evitar exposição de informações.' + severity: WARNING + patterns: + - pattern-regex: "(console\\.log|console\\.warn|console\\.table|console\\.assert|console\\.count|console\\.dir|console\\.error|console\\.group|console\\.info)" + paths: + exclude: + - '*.json' + - 'src/bootstrap.tsx' + - '*.stories.tsx' + - 'src/components/FormError/index.tsx' + metadata: + description: 'Esta regra captura o uso de funções do console, como log ou warn, que podem ter sido deixadas acidentalmente. É importante remover esses logs em produção para evitar a exposição de informações sensíveis ou desnecessárias.' + tags: ['console', 'logs', 'debugging'] + + - id: avoid-console-tron-in-production + languages: [javascript, typescript] + message: 'Evite usar console.tron em builds de produção. Pode causar crashes silenciosos e dificultar o debugging.' + severity: WARNING + patterns: + - pattern-regex: "(console\\.tron\\.log|console\\.tron\\.warn|console\\.tron\\.table|console\\.tron\\.assert|console\\.tron\\.count|console\\.tron\\.dir|console\\.tron\\.error|console\\.tron\\.group|console\\.tron\\.info)" + paths: + exclude: + - '*.json' + metadata: + description: 'Esta regra detecta o uso de console.tron (Reactotron) em builds de produção, o que pode causar crashes silenciosos. Deve ser removido para evitar problemas graves no ambiente de produção.' + tags: ['reactotron', 'logs', 'debugging', 'production'] diff --git a/codeway/rules/structure.yml b/codeway/rules/structure.yml new file mode 100644 index 00000000..db5726f1 --- /dev/null +++ b/codeway/rules/structure.yml @@ -0,0 +1,185 @@ +rules: + - id: no-class-in-components + languages: [javascript, typescript] + message: 'Evite usar classes em componentes. Use funções ou hooks.' + severity: WARNING + patterns: + - pattern-regex: "class\\s?\\w+\\sextends" + paths: + exclude: + - '*.json' + - 'src/components/PinInput/lib/react-native-smooth-pincode-input/index.d.ts' + metadata: + description: 'Essa regra evita o uso de classes em componentes React. A abordagem funcional com hooks é recomendada para garantir código mais simples e fácil de manter.' + tags: ['classes', 'componentes', 'react'] + + - id: use-enum-instead-of-string-comparisons + languages: [javascript, typescript] + message: 'Use ENUM para comparações em vez de strings. Comparar strings diretamente torna o código menos escalável e mais suscetível a erros.' + severity: WARNING + patterns: + - pattern-regex: '(("|'').+("|'') (===|!==|>=|<=|>|<|=>|=<))|(===|!==|>=|<=|>|<|=>|=<) ("|'').+("|'')' + paths: + exclude: + - '*.json' + - '*.test.tsx' + - '**/**/svg/*' + - 'src/components/FormError/index.tsx' + - 'src/components/Image/index.tsx' + metadata: + description: 'Esta regra sugere o uso de ENUMs em vez de comparações diretas por string. O uso de ENUMs torna o código mais escalável e reduz a chance de erros em comparações lógicas.' + tags: ['comparações', 'enum', 'strings'] + + - id: use-specific-response-type-instead-of-axiosresponse + languages: [javascript, typescript] + message: 'Indique o tipo de dado retornado em vez de utilizar `AxiosResponse` diretamente. Isso ajuda a prever o formato dos dados e garante maior segurança de tipos.' + severity: WARNING + patterns: + - pattern-regex: "\\s?(Promise|AxiosResponse)" + paths: + exclude: + - '*.json' + - 'src/api/interceptors/*' + metadata: + description: 'Esta regra sugere o uso de tipos de dados específicos no lugar de `AxiosResponse` ao trabalhar com Axios. Usar tipos claros ajuda a melhorar a previsibilidade e a segurança dos dados retornados.' + tags: ['axios', 'tipagem', 'promises'] + + - id: return-only-request-data + languages: [javascript, typescript] + message: 'Sempre retorne diretamente o data da requisição: `const { data } = await request`. Isso simplifica o manuseio de respostas.' + severity: WARNING + patterns: + - pattern-regex: "return\\s+await\\s+request\\.[\\w]+\\(" + paths: + exclude: + - '*.json' + metadata: + description: 'Ao retornar respostas de requisições, sempre extraia e retorne o `data` diretamente, garantindo que o código seja mais simples e focado nos dados retornados pela requisição.' + tags: ['request', 'axios', 'data', 'async', 'await'] + + - id: prefer-type-for-simple-types + languages: [javascript, typescript] + message: 'Prefira o uso de Type para definição de tipos simples e união de tipos. Use Interface para objetos ou quando precisar de extensão.' + severity: WARNING + patterns: + - pattern-regex: "interface\\s+\\w+\\s+{\\s*[^extends].*Props.*" + paths: + exclude: + - '*.json' + metadata: + description: 'Recomenda-se o uso de Type para criação de tipos simples ou união de tipos em TypeScript. Interface ainda pode ser usada para definir a estrutura de objetos ou quando é necessária extensão.' + tags: ['typescript', 'types', 'interface', 'props', 'type'] + + - id: use-custom-touchable-component + languages: [javascript, typescript] + message: 'Sempre utilize o componente personalizado Touchable em vez de TouchableOpacity, TouchableHighlight ou Pressable diretamente.' + severity: WARNING + patterns: + - pattern-regex: "styled\\.(TouchableOpacity|TouchableHighlight|Pressable)" + paths: + exclude: + - '*.json' + metadata: + description: 'Para garantir consistência de comportamento e estilos, utilize o componente customizado Touchable no lugar dos componentes nativos TouchableOpacity, TouchableHighlight ou Pressable.' + tags: ['styles', 'touchable', 'components', 'custom-components'] + + - id: use-array-syntax-instead-of-array-generic + languages: [javascript, typescript] + message: "Utilize '[]' em vez de 'Array<>' para definir tipos de arrays." + severity: WARNING + patterns: + - pattern-regex: 'Array<.*>' + paths: + exclude: + - '*.json' + metadata: + description: "Prefira a notação '[]' para definir tipos de arrays em TypeScript, em vez da sintaxe genérica 'Array<>'. A notação de array é mais legível e comum." + tags: ['types', 'array', 'typescript'] + + - id: use-await-instead-of-then + languages: [javascript, typescript] + message: "Utilize 'await' em vez de '.then()' para lidar com Promises. Isso torna o código mais conciso e legível." + severity: WARNING + patterns: + - pattern-regex: ".*\\.then\\(.*\\).*" + paths: + exclude: + - '*.json' + - '*.spec.ts' + - '*.spec.js' + - '*.cy.ts' + metadata: + description: "Prefira usar 'await' em vez de '.then()' ao lidar com Promises, tornando o código mais simples e fácil de ler. Async/await é a abordagem mais moderna e recomendada." + tags: ['async', 'await', 'promises'] + + - id: api-call-only-in-stores + languages: [javascript, typescript] + message: 'Todas as chamadas de API devem ser feitas a partir do diretório /api e consumidas nas Stores para simplificar o fluxo de dados, facilitar o debug e promover a reutilização de dados no state.' + severity: WARNING + patterns: + - pattern-either: + - pattern-regex: "import\\s?{.*}\\s?from\\s?['\"]~\\/api['\"];" + - pattern-regex: "\\.\\s*(get|post|put|delete)\\s*\\(\\s*[`'\"].*\\/.*[`'\"].*\\)" + - pattern-regex: "Api\\." + paths: + exclude: + - '*.store.ts' + - '*.api.ts' + - '*.mock.ts' + - '*.test.ts' + - '*.spec.ts' + + metadata: + description: 'As chamadas de API devem ser feitas no diretório /api e consumidas exclusivamente dentro das Stores. Isso proporciona simplificação do fluxo de dados, facilidade de debug e reutilização eficiente de dados no state. Além disso, essa abordagem melhora a organização e a escalabilidade do código.' + tags: ['api', 'store', 'architecture', 'import', 'post', 'get'] + + - id: avoid-long-functions + languages: [javascript, typescript] + message: 'Funções com mais de 50 linhas devem ser refatoradas para melhorar a legibilidade e modularidade.' + severity: WARNING + patterns: + - pattern-regex: "function\\s+\\w+\\(.*\\)\\s*{((?:[^}]*\\n){50,})" + metadata: + description: 'Funções muito longas podem ser difíceis de entender e manter. Recomendado refatorar funções com mais de 50 linhas.' + tags: ['function', 'modularity', 'readability'] + + - id: avoid-global-variables + languages: [javascript, typescript] + message: 'Evite variáveis globais. Prefira escopo local ou modularização.' + severity: WARNING + patterns: + - pattern-regex: "var\\s+\\w+\\s*=\\s*.*;" + paths: + exclude: + - '*.module.ts' + metadata: + description: 'Variáveis globais podem causar conflitos em grandes aplicações. Prefira usar escopo local ou módulos.' + tags: ['variables', 'global', 'modularity'] + + - id: avoid-too-many-parameters + languages: [javascript, typescript] + message: 'Funções com mais de 3 parâmetros devem ser simplificadas. Prefira passar um objeto com as propriedades.' + severity: WARNING + patterns: + - pattern-regex: "function\\s+\\w+\\([^,]{4,}\\)" + paths: + exclude: + - '*/navigation/*' + metadata: + description: 'Funções com muitos parâmetros são difíceis de ler e manter. Prefira passar um objeto para maior clareza.' + tags: ['function', 'parameters', 'modularity'] + + - id: avoid-single-letter-variables + languages: [javascript, typescript] + message: 'Evite usar nomes de variáveis de uma única letra. Prefira nomes mais descritivos.' + severity: WARNING + patterns: + - pattern-regex: "(var|let|const)\\s+[a-zA-Z]\\s?=.*;" + paths: + exclude: + - '*.json' + - '*.test.*' + - '*.spec.*' + metadata: + description: 'Nomes de variáveis de uma única letra reduzem a legibilidade. Use nomes mais descritivos, exceto em loops simples.' + tags: ['variables', 'naming', 'readability'] diff --git a/codeway/rules/theme.yml b/codeway/rules/theme.yml new file mode 100644 index 00000000..36131dac --- /dev/null +++ b/codeway/rules/theme.yml @@ -0,0 +1,146 @@ +rules: + - id: avoid-scale-functions-react-native + languages: [javascript, typescript] + message: 'Evite usar funções como scale ou moderateScale para definir width ou height. O React Native já faz o scaling nativamente.' + severity: WARNING + patterns: + - pattern-regex: "(moderateScale|scale)\\(\\d+\\)" + paths: + exclude: + - '*.json' + metadata: + description: 'Esta regra sugere evitar o uso de funções como scale ou moderateScale, já que o React Native já faz o scaling de forma nativa, tornando o código mais simples e performático.' + tags: ['width', 'height', 'responsividade', 'react-native'] + + - id: avoid-stylesheet-use-styled-components + languages: [javascript, typescript] + message: 'Evite usar StyleSheet.create. Utilize styled-components para definir estilos.' + severity: WARNING + patterns: + - pattern-regex: "StyleSheet\\.create" + paths: + exclude: + - '*.json' + - 'src/components/PinInput/lib/react-native-smooth-pincode-input/SmoothPinCodeInput.js' + metadata: + description: 'Esta regra proíbe o uso de StyleSheet.create no React Native e recomenda a utilização de styled-components para definir estilos, promovendo uma abordagem mais moderna e flexível.' + tags: ['styles', 'react-native', 'styled-components'] + + - id: avoid-direct-theme-import + languages: [javascript, typescript] + message: 'Importação direta do tema não é permitida. Utilize um módulo intermediário para gerenciar temas.' + severity: WARNING + patterns: + - pattern-regex: "import\\s?{.*}\\s?from\\s?'~\/theme'" + paths: + exclude: + - '*.json' + metadata: + description: "Esta regra impede a importação direta do tema da aplicação ('~/theme'). É recomendada a utilização de módulos intermediários para gerenciar e manter a modularidade do tema no código." + tags: ['theme', 'import', 'modularidade'] + + - id: prefer-hairlinewidth-over-1px + languages: [javascript, typescript] + message: 'O ideal seria usar StyleSheet.hairlineWidth em vez de utilizar 1px ou 1 diretamente. Isso garante consistência de design em múltiplas resoluções.' + severity: WARNING + patterns: + - pattern-regex: "height:\\s?(\\${moderateScale\\(1\\)}|\\${scale\\(1\\)\\}|1;|1\\s|1px)" + paths: + exclude: + - '*.json' + metadata: + description: 'Esta regra sugere o uso de StyleSheet.hairlineWidth ao invés de definir height como 1 ou 1px diretamente, garantindo melhor consistência e adaptabilidade do design entre diferentes resoluções de tela.' + tags: ['styles', 'height', 'hairlineWidth'] + + - id: avoid-scale-or-moderatescale-in-fontsize + languages: [javascript, typescript] + message: 'Evite usar moderateScale ou scale no fontSize. O React Native já faz o escalonamento de fontes de forma nativa.' + severity: WARNING + patterns: + - pattern-regex: "(fontSize:\\s?\\${moderateScale\\(\\d+\\)}|fontSize:\\s?\\${scale\\(\\d+\\)})" + paths: + exclude: + - '*.json' + metadata: + description: 'Essa regra proíbe o uso de moderateScale ou scale para definir o tamanho de fonte. O React Native já realiza o escalonamento de fontes de forma nativa, garantindo consistência entre dispositivos.' + tags: ['styles', 'fontsize', 'scale', 'moderatescale'] + + - id: avoid-styled-text-use-typography + languages: [javascript, typescript] + message: 'Evite usar styled.Text. Use o componente Typography, que contém lógica de renderização e sizing de fontes.' + severity: WARNING + patterns: + - pattern-regex: "styled\\.Text`" + paths: + exclude: + - '*.json' + metadata: + description: 'O componente Typography deve ser utilizado no lugar de styled.Text, pois ele já contém a lógica de renderização e sizing de fontes, garantindo consistência e eficiência no código.' + tags: ['styled-components', 'typography', 'fonts'] + + - id: prefer-font-weight-bold + languages: [javascript, typescript] + message: 'Recomenda-se usar font-weight: bold; para evitar problemas de renderização no Android.' + severity: WARNING + patterns: + - pattern-regex: "font-weight:\\s?600" + paths: + exclude: + - '*.json' + metadata: + description: 'Evite usar font-weight: 600 em estilos, pois pode causar problemas de renderização em dispositivos Android. Use font-weight: bold para garantir uma exibição consistente.' + tags: ['styles', 'font-weight', 'android', 'bold'] + + - id: prefer-correct-border-radius-from-theme + languages: [javascript, typescript] + message: "Recomenda-se usar valores de border-radius obtidos corretamente do tema, por meio de getTheme('borderRadius')." + severity: WARNING + patterns: + - pattern-regex: "const\\s+\\w+\\s?=\\s?getTheme\\('border\\w+'\\);" + paths: + exclude: + - '*.json' + metadata: + description: "Garanta que os valores de border-radius sejam obtidos do tema corretamente utilizando getTheme('borderRadius'). Isso assegura consistência no design." + tags: ['styles', 'border-radius', 'theme'] + + - id: prefer-theme-colors + languages: [javascript, typescript] + message: 'Sempre utilize cores definidas no tema. Evite o uso de códigos hexadecimais hardcoded.' + severity: WARNING + patterns: + - pattern-regex: ".*?:\\s?#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})" + paths: + exclude: + - '*.json' + metadata: + description: 'As cores devem ser obtidas a partir do tema da aplicação, garantindo consistência e facilitando a manutenção. Evite usar códigos hexadecimais diretamente.' + tags: ['styles', 'colors', 'theme'] + + - id: use-theme-spacing + languages: [javascript, typescript] + message: "Utilize valores de spacing vindos do tema corretamente, como 'padding: ${smallSpacing}px'." + severity: WARNING + patterns: + - pattern-regex: "(padding|margin)(-?)(left|right|top|bottom|vertical|horizontal)?:\\s?(\\d+px);" + paths: + exclude: + - '*.json' + metadata: + description: 'Os valores de padding e margin devem ser obtidos diretamente do tema da aplicação, garantindo consistência no espaçamento entre os elementos. Evite usar valores fixos em pixels.' + tags: ['styles', 'spacing', 'theme', 'padding', 'margin'] + + - id: use-variant-instead-of-fontsize + languages: [javascript, typescript] + message: "Utilize a prop 'variant' do componente Typography em vez de definir 'font-size' manualmente." + severity: WARNING + patterns: + - pattern-regex: 'font-size' + paths: + exclude: + - '*.json' + - 'src/components/Avatar/styles.ts' + - 'src/components/Typography/styles.ts' + metadata: + description: "Para garantir consistência tipográfica e centralizar a lógica de estilos de fonte, utilize a prop 'variant' no componente Typography em vez de definir 'font-size' manualmente." + tags: ['styles', 'typography', 'variant', 'font-size'] diff --git a/codeway/semgrep.txt b/codeway/semgrep.txt new file mode 100644 index 00000000..1df0c8ea --- /dev/null +++ b/codeway/semgrep.txt @@ -0,0 +1,91 @@ + + +┌──────────────────┐ +│ 25 Code Findings │ +└──────────────────┘ + +  src/components/Button/index.tsx + ❯❯❱ codeway.rules.use-enum-instead-of-string-comparisons + Use ENUM para comparações em vez de strings. Comparar strings diretamente torna o código menos + escalável e mais suscetível a erros. + + 40┆ hasBorder={variant === 'outline'} + +  src/components/Button/styles.ts + ❯❯❱ codeway.rules.use-enum-instead-of-string-comparisons + Use ENUM para comparações em vez de strings. Comparar strings diretamente torna o código menos + escalável e mais suscetível a erros. + + 55┆ if (props.buttonVariant === 'tint') { + ⋮┆---------------------------------------- + 64┆ props.buttonVariant === 'flat' || + ⋮┆---------------------------------------- + 65┆ props.buttonVariant === 'ghost' || + ⋮┆---------------------------------------- + 66┆ props.buttonVariant === 'outline' + ⋮┆---------------------------------------- + 104┆ props.buttonVariant === 'filled' + ⋮┆---------------------------------------- + 110┆ props.buttonVariant === 'filled' + ⋮┆---------------------------------------- + 116┆ props.buttonVariant === 'filled' + ⋮┆---------------------------------------- + 122┆ props.buttonVariant === 'filled' + ⋮┆---------------------------------------- + 128┆ props.buttonVariant === 'filled' ? infoContrast(props) : infoMain(props) + ⋮┆---------------------------------------- + 132┆ props.buttonVariant === 'filled' + ⋮┆---------------------------------------- + 138┆ props.buttonVariant === 'filled' + +  src/components/PinInput/lib/react-native-smooth-pincode-input/SmoothPinCodeInput.js + ❯❯❱ codeway.rules.no-class-in-components + Evite usar classes em componentes. Use funções ou hooks. + + 23┆ class SmoothPinCodeInput extends Component { + + ❯❯❱ codeway.rules.use-enum-instead-of-string-comparisons + Use ENUM para comparações em vez de strings. Comparar strings diretamente torna o código menos + escalável e mais suscetível a erros. + + 71┆ if (event.nativeEvent.key === 'Backspace') { + ⋮┆---------------------------------------- + 80┆ if (typeof this.props.onFocus === 'function') { + ⋮┆---------------------------------------- + 86┆ if (typeof this.props.onBlur === 'function') { + ⋮┆---------------------------------------- + 91┆ if (typeof this.props.useIndexedAccessibilityLabel === 'string') + ⋮┆---------------------------------------- + 96┆ if (typeof this.props.useIndexedTestID === 'string') + ⋮┆---------------------------------------- + 158┆ const isPlaceholderText = typeof placeholder === 'string'; + ⋮┆---------------------------------------- + 159┆ const isMaskText = typeof mask === 'string'; + ⋮┆---------------------------------------- + 175┆ const isCellText = typeof cellText === 'string'; + +  src/components/TextInput/__tests__/TextInput.spec.tsx + ❯❯❱ codeway.rules.avoid-console-logs + Parece que um console.log() ou similar foi esquecido. Remova para evitar exposição de informações. + + 86┆ console.log(wrapper); + +  src/components/TextInput/index.tsx + ❯❯❱ codeway.rules.use-enum-instead-of-string-comparisons + Use ENUM para comparações em vez de strings. Comparar strings diretamente torna o código menos + escalável e mais suscetível a erros. + + 318┆ fixedLabelVariant === 'animated' + +  src/components/TextInput/styles.ts + ❯❯❱ codeway.rules.use-variant-instead-of-fontsize + Utilize a prop 'variant' do componente Typography em vez de definir 'font-size' manualmente. + + 225┆ font-size: ${getFontSize}px; + +  src/components/Typography/index.tsx + ❯❯❱ codeway.rules.use-enum-instead-of-string-comparisons + Use ENUM para comparações em vez de strings. Comparar strings diretamente torna o código menos + escalável e mais suscetível a erros. + + 17┆ if (variant === 'animated') { diff --git a/package.json b/package.json index 1a9f500f..99224c63 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "clean": "rm -rf ./node_modules native yarn.lock dist coverage && yarn install", "ios": "react-native run-ios", "lint": "tsc --noEmit && eslint \"src/**/*.{ts,tsx}\" --fix", - "precommit": "yarn lint && yarn test", + "precommit": "yarn lint && yarn test && yarn semgrep", "pretty": "patch-package && prettier --config ./.prettierrc.js --write \"src/**/*.{ts,tsx,js}\"", "prepublish": "yarn build", "start": "react-native start", @@ -41,7 +41,8 @@ "postversion": "git push && git push --tags", "version:major": "npm version major", "version:minor": "npm version minor", - "version:patch": "npm version patch" + "version:patch": "npm version patch", + "semgrep": "semgrep --config ./codeway/rules ./src --text --output=./codeway/semgrep.txt" }, "lint-staged": { "*.{ts,tsx}": [ diff --git a/src/components/Header/styles.ts b/src/components/Header/styles.ts index 34c7dad6..0c942b46 100644 --- a/src/components/Header/styles.ts +++ b/src/components/Header/styles.ts @@ -14,6 +14,7 @@ type ThemePrimaryStyleProps = { const isThemePrimary = ifStyle('isThemePrimary'); const isIOSPlatform = ifStyle('isIOSPlatform'); +const spacingXs = getTheme('spacing.xs'); const spacingSm = getTheme('spacing.sm'); const spacingMd = getTheme('spacing.md'); const getThemePrimaryContrastTextColor = (props: ThemeProps) => @@ -28,7 +29,7 @@ const getThemePrimaryContrastBackgroundColor = (props: ThemeProps) => )(props); export const Wrapper = styled.View` - ${isIOSPlatform('overflow: hidden; padding-bottom: 5px;', '')}; + ${isIOSPlatform(`overflow: hidden; padding-bottom: ${spacingXs}px;`, '')}; `; export const ContentWrapper = styled.View< diff --git a/src/components/Separator/styles.ts b/src/components/Separator/styles.ts index b5abec60..db03e92e 100644 --- a/src/components/Separator/styles.ts +++ b/src/components/Separator/styles.ts @@ -1,3 +1,4 @@ +import { StyleSheet } from 'react-native'; import styled from 'styled-components/native'; import { getTheme } from '@platformbuilders/theme-toolkit'; import Typography from '../Typography'; @@ -20,7 +21,7 @@ export const OptionsWrapper = styled.View` export const Line = styled.View` width: 33%; - height: 1px; + height: ${StyleSheet.hairlineWidth}px; background-color: ${disabled}90; `; diff --git a/src/components/Touchable/index.tsx b/src/components/Touchable/index.tsx index 3adcc7df..3ed9fb43 100644 --- a/src/components/Touchable/index.tsx +++ b/src/components/Touchable/index.tsx @@ -17,9 +17,7 @@ const CommonTouchable: FC = ({ onPress(event); try { Haptic.trigger(haptic); - } catch (error) { - console.log('LOG: onBasicPress generateHaptic:', error); - } + } catch (error) {} }; return ( diff --git a/src/types/CheckBox.d.ts b/src/types/CheckBox.d.ts index abff24b3..741b1c4f 100644 --- a/src/types/CheckBox.d.ts +++ b/src/types/CheckBox.d.ts @@ -1,8 +1,8 @@ declare module 'react-native-check-box' { - import { ReactElement, Component } from 'react'; + import { ReactElement } from 'react'; import { StyleProp, TextStyle, ViewStyle } from 'react-native'; - export type CheckBoxProps = { + export type CheckboxProps = { style?: StyleProp; leftText?: ReactElement | string; leftTextStyle?: StyleProp; @@ -20,5 +20,4 @@ declare module 'react-native-check-box' { uncheckedCheckBoxColor?: string; }; - export default class CheckBox extends Component {} }