77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Script: Criar novo hook customizado
|
|
* Uso: node create-hook.js useNomeDoHook [feature]
|
|
* Exemplo: node create-hook.js useUserData rh
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const [, , hookName, feature] = process.argv;
|
|
|
|
if (!hookName || !hookName.startsWith('use')) {
|
|
console.error('❌ Nome do hook é obrigatório e deve começar com "use"!');
|
|
console.log('Uso: node create-hook.js useNomeDoHook [feature]');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Definir caminho
|
|
const basePath = feature
|
|
? path.join(__dirname, '../../src/features', feature, 'hooks')
|
|
: path.join(__dirname, '../../src/hooks');
|
|
|
|
const fileName = `${hookName}.js`;
|
|
const filePath = path.join(basePath, fileName);
|
|
|
|
// Criar pasta se não existir
|
|
if (!fs.existsSync(basePath)) {
|
|
fs.mkdirSync(basePath, { recursive: true });
|
|
}
|
|
|
|
// Template do hook
|
|
const hookTemplate = `import { useState, useEffect } from 'react';
|
|
|
|
/**
|
|
* ${hookName} - Hook customizado
|
|
* @returns {Object} - Estado e funções do hook
|
|
*/
|
|
export const ${hookName} = () => {
|
|
const [data, setData] = useState(null);
|
|
const [loading, setLoading] = useState(false);
|
|
const [error, setError] = useState(null);
|
|
|
|
useEffect(() => {
|
|
// Implementar lógica
|
|
}, []);
|
|
|
|
const handleAction = async () => {
|
|
try {
|
|
setLoading(true);
|
|
// Implementar ação
|
|
} catch (err) {
|
|
setError(err.message);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
return {
|
|
data,
|
|
loading,
|
|
error,
|
|
handleAction,
|
|
};
|
|
};
|
|
`;
|
|
|
|
// Escrever arquivo
|
|
fs.writeFileSync(filePath, hookTemplate);
|
|
|
|
console.log(`✅ Hook ${hookName} criado com sucesso!`);
|
|
console.log(`📁 Caminho: ${filePath}`);
|
|
console.log(`\n📝 Próximos passos:`);
|
|
console.log(`1. Implementar lógica do hook`);
|
|
console.log(`2. Adicionar testes se necessário`);
|
|
console.log(`3. Importar nas views que precisam`);
|