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
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,14 @@ Serão explicados os arquivos e diretórios na seção de [Edição](#edição).
react-native init AwesomeExample --template rocketseat-basic
```

2. Depois do projeto criado você pode deletar o arquivo `App.js` da raiz, pois o arquivo `index.js` agora aponta para a pasta **src**.
2. Depois do projeto criado você pode utilizar o comando abaixo para remover automaticamente alguns arquivos e diretórios que não usamos e configurar a *lib* de gestos no Android.

```sh
node template-config.js
```

Caso você **não** queira realizar as configurações automaticamente, você pode deletar o arquivo `App.js` da raiz, pois o arquivo `index.js` agora aponta para a pasta **src** e seguir para o [Passo Adicional no Android](#passo-adicional-no-android).


Com isso o projeto será criado com todas as dependências do template devidamente instaladas e linkadas, tal como os arquivos de configuração que são copiados para o projeto.

Expand Down
86 changes: 86 additions & 0 deletions template-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
const fs = require('fs');
const path = require('path');

const deleteFile = filename => {
try {
return fs.unlinkSync(path.join(__dirname, filename));
} catch (error) {}
};
const deleteFolder = path => {
try {
if (fs.existsSync(path)) {
fs.readdirSync(path).forEach(function(file, index) {
const currentPath = `${path}/${file}`;
if (fs.lstatSync(currentPath).isDirectory()) {
deleteFolder(currentPath);
} else {
deleteFile(currentPath);
}
});
fs.rmdirSync(path);
}
} catch (error) {}
};

const packagePath = path.join(__dirname, 'package.json');
const packageJSON = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
const name = packageJSON.name;
const mainActivityPath = path.join(
__dirname,
`android/app/src/main/java/com/${name.toLowerCase()}/MainActivity.java`,
);

console.log('\n 📝 Adicionando configurações no arquivo MainActivity.java');
Copy link
Contributor

Choose a reason for hiding this comment

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

Por que essa etapa é necessária?

Copy link
Author

Choose a reason for hiding this comment

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

Se está se referindo a linha 28, serve para pegar o caminho absoluto do arquivo MainActivity.java. Tem algo de errado ou a melhorar?

Copy link
Contributor

Choose a reason for hiding this comment

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

Não, estava me referindo mesmo ao processo de injetar todo esse código na Activity. Mudou algo que tornou isso necessário?

Copy link
Author

Choose a reason for hiding this comment

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

Sim, a adição das configurações (imports e métodos) para o correto funcionamento da lib de gestos no android.


// Write imports and methods in the file.
try {
fs.writeFileSync(
mainActivityPath,
`
package com.${name.toLowerCase()};

import com.facebook.react.ReactActivity;

import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;

public class MainActivity extends ReactActivity {

/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "${name}";
}

@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new ReactActivityDelegate(this, getMainComponentName()) {
@Override
protected ReactRootView createRootView() {
return new RNGestureHandlerEnabledRootView(MainActivity.this);
}
};
}
}`,
);

console.log('\n ✅ Configurações adicionadas.');
} catch (error) {
console.log(
'\nFalha ao adicionar configurações no arquivo MainActivity.java\n',
);
console.error(error);
}

console.log('\n 🧹 Limpando diretórios e arquivos desnecessários.');

// Delete folder and files
deleteFolder('__tests__');
deleteFile('App.js');
deleteFile('template-config.js');

console.log('\n ✅ Tudo pronto.');